diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/TemporarySummon.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/World/areatrigger_scripts.cpp | 10 | ||||
-rw-r--r-- | src/server/shared/Database/DatabaseWorkerPool.h | 14 |
8 files changed, 34 insertions, 28 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 5f6bc8b7865..34c8054256c 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -352,7 +352,6 @@ void Channel::KickOrBan(Player const* player, std::string const& badname, bool b void Channel::UnBan(Player const* player, std::string const& badname) { - uint32 sec = player->GetSession()->GetSecurity(); uint64 good = player->GetGUID(); if (!IsOn(good)) diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index dc3347c5b4f..a28874c51e7 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -72,6 +72,7 @@ class Minion : public TempSummon float GetFollowAngle() const { return m_followAngle; } void SetFollowAngle(float angle) { m_followAngle = angle; } bool IsPetGhoul() const {return GetEntry() == 26125;} // Ghoul may be guardian or pet + bool IsSpiritWolf() const {return GetEntry() == 29264;} // Spirit wolf from feral spirits bool IsGuardianPet() const; protected: Unit* const m_owner; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index f5888d33add..426096216b3 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -961,15 +961,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) if (!pInfo) SetCreateHealth(30*petlevel); - float dmg_multiplier = 0.3f; - if (m_owner->GetAuraEffect(63271, 0)) // Glyph of Feral Spirit - dmg_multiplier = 0.6f; + // wolf attack speed is 1.5s + SetAttackTime(BASE_ATTACK, cinfo->baseattacktime); - SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier)); - - // 14AP == 1dps, wolf's strike speed == 2s so dmg = basedmg + AP / 14 * 2 - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14))); - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14))); + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel))); + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel))); SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(m_owner->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor) SetModifierValue(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(m_owner->GetStat(STAT_STAMINA)) * 0.3f); // Bonus Stamina (30% of player stamina) diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 542fde39a3a..c210bbf17c8 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -307,6 +307,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) SetInt32Value(index, (uint32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER field Pet* pet = GetPet(); //update pet's AP + Guardian* guardian = GetGuardianPet(); //automatically update weapon damage after attack power modification if (ranged) { @@ -322,8 +323,11 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) if (getClass() == CLASS_SHAMAN || getClass() == CLASS_PALADIN) // mental quickness UpdateSpellDamageAndHealingBonus(); - if (pet && pet->IsPetGhoul()) // At ranged attack change for hunter pet + if (pet && pet->IsPetGhoul()) // At melee attack power change for DK pet pet->UpdateAttackPowerAndDamage(); + + if (guardian && guardian->IsSpiritWolf()) // At melee attack power change for Shaman feral spirit + guardian->UpdateAttackPowerAndDamage(); } } @@ -1098,6 +1102,14 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.22f; SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.1287f)); } + else if (IsSpiritWolf()) //wolf benefit from shaman's attack power + { + float dmg_multiplier = 0.31f; + if (m_owner->GetAuraEffect(63271, 0)) // Glyph of Feral Spirit + dmg_multiplier = 0.61f; + bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier; + SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier)); + } //demons benefit from warlocks shadow or fire damage else if (isPet()) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 9502bb343e0..6dc0aceec96 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -424,7 +424,7 @@ struct TempSummonGroupKey : _summonerEntry(summonerEntry), _summonerType(summonerType), _summonGroup(group) { } - + bool operator<(TempSummonGroupKey const& rhs) const { return memcmp(this, &rhs, sizeof(TempSummonGroupKey)) < 0; @@ -1020,7 +1020,7 @@ class ObjectMgr TempSummonDataContainer::const_iterator itr = _tempSummonDataStore.find(TempSummonGroupKey(summonerId, summonerType, group)); if (itr != _tempSummonDataStore.end()) return &itr->second; - + return NULL; } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 990b35d0862..8a8b72c511a 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1332,10 +1332,8 @@ bool SpellInfo::IsSingleTarget() const bool SpellInfo::IsSingleTargetWith(SpellInfo const* spellInfo) const { - // TODO - need better check - // Equal icon and spellfamily - if (SpellFamilyName == spellInfo->SpellFamilyName && - SpellIconID == spellInfo->SpellIconID) + // Same spell? + if (IsRankOf(spellInfo)) return true; SpellSpecificType spec = GetSpellSpecific(); diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 83fac35b1b6..65ebb46c5dd 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -432,10 +432,10 @@ class AreaTrigger_at_area_52_entrance : public AreaTriggerScript enum FrostgripsHollow { QUEST_THE_LONESOME_WATCHER = 12877, - + NPC_STORMFORGED_MONITOR = 29862, NPC_STORMFORGED_ERADICTOR = 29861, - + TYPE_WAYPOINT = 0, DATA_START = 0 }; @@ -460,11 +460,11 @@ public: Creature* stormforgedMonitor = Creature::GetCreature(*player, stormforgedMonitorGUID); if (stormforgedMonitor) return false; - + Creature* stormforgedEradictor = Creature::GetCreature(*player, stormforgedEradictorGUID); if (stormforgedEradictor) return false; - + if ((stormforgedMonitor = player->SummonCreature(NPC_STORMFORGED_MONITOR, stormforgedMonitorPosition, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000))) { stormforgedMonitorGUID = stormforgedMonitor->GetGUID(); @@ -479,7 +479,7 @@ public: stormforgedEradictorGUID = stormforgedEradictor->GetGUID(); stormforgedEradictor->GetMotionMaster()->MovePath(NPC_STORMFORGED_ERADICTOR * 100, false); } - + return true; } diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index fa02b1d369a..c43cc8fab82 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -222,7 +222,7 @@ class DatabaseWorkerPool //! Directly executes an SQL query in string format that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult Query(const char* sql, MySQLConnection* conn = NULL) + QueryResult Query(const char* sql, T* conn = NULL) { if (!conn) conn = GetFreeConnection(); @@ -241,7 +241,7 @@ class DatabaseWorkerPool //! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult PQuery(const char* sql, MySQLConnection* conn, ...) + QueryResult PQuery(const char* sql, T* conn, ...) { if (!sql) return QueryResult(NULL); @@ -380,7 +380,7 @@ class DatabaseWorkerPool //! were appended to the transaction will be respected during execution. void DirectCommitTransaction(SQLTransaction& transaction) { - MySQLConnection* con = GetFreeConnection(); + T* con = GetFreeConnection(); if (con->ExecuteTransaction(transaction)) { con->Unlock(); // OK, operation succesful @@ -490,17 +490,17 @@ class DatabaseWorkerPool { uint8 i = 0; size_t num_cons = _connectionCount[IDX_SYNCH]; + T* t = NULL; //! Block forever until a connection is free for (;;) { - T* t = _connections[IDX_SYNCH][++i % num_cons]; + t = _connections[IDX_SYNCH][++i % num_cons]; //! Must be matched with t->Unlock() or you will get deadlocks if (t->LockIfReady()) - return t; + break; } - //! This will be called when Celine Dion learns to sing - return NULL; + return t; } char const* GetDatabaseName() const |