Changeset 132

Show
Ignore:
Timestamp:
11/19/08 13:39:06 (17 years ago)
Author:
yumileroy
Message:

[svn] * Added npc follow, waterwalk, repairitems commands. Patch by dythzer
* Prevent adding more than 5 people to raid - Apoc
* fixed typo from one of our previous commits.
* Fixed two strings in core, thanx to warhead for patch.

Original author: KingPin?
Date: 2008-10-29 17:09:32-05:00

Location:
trunk
Files:
1 added
10 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/Chat.cpp

    r129 r132  
    387387                { "info",           SEC_ADMINISTRATOR,  false, &ChatHandler::HandleNpcInfoCommand,             "", NULL }, 
    388388                { "playemote",      SEC_ADMINISTRATOR,  false, &ChatHandler::HandlePlayEmoteCommand,           "", NULL }, 
     389        { "follow",         SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcFollowCommand,           "", NULL }, 
     390        { "unfollow",       SEC_GAMEMASTER,     false, &ChatHandler::HandleNpcUnFollowCommand,         "", NULL }, 
    389391 
    390392        //{ TODO: fix or remove this commands 
     
    511513                { "explorecheat",   SEC_ADMINISTRATOR,  false, &ChatHandler::HandleExploreCheatCommand,        "", NULL }, 
    512514                { "hover",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleHoverCommand,               "", NULL }, 
     515        { "waterwalk",          SEC_ADMINISTRATOR,  false, &ChatHandler::HandleWaterwalkCommand,               "", NULL }, 
    513516                { "levelup",        SEC_ADMINISTRATOR,  false, &ChatHandler::HandleLevelUpCommand,             "", NULL }, 
    514517                { "showarea",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleShowAreaCommand,            "", NULL }, 
     
    536539                { "damage",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleDamageCommand,              "", NULL }, 
    537540                { "combatstop",     SEC_GAMEMASTER,     false, &ChatHandler::HandleCombatStopCommand,          "", NULL }, 
    538                 { "chardelete",     SEC_CONSOLE,        true,  &ChatHandler::HandleCombatStopCommand,          "", NULL }, 
     541                { "chardelete",     SEC_CONSOLE,        true,  &ChatHandler::HandleCharDeleteCommand,          "", NULL }, 
    539542                { "sendmessage",    SEC_ADMINISTRATOR,  true,  &ChatHandler::HandleSendMessageCommand,         "", NULL }, 
     543        { "repairitems",    SEC_GAMEMASTER,     false, &ChatHandler::HandleRepairitemsCommand,         "", NULL }, 
    540544                { "freeze",         SEC_ADMINISTRATOR,  false, &ChatHandler::HandleFreezeCommand,              "", NULL },  
    541545                { "unfreeze",       SEC_ADMINISTRATOR,  false, &ChatHandler::HandleUnFreezeCommand,            "", NULL },  
     
    12081212} 
    12091213 
     1214const char *ChatHandler::GetName() const 
     1215{ 
     1216    return m_session->GetPlayer()->GetName(); 
     1217} 
     1218 
     1219bool ChatHandler::needReportToTarget(Player* chr) const 
     1220{ 
     1221    Player* pl = m_session->GetPlayer(); 
     1222    return pl != chr && pl->IsVisibleGloballyFor(chr); 
     1223} 
     1224     
    12101225const char *CliHandler::GetTrinityString(int32 entry) const 
    12111226{ 
     
    12231238        m_print(str); 
    12241239        m_print("\r\n"); 
     1240} 
     1241 
     1242const char *CliHandler::GetName() const 
     1243{ 
     1244    return GetTrinityString(LANG_CONSOLE_COMMAND); 
     1245} 
     1246 
     1247bool CliHandler::needReportToTarget(Player* /*chr*/) const 
     1248{ 
     1249    return true; 
    12251250} 
    12261251 
  • trunk/src/game/Chat.h

    r112 r132  
    7272        int ParseCommands(const char* text); 
    7373 
     74    virtual char const* GetName() const; 
    7475    protected: 
    7576                explicit ChatHandler() : m_session(NULL) {}      // for CLI subclass 
     
    7879 
    7980                virtual bool isAvailable(ChatCommand const& cmd) const; 
     81        virtual bool needReportToTarget(Player* chr) const; 
    8082 
    8183        void SendGlobalSysMessage(const char *str); 
     
    151153        bool HandleModifyRepCommand(const char* args); 
    152154        bool HandleModifyArenaCommand(const char* args); 
     155         
     156        bool HandleNpcFollowCommand(const char* args); 
     157        bool HandleNpcUnFollowCommand(const char* args); 
    153158 
    154159        bool HandleReloadCommand(const char* args); 
     
    350355        bool HandleNpcInfoCommand(const char* args); 
    351356        bool HandleHoverCommand(const char* args); 
     357        bool HandleWaterwalkCommand(const char* args); 
    352358        bool HandleLevelUpCommand(const char* args); 
    353359        bool HandleShowAreaCommand(const char* args); 
     
    417423        bool HandleComeToMeCommand(const char *args); 
    418424        bool HandleCombatStopCommand(const char *args); 
     425        bool HandleCharDeleteCommand(const char *args); 
    419426                bool HandleSendMessageCommand(const char * args); 
     427        bool HandleRepairitemsCommand(const char* args); 
    420428        bool HandleFlushArenaPointsCommand(const char *args); 
    421429 
     
    474482                bool isAvailable(ChatCommand const& cmd) const; 
    475483                void SendSysMessage(const char *str); 
     484        char const* GetName() const; 
     485        bool needReportToTarget(Player* chr) const; 
    476486 
    477487        private: 
  • trunk/src/game/Group.cpp

    r111 r132  
    4545    m_looterGuid        = 0; 
    4646    m_lootThreshold     = ITEM_QUALITY_UNCOMMON; 
     47        m_subGroupsCounts   = NULL; 
    4748 
    4849    for(int i=0; i<TARGETICONCOUNT; i++) 
     
    7475        for(BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr) 
    7576            itr->second.save->RemoveGroup(this); 
     77        if (m_subGroupsCounts) 
     78                delete[] m_subGroupsCounts; 
    7679} 
    7780 
     
    8285 
    8386    m_groupType  = isBGGroup() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL; 
     87         
     88        if (m_groupType == GROUPTYPE_RAID) 
     89                _initRaidSubGroupsCounter(); 
     90                 
    8491    m_lootMethod = GROUP_LOOT; 
    8592    m_lootThreshold = ITEM_QUALITY_UNCOMMON; 
     
    137144 
    138145    m_groupType  = (*result)[13].GetBool() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL; 
     146         
     147        if (m_groupType == GROUPTYPE_RAID) 
     148                _initRaidSubGroupsCounter(); 
     149                 
    139150    m_difficulty = (*result)[14].GetUInt8(); 
    140151    m_mainTank = (*result)[0].GetUInt64(); 
     
    179190    member.assistant = assistant; 
    180191    m_memberSlots.push_back(member); 
     192         
     193        SubGroupCounterIncrease(subgroup); 
     194         
    181195    return true; 
     196} 
     197 
     198void Group::ConvertToRaid() 
     199{ 
     200        m_groupType = GROUPTYPE_RAID; 
     201         
     202        _initRaidSubGroupsCounter(); 
     203         
     204        if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid)); 
     205        SendUpdate(); 
    182206} 
    183207 
     
    387411} 
    388412 
    389 void Group::SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 
     413void Group::SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 
    390414{ 
    391415    WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1)); 
     
    411435} 
    412436 
    413 void Group::SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 
     437void Group::SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 
    414438{ 
    415439    WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1)); 
     
    454478} 
    455479 
    456 void Group::GroupLoot(uint64 playerGUID, Loot *loot, Creature *creature) 
     480void Group::GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature) 
    457481{ 
    458482    std::vector<LootItem>::iterator i; 
     
    510534} 
    511535 
    512 void Group::NeedBeforeGreed(uint64 playerGUID, Loot *loot, Creature *creature) 
     536void Group::NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature) 
    513537{ 
    514538    ItemPrototype const *item; 
     
    564588} 
    565589 
    566 void Group::MasterLoot(uint64 playerGUID, Loot* /*loot*/, Creature *creature) 
     590void Group::MasterLoot(const uint64& playerGUID, Loot* /*loot*/, Creature *creature) 
    567591{ 
    568592    Player *player = objmgr.GetPlayer(playerGUID); 
     
    600624} 
    601625 
    602 void Group::CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise) 
     626void Group::CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 NumberOfPlayers, uint8 Choise) 
    603627{ 
    604628    Rolls::iterator rollI = GetRoll(Guid); 
     
    936960    // get first not-full group 
    937961    uint8 groupid = 0; 
    938     std::vector<uint8> temp(MAXRAIDSIZE/MAXGROUPSIZE); 
    939     for(member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr) 
    940     { 
    941         if (itr->group >= temp.size()) continue; 
    942         ++temp[itr->group]; 
    943         if(temp[groupid] >= MAXGROUPSIZE) 
    944             ++groupid; 
     962    if (m_subGroupsCounts) 
     963    { 
     964        bool groupFound = false; 
     965                for (; groupid < MAXRAIDSIZE/MAXGROUPSIZE; ++groupid) 
     966                { 
     967                        if (m_subGroupsCounts[groupid] < MAXGROUPSIZE) 
     968                        { 
     969                                groupFound = true; 
     970                                break; 
     971                        } 
     972                } 
     973                // We are raid group and no one slot is free 
     974                if (!groupFound) 
     975                                return false; 
    945976    } 
    946977 
     
    964995    member.assistant = isAssistant; 
    965996    m_memberSlots.push_back(member); 
     997         
     998        SubGroupCounterIncrease(group); 
    966999 
    9671000    if(player) 
     
    10021035    member_witerator slot = _getMemberWSlot(guid); 
    10031036    if (slot != m_memberSlots.end()) 
     1037        { 
     1038                SubGroupCounterDecrease(slot->group); 
    10041039        m_memberSlots.erase(slot); 
     1040        } 
    10051041 
    10061042    if(!isBGGroup()) 
     
    10951131} 
    10961132 
    1097 void Group::_convertToRaid() 
    1098 { 
    1099     m_groupType = GROUPTYPE_RAID; 
    1100  
    1101     if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid)); 
    1102 } 
    1103  
    11041133bool Group::_setMembersGroup(const uint64 &guid, const uint8 &group) 
    11051134{ 
     
    11091138 
    11101139    slot->group = group; 
     1140         
     1141        SubGroupCounterIncrease(group); 
     1142         
    11111143    if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid)); 
     1144         
    11121145    return true; 
    11131146} 
     
    11651198    if (!player) 
    11661199    { 
     1200                uint8 prevSubGroup; 
     1201                prevSubGroup = GetMemberGroup(guid); 
     1202                 
     1203                SubGroupCounterDecrease(prevSubGroup); 
     1204                 
    11671205        if(_setMembersGroup(guid, group)) 
    11681206            SendUpdate(); 
    11691207    } 
    1170     else ChangeMembersGroup(player, group); 
     1208    else 
     1209                ChangeMembersGroup(player, group); 
    11711210} 
    11721211 
     
    11781217    if(_setMembersGroup(player->GetGUID(), group)) 
    11791218    { 
     1219                uint8 prevSubGroup; 
     1220                prevSubGroup = player->GetSubGroup(); 
     1221                 
     1222                SubGroupCounterDecrease(prevSubGroup); 
     1223                 
    11801224        player->GetGroupRef().setSubGroup(group); 
    11811225        SendUpdate(); 
  • trunk/src/game/Group.h

    r111 r132  
    184184 
    185185        // member manipulation methods 
    186         bool IsMember(uint64 guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); } 
    187         bool IsLeader(uint64 guid) const { return (GetLeaderGUID() == guid); } 
     186        bool IsMember(const uint64& guid) const { return _getMemberCSlot(guid) != m_memberSlots.end(); } 
     187                bool IsLeader(const uint64& guid) const { return (GetLeaderGUID() == guid); } 
    188188        bool IsAssistant(uint64 guid) const 
    189189        { 
     
    195195        } 
    196196 
    197         bool SameSubGroup(uint64 guid1, uint64 guid2) const 
     197        bool SameSubGroup(uint64 guid1,const uint64& guid2) const 
    198198        { 
    199199            member_citerator mslot2 = _getMemberCSlot(guid2); 
     
    212212            return (mslot1->group==slot2->group); 
    213213        } 
     214                 
     215                bool HasFreeSlotSubGroup(uint8 subgroup) const 
     216                { 
     217                        return (m_subGroupsCounts && m_subGroupsCounts[subgroup] < MAXGROUPSIZE); 
     218                } 
    214219 
    215220        bool SameSubGroup(Player const* member1, Player const* member2) const; 
     
    229234 
    230235        // some additional raid methods 
    231         void ConvertToRaid() 
    232         { 
    233             _convertToRaid(); 
    234             SendUpdate(); 
    235         } 
     236        void ConvertToRaid(); 
     237 
    236238        void SetBattlegroundGroup(BattleGround *bg) { m_bgGroup = bg; } 
    237239        uint32 CanJoinBattleGroundQueue(uint32 bgTypeId, uint32 bgQueueType, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot); 
     
    240242        void ChangeMembersGroup(Player *player, const uint8 &group); 
    241243 
    242         void SetAssistant(const uint64 &guid, const bool &state) 
     244        void SetAssistant(uint64 guid, const bool &state) 
    243245        { 
    244246            if(!isRaidGroup()) 
     
    247249                SendUpdate(); 
    248250        } 
    249         void SetMainTank(const uint64 &guid) 
     251        void SetMainTank(uint64 guid) 
    250252        { 
    251253            if(!isRaidGroup()) 
     
    255257                SendUpdate(); 
    256258        } 
    257         void SetMainAssistant(const uint64 &guid) 
     259        void SetMainAssistant(uint64 guid) 
    258260        { 
    259261            if(!isRaidGroup()) 
     
    286288 
    287289        void SendLootStartRoll(uint32 CountDown, const Roll &r); 
    288         void SendLootRoll(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); 
    289         void SendLootRollWon(uint64 SourceGuid, uint64 TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); 
     290        void SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); 
     291        void SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r); 
    290292        void SendLootAllPassed(uint32 NumberOfPlayers, const Roll &r); 
    291         void GroupLoot(uint64 playerGUID, Loot *loot, Creature *creature); 
    292         void NeedBeforeGreed(uint64 playerGUID, Loot *loot, Creature *creature); 
    293         void MasterLoot(uint64 playerGUID, Loot *loot, Creature *creature); 
     293        void GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature); 
     294                void NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature); 
     295                void MasterLoot(const uint64& playerGUID, Loot *loot, Creature *creature); 
    294296        Rolls::iterator GetRoll(uint64 Guid) 
    295297        { 
     
    305307        } 
    306308        void CountTheRoll(Rolls::iterator roll, uint32 NumberOfPlayers); 
    307         void CountRollVote(uint64 playerGUID, uint64 Guid, uint32 NumberOfPlayers, uint8 Choise); 
     309        void CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 NumberOfPlayers, uint8 Choise); 
    308310        void EndRoll(); 
    309311 
     
    324326        void _removeRolls(const uint64 &guid); 
    325327 
    326         void _convertToRaid(); 
    327328        bool _setMembersGroup(const uint64 &guid, const uint8 &group); 
    328329        bool _setAssistantFlag(const uint64 &guid, const bool &state); 
     
    331332 
    332333        void _homebindIfInstance(Player *player); 
     334                 
     335                void _initRaidSubGroupsCounter() 
     336                { 
     337                        // Sub group counters initialization 
     338                        if (!m_subGroupsCounts) 
     339                                m_subGroupsCounts = new uint8[MAXRAIDSIZE / MAXGROUPSIZE]; 
     340                                 
     341                        memset((void*)m_subGroupsCounts, 0, (MAXRAIDSIZE / MAXGROUPSIZE)*sizeof(uint8)); 
     342                         
     343                        for (member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr) 
     344                                ++m_subGroupsCounts[itr->group]; 
     345                } 
    333346 
    334347        member_citerator _getMemberCSlot(uint64 Guid) const 
     
    351364            return m_memberSlots.end(); 
    352365        } 
     366                 
     367                void SubGroupCounterIncrease(uint8 subgroup) 
     368                { 
     369                        if (m_subGroupsCounts) 
     370                                ++m_subGroupsCounts[subgroup]; 
     371                } 
     372                 
     373                void SubGroupCounterDecrease(uint8 subgroup) 
     374                { 
     375                        if (m_subGroupsCounts) 
     376                                --m_subGroupsCounts[subgroup]; 
     377                } 
    353378 
    354379        MemberSlotList      m_memberSlots; 
     
    368393        Rolls               RollId; 
    369394        BoundInstancesMap   m_boundInstances[TOTAL_DIFFICULTIES]; 
     395                uint8*              m_subGroupsCounts; 
    370396}; 
    371397#endif 
  • trunk/src/game/GroupHandler.cpp

    r102 r132  
    552552    if(!group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) 
    553553        return; 
     554         
     555    if (!group->HasFreeSlotSubGroup(groupNr)) 
     556        return; 
    554557    /********************/ 
    555558 
  • trunk/src/game/Language.h

    r112 r132  
    168168    LANG_SOUND_NOT_EXIST                = 170, 
    169169    LANG_TELEPORTED_TO_BY_CONSOLE       = 171, 
    170         // Room for more level 1              172-199 not used 
     170    LANG_CONSOLE_COMMAND                = 172, 
     171        // Room for more level 1              173-199 not used 
    171172 
    172173    // level 2 chat 
     
    317318    LANG_GM_CHAT_ON                     = 334, 
    318319    LANG_GM_CHAT_OFF                    = 335, 
    319     // Room for more level 2              336-399 not used 
     320    LANG_YOU_REPAIR_ITEMS               = 336, 
     321    LANG_YOUR_ITEMS_REPAIRED            = 337, 
     322    LANG_YOU_SET_WATERWALK              = 338, 
     323    LANG_YOUR_WATERWALK_SET             = 339, 
     324    LANG_CREATURE_FOLLOW_YOU_NOW        = 340, 
     325    LANG_CREATURE_NOT_FOLLOW_YOU        = 341, 
     326    LANG_CREATURE_NOT_FOLLOW_YOU_NOW    = 342, 
     327    // Room for more level 2              343-399 not used 
    320328 
    321329    // level 3 chat 
     
    709717        // Room for more level 3              1119-1199 not used 
    710718         
    711         // Trinity custom patches             5000-9999 
     719        // Trinity strings             5000-9999 
    712720    LANG_COMMAND_FREEZE                 = 5000, 
    713721    LANG_COMMAND_FREEZE_ERROR           = 5001, 
     
    717725    LANG_COMMAND_LIST_FREEZE            = 5005, 
    718726    LANG_COMMAND_FROZEN_PLAYERS         = 5006, 
    719         // Room for more Trinity custom patches 5007-9999 
     727    LANG_INSTANCE_MUST_RAID_GRP         = 5007, 
     728    LANG_INSTANCE_NOT_AS_GHOST          = 5008, 
     729        // Room for more Trinity strings 5009-9999 
    720730 
    721731    // Use for not-in-svn patches         10000-10999 
  • trunk/src/game/Level1.cpp

    r112 r132  
    325325 
    326326    sLog.outDebug("Player %s GPS call for %s '%s' (%s: %u):", 
    327         m_session->GetPlayer()->GetName(), 
     327        GetName(), 
    328328        (obj->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), obj->GetName(), 
    329329        (obj->GetTypeId() == TYPEID_PLAYER ? "GUID" : "Entry"), (obj->GetTypeId() == TYPEID_PLAYER ? obj->GetGUIDLow(): obj->GetEntry()) ); 
     
    397397 
    398398        PSendSysMessage(LANG_SUMMONING, chr->GetName(),""); 
    399  
    400         if (m_session->GetPlayer()->IsVisibleGloballyFor(chr)) 
    401             ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, m_session->GetPlayer()->GetName()); 
     399        if (needReportToTarget(chr)) 
     400            ChatHandler(chr).PSendSysMessage(LANG_SUMMONED_BY, GetName()); 
    402401 
    403402        // stop flight if need 
     
    698697 
    699698    PSendSysMessage(LANG_YOU_CHANGE_HP, chr->GetName(), hp, hpm); 
    700     ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, m_session->GetPlayer()->GetName(), hp, hpm); 
     699    if (needReportToTarget(chr)) 
     700        ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetName(), hp, hpm); 
    701701 
    702702    chr->SetMaxHealth( hpm ); 
     
    741741 
    742742    PSendSysMessage(LANG_YOU_CHANGE_MANA, chr->GetName(), mana, manam); 
    743     ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, m_session->GetPlayer()->GetName(), mana, manam); 
     743    if (needReportToTarget(chr)) 
     744        ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetName(), mana, manam); 
    744745 
    745746    chr->SetMaxPower(POWER_MANA,manam ); 
     
    785786 
    786787    PSendSysMessage(LANG_YOU_CHANGE_ENERGY, chr->GetName(), energy/10, energym/10); 
    787     ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, m_session->GetPlayer()->GetName(), energy/10, energym/10); 
     788    if (needReportToTarget(chr)) 
     789        ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetName(), energy/10, energym/10); 
    788790 
    789791    chr->SetMaxPower(POWER_ENERGY,energym ); 
     
    831833 
    832834    PSendSysMessage(LANG_YOU_CHANGE_RAGE, chr->GetName(), rage/10, ragem/10); 
    833     ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_RAGE_CHANGED), m_session->GetPlayer()->GetName(), rage/10, ragem/10); 
     835    if (needReportToTarget(chr)) 
     836        ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetName(), rage/10, ragem/10); 
    834837 
    835838    chr->SetMaxPower(POWER_RAGE,ragem ); 
     
    908911 
    909912    PSendSysMessage(LANG_YOU_CHANGE_FACTION, chr->GetGUIDLow(),factionid,flag,npcflag,dyflag); 
    910  
    911     //sprintf((char*)buf,"%s changed your Faction to %i.", m_session->GetPlayer()->GetName(), factionid); 
    912     //FillSystemMessageData(&data, m_session, buf); 
    913  
    914     //chr->GetSession()->SendPacket(&data); 
    915913 
    916914    chr->setFaction(factionid); 
     
    959957 
    960958    PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName()); 
    961     if(chr != m_session->GetPlayer()) 
    962         ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, m_session->GetPlayer()->GetName(), spellflatid, val, mark); 
     959    if (needReportToTarget(chr)) 
     960        ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetName(), spellflatid, val, mark); 
    963961 
    964962    WorldPacket data(SMSG_SET_FLAT_SPELL_MODIFIER, (1+1+2+2)); 
     
    10161014        chr->SetTaxiCheater(true); 
    10171015        PSendSysMessage(LANG_YOU_GIVE_TAXIS, chr->GetName()); 
    1018  
    1019         if(chr != m_session->GetPlayer()) 
    1020             // to send localized data to target 
    1021             ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_TAXIS_ADDED), m_session->GetPlayer()->GetName()); 
     1016        if (needReportToTarget(chr)) 
     1017            ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, GetName()); 
    10221018        return true; 
    10231019    } 
     
    10271023        chr->SetTaxiCheater(false); 
    10281024        PSendSysMessage(LANG_YOU_REMOVE_TAXIS, chr->GetName()); 
    1029  
    1030         if(chr != m_session->GetPlayer()) 
    1031             ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_TAXIS_REMOVED), m_session->GetPlayer()->GetName()); 
     1025        if (needReportToTarget(chr)) 
     1026            ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, GetName()); 
    10321027 
    10331028        return true; 
     
    10701065 
    10711066    PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chr->GetName()); 
    1072  
    1073     if(chr != m_session->GetPlayer()) 
    1074         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_ASPEED_CHANGED), m_session->GetPlayer()->GetName(), ASpeed); 
     1067    if (needReportToTarget(chr)) 
     1068        ChatHandler(chr).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, GetName(), ASpeed); 
    10751069 
    10761070    chr->SetSpeed(MOVE_WALK,    ASpeed,true); 
     
    11131107 
    11141108    PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, chr->GetName()); 
    1115  
    1116     if(chr != m_session->GetPlayer()) 
    1117         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SPEED_CHANGED), m_session->GetPlayer()->GetName(), Speed); 
     1109    if (needReportToTarget(chr)) 
     1110        ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, GetName(), Speed); 
    11181111 
    11191112    chr->SetSpeed(MOVE_RUN,Speed,true); 
     
    11531146 
    11541147    PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chr->GetName()); 
    1155  
    1156     if(chr != m_session->GetPlayer()) 
    1157         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SWIM_SPEED_CHANGED), m_session->GetPlayer()->GetName(), Swim); 
     1148    if (needReportToTarget(chr)) 
     1149        ChatHandler(chr).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, GetName(), Swim); 
    11581150 
    11591151    chr->SetSpeed(MOVE_SWIM,Swim,true); 
     
    11931185 
    11941186    PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chr->GetName()); 
    1195  
    1196     if(chr != m_session->GetPlayer()) 
    1197         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_BACK_SPEED_CHANGED), m_session->GetPlayer()->GetName(), BSpeed); 
     1187    if (needReportToTarget(chr)) 
     1188        ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetName(), BSpeed); 
    11981189 
    11991190    chr->SetSpeed(MOVE_WALKBACK,BSpeed,true); 
     
    12261217 
    12271218    PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, chr->GetName()); 
    1228  
    1229     if(chr != m_session->GetPlayer()) 
    1230         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_FLY_SPEED_CHANGED), m_session->GetPlayer()->GetName(), FSpeed); 
     1219    if (needReportToTarget(chr)) 
     1220        ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed); 
    12311221 
    12321222    chr->SetSpeed(MOVE_FLY,FSpeed,true); 
     
    12581248 
    12591249    PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName()); 
    1260  
    1261     if(chr != m_session->GetPlayer()) 
    1262         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_SIZE_CHANGED), m_session->GetPlayer()->GetName(), Scale); 
     1250    if (needReportToTarget(chr)) 
     1251        ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetName(), Scale); 
    12631252 
    12641253    chr->SetFloatValue(OBJECT_FIELD_SCALE_X, Scale); 
     
    15021491 
    15031492    PSendSysMessage(LANG_YOU_GIVE_MOUNT, chr->GetName()); 
    1504  
    1505     if(chr != m_session->GetPlayer()) 
    1506         ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_MOUNT_GIVED), m_session->GetPlayer()->GetName()); 
     1493    if (needReportToTarget(chr)) 
     1494        ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetName()); 
    15071495 
    15081496    chr->SetUInt32Value( UNIT_FIELD_FLAGS , 0x001000 ); 
     
    15511539        { 
    15521540            PSendSysMessage(LANG_YOU_TAKE_ALL_MONEY, chr->GetName()); 
    1553  
    1554             if(chr != m_session->GetPlayer()) 
    1555                 ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_ALL_MONEY_GONE), m_session->GetPlayer()->GetName()); 
     1541            if (needReportToTarget(chr)) 
     1542                ChatHandler(chr).PSendSysMessage(LANG_YOURS_ALL_MONEY_GONE, GetName()); 
    15561543 
    15571544            chr->SetMoney(0); 
     
    15601547        { 
    15611548            PSendSysMessage(LANG_YOU_TAKE_MONEY, abs(addmoney), chr->GetName()); 
    1562             if(chr != m_session->GetPlayer()) 
    1563                 ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_MONEY_TAKEN), m_session->GetPlayer()->GetName(), abs(addmoney)); 
     1549            if (needReportToTarget(chr)) 
     1550                ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_TAKEN, GetName(), abs(addmoney)); 
    15641551            chr->SetMoney( newmoney ); 
    15651552        } 
     
    15681555    { 
    15691556        PSendSysMessage(LANG_YOU_GIVE_MONEY, addmoney, chr->GetName()); 
    1570         if(chr != m_session->GetPlayer()) 
    1571             ChatHandler(chr).PSendSysMessage(ChatHandler(chr).GetTrinityString(LANG_YOURS_MONEY_GIVEN), m_session->GetPlayer()->GetName(), addmoney); 
     1557        if (needReportToTarget(chr)) 
     1558            ChatHandler(chr).PSendSysMessage(LANG_YOURS_MONEY_GIVEN, GetName(), addmoney); 
    15721559        chr->ModifyMoney( addmoney ); 
    15731560    } 
     
    16621649    // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r 
    16631650    GameTele const* tele = extractGameTeleFromLink((char*)args); 
     1651 
    16641652    if (!tele) 
    16651653    { 
     
    20752063 
    20762064        PSendSysMessage(LANG_TELEPORTING_TO, chr->GetName(),"", tele->name.c_str()); 
    2077  
    2078         if (m_session) 
    2079                 { 
    2080                         if(m_session->GetPlayer()->IsVisibleGloballyFor(chr)) 
    2081                                 ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName()); 
    2082                 } 
    2083                 else 
    2084                         ChatHandler(chr).SendSysMessage(LANG_TELEPORTED_TO_BY_CONSOLE); 
     2065        if (needReportToTarget(chr)) 
     2066            ChatHandler(chr).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName()); 
    20852067 
    20862068        // stop flight if need 
     
    21592141 
    21602142        PSendSysMessage(LANG_TELEPORTING_TO, pl->GetName(),"", tele->name.c_str()); 
    2161  
    2162         if (m_session->GetPlayer() != pl && m_session->GetPlayer()->IsVisibleGloballyFor(pl)) 
    2163             ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, m_session->GetPlayer()->GetName()); 
     2143        if (needReportToTarget(pl)) 
     2144            ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetName()); 
    21642145 
    21652146        // stop flight if need 
     
    22532234 
    22542235        PSendSysMessage(LANG_SUMMONING, pl->GetName(),""); 
    2255  
    2256         if (m_session->GetPlayer()->IsVisibleGloballyFor(pl)) 
    2257             ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, m_session->GetPlayer()->GetName()); 
     2236        if (needReportToTarget(pl)) 
     2237            ChatHandler(pl).PSendSysMessage(LANG_SUMMONED_BY, GetName()); 
    22582238 
    22592239        // stop flight if need 
  • trunk/src/game/Level2.cpp

    r112 r132  
    4444#include <map> 
    4545#include "GlobalEvents.h" 
     46 
     47#include "TargetedMovementGenerator.h"                      // for HandleNpcUnFollowCommand 
    4648 
    4749static uint32 ReputationRankStrIndex[MAX_REPUTATION_RANK] = 
     
    40534055        return true; 
    40544056} 
     4057 
     4058bool ChatHandler::HandleRepairitemsCommand(const char* /*args*/) 
     4059{ 
     4060    Player *target = getSelectedPlayer(); 
     4061 
     4062    if(!target) 
     4063    { 
     4064        PSendSysMessage(LANG_NO_CHAR_SELECTED); 
     4065        SetSentErrorMessage(true); 
     4066        return false; 
     4067        } 
     4068 
     4069    // Repair items 
     4070    target->DurabilityRepairAll(false, 0, false); 
     4071 
     4072    PSendSysMessage(LANG_YOU_REPAIR_ITEMS, target->GetName()); 
     4073    if(needReportToTarget(target)) 
     4074        ChatHandler(target).PSendSysMessage(LANG_YOUR_ITEMS_REPAIRED, GetName()); 
     4075    return true; 
     4076} 
     4077 
     4078bool ChatHandler::HandleNpcFollowCommand(const char* /*args*/) 
     4079{ 
     4080    Player *player = m_session->GetPlayer(); 
     4081    Creature *creature = getSelectedCreature(); 
     4082 
     4083    if(!creature) 
     4084    { 
     4085        PSendSysMessage(LANG_SELECT_CREATURE); 
     4086        SetSentErrorMessage(true); 
     4087        return false; 
     4088    } 
     4089 
     4090    // Follow player - Using pet's default dist and angle 
     4091    creature->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); 
     4092 
     4093    PSendSysMessage(LANG_CREATURE_FOLLOW_YOU_NOW, creature->GetName()); 
     4094    return true; 
     4095} 
     4096 
     4097bool ChatHandler::HandleNpcUnFollowCommand(const char* /*args*/) 
     4098{ 
     4099    Player *player = m_session->GetPlayer(); 
     4100    Creature *creature = getSelectedCreature(); 
     4101 
     4102    if(!creature) 
     4103    { 
     4104        PSendSysMessage(LANG_SELECT_CREATURE); 
     4105        SetSentErrorMessage(true); 
     4106        return false; 
     4107    } 
     4108 
     4109    if (creature->GetMotionMaster()->empty() || 
     4110        creature->GetMotionMaster()->GetCurrentMovementGeneratorType ()!=TARGETED_MOTION_TYPE) 
     4111    { 
     4112        PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU); 
     4113        SetSentErrorMessage(true); 
     4114        return false; 
     4115    } 
     4116 
     4117    TargetedMovementGenerator<Creature> const* mgen 
     4118        = static_cast<TargetedMovementGenerator<Creature> const*>((creature->GetMotionMaster()->top())); 
     4119 
     4120    if(mgen->GetTarget()!=player) 
     4121    { 
     4122        PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU); 
     4123        SetSentErrorMessage(true); 
     4124        return false; 
     4125    } 
     4126 
     4127    // reset movement 
     4128    creature->GetMotionMaster()->MovementExpired(true); 
     4129 
     4130    PSendSysMessage(LANG_CREATURE_NOT_FOLLOW_YOU_NOW, creature->GetName()); 
     4131    return true; 
     4132} 
  • trunk/src/game/Level3.cpp

    r112 r132  
    748748    if(targetPlayer) 
    749749    { 
    750         ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,m_session->GetPlayer()->GetName(), gm); 
     750        ChatHandler(targetPlayer).PSendSysMessage(LANG_YOURS_SECURITY_CHANGED,GetName(), gm); 
    751751        targetPlayer->GetSession()->SetSecurity(gm); 
    752752    } 
     
    37293729    { 
    37303730        PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, chr->GetName()); 
    3731         if(chr!=m_session->GetPlayer()) 
    3732             ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,m_session->GetPlayer()->GetName()); 
     3731        if (needReportToTarget(chr)) 
     3732            ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL,GetName()); 
    37333733    } 
    37343734    else 
    37353735    { 
    37363736        PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, chr->GetName()); 
    3737         if(chr!=m_session->GetPlayer()) 
    3738             ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,m_session->GetPlayer()->GetName()); 
     3737        if (needReportToTarget(chr)) 
     3738            ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING,GetName()); 
    37393739    } 
    37403740 
     
    37713771 
    37723772    return true; 
     3773} 
     3774 
     3775bool ChatHandler::HandleWaterwalkCommand(const char* args) 
     3776{ 
     3777    if(!args) 
     3778        return false; 
     3779 
     3780    Player *player = getSelectedPlayer(); 
     3781    if(!player) 
     3782    { 
     3783        PSendSysMessage(LANG_NO_CHAR_SELECTED); 
     3784        SetSentErrorMessage(true); 
     3785        return false; 
     3786    } 
     3787         
     3788    if (strncmp(args, "on", 3) == 0) 
     3789        player->SetMovement(MOVE_WATER_WALK);               // ON 
     3790    else if (strncmp(args, "off", 4) == 0) 
     3791        player->SetMovement(MOVE_LAND_WALK);                // OFF 
     3792    else 
     3793    { 
     3794        SendSysMessage(LANG_USE_BOL); 
     3795        return false; 
     3796    } 
     3797 
     3798    PSendSysMessage(LANG_YOU_SET_WATERWALK, args, player->GetName()); 
     3799    if(needReportToTarget(player)) 
     3800        ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, GetName()); 
     3801    return true; 
     3802 
    37733803} 
    37743804 
  • trunk/src/game/MapManager.cpp

    r102 r132  
    166166                    // probably there must be special opcode, because client has this string constant in GlobalStrings.lua 
    167167                    // TODO: this is not a good place to send the message 
    168                     player->GetSession()->SendAreaTriggerMessage("You must be in a raid group to enter %s instance", mapName); 
     168                    player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(810), mapName); 
    169169                    sLog.outDebug("MAP: Player '%s' must be in a raid group to enter instance of '%s'", player->GetName(), mapName); 
    170170                    return false; 
     
    198198                if (!instance_map) 
    199199                { 
    200                     player->GetSession()->SendAreaTriggerMessage("You cannot enter %s while in a ghost mode", mapName); 
     200                    player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(811), mapName); 
    201201                    sLog.outDebug("MAP: Player '%s' doesn't has a corpse in instance '%s' and can't enter", player->GetName(), mapName); 
    202202                    return false;