aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaanuel <none@none>2009-12-20 23:21:31 -0300
committermaanuel <none@none>2009-12-20 23:21:31 -0300
commitcca69e1c7d6c049751a1be42d664d5614ab9c3bc (patch)
tree09bd37b7ade56a7f7adb5c3e759d35cbe7c97dc9 /src
parentaf83219083a2473068eb17092f9933247eace9f7 (diff)
parent0e8dd6d97e015340f3f1ccb7be30d9f0c22b46bb (diff)
Merge
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/SpellAuras.cpp28
-rw-r--r--src/game/SpellEffects.cpp2
-rw-r--r--src/trinityrealm/AuthCodes.cpp37
-rw-r--r--src/trinityrealm/AuthCodes.h15
-rw-r--r--src/trinityrealm/AuthSocket.cpp33
-rw-r--r--src/trinityrealm/AuthSocket.h1
-rw-r--r--src/trinityrealm/CMakeLists.txt1
7 files changed, 87 insertions, 30 deletions
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 74f438e5631..04a79e29635 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -1536,7 +1536,7 @@ void AuraEffect::HandleAuraEffectSpecificMods(bool apply, bool Real, bool change
// Replenishment (0.25% from max)
// Infinite Replenishment
if (m_spellProto->SpellIconID == 3184 && m_spellProto->SpellVisual[0] == 12495 && GetAuraName() == SPELL_AURA_PERIODIC_ENERGIZE)
- m_amount = m_target->GetMaxPower(POWER_MANA) * 25 / 10000;
+ m_amount = m_target->GetMaxPower(POWER_MANA) * 20 / 10000;
break;
case SPELLFAMILY_MAGE:
// Mana Shield
@@ -2979,6 +2979,10 @@ void AuraEffect::HandleAuraDummy(bool apply, bool Real, bool changeAmount)
if(m_target->GetTypeId() == TYPEID_PLAYER)
((Player*)m_target)->RemoveAmmo(); // not use ammo and not allow use
return;
+ case 62061: // Festive Holiday Mount
+ if(m_target->HasAuraType(SPELL_AURA_MOUNTED))
+ m_target->CastSpell(m_target, 25860, true, NULL, this); // Reindeer Transformation
+ return;
case 52916: // Honor Among Thieves
if(m_target->GetTypeId() == TYPEID_PLAYER)
if (Unit * target = ObjectAccessor::GetUnit(*m_target,((Player*)m_target)->GetComboTarget()))
@@ -4438,12 +4442,19 @@ void AuraEffect::HandleAuraModIncreaseSpeed(bool apply, bool Real, bool changeAm
m_target->UpdateSpeed(MOVE_RUN, true);
}
-void AuraEffect::HandleAuraModIncreaseMountedSpeed(bool /*apply*/, bool Real, bool changeAmount)
+void AuraEffect::HandleAuraModIncreaseMountedSpeed(bool apply, bool Real, bool changeAmount)
{
// all applied/removed only at real aura add/remove
if(!Real && !changeAmount)
return;
+ if(apply)
+ {
+ // Festive Holiday Mount
+ if(m_target->HasAura(62061) && GetSpellProto()->SpellIconID != 1794)
+ m_target->CastSpell(m_target, 25860, true, NULL, this); // Reindeer Transformation
+ }
+
m_target->UpdateSpeed(MOVE_RUN, true);
}
@@ -4469,9 +4480,16 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real, bool ch
if (m_target->GetTypeId() == TYPEID_PLAYER)
m_target->ApplySpellImmune(GetId(),IMMUNITY_MECHANIC,MECHANIC_POLYMORPH,apply);
- // Dragonmaw Illusion (overwrite mount model, mounted aura already applied)
- if( apply && m_target->HasAuraEffect(42016,0) && m_target->GetMountID())
- m_target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID,16314);
+ if(apply)
+ {
+ // Dragonmaw Illusion (overwrite mount model, mounted aura already applied)
+ if(m_target->HasAuraEffect(42016,0) && m_target->GetMountID())
+ m_target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID,16314);
+
+ // Festive Holiday Mount
+ if(m_target->HasAura(62061) && GetSpellProto()->SpellIconID != 1794)
+ m_target->CastSpell(m_target, 25860, true, NULL, this); // Reindeer Transformation
+ }
}
m_target->UpdateSpeed(MOVE_FLIGHT, true);
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 66921aaa2f5..3f3ce8e12fe 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -534,7 +534,7 @@ void Spell::SpellDamageSchoolDmg(uint32 effect_idx)
m_caster->CastCustomSpell(m_caster, 32409, &back_damage, 0, 0, true);
}
// Mind Blast - applies Mind Trauma if:
- else if (m_spellInfo->SpellFamilyFlags & 0x2000)
+ else if (m_spellInfo->SpellFamilyFlags[0] & 0x2000)
{
// We are in Shadow Form
if (m_caster->m_form == FORM_SHADOW)
diff --git a/src/trinityrealm/AuthCodes.cpp b/src/trinityrealm/AuthCodes.cpp
new file mode 100644
index 00000000000..812949e0823
--- /dev/null
+++ b/src/trinityrealm/AuthCodes.cpp
@@ -0,0 +1,37 @@
+#include "AuthCodes.h"
+
+namespace AuthHelper
+{
+
+bool IsPreBCAcceptedClientBuild(int build)
+{
+ int accepted_versions[] = PRE_BC_ACCEPTED_CLIENT_BUILD;
+ for (int i = 0; accepted_versions[i]; ++i)
+ {
+ if (build == accepted_versions[i])
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool IsPostBCAcceptedClientBuild(int build)
+{
+ int accepted_versions[] = POST_BC_ACCEPTED_CLIENT_BUILD;
+ for (int i = 0; accepted_versions[i]; ++i)
+ {
+ if (build == accepted_versions[i])
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool IsAcceptedClientBuild(int build)
+{
+ return (IsPostBCAcceptedClientBuild(build) || IsPreBCAcceptedClientBuild(build));
+}
+
+};
diff --git a/src/trinityrealm/AuthCodes.h b/src/trinityrealm/AuthCodes.h
index 53ae2236bcd..e0bfcf96ce7 100644
--- a/src/trinityrealm/AuthCodes.h
+++ b/src/trinityrealm/AuthCodes.h
@@ -72,8 +72,19 @@ enum LoginResult
//2.4.3 build 8606
//3.1.3 build 9947
//3.1.3 build 10146 Chinese build
-//3.2.2a build 10505
-#define EXPECTED_TRINITY_CLIENT_BUILD {10505, 10146, 9947, 8606, 5875, 6005, 0}
+#define POST_BC_ACCEPTED_CLIENT_BUILD {10505, 10146, 9947, 8606, 0}
+#define PRE_BC_ACCEPTED_CLIENT_BUILD {5875, 6005, 0}
+
+#define POST_BC_EXP_FLAG 0x2
+#define PRE_BC_EXP_FLAG 0x1
+#define NO_VALID_EXP_FLAG 0x0
+
+namespace AuthHelper
+{
+ bool IsAcceptedClientBuild(int build);
+ bool IsPostBCAcceptedClientBuild(int build);
+ bool IsPreBCAcceptedClientBuild(int build);
+};
#endif
diff --git a/src/trinityrealm/AuthSocket.cpp b/src/trinityrealm/AuthSocket.cpp
index bd79fc5d207..a19d16106f3 100644
--- a/src/trinityrealm/AuthSocket.cpp
+++ b/src/trinityrealm/AuthSocket.cpp
@@ -379,6 +379,7 @@ bool AuthSocket::_HandleLogonChallenge()
_login = (const char*)ch->I;
_build = ch->build;
+ _expversion = (AuthHelper::IsPostBCAcceptedClientBuild(_build) ? POST_BC_EXP_FLAG : NO_VALID_EXP_FLAG) + (AuthHelper::IsPreBCAcceptedClientBuild(_build) ? PRE_BC_EXP_FLAG : NO_VALID_EXP_FLAG);
///- Normalize account name
//utf8ToUpperOnlyLatin(_login); -- client already send account in expected form
@@ -549,22 +550,10 @@ bool AuthSocket::_HandleLogonProof()
sAuthLogonProof_C lp;
ibuf.Read((char *)&lp, sizeof(sAuthLogonProof_C));
- ///- Check if the client has one of the expected version numbers
- bool valid_version = false;
- int accepted_versions[] = EXPECTED_TRINITY_CLIENT_BUILD;
- for (int i = 0; accepted_versions[i]; ++i)
- {
- if (_build == accepted_versions[i])
- {
- valid_version = true;
- break;
- }
- }
-
/// <ul><li> If the client has no valid version
- if (!valid_version)
+ if (_expversion == NO_VALID_EXP_FLAG)
{
- ///- Check if we have the apropriate patch on the disk
+ ///- Check if we have the appropriate patch on the disk
// 24 = len("./patches/65535enGB.mpq")+1
char tmp[24];
@@ -706,7 +695,7 @@ bool AuthSocket::_HandleLogonProof()
sha.UpdateBigNumbers(&A, &M, &K, NULL);
sha.Finalize();
- if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//2.4.3, 3.1.3 and 3.2.2a clients (10146 is Chinese build for 3.1.3)
+ if (_expversion & POST_BC_EXP_FLAG)//2.4.3 and 3.1.3 clients (10146 is Chinese build for 3.1.3)
{
sAuthLogonProof_S proof;
memcpy(proof.M2, sha.GetDigest(), 20);
@@ -909,14 +898,14 @@ bool AuthSocket::_HandleRealmList()
RealmList built_realmList;
for (rlm = m_realmList.begin(); rlm != m_realmList.end(); ++rlm)
{
- if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//2.4.3, 3.1.3 and 3.2.2a clients
+ if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 cliens
{
if (rlm->second.gamebuild == _build)
built_realmList.AddRealm(rlm->second);
}
- else if (_build == 5875 || _build == 6005)//1.12.1 and 1.12.2 clients are compatible with eachother
+ else if ( _expversion & PRE_BC_EXP_FLAG )//1.12.1 and 1.12.2 clients are compatible with eachother
{
- if (rlm->second.gamebuild == 5875 || rlm->second.gamebuild == 6005)
+ if ( AuthHelper::IsPreBCAcceptedClientBuild ( rlm->second.gamebuild ) )
built_realmList.AddRealm(rlm->second);
}
@@ -925,7 +914,7 @@ bool AuthSocket::_HandleRealmList()
///- Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm)
ByteBuffer pkt;
pkt << (uint32) 0;
- if (_build == 8606 || _build == 9947 || _build == 10146 || _build == 10505)//only 2.4.3, 3.1.3 and 3.2.2a clients
+ if ( _expversion & POST_BC_EXP_FLAG )//only 2.4.3 and 3.1.3 cliens
pkt << (uint16) built_realmList.size();
else
pkt << (uint32) built_realmList.size();
@@ -948,7 +937,7 @@ bool AuthSocket::_HandleRealmList()
uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0;
pkt << i->second.icon; // realm type
- if (i->second.gamebuild == 10505 || i->second.gamebuild == 9947 || i->second.gamebuild == 10146 || i->second.gamebuild == 8606)//only 2.4.3, 3.1.3 and 3.2.2a clients
+ if ( _expversion & POST_BC_EXP_FLAG )//only 2.4.3 and 3.1.3 cliens
pkt << lock; // if 1, then realm locked
pkt << i->second.color; // if 2, then realm is offline
pkt << i->first;
@@ -956,13 +945,13 @@ bool AuthSocket::_HandleRealmList()
pkt << i->second.populationLevel;
pkt << AmountOfCharacters;
pkt << i->second.timezone; // realm category
- if (i->second.gamebuild == 10505 || i->second.gamebuild == 9947 || i->second.gamebuild == 10146 || i->second.gamebuild == 8606)//2.4.3, 3.1.3 and 3.2.2a clients
+ if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 clients
pkt << (uint8) 0x2C; // unk, may be realm number/id?
else
pkt << (uint8) 0x0; //1.12.1 and 1.12.2 clients
}
- if (_build == 10505 || _build == 9947 || _build == 10146 || _build == 8606)//2.4.3, 3.1.3 and 3.2.2a clients
+ if ( _expversion & POST_BC_EXP_FLAG )//2.4.3 and 3.1.3 cliens
{
pkt << (uint8) 0x10;
pkt << (uint8) 0x00;
diff --git a/src/trinityrealm/AuthSocket.h b/src/trinityrealm/AuthSocket.h
index ecfdd159000..474ead86599 100644
--- a/src/trinityrealm/AuthSocket.h
+++ b/src/trinityrealm/AuthSocket.h
@@ -79,6 +79,7 @@ class AuthSocket: public TcpSocket
// between enUS and enGB, which is important for the patch system
std::string _localizationName;
uint16 _build;
+ uint8 _expversion;
AccountTypes _accountSecurityLevel;
};
#endif
diff --git a/src/trinityrealm/CMakeLists.txt b/src/trinityrealm/CMakeLists.txt
index 85c2120b5da..e39dc088e90 100644
--- a/src/trinityrealm/CMakeLists.txt
+++ b/src/trinityrealm/CMakeLists.txt
@@ -1,6 +1,7 @@
########### next target ###############
SET(trinity-realm_SRCS
+AuthCodes.cpp
AuthCodes.h
AuthSocket.cpp
AuthSocket.h