diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 2ce9d76fa..4c161f4df 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/Chat.cpp b/src/game/Chat.cpp index 0d8e6c8c0..809c21558 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 } }; @@ -148,11 +153,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..c561e922e 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); @@ -122,11 +117,45 @@ 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); 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); @@ -305,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); @@ -355,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); @@ -379,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); @@ -412,13 +431,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); - 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); @@ -436,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/GameObject.cpp b/src/game/GameObject.cpp index 5279814a1..4db015a55 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -973,12 +973,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/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/Level2.cpp b/src/game/Level2.cpp index a249c66a2..a5186f2c9 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -3768,17 +3768,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/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/game/Player.cpp b/src/game/Player.cpp index 58d4fd727..d68cbba47 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5480,6 +5480,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 33a54a7a9..cb64aed90 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1989,6 +1989,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/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index a2e4204d6..f1575e414 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3072,21 +3072,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(); @@ -3190,7 +3197,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/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/game/Unit.cpp b/src/game/Unit.cpp index c6dc7825b..82f9d3e4e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10165,11 +10165,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/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 2b70281bf..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 "7609" + #define REVISION_NR "7614" #endif // __REVISION_NR_H__