From e4daaaedb16013b10c6de8e91ca92c6753c1e36e Mon Sep 17 00:00:00 2001 From: "False.Genesis" Date: Thu, 2 Apr 2009 23:30:27 +0200 Subject: [PATCH 1/6] [7610] Fixed problems with Aura::HandleMosPossess for players --- src/game/SpellAuras.cpp | 17 ++++++++++++----- src/game/Unit.cpp | 6 +++--- src/shared/revision_nr.h | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index ea3e83715..c60809ec0 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3067,21 +3067,28 @@ void Aura::HandleModPossess(bool apply, bool Real) m_target->StopMoving(); m_target->GetMotionMaster()->Clear(); m_target->GetMotionMaster()->MoveIdle(); - CharmInfo *charmInfo = ((Creature*)m_target)->InitCharmInfo(m_target); - charmInfo->InitPossessCreateSpells(); + } + else if(m_target->GetTypeId() == TYPEID_PLAYER) + { + ((Player*)m_target)->SetClientControl(m_target, 0); } + if(CharmInfo *charmInfo = m_target->InitCharmInfo(m_target)) + charmInfo->InitPossessCreateSpells(); + if(caster->GetTypeId() == TYPEID_PLAYER) - { ((Player*)caster)->PossessSpellInitialize(); - } } else { m_target->SetCharmerGUID(0); + caster->InterruptSpell(CURRENT_CHANNELED_SPELL); // the spell is not automatically canceled when interrupted, do it now if(m_target->GetTypeId() == TYPEID_PLAYER) + { ((Player*)m_target)->setFactionForRace(m_target->getRace()); + ((Player*)m_target)->SetClientControl(m_target, 1); + } else if(m_target->GetTypeId() == TYPEID_UNIT) { CreatureInfo const *cinfo = ((Creature*)m_target)->GetCreatureInfo(); @@ -3185,7 +3192,7 @@ void Aura::HandleModCharm(bool apply, bool Real) if(m_target->GetTypeId() == TYPEID_UNIT) { ((Creature*)m_target)->AIM_Initialize(); - CharmInfo *charmInfo = ((Creature*)m_target)->InitCharmInfo(m_target); + CharmInfo *charmInfo = m_target->InitCharmInfo(m_target); charmInfo->InitCharmCreateSpells(); charmInfo->SetReactState( REACT_DEFENSIVE ); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e3c46f3d5..c00003d1b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10177,11 +10177,11 @@ void CharmInfo::InitEmptyActionBar() void CharmInfo::InitPossessCreateSpells() { - if(m_unit->GetTypeId() == TYPEID_PLAYER) - return; - InitEmptyActionBar(); //charm action bar + if(m_unit->GetTypeId() == TYPEID_PLAYER) //possessed players don't have spells, keep the action bar empty + return; + for(uint32 x = 0; x < CREATURE_MAX_SPELLS; ++x) { if (IsPassiveSpell(((Creature*)m_unit)->m_spells[x])) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2b70281bf..760ca52b7 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 "7609" + #define REVISION_NR "7610" #endif // __REVISION_NR_H__ From 485eb8adb1cedd0d987c6629789fabf75bd2565f Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 4 Apr 2009 00:55:31 +0400 Subject: [PATCH 2/6] [7611] Prevent casting owner spell/use item or gameobject by mind controlled player or creature. This also prevent some crashes in like wrong case. --- src/game/SpellHandler.cpp | 71 ++++++++++++++++++++++++++++++++++----- src/shared/revision_nr.h | 2 +- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index b6122c7c8..6c6cd79d0 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -34,6 +34,11 @@ void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) CHECK_PACKET_SIZE(recvPacket,1+1+1+4+8+4+1); Player* pUser = _player; + + // ignore for remote control state + if(pUser->m_mover != pUser) + return; + uint8 bagIndex, slot; uint8 unk_flags; // flags (if 0x02 - some additional data are received) uint8 cast_count; // next cast if exists (single or not) @@ -138,6 +143,11 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) sLog.outDetail("WORLD: CMSG_OPEN_ITEM packet, data length = %i",(uint32)recvPacket.size()); Player* pUser = _player; + + // ignore for remote control state + if(pUser->m_mover != pUser) + return; + uint8 bagIndex, slot; recvPacket >> bagIndex >> slot; @@ -215,6 +225,11 @@ void WorldSession::HandleGameObjectUseOpcode( WorldPacket & recv_data ) recv_data >> guid; sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_USE Message [guid=%u]", GUID_LOPART(guid)); + + // ignore for remote control state + if(_player->m_mover != _player) + return; + GameObject *obj = ObjectAccessor::GetGameObject(*_player, guid); if(!obj) @@ -235,6 +250,10 @@ void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket) sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_REPORT_USE Message [in game guid: %u]", GUID_LOPART(guid)); + // ignore for remote control state + if(_player->m_mover != _player) + return; + GameObject* go = ObjectAccessor::GetGameObject(*_player,guid); if(!go) return; @@ -255,6 +274,11 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) recvPacket >> spellId; recvPacket >> unk_flags; // flags (if 0x02 - some additional data are received) + // ignore for remote control state (for player case) + Unit* mover = _player->m_mover; + if(mover != _player && mover->GetTypeId()==TYPEID_PLAYER) + return; + sLog.outDebug("WORLD: got cast spell packet, spellId - %u, cast_count: %u, unk_flags %u, data length = %i", spellId, cast_count, unk_flags, (uint32)recvPacket.size()); @@ -266,16 +290,28 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) return; } - // not have spell in spellbook or spell passive and not casted by client - if ( !_player->HasActiveSpell (spellId) || IsPassiveSpell(spellId) ) + if(mover->GetTypeId()==TYPEID_PLAYER) { - //cheater? kick? ban? - return; + // not have spell in spellbook or spell passive and not casted by client + if (!((Player*)mover)->HasActiveSpell (spellId) || IsPassiveSpell(spellId) ) + { + //cheater? kick? ban? + return; + } + } + else + { + // not have spell in spellbook or spell passive and not casted by client + if (!((Creature*)mover)->HasSpell(spellId) || IsPassiveSpell(spellId) ) + { + //cheater? kick? ban? + return; + } } // client provided targets SpellCastTargets targets; - if(!targets.read(&recvPacket,_player)) + if(!targets.read(&recvPacket,mover)) return; // auto-selection buff level base at target level (in spellInfo) @@ -288,7 +324,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) spellInfo = actualSpellInfo; } - Spell *spell = new Spell(_player, spellInfo, false); + Spell *spell = new Spell(mover, spellInfo, false); spell->m_cast_count = cast_count; // set count of casts spell->prepare(&targets); } @@ -297,6 +333,11 @@ void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket,5); + // ignore for remote control state (for player case) + Unit* mover = _player->m_mover; + if(mover != _player && mover->GetTypeId()==TYPEID_PLAYER) + return; + // increments with every CANCEL packet, don't use for now uint8 counter; uint32 spellId; @@ -307,14 +348,18 @@ void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket) if(spellId==26679) return; - if(_player->IsNonMeleeSpellCasted(false)) - _player->InterruptNonMeleeSpells(false,spellId); + if(mover->IsNonMeleeSpellCasted(false)) + mover->InterruptNonMeleeSpells(false,spellId); } void WorldSession::HandleCancelAuraOpcode( WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket,4); + // ignore for remote control state + if(_player->m_mover != _player) + return; + uint32 spellId; recvPacket >> spellId; @@ -349,6 +394,10 @@ void WorldSession::HandlePetCancelAuraOpcode( WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 8+4); + // ignore for remote control state + if(_player->m_mover != _player) + return; + uint64 guid; uint32 spellId; @@ -396,7 +445,7 @@ void WorldSession::HandleCancelAutoRepeatSpellOpcode( WorldPacket& /*recvPacket* { // may be better send SMSG_CANCEL_AUTO_REPEAT? // cancel and prepare for deleting - _player->InterruptSpell(CURRENT_AUTOREPEAT_SPELL); + _player->m_mover->InterruptSpell(CURRENT_AUTOREPEAT_SPELL); } /// \todo Complete HandleCancelChanneling function @@ -414,6 +463,10 @@ void WorldSession::HandleTotemDestroy( WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); + // ignore for remote control state + if(_player->m_mover != _player) + return; + uint8 slotId; recvPacket >> slotId; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 760ca52b7..47fc934f9 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 "7610" + #define REVISION_NR "7611" #endif // __REVISION_NR_H__ From 02247d411b18b2147f3f345a566ff63ab62ab39e Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Sat, 4 Apr 2009 03:01:32 +0400 Subject: [PATCH 3/6] [7612] Move SMSG_TRIGGER_CINEMATIC and SMSG_TRIGGER_MOVIE to functions and use its instead explicit packet creating. Signed-off-by: VladimirMangos --- src/game/CharacterHandler.cpp | 16 ++++------------ src/game/GameObject.cpp | 9 +++------ src/game/Player.cpp | 14 ++++++++++++++ src/game/Player.h | 3 +++ src/shared/revision_nr.h | 2 +- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index c2c384ac9..3edc81f15 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -699,18 +699,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder) if(ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(pCurrChar->getClass())) { - if(cEntry->CinematicSequence) - { - data.Initialize(SMSG_TRIGGER_CINEMATIC, 4); - data << uint32(cEntry->CinematicSequence); - SendPacket( &data ); - } - else if(ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace())) - { - data.Initialize(SMSG_TRIGGER_CINEMATIC, 4); - data << uint32(rEntry->CinematicSequence); - SendPacket( &data ); - } + if (cEntry->CinematicSequence) + pCurrChar->SendCinematicStart(cEntry->CinematicSequence); + else if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace())) + pCurrChar->SendCinematicStart(rEntry->CinematicSequence); } } diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index ab98b6e85..d8671b05f 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -976,12 +976,9 @@ void GameObject::Use(Unit* user) Player* player = (Player*)user; - if(info->camera.cinematicId) - { - WorldPacket data(SMSG_TRIGGER_CINEMATIC, 4); - data << info->camera.cinematicId; - player->GetSession()->SendPacket(&data); - } + if (info->camera.cinematicId) + player->SendCinematicStart(info->camera.cinematicId); + return; } //fishing bobber diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 7faf4cdd0..ed5710436 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5494,6 +5494,20 @@ void Player::SendDirectMessage(WorldPacket *data) GetSession()->SendPacket(data); } +void Player::SendCinematicStart(uint32 CinematicSequenceId) +{ + WorldPacket data(SMSG_TRIGGER_CINEMATIC, 4); + data << uint32(CinematicSequenceId); + SendDirectMessage(&data); +} + +void Player::SendMovieStart(uint32 MovieId) +{ + WorldPacket data(SMSG_TRIGGER_MOVIE, 4); + data << uint32(MovieId); + SendDirectMessage(&data); +} + void Player::CheckExploreSystem() { if (!isAlive()) diff --git a/src/game/Player.h b/src/game/Player.h index 8dc020ec8..cc71fa579 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1977,6 +1977,9 @@ class MANGOS_DLL_SPEC Player : public Unit uint32 GetOldPetSpell() const { return m_oldpetspell; } void SetOldPetSpell(uint32 petspell) { m_oldpetspell = petspell; } + void SendCinematicStart(uint32 CinematicSequenceId); + void SendMovieStart(uint32 MovieId); + /*********************************************************/ /*** INSTANCE SYSTEM ***/ /*********************************************************/ diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 47fc934f9..8355515a6 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 "7611" + #define REVISION_NR "7612" #endif // __REVISION_NR_H__ From 8fe9008132300fc3733d3b4bfabe821b47a2490c Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 4 Apr 2009 04:23:19 +0400 Subject: [PATCH 4/6] [7613] Sort and rename functions for GM commands in code. --- src/game/Chat.cpp | 4 ++-- src/game/Chat.h | 13 +++++++------ src/game/Level1.cpp | 2 +- src/game/Level3.cpp | 2 +- src/shared/revision_nr.h | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 4fd0277f8..aa51092ba 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -148,11 +148,11 @@ ChatCommand * ChatHandler::getCommandTable() static ChatCommand gmCommandTable[] = { { "chat", SEC_MODERATOR, false, &ChatHandler::HandleGMChatCommand, "", NULL }, + { "fly", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMFlyCommand, "", NULL }, { "ingame", SEC_PLAYER, true, &ChatHandler::HandleGMListIngameCommand, "", NULL }, { "list", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMListFullCommand, "", NULL }, { "visible", SEC_MODERATOR, false, &ChatHandler::HandleGMVisibleCommand, "", NULL }, - { "fly", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMFlyModeCommand, "", NULL }, - { "", SEC_MODERATOR, false, &ChatHandler::HandleGMmodeCommand, "", NULL }, + { "", SEC_MODERATOR, false, &ChatHandler::HandleGMCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index 656cd34c8..7b3f44de8 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -100,8 +100,6 @@ class ChatHandler bool HandleStartCommand(const char* args); bool HandleDismountCommand(const char* args); bool HandleSaveCommand(const char* args); - bool HandleGMListIngameCommand(const char* args); - bool HandleGMListFullCommand(const char* args); bool HandleNamegoCommand(const char* args); bool HandleGonameCommand(const char* args); @@ -109,9 +107,6 @@ class ChatHandler bool HandleRecallCommand(const char* args); bool HandleAnnounceCommand(const char* args); bool HandleNotifyCommand(const char* args); - bool HandleGMmodeCommand(const char* args); - bool HandleGMChatCommand(const char* args); - bool HandleGMVisibleCommand(const char* args); bool HandleGPSCommand(const char* args); bool HandleTaxiCheatCommand(const char* args); bool HandleWhispersCommand(const char* args); @@ -127,6 +122,13 @@ class ChatHandler bool HandleEventStopCommand(const char* args); bool HandleEventInfoCommand(const char* args); + bool HandleGMCommand(const char* args); + bool HandleGMChatCommand(const char* args); + bool HandleGMFlyCommand(const char* args); + bool HandleGMListFullCommand(const char* args); + bool HandleGMListIngameCommand(const char* args); + bool HandleGMVisibleCommand(const char* args); + bool HandleLearnCommand(const char* args); bool HandleLearnAllCommand(const char* args); bool HandleLearnAllGMCommand(const char* args); @@ -412,7 +414,6 @@ class ChatHandler bool HandleWpShowCommand(const char* args); bool HandleWpExportCommand(const char* args); bool HandleWpImportCommand(const char* args); - bool HandleGMFlyModeCommand(const char* args); bool HandleDebugSendOpcodeCommand(const char* args); bool HandleDebugSellErrorCommand(const char* args); bool HandleDebugBuyErrorCommand(const char* args); diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index c630dedbf..30efd6464 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -149,7 +149,7 @@ bool ChatHandler::HandleNotifyCommand(const char* args) } //Enable\Dissable GM Mode -bool ChatHandler::HandleGMmodeCommand(const char* args) +bool ChatHandler::HandleGMCommand(const char* args) { if(!*args) { diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index af451ebc0..8c9bbc483 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -5609,7 +5609,7 @@ bool ChatHandler::HandleRespawnCommand(const char* /*args*/) return true; } -bool ChatHandler::HandleGMFlyModeCommand(const char* args) +bool ChatHandler::HandleGMFlyCommand(const char* args) { if (!*args) return false; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8355515a6..e7b2caf6d 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 "7612" + #define REVISION_NR "7613" #endif // __REVISION_NR_H__ From db2027feb06f5966d5169f15f73f5074a8a55ac8 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 4 Apr 2009 06:22:21 +0400 Subject: [PATCH 5/6] [7614] Sort/rename debug commands, Move packet send commands to new ".debug send " subcommands list. Also drop not implemented .debug inarc Add to .debug send spellfail support for up to 2 additional args for spell fail packet. --- src/game/Chat.cpp | 47 ++++++++++++++++++---------------- src/game/Chat.h | 54 ++++++++++++++++++++-------------------- src/game/Level2.cpp | 11 -------- src/game/debugcmds.cpp | 50 ++++++++++++++++++++++--------------- src/shared/revision_nr.h | 2 +- 5 files changed, 84 insertions(+), 80 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index aa51092ba..d364b955b 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -105,34 +105,39 @@ ChatCommand * ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand debugCommandTable[] = + static ChatCommand debugSendCommandTable[] = { - { "inarc", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugInArcCommand, "", NULL }, - { "spellfail", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpellFailCommand, "", NULL }, - { "setpoi", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetPoiCommand, "", NULL }, + { "buyerror", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendBuyErrorCommand, "", NULL }, + { "channelnotify", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChannelNotifyCommand, "", NULL }, + { "chatmmessage", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChatMsgCommand, "", NULL }, + { "equiperror", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendEquipErrorCommand, "", NULL }, + { "largepacket", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendLargePacketCommand, "", NULL }, + { "opcode", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendOpcodeCommand, "", NULL }, + { "poi", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendPoiCommand, "", NULL }, { "qpartymsg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendQuestPartyMsgCommand, "", NULL }, { "qinvalidmsg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendQuestInvalidMsgCommand, "", NULL }, - { "equiperr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugEquipErrorCommand, "", NULL }, - { "sellerr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSellErrorCommand, "", NULL }, - { "buyerr", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugBuyErrorCommand, "", NULL }, - { "sendopcode", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendOpcodeCommand, "", NULL }, - { "spawnvehicle", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpawnVehicle, "", NULL }, - { "uws", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugUpdateWorldStateCommand, "", NULL }, - { "scn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChannelNotifyCommand, "", NULL }, - { "scm", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendChatMsgCommand, "", NULL }, - { "sps", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendSetPhaseShiftCommand, "", NULL }, - { "getitemstate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetItemState, "", NULL }, - { "playsound", SEC_MODERATOR, false, &ChatHandler::HandleDebugPlaySoundCommand, "", NULL }, - { "update", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugUpdate, "", NULL }, - { "setvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetValue, "", NULL }, - { "getvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetValue, "", NULL }, - { "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugMod32Value, "", NULL }, + { "sellerror", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendSellErrorCommand, "", NULL }, + { "setphaseshift", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendSetPhaseShiftCommand, "", NULL }, + { "spellfail", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendSpellFailCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand debugCommandTable[] = + { { "anim", SEC_GAMEMASTER, false, &ChatHandler::HandleDebugAnimCommand, "", NULL }, - { "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleDebugGetLootRecipient, "", NULL }, { "arena", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugArenaCommand, "", NULL }, { "bg", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugBattlegroundCommand, "", NULL }, - { "sendlargepacket",SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSendLargePacketCommand, "", NULL }, + { "getitemstate", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetItemState, "", NULL }, + { "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleDebugGetLootRecipient, "", NULL }, + { "getvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugGetValue, "", NULL }, + { "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugMod32Value, "", NULL }, + { "playsound", SEC_MODERATOR, false, &ChatHandler::HandleDebugPlaySoundCommand, "", NULL }, + { "send", SEC_ADMINISTRATOR, false, NULL, "", debugSendCommandTable }, { "setitemflag", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetItemFlagCommand, "", NULL }, + { "setvalue", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSetValue, "", NULL }, + { "spawnvehicle", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSpawnVehicle, "", NULL }, + { "uws", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugUpdateWorldStateCommand, "", NULL }, + { "update", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugUpdate, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index 7b3f44de8..c561e922e 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -117,6 +117,33 @@ class ChatHandler bool HandleSendMailCommand(const char* args); bool HandleSendMoneyCommand(const char* args); + bool HandleDebugAnimCommand(const char* args); + bool HandleDebugArenaCommand(const char * args); + bool HandleDebugBattlegroundCommand(const char * args); + bool HandleDebugGetItemState(const char * args); + bool HandleDebugGetLootRecipient(const char * args); + bool HandleDebugGetValue(const char* args); + bool HandleDebugMod32Value(const char* args); + bool HandleDebugPlaySoundCommand(const char* args); + bool HandleDebugSetValue(const char* args); + bool HandleDebugSetItemFlagCommand(const char * args); + bool HandleDebugSpawnVehicle(const char * args); + bool HandleDebugUpdate(const char* args); + bool HandleDebugUpdateWorldStateCommand(const char* args); + + bool HandleDebugSendBuyErrorCommand(const char* args); + bool HandleDebugSendChannelNotifyCommand(const char* args); + bool HandleDebugSendChatMsgCommand(const char* args); + bool HandleDebugSendEquipErrorCommand(const char* args); + bool HandleDebugSendLargePacketCommand(const char * args); + bool HandleDebugSendOpcodeCommand(const char* args); + bool HandleDebugSendPoiCommand(const char* args); + bool HandleDebugSendQuestPartyMsgCommand(const char* args); + bool HandleDebugSendQuestInvalidMsgCommand(const char* args); + bool HandleDebugSendSellErrorCommand(const char* args); + bool HandleDebugSendSetPhaseShiftCommand(const char * args); + bool HandleDebugSendSpellFailCommand(const char* args); + bool HandleEventActiveListCommand(const char* args); bool HandleEventStartCommand(const char* args); bool HandleEventStopCommand(const char* args); @@ -307,17 +334,10 @@ class ChatHandler bool HandleHonorUpdateCommand(const char* args); bool HandleLoadScriptsCommand(const char* args); - bool HandleDebugSendQuestPartyMsgCommand(const char* args); - bool HandleDebugSendQuestInvalidMsgCommand(const char* args); - - bool HandleDebugInArcCommand(const char* args); - bool HandleDebugSpellFailCommand(const char* args); bool HandleGUIDCommand(const char* args); bool HandleItemMoveCommand(const char* args); bool HandleDeMorphCommand(const char* args); - bool HandleDebugSetPoiCommand(const char* args); - bool HandleDebugEquipErrorCommand(const char* args); bool HandleGoCreatureCommand(const char* args); bool HandleGoObjectCommand(const char* args); bool HandleGoTriggerCommand(const char* args); @@ -357,8 +377,6 @@ class ChatHandler bool HandleUnLearnCommand(const char* args); bool HandleGetDistanceCommand(const char* args); bool HandleGameObjectAddCommand(const char* args); - bool HandleDebugAnimCommand(const char* args); - bool HandleDebugPlaySoundCommand(const char* args); bool HandleModifyStandStateCommand(const char* args); bool HandleDieCommand(const char* args); bool HandleDamageCommand(const char *args); @@ -381,7 +399,6 @@ class ChatHandler bool HandleGuildUninviteCommand(const char* args); bool HandleGuildRankCommand(const char* args); bool HandleGuildDeleteCommand(const char* args); - bool HandleDebugUpdate(const char* args); bool HandleBankCommand(const char* args); bool HandleChangeWeather(const char* args); bool HandleKickPlayerCommand(const char * args); @@ -414,12 +431,6 @@ class ChatHandler bool HandleWpShowCommand(const char* args); bool HandleWpExportCommand(const char* args); bool HandleWpImportCommand(const char* args); - bool HandleDebugSendOpcodeCommand(const char* args); - bool HandleDebugSellErrorCommand(const char* args); - bool HandleDebugBuyErrorCommand(const char* args); - bool HandleDebugUpdateWorldStateCommand(const char* args); - bool HandleDebugSendChannelNotifyCommand(const char* args); - bool HandleDebugSendChatMsgCommand(const char* args); bool HandleRenameCommand(const char * args); bool HandleCustomizeCommand(const char * args); bool HandlePDumpLoadCommand(const char *args); @@ -437,22 +448,11 @@ class ChatHandler bool HandleWaterwalkCommand(const char* args); //! Development Commands - bool HandleDebugSetValue(const char* args); - bool HandleDebugGetValue(const char* args); bool HandleSet32Bit(const char* args); - bool HandleDebugMod32Value(const char* args); bool HandleQuestAdd(const char * args); bool HandleQuestRemove(const char * args); bool HandleQuestComplete(const char * args); bool HandleSaveAllCommand(const char* args); - bool HandleDebugGetItemState(const char * args); - bool HandleDebugGetLootRecipient(const char * args); - bool HandleDebugArenaCommand(const char * args); - bool HandleDebugBattlegroundCommand(const char * args); - bool HandleDebugSpawnVehicle(const char * args); - bool HandleDebugSendLargePacketCommand(const char * args); - bool HandleDebugSendSetPhaseShiftCommand(const char * args); - bool HandleDebugSetItemFlagCommand(const char * args); Player* getSelectedPlayer(); Creature* getSelectedCreature(); diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index f49b586e7..014122cba 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -3774,17 +3774,6 @@ bool ChatHandler::HandleCustomizeCommand(const char* args) return true; } -//show animation -bool ChatHandler::HandleDebugAnimCommand(const char* args) -{ - if (!*args) - return false; - - uint32 anim_id = atoi((char*)args); - m_session->GetPlayer()->HandleEmoteCommand(anim_id); - return true; -} - //change standstate bool ChatHandler::HandleModifyStandStateCommand(const char* args) { diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index dbc8f4b2c..e964e28ce 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -31,22 +31,7 @@ #include #include "ObjectMgr.h" -bool ChatHandler::HandleDebugInArcCommand(const char* /*args*/) -{ - Object *obj = getSelectedUnit(); - - if(!obj) - { - SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - return true; - } - - SendSysMessage(LANG_NOT_IMPLEMENTED); - - return true; -} - -bool ChatHandler::HandleDebugSpellFailCommand(const char* args) +bool ChatHandler::HandleDebugSendSpellFailCommand(const char* args) { if(!args) return false; @@ -56,17 +41,31 @@ bool ChatHandler::HandleDebugSpellFailCommand(const char* args) return false; uint8 failnum = (uint8)atoi(px); + if(failnum==0 && *px!='0') + return false; + + char* p1 = strtok(NULL, " "); + uint8 failarg1 = p1 ? (uint8)atoi(p1) : 0; + + char* p2 = strtok(NULL, " "); + uint8 failarg2 = p2 ? (uint8)atoi(p2) : 0; + WorldPacket data(SMSG_CAST_FAILED, 5); data << uint8(0); data << uint32(133); data << uint8(failnum); + if(p1 || p2) + data << uint32(failarg1); + if(p2) + data << uint32(failarg2); + m_session->SendPacket(&data); return true; } -bool ChatHandler::HandleDebugSetPoiCommand(const char* args) +bool ChatHandler::HandleDebugSendPoiCommand(const char* args) { Player *pPlayer = m_session->GetPlayer(); Unit* target = getSelectedUnit(); @@ -92,7 +91,7 @@ bool ChatHandler::HandleDebugSetPoiCommand(const char* args) return true; } -bool ChatHandler::HandleDebugEquipErrorCommand(const char* args) +bool ChatHandler::HandleDebugSendEquipErrorCommand(const char* args) { if(!args) return false; @@ -102,7 +101,7 @@ bool ChatHandler::HandleDebugEquipErrorCommand(const char* args) return true; } -bool ChatHandler::HandleDebugSellErrorCommand(const char* args) +bool ChatHandler::HandleDebugSendSellErrorCommand(const char* args) { if(!args) return false; @@ -112,7 +111,7 @@ bool ChatHandler::HandleDebugSellErrorCommand(const char* args) return true; } -bool ChatHandler::HandleDebugBuyErrorCommand(const char* args) +bool ChatHandler::HandleDebugSendBuyErrorCommand(const char* args) { if(!args) return false; @@ -646,3 +645,14 @@ bool ChatHandler::HandleDebugSetItemFlagCommand(const char* args) return true; } + +//show animation +bool ChatHandler::HandleDebugAnimCommand(const char* args) +{ + if (!*args) + return false; + + uint32 anim_id = atoi((char*)args); + m_session->GetPlayer()->HandleEmoteCommand(anim_id); + return true; +} diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index e7b2caf6d..184164b31 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 "7613" + #define REVISION_NR "7614" #endif // __REVISION_NR_H__ From a9dbe0f6618c48c07142b004f06b232ecc963c86 Mon Sep 17 00:00:00 2001 From: tomrus88 Date: Sun, 22 Mar 2009 10:12:11 +0300 Subject: [PATCH 6/6] Removed some outdated comments --- src/game/Chat.cpp | 2 +- src/game/Unit.cpp | 25 ++++++------------------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index d364b955b..392c0f595 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -210,7 +210,7 @@ ChatCommand * ChatHandler::getCommandTable() { "listbinds", SEC_ADMINISTRATOR, false, &ChatHandler::HandleInstanceListBindsCommand, "", NULL }, { "unbind", SEC_ADMINISTRATOR, false, &ChatHandler::HandleInstanceUnbindCommand, "", NULL }, { "stats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleInstanceStatsCommand, "", NULL }, - { "savedata", SEC_ADMINISTRATOR, false, &ChatHandler::HandleInstanceSaveDataCommand, "", NULL }, + { "savedata", SEC_ADMINISTRATOR, false, &ChatHandler::HandleInstanceSaveDataCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index c00003d1b..c980d424e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -260,38 +260,32 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 ty WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) ); data.append(GetPackGUID()); - // Point A, starting location data << GetPositionX() << GetPositionY() << GetPositionZ(); - // unknown field - unrelated to orientation - // seems to increment about 1000 for every 1.7 seconds - // for now, we'll just use mstime - data << getMSTime(); + data << uint32(getMSTime()); data << uint8(type); // unknown switch(type) { case 0: // normal packet break; - case 1: // stop packet + case 1: // stop packet (raw pos?) SendMessageToSet( &data, true ); return; - case 2: // not used currently + case 2: // facing spot, not used currently data << float(0); data << float(0); data << float(0); break; case 3: // not used currently - data << uint64(0); // probably target guid + data << uint64(0); // probably target guid (facing target?) break; case 4: // not used currently - data << float(0); // probably orientation + data << float(0); // facing angle break; } - //Movement Flags (0x0 = walk, 0x100 = run, 0x200 = fly/swim) data << uint32(MovementFlags); - - data << Time; // Time in between points + data << uint32(Time); // Time in between points data << uint32(1); // 1 single waypoint data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B @@ -312,19 +306,12 @@ void Unit::SendMonsterMoveByPath(Path const& path, uint32 start, uint32 end, uin data << GetPositionX(); data << GetPositionY(); data << GetPositionZ(); - - // unknown field - unrelated to orientation - // seems to increment about 1000 for every 1.7 seconds - // for now, we'll just use mstime data << getMSTime(); - data << uint8( 0 ); data << uint32( MovementFlags ); data << uint32( traveltime ); data << uint32( pathSize ); data.append( (char*)path.GetNodes(start), pathSize * 4 * 3 ); - - //WPAssert( data.size() == 37 + pathnodes.Size( ) * 4 * 3 ); SendMessageToSet(&data, true); }