diff options
-rw-r--r-- | sql/mangos.sql | 1 | ||||
-rw-r--r-- | src/game/Chat.cpp | 7 | ||||
-rw-r--r-- | src/game/Chat.h | 15 | ||||
-rw-r--r-- | src/game/Creature.cpp | 2 | ||||
-rw-r--r-- | src/game/Creature.h | 1 | ||||
-rw-r--r-- | src/game/Level0.cpp | 2 | ||||
-rw-r--r-- | src/game/Level1.cpp | 129 | ||||
-rw-r--r-- | src/game/Level2.cpp | 20 | ||||
-rw-r--r-- | src/game/Level3.cpp | 70 | ||||
-rw-r--r-- | src/game/ObjectAccessor.cpp | 32 | ||||
-rw-r--r-- | src/game/Player.cpp | 25 | ||||
-rw-r--r-- | src/game/Player.h | 3 | ||||
-rw-r--r-- | src/game/Spell.cpp | 79 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 6 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 2 | ||||
-rw-r--r-- | src/game/Unit.cpp | 9 | ||||
-rw-r--r-- | src/shared/revision_nr.h | 2 |
17 files changed, 185 insertions, 220 deletions
diff --git a/sql/mangos.sql b/sql/mangos.sql index 0b07d89ff77..3f04cd932b7 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -304,7 +304,6 @@ INSERT INTO `command` VALUES ('gobject target',2,'Syntax: .gobject target [#go_id|#go_name_part]\r\n\r\nLocate and show position nearest gameobject. If #go_id or #go_name_part provide then locate and show position of nearest gameobject with gameobject template id #go_id or name included #go_name_part as part.'), ('goname',1,'Syntax: .goname $charactername\r\n\r\nTeleport to the given character. Either specify the character name or click on the character\'s portrait, e.g. when you are in a group.'), ('gps',1,'Syntax: .gps [$name|$shift-link]\r\n\r\nDisplay the position information for a selected character or creature (also if player name $name provided then for named player, or if creature/gameobject shift-link provided then pointed creature/gameobject if it loaded). Position information includes X, Y, Z, and orientation, map Id and zone Id'), -('gps',1,'Syntax: .gps\r\n\r\nDisplay the position information for a selected character or creature. Position information includes X, Y, Z, and orientation, map Id and zone Id'), ('groupgo',1,'Syntax: .groupgo $charactername\r\n\r\nTeleport the given character and his group to you.'), ('guid',2,'Syntax: .guid\r\n\r\nDisplay the GUID for the selected character.'), ('guild create',2,'Syntax: .guild create $GuildLeaderName $GuildName\r\n\r\nCreate a guild named $GuildName with the player $GuildLeaderName as leader.'), diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 81bf48491da..17acc5e957f 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -1500,11 +1500,6 @@ std::string ChatHandler::extractPlayerNameFromLink(char* text) return name; } -const char *ChatHandler::GetName() const -{ - return m_session->GetPlayer()->GetName(); -} - bool ChatHandler::needReportToTarget(Player* chr) const { Player* pl = m_session->GetPlayer(); @@ -1528,7 +1523,7 @@ void CliHandler::SendSysMessage(const char *str) m_print("\r\n"); } -const char *CliHandler::GetName() const +std::string CliHandler::GetNameLink() const { return GetTrinityString(LANG_CONSOLE_COMMAND); } diff --git a/src/game/Chat.h b/src/game/Chat.h index 5bf103cdd5d..a6329215e2f 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -71,9 +71,6 @@ class ChatHandler std::string PGetParseString(int32 entry, ...); int ParseCommands(const char* text); - - virtual char const* GetName() const; - protected: explicit ChatHandler() : m_session(NULL) {} // for CLI subclass @@ -514,6 +511,8 @@ class ChatHandler std::string extractPlayerNameFromLink(char* text); std::string playerLink(std::string const& name) const { return m_session ? "|cffffffff|Hplayer:"+name+"|h["+name+"]|h|r" : name; } + virtual std::string GetNameLink() const { return GetNameLink(m_session->GetPlayer()); } + std::string GetNameLink(Player* chr) const { return playerLink(chr->GetName()); } GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry); @@ -540,11 +539,11 @@ class CliHandler : public ChatHandler typedef void Print(char const*); explicit CliHandler(Print* zprint) : m_print(zprint) {} - // overwrite functions - const char *GetTrinityString(int32 entry) const; - bool isAvailable(ChatCommand const& cmd) const; - void SendSysMessage(const char *str); - char const* GetName() const; + // overwrite functions + const char *GetTrinityString(int32 entry) const; + bool isAvailable(ChatCommand const& cmd) const; + void SendSysMessage(const char *str); + std::string GetNameLink() const; bool needReportToTarget(Player* chr) const; private: diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 9ff0e7a1f8e..8b682849b8e 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -55,7 +55,7 @@ void TrainerSpellData::Clear() { for (TrainerSpellList::iterator itr = spellList.begin(); itr != spellList.end(); ++itr) delete (*itr); - spellList.empty(); + spellList.clear(); } TrainerSpell const* TrainerSpellData::Find(uint32 spell_id) const diff --git a/src/game/Creature.h b/src/game/Creature.h index d2a4ff9fd20..594bbd2aee6 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -350,6 +350,7 @@ struct VendorItemData { for (VendorItemList::iterator itr = m_items.begin(); itr != m_items.end(); ++itr) delete (*itr); + m_items.clear(); } }; diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp index ff7d58f8da1..a3f3046a4ff 100644 --- a/src/game/Level0.cpp +++ b/src/game/Level0.cpp @@ -172,7 +172,7 @@ bool ChatHandler::HandleGMListIngameCommand(const char* /*args*/) first = false; } - SendSysMessage(itr->second->GetName()); + SendSysMessage(GetNameLink(itr->second).c_str()); } } diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 80bca8c1b2c..6a2e3158818 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -719,7 +719,7 @@ bool ChatHandler::HandleGPSCommand(const char* args) zone_x, zone_y, ground_z, floor_z, have_map, have_vmap ); sLog.outDebug("Player %s GPS call for %s '%s' (%s: %u):", - GetName(), + m_session ? GetNameLink().c_str() : GetMangosString(LANG_CONSOLE_COMMAND), (obj->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), obj->GetName(), (obj->GetTypeId() == TYPEID_PLAYER ? "GUID" : "Entry"), (obj->GetTypeId() == TYPEID_PLAYER ? obj->GetGUIDLow(): obj->GetEntry()) ); sLog.outDebug(GetTrinityString(LANG_MAP_POSITION), @@ -751,7 +751,7 @@ bool ChatHandler::HandleNamegoCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { - std::string nameLink = playerLink(chr->GetName()); + std::string nameLink = playerLink(name); // check online security if (HasLowerSecurity(chr, 0)) return false; @@ -865,7 +865,7 @@ bool ChatHandler::HandleGonameCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - std::string nameLink = playerLink(name); + std::string chrNameLink = playerLink(name); Map* cMap = chr->GetMap(); if(cMap->IsBattleGroundOrArena()) @@ -873,14 +873,14 @@ bool ChatHandler::HandleGonameCommand(const char* args) // only allow if gm mode is on if (!_player->isGameMaster()) { - PSendSysMessage(LANG_CANNOT_GO_TO_BG_GM,nameLink.c_str()); + PSendSysMessage(LANG_CANNOT_GO_TO_BG_GM,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } // if already in a bg, don't let port to other else if (_player->GetBattleGroundId()) { - PSendSysMessage(LANG_CANNOT_GO_TO_BG_FROM_BG,nameLink.c_str()); + PSendSysMessage(LANG_CANNOT_GO_TO_BG_FROM_BG,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -900,7 +900,7 @@ bool ChatHandler::HandleGonameCommand(const char* args) // we are in group, we can go only if we are in the player group if (_player->GetGroup() != chr->GetGroup()) { - PSendSysMessage(LANG_CANNOT_GO_TO_INST_PARTY,nameLink.c_str()); + PSendSysMessage(LANG_CANNOT_GO_TO_INST_PARTY,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -910,7 +910,7 @@ bool ChatHandler::HandleGonameCommand(const char* args) // we are not in group, let's verify our GM mode if (!_player->isGameMaster()) { - PSendSysMessage(LANG_CANNOT_GO_TO_INST_GM,chr->GetName()); + PSendSysMessage(LANG_CANNOT_GO_TO_INST_GM,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -934,12 +934,9 @@ bool ChatHandler::HandleGonameCommand(const char* args) _player->SetDifficulty(chr->GetDifficulty()); } - PSendSysMessage(LANG_APPEARING_AT, nameLink.c_str()); - - std::string plNameLink = playerLink(_player->GetName()); - + PSendSysMessage(LANG_APPEARING_AT, chrNameLink.c_str()); if (_player->IsVisibleGloballyFor(chr)) - ChatHandler(chr).PSendSysMessage(LANG_APPEARING_TO, plNameLink.c_str()); + ChatHandler(chr).PSendSysMessage(LANG_APPEARING_TO, GetNameLink().c_str()); // stop flight if need if(_player->isInFlight()) @@ -1038,8 +1035,7 @@ bool ChatHandler::HandleRecallCommand(const char* args) if(chr->IsBeingTeleported()) { - std::string nameLink = playerLink(chr->GetName()); - PSendSysMessage(LANG_IS_TELEPORTED, nameLink.c_str()); + PSendSysMessage(LANG_IS_TELEPORTED, GetNameLink(chr).c_str()); SetSentErrorMessage(true); return false; } @@ -1130,9 +1126,9 @@ bool ChatHandler::HandleModifyHPCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_HP, chr->GetName(), hp, hpm); + PSendSysMessage(LANG_YOU_CHANGE_HP, GetNameLink(chr).c_str(), hp, hpm); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetName(), hp, hpm); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetNameLink().c_str(), hp, hpm); chr->SetMaxHealth( hpm ); chr->SetHealth( hp ); @@ -1178,9 +1174,9 @@ bool ChatHandler::HandleModifyManaCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_MANA, chr->GetName(), mana, manam); + PSendSysMessage(LANG_YOU_CHANGE_MANA, GetNameLink(chr).c_str(), mana, manam); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetName(), mana, manam); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetNameLink().c_str(), mana, manam); chr->SetMaxPower(POWER_MANA,manam ); chr->SetPower(POWER_MANA, mana ); @@ -1227,9 +1223,9 @@ bool ChatHandler::HandleModifyEnergyCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_ENERGY, chr->GetName(), energy/10, energym/10); + PSendSysMessage(LANG_YOU_CHANGE_ENERGY, GetNameLink(chr).c_str(), energy/10, energym/10); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetName(), energy/10, energym/10); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetNameLink().c_str(), energy/10, energym/10); chr->SetMaxPower(POWER_ENERGY,energym ); chr->SetPower(POWER_ENERGY, energy ); @@ -1278,9 +1274,9 @@ bool ChatHandler::HandleModifyRageCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_RAGE, chr->GetName(), rage/10, ragem/10); + PSendSysMessage(LANG_YOU_CHANGE_RAGE, GetNameLink(chr).c_str(), rage/10, ragem/10); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetName(), rage/10, ragem/10); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetNameLink().c_str(), rage/10, ragem/10); chr->SetMaxPower(POWER_RAGE,ragem ); chr->SetPower(POWER_RAGE, rage ); @@ -1312,9 +1308,9 @@ bool ChatHandler::HandleModifyRunicPowerCommand(const char* args) return false; } - PSendSysMessage(LANG_YOU_CHANGE_RUNIC_POWER, chr->GetName(), rune/10, runem/10); + PSendSysMessage(LANG_YOU_CHANGE_RUNIC_POWER, GetNameLink(chr).c_str(), rune/10, runem/10); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_RUNIC_POWER_CHANGED, GetName(), rune/10, runem/10); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_RUNIC_POWER_CHANGED, GetNameLink().c_str(), rune/10, runem/10); chr->SetMaxPower(POWER_RUNIC_POWER,runem ); chr->SetPower(POWER_RUNIC_POWER, rune ); @@ -1440,9 +1436,9 @@ bool ChatHandler::HandleModifySpellCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetName(), spellflatid, val, mark); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetNameLink().c_str(), spellflatid, val, mark); WorldPacket data(SMSG_SET_FLAT_SPELL_MODIFIER, (1+1+2+2)); data << uint8(spellflatid); @@ -1506,18 +1502,18 @@ bool ChatHandler::HandleTaxiCheatCommand(const char* args) if (argstr == "on") { chr->SetTaxiCheater(true); - PSendSysMessage(LANG_YOU_GIVE_TAXIS, chr->GetName()); + PSendSysMessage(LANG_YOU_GIVE_TAXIS, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, GetName()); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, GetNameLink().c_str()); return true; } if (argstr == "off") { chr->SetTaxiCheater(false); - PSendSysMessage(LANG_YOU_REMOVE_TAXIS, chr->GetName()); + PSendSysMessage(LANG_YOU_REMOVE_TAXIS, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, GetName()); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, GetNameLink().c_str()); return true; } @@ -1554,16 +1550,18 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; + std::string chrNameLink = GetNameLink(chr); + if(chr->isInFlight()) { - PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); + PSendSysMessage(LANG_CHAR_IN_FLIGHT,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } - PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chrNameLink.c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetName(), ASpeed); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetNameLink().c_str(), ASpeed); chr->SetSpeed(MOVE_WALK, ASpeed,true); chr->SetSpeed(MOVE_RUN, ASpeed,true); @@ -1600,16 +1598,18 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; + std::string chrNameLink = GetNameLink(chr); + if(chr->isInFlight()) { - PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); + PSendSysMessage(LANG_CHAR_IN_FLIGHT,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } - PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, chrNameLink.c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetName(), Speed); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetNameLink().c_str(), Speed); chr->SetSpeed(MOVE_RUN,Speed,true); @@ -1643,16 +1643,18 @@ bool ChatHandler::HandleModifySwimCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; + std::string chrNameLink = GetNameLink(chr); + if(chr->isInFlight()) { - PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); + PSendSysMessage(LANG_CHAR_IN_FLIGHT,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } - PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chrNameLink.c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetName(), Swim); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetNameLink().c_str(), Swim); chr->SetSpeed(MOVE_SWIM,Swim,true); @@ -1686,16 +1688,18 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; + std::string chrNameLink = GetNameLink(chr); + if(chr->isInFlight()) { - PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); + PSendSysMessage(LANG_CHAR_IN_FLIGHT,chrNameLink.c_str()); SetSentErrorMessage(true); return false; } - PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chrNameLink.c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetName(), BSpeed); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetNameLink().c_str(), BSpeed); chr->SetSpeed(MOVE_RUN_BACK,BSpeed,true); @@ -1729,9 +1733,9 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetNameLink().c_str(), FSpeed); chr->SetSpeed(MOVE_FLIGHT,FSpeed,true); @@ -1764,9 +1768,9 @@ bool ChatHandler::HandleModifyScaleCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName()); + PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetName(), Scale); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetNameLink().c_str(), Scale); chr->SetFloatValue(OBJECT_FIELD_SCALE_X, Scale); @@ -2011,9 +2015,9 @@ bool ChatHandler::HandleModifyMountCommand(const char* args) if (HasLowerSecurity(chr, 0)) return false; - PSendSysMessage(LANG_YOU_GIVE_MOUNT, chr->GetName()); + PSendSysMessage(LANG_YOU_GIVE_MOUNT, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetName()); + ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetNameLink().c_str()); chr->SetUInt32Value( UNIT_FIELD_FLAGS , 0x001000 ); chr->Mount(mId); @@ -2063,25 +2067,25 @@ bool ChatHandler::HandleModifyMoneyCommand(const char* args) sLog.outDetail(GetTrinityString(LANG_CURRENT_MONEY), moneyuser, addmoney, newmoney); if(newmoney <= 0 ) { - PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, chr->GetName()); + PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, GetName()); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, GetNameLink().c_str()); chr->SetMoney(0); } else { - PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(addmoney), chr->GetName()); + PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(addmoney), GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, GetName(), abs(addmoney)); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, GetNameLink().c_str(), abs(addmoney)); chr->SetMoney( newmoney ); } } else { - PSendSysMessage(LANG_YOU_GIVE_MONEY, addmoney, chr->GetName()); + PSendSysMessage(LANG_YOU_GIVE_MONEY, addmoney, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, GetName(), addmoney); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, GetNameLink().c_str(), addmoney); chr->ModifyMoney( addmoney ); } @@ -2166,7 +2170,7 @@ bool ChatHandler::HandleModifyHonorCommand (const char* args) target->ModifyHonorPoints(amount); - PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, target->GetName(), target->GetHonorPoints()); + PSendSysMessage(LANG_COMMAND_MODIFY_HONOR, GetNameLink(target).c_str(), target->GetHonorPoints()); return true; } @@ -2513,21 +2517,18 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) if (HasLowerSecurity(chr, 0)) return false; - std::string nameLink = playerLink(name); + std::string chrNameLink = playerLink(name); if(chr->IsBeingTeleported()==true) { - PSendSysMessage(LANG_IS_TELEPORTED, nameLink.c_str()); + PSendSysMessage(LANG_IS_TELEPORTED, chrNameLink.c_str()); SetSentErrorMessage(true); return false; } - PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str()); + PSendSysMessage(LANG_TELEPORTING_TO, chrNameLink.c_str(),"", tele->name.c_str()); if (needReportToTarget(chr)) - { - std::string plNameLink = playerLink(GetName()); - ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, plNameLink.c_str()); - } + ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetNameLink().c_str()); // stop flight if need if(chr->isInFlight()) @@ -2594,7 +2595,7 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) return false; } - std::string nameLink = playerLink(player->GetName()); + std::string nameLink = GetNameLink(player); Group *grp = player->GetGroup(); if(!grp) @@ -2615,7 +2616,7 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) if (HasLowerSecurity(pl, 0)) return false; - std::string plNameLink = playerLink(pl->GetName()); + std::string plNameLink = GetNameLink(pl); if(pl->IsBeingTeleported()) { diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index cf93a110177..ad422e3ed3d 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -713,7 +713,7 @@ bool ChatHandler::HandleModifyRepCommand(const char * args) } target->SetFactionReputation(factionEntry,amount); - PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, target->GetName(), target->GetReputation(factionId)); + PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[m_session->GetSessionDbcLocale()], factionId, GetNameLink(target).c_str(), target->GetReputation(factionId)); return true; } @@ -2098,7 +2098,7 @@ bool ChatHandler::HandleDelTicketCommand(const char *args) if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER))) { pl->GetSession()->SendGMTicketGetTicket(0x0A, 0); - PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, pl->GetName()); + PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, GetNameLink(pl).c_str()); } else PSendSysMessage(LANG_COMMAND_TICKETDEL); @@ -3252,9 +3252,7 @@ bool ChatHandler::HandleRenameCommand(const char* args) if (HasLowerSecurity(target, 0)) return false; - std::string tNameLink = playerLink(target->GetName()); - - PSendSysMessage(LANG_RENAME_PLAYER, tNameLink.c_str()); + PSendSysMessage(LANG_RENAME_PLAYER, GetNameLink(target).c_str()); target->SetAtLoginFlag(AT_LOGIN_RENAME); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", target->GetGUIDLow()); } @@ -3312,9 +3310,7 @@ bool ChatHandler::HandleCustomizeCommand(const char* args) if(target) { - std::string tNameLink = playerLink(target->GetName()); - - PSendSysMessage(LANG_CUSTOMIZE_PLAYER, tNameLink.c_str()); + PSendSysMessage(LANG_CUSTOMIZE_PLAYER, GetNameLink(target).c_str()); target->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '8' WHERE guid = '%u'", target->GetGUIDLow()); } @@ -3969,9 +3965,9 @@ bool ChatHandler::HandleRepairitemsCommand(const char* /*args*/) // Repair items target->DurabilityRepairAll(false, 0, false); - PSendSysMessage(LANG_YOU_REPAIR_ITEMS, target->GetName()); + PSendSysMessage(LANG_YOU_REPAIR_ITEMS, GetNameLink(target).c_str()); if(needReportToTarget(target)) - ChatHandler(target).PSendSysMessage(LANG_YOUR_ITEMS_REPAIRED, GetName()); + ChatHandler(target).PSendSysMessage(LANG_YOUR_ITEMS_REPAIRED, GetNameLink().c_str()); return true; } @@ -4003,9 +3999,9 @@ bool ChatHandler::HandleWaterwalkCommand(const char* args) return false; } - PSendSysMessage(LANG_YOU_SET_WATERWALK, args, player->GetName()); + PSendSysMessage(LANG_YOU_SET_WATERWALK, args, GetNameLink(player).c_str()); if(needReportToTarget(player)) - ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, GetName()); + ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, GetNameLink().c_str()); return true; } diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 664cc1e2ecf..3516ad8df62 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -1342,9 +1342,11 @@ bool ChatHandler::HandleSetSkillCommand(const char* args) return false; } + std::string tNameLink = GetNameLink(target); + if(!target->GetSkillValue(skill)) { - PSendSysMessage(LANG_SET_SKILL_ERROR, target->GetName(), skill, sl->name[0]); + PSendSysMessage(LANG_SET_SKILL_ERROR, tNameLink.c_str(), skill, sl->name[0]); SetSentErrorMessage(true); return false; } @@ -1355,7 +1357,7 @@ bool ChatHandler::HandleSetSkillCommand(const char* args) return false; target->SetSkill(skill, level, max); - PSendSysMessage(LANG_SET_SKILL, skill, sl->name[0], target->GetName(), level, max); + PSendSysMessage(LANG_SET_SKILL, skill, sl->name[0], tNameLink.c_str(), level, max); return true; } @@ -1402,10 +1404,12 @@ bool ChatHandler::HandleCooldownCommand(const char* args) return false; } + std::string tNameLink = GetNameLink(target); + if (!*args) { target->RemoveAllSpellCooldown(); - PSendSysMessage(LANG_REMOVEALL_COOLDOWN, target->GetName()); + PSendSysMessage(LANG_REMOVEALL_COOLDOWN, tNameLink.c_str()); } else { @@ -1416,7 +1420,7 @@ bool ChatHandler::HandleCooldownCommand(const char* args) if(!sSpellStore.LookupEntry(spell_id)) { - PSendSysMessage(LANG_UNKNOWN_SPELL, target==m_session->GetPlayer() ? GetTrinityString(LANG_YOU) : target->GetName()); + PSendSysMessage(LANG_UNKNOWN_SPELL, target==m_session->GetPlayer() ? GetMangosString(LANG_YOU) : tNameLink.c_str()); SetSentErrorMessage(true); return false; } @@ -1426,8 +1430,8 @@ bool ChatHandler::HandleCooldownCommand(const char* args) data << uint64(target->GetGUID()); target->GetSession()->SendPacket(&data); target->RemoveSpellCooldown(spell_id); - PSendSysMessage(LANG_REMOVE_COOLDOWN, spell_id, target==m_session->GetPlayer() ? GetTrinityString(LANG_YOU) : target->GetName()); - } + PSendSysMessage(LANG_REMOVE_COOLDOWN, spell_id, target==m_session->GetPlayer() ? GetMangosString(LANG_YOU) : tNameLink.c_str()); + } return true; } @@ -2230,9 +2234,7 @@ bool ChatHandler::HandleLearnAllDefaultCommand(const char* args) player->learnDefaultSpells(); player->learnQuestRewardedSpells(); - std::string nameLink = playerLink(player->GetName()); - - PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST,nameLink.c_str()); + PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST,GetNameLink(player).c_str()); return true; } @@ -2268,7 +2270,7 @@ bool ChatHandler::HandleLearnCommand(const char* args) if(targetPlayer == m_session->GetPlayer()) SendSysMessage(LANG_YOU_KNOWN_SPELL); else - PSendSysMessage(LANG_TARGET_KNOWN_SPELL,targetPlayer->GetName()); + PSendSysMessage(LANG_TARGET_KNOWN_SPELL,GetNameLink(targetPlayer).c_str()); SetSentErrorMessage(true); return false; } @@ -2346,7 +2348,7 @@ bool ChatHandler::HandleAddItemCommand(const char* args) if (count < 0) { plTarget->DestroyItemCount(itemId, -count, true, false); - PSendSysMessage(LANG_REMOVEITEM, itemId, -count, plTarget->GetName()); + PSendSysMessage(LANG_REMOVEITEM, itemId, -count, GetNameLink(plTarget).c_str()); return true; } @@ -3851,7 +3853,7 @@ bool ChatHandler::HandleModifyArenaCommand(const char * args) target->ModifyArenaPoints(amount); - PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, target->GetName(), target->GetArenaPoints()); + PSendSysMessage(LANG_COMMAND_MODIFY_ARENA, GetNameLink(target).c_str(), target->GetArenaPoints()); return true; } @@ -4147,15 +4149,15 @@ bool ChatHandler::HandleExploreCheatCommand(const char* args) if (flag != 0) { - PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, chr->GetName()); + PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,GetName()); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,GetNameLink().c_str()); } else { - PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, chr->GetName()); + PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,GetName()); + ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,GetNameLink().c_str()); } for (uint8 i=0; i<128; i++) @@ -4254,7 +4256,7 @@ bool ChatHandler::HandleLevelUpCommand(const char* args) return false; } - name = chr->GetName(); + name = GetNameLink(chr); } assert(chr || chr_guid); @@ -4963,12 +4965,8 @@ bool ChatHandler::HandleResetSpellsCommand(const char * args) player->resetSpells(); ChatHandler(player).SendSysMessage(LANG_RESET_SPELLS); - if(m_session->GetPlayer()!=player) - { - std::string nameLink = playerLink(player->GetName()); - PSendSysMessage(LANG_RESET_SPELLS_ONLINE,nameLink.c_str()); - } + PSendSysMessage(LANG_RESET_SPELLS_ONLINE,GetNameLink(player).c_str()); } else { @@ -5006,12 +5004,9 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args) player->resetTalents(true); ChatHandler(player).SendSysMessage(LANG_RESET_TALENTS); - if(m_session->GetPlayer()!=player) - { - std::string nameLink = playerLink(player->GetName()); - PSendSysMessage(LANG_RESET_TALENTS_ONLINE,nameLink.c_str()); - } + PSendSysMessage(LANG_RESET_TALENTS_ONLINE,GetNameLink(player).c_str()); + return true; } else if (playerGUID) @@ -5032,10 +5027,7 @@ bool ChatHandler::HandleResetTalentsCommand(const char * args) player = (Player *)owner; ChatHandler(player).SendSysMessage(LANG_RESET_TALENTS); if(m_session->GetPlayer()!=player) - { - std::string nameLink = playerLink(player->GetName()); - PSendSysMessage(LANG_RESET_TALENTS_ONLINE,nameLink.c_str()); - } + PSendSysMessage(LANG_RESET_TALENTS_ONLINE,GetNameLink(player).c_str()); } return true; } @@ -5927,9 +5919,9 @@ bool ChatHandler::HandleFlyModeCommand(const char* args) if(!args) return false; - Unit *unit = getSelectedUnit(); - if (!unit || (unit->GetTypeId() != TYPEID_PLAYER)) - unit = m_session->GetPlayer(); + Player *target = getSelectedPlayer(); + if (!target) + target = m_session->GetPlayer(); WorldPacket data(12); if (strncmp(args, "on", 3) == 0) @@ -5941,10 +5933,10 @@ bool ChatHandler::HandleFlyModeCommand(const char* args) SendSysMessage(LANG_USE_BOL); return false; } - data.append(unit->GetPackGUID()); + data.append(target->GetPackGUID()); data << uint32(0); // unknown - unit->SendMessageToSet(&data, true); - PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, unit->GetName(), args); + target->SendMessageToSet(&data, true); + PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, GetNameLink(target).c_str(), args); return true; } @@ -7051,10 +7043,10 @@ bool ChatHandler::HandleModifyGenderCommand(const char *args) char const* gender_full = gender ? "female" : "male"; - PSendSysMessage(LANG_YOU_CHANGE_GENDER, player->GetName(), gender_full); + PSendSysMessage(LANG_YOU_CHANGE_GENDER, GetNameLink(player).c_str(), gender_full); if (needReportToTarget(player)) - ChatHandler(player).PSendSysMessage(LANG_YOUR_GENDER_CHANGED, gender_full, GetName()); + ChatHandler(player).PSendSysMessage(LANG_YOUR_GENDER_CHANGED, gender_full, GetNameLink().c_str()); return true; } diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index e7006b38dce..2d133cc575a 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -46,38 +46,6 @@ INSTANTIATE_SINGLETON_2(ObjectAccessor, CLASS_LOCK); INSTANTIATE_CLASS_MUTEX(ObjectAccessor, ZThread::FastMutex); -namespace Trinity -{ - struct TRINITY_DLL_DECL BuildUpdateForPlayer - { - Player &i_player; - UpdateDataMapType &i_updatePlayers; - - BuildUpdateForPlayer(Player &player, UpdateDataMapType &data_map) : i_player(player), i_updatePlayers(data_map) {} - - void Visit(PlayerMapType &m) - { - for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) - { - if( iter->getSource() == &i_player ) - continue; - - UpdateDataMapType::iterator iter2 = i_updatePlayers.find(iter->getSource()); - if( iter2 == i_updatePlayers.end() ) - { - std::pair<UpdateDataMapType::iterator, bool> p = i_updatePlayers.insert( ObjectAccessor::UpdateDataValueType(iter->getSource(), UpdateData()) ); - assert(p.second); - iter2 = p.first; - } - - i_player.BuildValuesUpdateBlockForPlayer(&iter2->second, iter2->first); - } - } - - template<class SKIP> void Visit(GridRefManager<SKIP> &) {} - }; -} - ObjectAccessor::ObjectAccessor() {} ObjectAccessor::~ObjectAccessor() {} diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 3d2ed3de5f8..985865cb812 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12878,8 +12878,6 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver ) // if not exist then created with set uState==NEW and rewarded=false QuestStatusData& questStatusData = mQuestStatus[quest_id]; - if (questStatusData.uState != QUEST_NEW) - questStatusData.uState = QUEST_CHANGED; // check for repeatable quests status reset questStatusData.m_status = QUEST_STATUS_INCOMPLETE; @@ -12887,18 +12885,18 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver ) if ( pQuest->HasFlag( QUEST_TRINITY_FLAGS_DELIVER ) ) { - for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++) + for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) questStatusData.m_itemcount[i] = 0; } if ( pQuest->HasFlag(QUEST_TRINITY_FLAGS_KILL_OR_CAST | QUEST_TRINITY_FLAGS_SPEAKTO) ) { - for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++) + for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) questStatusData.m_creatureOrGOcount[i] = 0; } GiveQuestSourceItem( pQuest ); - AdjustQuestReqItemCount( pQuest ); + AdjustQuestReqItemCount( pQuest, questStatusData ); if( pQuest->GetRepObjectiveFaction() ) SetFactionVisibleForFactionId(pQuest->GetRepObjectiveFaction()); @@ -12921,6 +12919,9 @@ void Player::AddQuest( Quest const *pQuest, Object *questGiver ) SetQuestSlot(log_slot, quest_id, qtime); + if (questStatusData.uState != QUEST_NEW) + questStatusData.uState = QUEST_CHANGED; + //starting initial quest script if(questGiver && pQuest->GetQuestStartScript()!=0) sWorld.ScriptsStart(sQuestStartScripts, pQuest->GetQuestStartScript(), questGiver, this); @@ -13150,8 +13151,9 @@ void Player::FailTimedQuest( uint32 quest_id ) { QuestStatusData& q_status = mQuestStatus[quest_id]; - if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED; q_status.m_timer = 0; + if (q_status.uState != QUEST_NEW) + q_status.uState = QUEST_CHANGED; IncompleteQuest( quest_id ); @@ -13637,18 +13639,18 @@ uint32 Player::GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) if( !qInfo ) return 0; - for (int j = 0; j < QUEST_OBJECTIVES_COUNT; j++) + for (int j = 0; j < QUEST_OBJECTIVES_COUNT; ++j) if ( qInfo->ReqCreatureOrGOId[j] == entry ) return mQuestStatus[quest_id].m_creatureOrGOcount[j]; return 0; } -void Player::AdjustQuestReqItemCount( Quest const* pQuest ) +void Player::AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData ) { if ( pQuest->HasFlag( QUEST_TRINITY_FLAGS_DELIVER ) ) { - for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++) + for(int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) { uint32 reqitemcount = pQuest->ReqItemCount[i]; if( reqitemcount != 0 ) @@ -13656,9 +13658,8 @@ void Player::AdjustQuestReqItemCount( Quest const* pQuest ) uint32 quest_id = pQuest->GetQuestId(); uint32 curitemcount = GetItemCount(pQuest->ReqItemId[i],true); - QuestStatusData& q_status = mQuestStatus[quest_id]; - q_status.m_itemcount[i] = std::min(curitemcount, reqitemcount); - if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED; + questStatusData.m_itemcount[i] = std::min(curitemcount, reqitemcount); + if (questStatusData.uState != QUEST_NEW) questStatusData.uState = QUEST_CHANGED; } } } diff --git a/src/game/Player.h b/src/game/Player.h index ea76f8253b1..f7858f3419b 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1261,7 +1261,6 @@ class TRINITY_DLL_SPEC Player : public Unit } } uint32 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry); - void AdjustQuestReqItemCount( Quest const* pQuest ); void AreaExploredOrEventHappens( uint32 questId ); void GroupEventHappens( uint32 questId, WorldObject const* pEventObject ); void ItemAddedQuestCheck( uint32 entry, uint32 count ); @@ -2423,6 +2422,8 @@ class TRINITY_DLL_SPEC Player : public Unit uint8 _CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemPrototype const *pProto, uint32& count, bool merge, Item *pSrcItem, uint8 skip_bag, uint8 skip_slot ) const; Item* _StoreItem( uint16 pos, Item *pItem, uint32 count, bool clone, bool update ); + void AdjustQuestReqItemCount( Quest const* pQuest, QuestStatusData& questStatusData ); + GridReference<Player> m_gridRef; MapReference m_mapRef; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index b83607a49a9..36766c67011 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2037,8 +2037,7 @@ void Spell::prepare(SpellCastTargets const* targets, Aura* triggeredByAura) // set timer base at cast time ReSetTimer(); - //item: first cast may destroy item and second cast causes crash - if(m_IsTriggeredSpell || !m_casttime && !m_spellInfo->StartRecoveryTime && !m_castItemGUID && GetCurrentContainer() == CURRENT_GENERIC_SPELL) + if(m_IsTriggeredSpell) cast(true); else { @@ -2047,9 +2046,16 @@ void Spell::prepare(SpellCastTargets const* targets, Aura* triggeredByAura) if(isSpellBreakStealth(m_spellInfo) ) m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_CAST); - m_caster->SetCurrentCastedSpell( this ); - m_selfContainer = &(m_caster->m_currentSpells[GetCurrentContainer()]); - SendSpellStart(); + if(!m_casttime && !m_spellInfo->StartRecoveryTime + && !m_castItemGUID //item: first cast may destroy item and second cast causes crash + && GetCurrentContainer() == CURRENT_GENERIC_SPELL) + cast(true); + else + { + m_caster->SetCurrentCastedSpell( this ); + m_selfContainer = &(m_caster->m_currentSpells[GetCurrentContainer()]); + SendSpellStart(); + } } } @@ -2154,9 +2160,6 @@ void Spell::cast(bool skipCheck) FillTargetMap(); - if(m_customAttr & SPELL_ATTR_CU_DIRECT_DAMAGE) - CalculateDamageDoneForAllTargets(); - if(m_spellInfo->SpellFamilyName) { if (m_spellInfo->excludeCasterAuraSpell) @@ -2212,12 +2215,15 @@ void Spell::cast(bool skipCheck) SendCastResult(castResult); SendSpellGo(); // we must send smsg_spell_go packet before m_castItem delete in TakeCastItem()... + if(m_customAttr & SPELL_ATTR_CU_DIRECT_DAMAGE) + CalculateDamageDoneForAllTargets(); + + if(m_customAttr & SPELL_ATTR_CU_CHARGE) + EffectCharge(0); + // Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells if (m_spellInfo->speed > 0.0f && !IsChanneledSpell(m_spellInfo)) { - if(m_customAttr & SPELL_ATTR_CU_CHARGE) - EffectCharge(0); - // Remove used for cast item if need (it can be already NULL after TakeReagents call // in case delayed spell remove item at cast delay start TakeCastItem(); @@ -2233,6 +2239,32 @@ void Spell::cast(bool skipCheck) handle_immediate(); } + //are there any spells need to be triggered after hit? + // handle SPELL_AURA_ADD_TARGET_TRIGGER auras + Unit::AuraList const& targetTriggers = m_caster->GetAurasByType(SPELL_AURA_ADD_TARGET_TRIGGER); + for(Unit::AuraList::const_iterator i = targetTriggers.begin(); i != targetTriggers.end(); ++i) + { + if (!(*i)->isAffectedOnSpell(m_spellInfo)) + continue; + for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit) + if( ihit->missCondition == SPELL_MISS_NONE ) + { + // check m_caster->GetGUID() let load auras at login and speedup most often case + Unit *unit = m_caster->GetGUID()== ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); + if (unit && unit->isAlive()) + { + SpellEntry const *auraSpellInfo = (*i)->GetSpellProto(); + uint32 auraSpellIdx = (*i)->GetEffIndex(); + // Calculate chance at that moment (can be depend for example from combo points) + int32 chance = m_caster->CalculateSpellDamage(auraSpellInfo, auraSpellIdx, (*i)->GetBasePoints(),unit); + if(roll_chance_i(chance)) + for (int j=0; j != (*i)->GetStackAmount(); ++j) + m_caster->CastSpell(unit, auraSpellInfo->EffectTriggerSpell[auraSpellIdx], true, NULL, (*i)); + } + } + } + + // combo points should not be taken before SPELL_AURA_ADD_TARGET_TRIGGER auras are handled if(!m_IsTriggeredSpell) { TakePower(); @@ -2626,30 +2658,6 @@ void Spell::finish(bool ok) if (m_caster->GetTypeId() == TYPEID_PLAYER) ((Player*)m_caster)->RemoveSpellMods(this); - // handle SPELL_AURA_ADD_TARGET_TRIGGER auras - Unit::AuraList const& targetTriggers = m_caster->GetAurasByType(SPELL_AURA_ADD_TARGET_TRIGGER); - for(Unit::AuraList::const_iterator i = targetTriggers.begin(); i != targetTriggers.end(); ++i) - { - if (!(*i)->isAffectedOnSpell(m_spellInfo)) - continue; - for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit) - if( ihit->missCondition == SPELL_MISS_NONE ) - { - // check m_caster->GetGUID() let load auras at login and speedup most often case - Unit *unit = m_caster->GetGUID()== ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); - if (unit && unit->isAlive()) - { - SpellEntry const *auraSpellInfo = (*i)->GetSpellProto(); - uint32 auraSpellIdx = (*i)->GetEffIndex(); - // Calculate chance at that moment (can be depend for example from combo points) - int32 chance = m_caster->CalculateSpellDamage(auraSpellInfo, auraSpellIdx, (*i)->GetBasePoints(),unit); - if(roll_chance_i(chance)) - for (int j=0; j != (*i)->GetStackAmount(); ++j) - m_caster->CastSpell(unit, auraSpellInfo->EffectTriggerSpell[auraSpellIdx], true, NULL, (*i)); - } - } - } - // Heal caster for all health leech from all targets if (m_healthLeech) { @@ -2667,6 +2675,7 @@ void Spell::finish(bool ok) } // call triggered spell only at successful cast (after clear combo points -> for add some if need) + // I assume what he means is that some triggered spells may add combo points if(!m_TriggerSpells.empty()) TriggerSpell(); diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 319d7fda346..58d1b6253d4 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3296,8 +3296,7 @@ void Aura::HandleModStealth(bool apply, bool Real) // only at real aura add if(Real) { - if(GetId()!=SPELL_ID_SHADOWMELD) - m_target->SetStandFlags(UNIT_STAND_FLAGS_CREEP); + m_target->SetStandFlags(UNIT_STAND_FLAGS_CREEP); if(m_target->GetTypeId()==TYPEID_PLAYER) m_target->SetFlag(PLAYER_FIELD_BYTES2, 0x2000); @@ -3318,8 +3317,7 @@ void Aura::HandleModStealth(bool apply, bool Real) // if last SPELL_AURA_MOD_STEALTH and no GM invisibility if(!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH) && m_target->GetVisibility()!=VISIBILITY_OFF) { - if(GetId()!=SPELL_ID_SHADOWMELD) - m_target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP); + m_target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP); if(m_target->GetTypeId()==TYPEID_PLAYER) m_target->RemoveFlag(PLAYER_FIELD_BYTES2, 0x2000); diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 0b7053db677..433ebe80cc9 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2232,7 +2232,7 @@ void SpellMgr::LoadSpellCustomAttr() mSpellCustomAttr[i] |= SPELL_ATTR_CU_DIRECT_DAMAGE; break; case SPELL_EFFECT_CHARGE: - if(!spellInfo->speed) + if(!spellInfo->speed && !spellInfo->SpellFamilyName) spellInfo->speed = SPEED_CHARGE; mSpellCustomAttr[i] |= SPELL_ATTR_CU_CHARGE; case SPELL_EFFECT_TRIGGER_SPELL: diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 3f1b1659fab..a576abc0360 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9307,9 +9307,9 @@ bool Unit::canDetectInvisibilityOf(Unit const* u) const { if(m_invisibilityMask & u->m_invisibilityMask) // same group return true; - AuraList const& auras = GetAurasByType(SPELL_AURA_MOD_STALKED); // Hunter mark + AuraList const& auras = u->GetAurasByType(SPELL_AURA_MOD_STALKED); // Hunter mark for(AuraList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) - if((*iter)->GetCasterGUID()==u->GetGUID()) + if((*iter)->GetCasterGUID()==GetGUID()) return true; if(uint32 mask = (m_detectInvisibilityMask & u->m_invisibilityMask)) @@ -9359,6 +9359,11 @@ bool Unit::canDetectStealthOf(Unit const* target, float distance) const if(HasAuraType(SPELL_AURA_DETECT_STEALTH)) return true; + AuraList const& auras = target->GetAurasByType(SPELL_AURA_MOD_STALKED); // Hunter mark + for(AuraList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) + if((*iter)->GetCasterGUID()==GetGUID()) + return true; + //Visible distance based on stealth value (stealth rank 4 300MOD, 10.5 - 3 = 7.5) float visibleDistance = 10.5f - target->GetTotalAuraModifier(SPELL_AURA_MOD_STEALTH) / 100.0f; //Visible distance is modified by -Level Diff (every level diff = 1.0f in visible distance) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2305f767755..cd1d48dc8b3 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7220" + #define REVISION_NR "7226" #endif // __REVISION_NR_H__ |