From 760018647dd2f6bd728676e576bacbfed00020fb Mon Sep 17 00:00:00 2001 From: "dr.skull" Date: Mon, 11 Feb 2013 15:43:53 +0100 Subject: Set Spirit Wolf attack speed at 1.5s (enhancement shaman spell Feral Spirit) Update Spirit Wolf Attack Power when shaman Attack power change Signed-off-by: dr.skull --- src/server/game/Entities/Creature/TemporarySummon.h | 1 + src/server/game/Entities/Pet/Pet.cpp | 12 ++++-------- src/server/game/Entities/Unit/StatSystem.cpp | 14 +++++++++++++- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index a96d9ab33d0..91da1fd86b9 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -56,6 +56,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 d11f6d94734..e4981ee8483 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1003,15 +1003,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 0024d726060..94b4047e943 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -441,6 +441,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field Pet* pet = GetPet(); //update pet's AP + Guardian* guardian = GetGuardianPet(); //automatically update weapon damage after attack power modification if (ranged) { @@ -456,8 +457,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(); } } @@ -1305,6 +1309,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()) { -- cgit v1.2.3 From b27ff4045da1ea2d1b3e2f19cef34538d1d5c123 Mon Sep 17 00:00:00 2001 From: FH3095 Date: Sat, 16 Feb 2013 23:08:51 +0100 Subject: Replace check in IsSingleTargetWith Old check was SpellFamily and SpellIcon, new is IsRankOf, which seems to make more sense in that context. close #8290 --- src/server/game/Spells/SpellInfo.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 9a9369bad28..d2ab1a315e8 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1174,10 +1174,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(); -- cgit v1.2.3 From 6a5c9bc5e3234d367362211591d636f3ae255f87 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 25 Feb 2013 17:43:04 +0100 Subject: Core/DBLayer: Made connection types consistent in DatabaseWorkerPool --- src/server/shared/Database/DatabaseWorkerPool.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src') 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 -- cgit v1.2.3 From 447b23c3bbb2bf5f5f947e18d41ff7263fd0c61b Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Mon, 25 Feb 2013 19:54:41 +0100 Subject: Core: Whitespace cleanup --- src/server/game/Chat/Channels/Channel.cpp | 1 - src/server/game/Entities/Unit/StatSystem.cpp | 4 ++-- src/server/game/Globals/ObjectMgr.h | 4 ++-- src/server/game/Handlers/MailHandler.cpp | 2 +- src/server/scripts/World/areatrigger_scripts.cpp | 10 +++++----- 5 files changed, 10 insertions(+), 11 deletions(-) (limited to 'src') 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/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 94b4047e943..c30fa910f76 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -441,7 +441,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field Pet* pet = GetPet(); //update pet's AP - Guardian* guardian = GetGuardianPet(); + Guardian* guardian = GetGuardianPet(); //automatically update weapon damage after attack power modification if (ranged) { @@ -1309,7 +1309,7 @@ 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 + 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 diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 12df01fc350..5b13a4daf0d 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; @@ -1017,7 +1017,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/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 3cdd3d854a1..f3201401c8d 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -152,7 +152,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) } receiverAccountId = sObjectMgr->GetPlayerAccountIdByGUID(receiverGuid); - canReceiveMailFromOtherFaction = AccountMgr::HasPermission(receiverAccountId, RBAC_PERM_TWO_SIDE_INTERACTION_MAIL, realmID); + canReceiveMailFromOtherFaction = AccountMgr::HasPermission(receiverAccountId, RBAC_PERM_TWO_SIDE_INTERACTION_MAIL, realmID); } // do not allow to have more than 100 mails in mailbox.. mails count is in opcode uint8!!! - so max can be 255.. 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; } -- cgit v1.2.3