diff options
29 files changed, 476 insertions, 278 deletions
diff --git a/sql/mangos.sql b/sql/mangos.sql index bbee0ea9e35..b752d0d76ed 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, - `required_7568_01_mangos_spell_proc_event` bit(1) default NULL + `required_7616_02_mangos_command` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -266,7 +266,9 @@ INSERT INTO `command` VALUES ('debug arena',3,'Syntax: .debug arena\r\n\r\nToggle debug mode for arenas. In debug mode GM can start arena with single player.'), ('debug bg',3,'Syntax: .debug bg\r\n\r\nToggle debug mode for battlegrounds. In debug mode GM can start battleground with single player.'), ('debug getvalue',3,'Syntax: .debug getvalue #field #isInt\r\n\r\nGet the field #field of the selected creature. If no creature is selected, get the content of your field.\r\n\r\nUse a #isInt of value 1 if the expected field content is an integer.'), -('debug playsound',1,'Syntax: .debug playsound #soundid\r\n\r\nPlay sound with #soundid.\r\nSound will be play only for you. Other players do not hear this.\r\nWarning: client may have more 5000 sounds...'), +('debug play cinematic',1,'Syntax: .debug play cinematic #cinematicid\r\n\r\nPlay cinematic #cinematicid for you. You stay at place while your mind fly.\r\n'), +('debug play movie',1,'Syntax: .debug play movie #movieid\r\n\r\nPlay movie #movieid for you.'), +('debug play sound',1,'Syntax: .debug play sound #soundid\r\n\r\nPlay sound with #soundid.\r\nSound will be play only for you. Other players do not hear this.\r\nWarning: client may have more 5000 sounds...'), ('debug setvalue',3,'Syntax: .debug setvalue #field #value #isInt\r\n\r\nSet the field #field of the selected creature with value #value. If no creature is selected, set the content of your field.\r\n\r\nUse a #isInt of value 1 if #value is an integer.'), ('debug update',3,'Syntax: .debug update #field #value\r\n\r\nUpdate the field #field of the selected character or creature with value #value.\r\n\r\nIf no #value is provided, display the content of field #field.'), ('debug Mod32Value',3,'Syntax: .debug Mod32Value #field #value\r\n\r\nAdd #value to field #field of your character.'), @@ -440,10 +442,10 @@ INSERT INTO `command` VALUES ('revive',3,'Syntax: .revive\r\n\r\nRevive the selected player. If no player is selected, it will revive you.'), ('save',0,'Syntax: .save\r\n\r\nSaves your character.'), ('saveall',1,'Syntax: .saveall\r\n\r\nSave all characters in game.'), -('senditems',3,'Syntax: .senditems #playername "#subject" "#text" itemid1[:count1] itemid2[:count2] ... itemidN[:countN]\r\n\r\nSend a mail to a player. Subject and mail text must be in "". If for itemid not provided related count values then expected 1, if count > max items in stack then items will be send in required amount stacks. All stacks amount in mail limited to 12.'), -('sendmail',1,'Syntax: .sendmail #playername "#subject" "#text"\r\n\r\nSend a mail to a player. Subject and mail text must be in "".'), -('sendmoney','3','Syntax: .sendmoney #playername "#subject" "#text" #money\r\n\r\nSend mail with money to a player. Subject and mail text must be in "".'), -('sendmessage',3,'Syntax: .sendmessage $playername $message\r\n\r\nSend screen message to player from ADMINISTRATOR.'), +('send items',3,'Syntax: .send items #playername "#subject" "#text" itemid1[:count1] itemid2[:count2] ... itemidN[:countN]\r\n\r\nSend a mail to a player. Subject and mail text must be in "". If for itemid not provided related count values then expected 1, if count > max items in stack then items will be send in required amount stacks. All stacks amount in mail limited to 12.'), +('send mail',1,'Syntax: .send mail #playername "#subject" "#text"\r\n\r\nSend a mail to a player. Subject and mail text must be in "".'), +('send message',3,'Syntax: .send message $playername $message\r\n\r\nSend screen message to player from ADMINISTRATOR.'), +('send money','3','Syntax: .send money #playername "#subject" "#text" #money\r\n\r\nSend mail with money to a player. Subject and mail text must be in "".'), ('server corpses',2,'Syntax: .server corpses\r\n\r\nTriggering corpses expire check in world.'), ('server exit',4,'Syntax: .server exit\r\n\r\nTerminate mangosd NOW. Exit code 0.'), ('server info',0,'Syntax: .server info\r\n\r\nDisplay server version and the number of connected players.'), @@ -2923,7 +2925,9 @@ INSERT INTO `mangos_string` VALUES (1124,'Wrong pet type',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1125,'Your pet learned all talents',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1126,'Your pet talents have been reset.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), -(1127,'Talents of %s\'s pet reset.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +(1127,'Talents of %s\'s pet reset.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1200,'You try to view cinemitic %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1201,'You try to view movie %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `mangos_string` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/1304_world.sql b/sql/updates/1304_world.sql new file mode 100644 index 00000000000..52663b214f3 --- /dev/null +++ b/sql/updates/1304_world.sql @@ -0,0 +1,3 @@ +delete from command where name in ('reload spell_linked_spell'); +insert into command (name, security, help) values +('reload spell_linked_spell','3','Usage: .reload spell_linked_spell\r\nReloads the spell_linked_spell DB table.'), diff --git a/sql/updates/7615_01_mangos_command.sql b/sql/updates/7615_01_mangos_command.sql new file mode 100644 index 00000000000..17e208a5baa --- /dev/null +++ b/sql/updates/7615_01_mangos_command.sql @@ -0,0 +1,9 @@ +ALTER TABLE db_version CHANGE COLUMN required_7568_01_mangos_spell_proc_event required_7615_01_mangos_command bit; + +DELETE FROM `command` WHERE `name` IN ('senditems','sendmail','sendmoney','sendmessage','send items','send mail','send money','send message'); + +INSERT INTO `command` VALUES +('send items',3,'Syntax: .send items #playername "#subject" "#text" itemid1[:count1] itemid2[:count2] ... itemidN[:countN]\r\n\r\nSend a mail to a player. Subject and mail text must be in "". If for itemid not provided related count values then expected 1, if count > max items in stack then items will be send in required amount stacks. All stacks amount in mail limited to 12.'), +('send mail',1,'Syntax: .send mail #playername "#subject" "#text"\r\n\r\nSend a mail to a player. Subject and mail text must be in "".'), +('send message',3,'Syntax: .send message $playername $message\r\n\r\nSend screen message to player from ADMINISTRATOR.'), +('send money','3','Syntax: .send money #playername "#subject" "#text" #money\r\n\r\nSend mail with money to a player. Subject and mail text must be in "".'); diff --git a/sql/updates/7616_01_mangos_mangos_string.sql b/sql/updates/7616_01_mangos_mangos_string.sql new file mode 100644 index 00000000000..cd6e315adf9 --- /dev/null +++ b/sql/updates/7616_01_mangos_mangos_string.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_7615_01_mangos_command required_7616_01_mangos_mangos_string bit; + +DELETE FROM mangos_string WHERE entry IN(1200,1201); +INSERT INTO mangos_string VALUES +(1200,'You try to view cinemitic %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1201,'You try to view movie %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); diff --git a/sql/updates/7616_02_mangos_command.sql b/sql/updates/7616_02_mangos_command.sql new file mode 100644 index 00000000000..42f55f03b6a --- /dev/null +++ b/sql/updates/7616_02_mangos_command.sql @@ -0,0 +1,8 @@ +ALTER TABLE db_version CHANGE COLUMN required_7616_01_mangos_mangos_string required_7616_02_mangos_command bit; + +DELETE FROM `command` WHERE `name` IN ('debug playsound','debug play sound','debug play cinematic','debug play movie'); + +INSERT INTO `command` VALUES +('debug play cinematic',1,'Syntax: .debug play cinematic #cinematicid\r\n\r\nPlay cinematic #cinematicid for you. You stay at place while your mind fly.\r\n'), +('debug play movie',1,'Syntax: .debug play movie #movieid\r\n\r\nPlay movie #movieid for you.'), +('debug play sound',1,'Syntax: .debug play sound #soundid\r\n\r\nPlay sound with #soundid.\r\nSound will be play only for you. Other players do not hear this.\r\nWarning: client may have more 5000 sounds...'); diff --git a/src/bindings/interface/ScriptMgr.cpp b/src/bindings/interface/ScriptMgr.cpp index 81e017685d6..3cb45d8170b 100644 --- a/src/bindings/interface/ScriptMgr.cpp +++ b/src/bindings/interface/ScriptMgr.cpp @@ -20,11 +20,11 @@ #include "config.h" #include "ScriptMgr.h" -#include "../../game/GossipDef.h" -#include "../../game/GameObject.h" -#include "../../game/Player.h" -#include "../../game/Map.h" -#include "../../game/ObjectMgr.h" +#include "GossipDef.h" +#include "GameObject.h" +#include "Player.h" +#include "Map.h" +#include "ObjectMgr.h" //uint8 loglevel = 0; int nrscripts; diff --git a/src/bindings/interface/ScriptMgr.h b/src/bindings/interface/ScriptMgr.h index 3954616d382..97b75f07db2 100644 --- a/src/bindings/interface/ScriptMgr.h +++ b/src/bindings/interface/ScriptMgr.h @@ -90,7 +90,7 @@ extern int num_inst_scripts; struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI { - ScriptedAI(Creature* creature) : m_creature(creature) {} + ScriptedAI(Creature* creature):CreatureAI(creature),m_creature(creature){} ~ScriptedAI() {} // Called if IsVisible(Unit *who) is true at each *who move diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 37041c7d7da..da192844a70 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1107,8 +1107,7 @@ void AchievementMgr::CompletedCriteria(AchievementCriteriaEntry const* criteria, if (m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end()) return; - if ((criteria->referredAchievement==achievement->ID && (criteria->completionFlag & ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL)) || - IsCompletedAchievement(achievement)) + if (IsCompletedAchievement(achievement)) CompletedAchievement(achievement); } @@ -1138,13 +1137,6 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry) else completed_all = false; - if(achievmentForTestId == entry->ID) // not referenced achievement - { - // completed as single req. criteria - if(completed && criteria->completionFlag & ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL) - return true; - } - // completed as have req. count of completed criterias if(achievmentForTestCount > 0 && achievmentForTestCount <= count) return true; diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 1e118d2c04a..eaf0ec5af0f 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -711,23 +711,15 @@ 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); + // send new char string if not empty if (!sWorld.GetNewCharString().empty()) chH.PSendSysMessage(sWorld.GetNewCharString().c_str()); - } + } } if (!pCurrChar->GetMap()->Add(pCurrChar)) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index e28da9d0063..48b6a195a14 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -108,35 +108,48 @@ ChatCommand * ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand debugCommandTable[] = + static ChatCommand debugPlayCommandTable[] = + { + { "cinematic", SEC_MODERATOR, false, &ChatHandler::HandleDebugPlayCinematicCommand, "", NULL }, + { "movie", SEC_MODERATOR, false, &ChatHandler::HandleDebugPlayMovieCommand, "", NULL }, + { "sound", SEC_MODERATOR, false, &ChatHandler::HandleDebugPlaySoundCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + 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 }, + { "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[] = + { { "setbit", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugSet32Bit, "", NULL }, - { "Mod32Value", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugMod32Value, "", NULL }, { "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 }, + { "play", SEC_MODERATOR, false, NULL, "", debugPlayCommandTable }, + { "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 } }; @@ -152,11 +165,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 } }; @@ -436,6 +449,7 @@ ChatCommand * ChatHandler::getCommandTable() { "spell_elixir", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellElixirCommand, "", NULL }, { "spell_learn_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLearnSpellCommand, "", NULL }, { "spell_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesSpellCommand, "", NULL }, + { "spell_linked_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLinkedSpellCommand, "", NULL }, { "spell_pet_auras", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL }, { "spell_proc_event", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL }, { "spell_bonus_data", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellBonusesCommand, "", NULL }, @@ -463,6 +477,15 @@ ChatCommand * ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; + static ChatCommand sendCommandTable[] = + { + { "items", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendItemsCommand, "", NULL }, + { "mail", SEC_MODERATOR, true, &ChatHandler::HandleSendMailCommand, "", NULL }, + { "message", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMessageCommand, "", NULL }, + { "money", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMoneyCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + static ChatCommand serverIdleRestartCommandTable[] = { { "cancel", SEC_ADMINISTRATOR, true, &ChatHandler::HandleServerShutDownCancelCommand,"", NULL }, @@ -644,9 +667,7 @@ ChatCommand * ChatHandler::getCommandTable() { "password", SEC_PLAYER, false, &ChatHandler::HandlePasswordCommand, "", NULL }, { "lockaccount", SEC_PLAYER, false, &ChatHandler::HandleLockAccountCommand, "", NULL }, { "respawn", SEC_ADMINISTRATOR, false, &ChatHandler::HandleRespawnCommand, "", NULL }, - { "senditems", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendItemsCommand, "", NULL }, - { "sendmail", SEC_MODERATOR, true, &ChatHandler::HandleSendMailCommand, "", NULL }, - { "sendmoney", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMoneyCommand, "", NULL }, + { "send", SEC_MODERATOR, true, NULL, "", sendCommandTable }, { "rename", SEC_GAMEMASTER, true, &ChatHandler::HandleRenameCommand, "", NULL }, { "customize", SEC_GAMEMASTER, true, &ChatHandler::HandleCustomizeCommand, "", NULL }, { "loadscripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLoadScriptsCommand, "", NULL }, @@ -658,7 +679,6 @@ ChatCommand * ChatHandler::getCommandTable() { "combatstop", SEC_GAMEMASTER, false, &ChatHandler::HandleCombatStopCommand, "", NULL }, { "flusharenapoints",SEC_ADMINISTRATOR, false, &ChatHandler::HandleFlushArenaPointsCommand, "", NULL }, { "chardelete", SEC_CONSOLE, true, &ChatHandler::HandleCharacterDeleteCommand, "", NULL }, - { "sendmessage", SEC_ADMINISTRATOR, true, &ChatHandler::HandleSendMessageCommand, "", NULL }, { "playall", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePlayAllCommand, "", NULL }, { "repairitems", SEC_GAMEMASTER, false, &ChatHandler::HandleRepairitemsCommand, "", NULL }, { "freeze", SEC_ADMINISTRATOR, false, &ChatHandler::HandleFreezeCommand, "", NULL }, diff --git a/src/game/Chat.h b/src/game/Chat.h index 4a4f0df5c56..ac24a4c66b7 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -100,43 +100,101 @@ class ChatHandler bool HandleAccountSetGmLevelCommand(const char* args); bool HandleAccountSetPasswordCommand(const char* args); - bool HandleHelpCommand(const char* args); bool HandleAHBotOptionsCommand(const char * args); - bool HandleCommandsCommand(const char* args); - 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); - bool HandleGroupgoCommand(const char* args); - bool HandleRecallCommand(const char* args); bool HandleNameAnnounceCommand(const char* args); bool HandleGMNameAnnounceCommand(const char* args); - bool HandleAnnounceCommand(const char* args); bool HandleGMAnnounceCommand(const char* args); - bool HandleNotifyCommand(const char* args); bool HandleGMNotifyCommand(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); - bool HandleTeleNameCommand(const char* args); - bool HandleTeleGroupCommand(const char* args); - bool HandleModifyDrunkCommand(const char* args); - bool HandleSendItemsCommand(const char* args); - bool HandleSendMailCommand(const char* args); - bool HandleSendMoneyCommand(const char* args); + + bool HandleBanAccountCommand(const char* args); + bool HandleBanCharacterCommand(const char* args); + bool HandleBanIPCommand(const char* args); + bool HandleBanInfoAccountCommand(const char* args); + bool HandleBanInfoCharacterCommand(const char* args); + bool HandleBanInfoIPCommand(const char* args); + bool HandleBanListAccountCommand(const char* args); + bool HandleBanListCharacterCommand(const char* args); + bool HandleBanListIPCommand(const char* args); + + bool HandleCastCommand(const char *args); + bool HandleCastBackCommand(const char *args); + bool HandleCastDistCommand(const char *args); + bool HandleCastSelfCommand(const char *args); + bool HandleCastTargetCommand(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 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 HandleDebugSet32Bit(const char* args); + bool HandleDebugThreatList(const char * args); + bool HandleDebugHostilRefList(const char * args); + bool HandlePossessCommand(const char* args); + bool HandleUnPossessCommand(const char* args); + bool HandleBindSightCommand(const char* args); + bool HandleUnbindSightCommand(const char* args); + + bool HandleDebugPlayCinematicCommand(const char* args); + bool HandleDebugPlayMovieCommand(const char* args); + bool HandleDebugPlaySoundCommand(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 HandleGameObjectAddCommand(const char* args); + bool HandleGameObjectDeleteCommand(const char* args); + bool HandleGameObjectMoveCommand(const char* args); + bool HandleGameObjectNearCommand(const char* args); + bool HandleGameObjectPhaseCommand(const char* args); + bool HandleGameObjectTargetCommand(const char* args); + bool HandleGameObjectTurnCommand(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 HandleGuildCreateCommand(const char* args); + bool HandleGuildInviteCommand(const char* args); + bool HandleGuildUninviteCommand(const char* args); + bool HandleGuildRankCommand(const char* args); + bool HandleGuildDeleteCommand(const char* args); + + bool HandleHonorAddCommand(const char* args); + bool HandleHonorAddKillCommand(const char* args); + bool HandleHonorUpdateCommand(const char* args); + + bool HandleInstanceListBindsCommand(const char* args); + bool HandleInstanceUnbindCommand(const char* args); + bool HandleInstanceStatsCommand(const char* args); + bool HandleInstanceSaveDataCommand(const char * args); + bool HandleLearnCommand(const char* args); bool HandleLearnAllCommand(const char* args); bool HandleLearnAllGMCommand(const char* args); @@ -149,6 +207,11 @@ class ChatHandler bool HandleLearnAllMySpellsCommand(const char* args); bool HandleLearnAllMyTalentsCommand(const char* args); + bool HandleListAurasCommand(const char * args); + bool HandleListCreatureCommand(const char* args); + bool HandleListItemCommand(const char* args); + bool HandleListObjectCommand(const char* args); + bool HandleLookupAreaCommand(const char* args); bool HandleLookupCreatureCommand(const char* args); bool HandleLookupEventCommand(const char* args); @@ -222,6 +285,10 @@ class ChatHandler bool HandleNpcSubNameCommand(const char* args); //---------------------------------------------------------- + bool HandleQuestAdd(const char * args); + bool HandleQuestRemove(const char * args); + bool HandleQuestComplete(const char * args); + bool HandleReloadAllCommand(const char* args); bool HandleReloadAllAreaCommand(const char* args); bool HandleReloadAllItemCommand(const char* args); @@ -289,6 +356,7 @@ class ChatHandler bool HandleReloadSpellAreaCommand(const char* args); bool HandleReloadSpellElixirCommand(const char* args); bool HandleReloadSpellLearnSpellCommand(const char* args); + bool HandleReloadSpellLinkedSpellCommand(const char* args); bool HandleReloadSpellProcEventCommand(const char* args); bool HandleReloadSpellBonusesCommand(const char* args); bool HandleReloadSpellScriptTargetCommand(const char* args); @@ -299,10 +367,18 @@ class ChatHandler bool HandleReloadSpellDisabledCommand(const char* args); bool HandleReloadAuctionsCommand(const char* args); - bool HandleInstanceListBindsCommand(const char* args); - bool HandleInstanceUnbindCommand(const char* args); - bool HandleInstanceStatsCommand(const char* args); - bool HandleInstanceSaveDataCommand(const char * args); + bool HandleResetAchievementsCommand(const char * args); + bool HandleResetAllCommand(const char * args); + bool HandleResetHonorCommand(const char * args); + bool HandleResetLevelCommand(const char * args); + bool HandleResetSpellsCommand(const char * args); + bool HandleResetStatsCommand(const char * args); + bool HandleResetTalentsCommand(const char * args); + + bool HandleSendItemsCommand(const char* args); + bool HandleSendMailCommand(const char* args); + bool HandleSendMessageCommand(const char * args); + bool HandleSendMoneyCommand(const char* args); bool HandleServerCorpsesCommand(const char* args); bool HandleServerExitCommand(const char* args); @@ -318,32 +394,58 @@ class ChatHandler bool HandleServerShutDownCancelCommand(const char* args); bool HandleServerSetClosedCommand(const char* args); - bool HandleHonorAddCommand(const char* args); - bool HandleHonorAddKillCommand(const char* args); - bool HandleHonorUpdateCommand(const char* args); + bool HandleTeleCommand(const char * args); + bool HandleTeleAddCommand(const char * args); + bool HandleTeleDelCommand(const char * args); + bool HandleTeleGroupCommand(const char* args); + bool HandleTeleNameCommand(const char* args); - bool HandleLoadScriptsCommand(const char* args); - bool HandleDebugSendQuestPartyMsgCommand(const char* args); - bool HandleDebugSendQuestInvalidMsgCommand(const char* args); + bool HandleUnBanAccountCommand(const char* args); + bool HandleUnBanCharacterCommand(const char* args); + bool HandleUnBanIPCommand(const char* args); + + bool HandleWpAddCommand(const char* args); + bool HandleWpLoadPathCommand(const char* args); + bool HandleWpUnLoadPathCommand(const char* args); + bool HandleWpModifyCommand(const char* args); + bool HandleWpEventCommand(const char* args); + bool HandleWpShowCommand(const char* args); + bool HandleReloadAllPaths(const char *args); + + bool HandleHelpCommand(const char* args); + bool HandleCommandsCommand(const char* args); + bool HandleStartCommand(const char* args); + bool HandleDismountCommand(const char* args); + bool HandleSaveCommand(const char* args); + + bool HandleNamegoCommand(const char* args); + bool HandleGonameCommand(const char* args); + bool HandleGroupgoCommand(const char* args); + bool HandleRecallCommand(const char* args); + bool HandleAnnounceCommand(const char* args); + bool HandleNotifyCommand(const char* args); + bool HandleGPSCommand(const char* args); + bool HandleTaxiCheatCommand(const char* args); + bool HandleWhispersCommand(const char* args); + bool HandleModifyDrunkCommand(const char* args); - bool HandleDebugInArcCommand(const char* args); - bool HandleDebugSpellFailCommand(const char* args); + bool HandleLoadScriptsCommand(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); bool HandleGoGraveyardCommand(const char* args); - bool HandleGameObjectTargetCommand(const char* args); + + /*bool HandleGameObjectTargetCommand(const char* args); bool HandleGameObjectDeleteCommand(const char* args); bool HandleGameObjectMoveCommand(const char* args); bool HandleGameObjectPhaseCommand(const char* args); bool HandleGameObjectTurnCommand(const char* args); - bool HandleGameObjectStateCommand(const char* args); + bool HandleGameObjectStateCommand(const char* args);*/ + bool HandlePInfoCommand(const char* args); bool HandlePLimitCommand(const char* args); bool HandleMuteCommand(const char* args); @@ -354,18 +456,6 @@ class ChatHandler bool HandleListFreezeCommand(const char* args); bool HandleCharacterDeleteCommand(const char* args); - bool HandleBanAccountCommand(const char* args); - bool HandleBanCharacterCommand(const char* args); - bool HandleBanIPCommand(const char* args); - bool HandleUnBanAccountCommand(const char* args); - bool HandleUnBanCharacterCommand(const char* args); - bool HandleUnBanIPCommand(const char* args); - bool HandleBanInfoAccountCommand(const char* args); - bool HandleBanInfoCharacterCommand(const char* args); - bool HandleBanInfoIPCommand(const char* args); - bool HandleBanListAccountCommand(const char* args); - bool HandleBanListCharacterCommand(const char* args); - bool HandleBanListIPCommand(const char* args); bool HandleGoXYCommand(const char* args); bool HandleGoXYZCommand(const char* args); bool HandleGoZoneXYCommand(const char* args); @@ -376,9 +466,6 @@ class ChatHandler bool HandleCooldownCommand(const char* args); 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); @@ -407,27 +494,9 @@ class ChatHandler bool HandleGroupDisbandCommand(const char* args); bool HandleGroupRemoveCommand(const char* args); - bool HandleGuildCreateCommand(const char* args); - bool HandleGuildInviteCommand(const char* args); - 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); - bool HandleTeleCommand(const char * args); - bool HandleTeleAddCommand(const char * args); - bool HandleTeleDelCommand(const char * args); - bool HandleListAurasCommand(const char * args); - - bool HandleResetAchievementsCommand(const char * args); - bool HandleResetHonorCommand(const char * args); - bool HandleResetLevelCommand(const char * args); - bool HandleResetSpellsCommand(const char * args); - bool HandleResetStatsCommand(const char * args); - bool HandleResetTalentsCommand(const char * args); - bool HandleResetAllCommand(const char * args); // GM ticket command handlers bool HandleGMTicketListCommand(const char* args); @@ -444,42 +513,20 @@ class ChatHandler bool HandleMaxSkillCommand(const char* args); bool HandleSetSkillCommand(const char* args); - bool HandleListCreatureCommand(const char* args); - bool HandleListItemCommand(const char* args); - bool HandleListObjectCommand(const char* args); - bool HandleGameObjectNearCommand(const char* args); bool HandlePasswordCommand(const char* args); bool HandleLockAccountCommand(const char* args); bool HandleRespawnCommand(const char* args); - //New Wp Commands - bool HandleWpAddCommand(const char* args); - bool HandleWpLoadPathCommand(const char* args); - bool HandleWpUnLoadPathCommand(const char* args); - bool HandleWpModifyCommand(const char* args); - bool HandleWpEventCommand(const char* args); - bool HandleWpShowCommand(const char* args); - bool HandleReloadAllPaths(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); bool HandlePDumpWriteCommand(const char *args); - bool HandleCastCommand(const char *args); - bool HandleCastBackCommand(const char *args); - bool HandleCastDistCommand(const char *args); - bool HandleCastSelfCommand(const char *args); - bool HandleCastTargetCommand(const char *args); bool HandleComeToMeCommand(const char *args); bool HandleCombatStopCommand(const char *args); - bool HandleCharDeleteCommand(const char *args); - bool HandleSendMessageCommand(const char * args); + + /*bool HandleCharDeleteCommand(const char *args); + bool HandleSendMessageCommand(const char * args);*/ + bool HandleFlushArenaPointsCommand(const char *args); bool HandlePlayAllCommand(const char* args); bool HandleRepairitemsCommand(const char* args); @@ -488,28 +535,13 @@ class ChatHandler bool HandleTempAddSpwCommand(const char* args); //! Development Commands - bool HandleDebugSetValue(const char* args); - bool HandleDebugGetValue(const char* args); - bool HandleDebugSet32Bit(const char* args); - bool HandleDebugMod32Value(const char* args); - bool HandleQuestAdd(const char * args); + + /*bool HandleQuestAdd(const char * args); bool HandleQuestRemove(const char * args); - bool HandleQuestComplete(const char * args); + bool HandleQuestComplete(const char * args);*/ + + bool HandleSet32Bit(const char* args); bool HandleSaveAllCommand(const char* args); - bool HandleDebugGetItemState(const char * args); - bool HandleDebugGetLootRecipient(const char * args); - bool HandleDebugArenaCommand(const char * args); - bool HandleDebugThreatList(const char * args); - bool HandleDebugHostilRefList(const char * args); - bool HandlePossessCommand(const char* args); - bool HandleUnPossessCommand(const char* args); - bool HandleBindSightCommand(const char* args); - bool HandleUnbindSightCommand(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/DBCEnums.h b/src/game/DBCEnums.h index c5801c7b315..c3139dc2a37 100644 --- a/src/game/DBCEnums.h +++ b/src/game/DBCEnums.h @@ -42,12 +42,16 @@ enum AchievementFactionFlags enum AchievementFlags { - ACHIEVEMENT_FLAG_COUNTER = 0x00000001, - ACHIEVEMENT_FLAG_REACH_LEVEL = 0x00000004, - ACHIEVEMENT_FLAG_RERERED_MAX = 0x00000010, // displays the maximum criteria of a refered achievement - ACHIEVEMENT_FLAG_AVERAGE = 0x00000040, - ACHIEVEMENT_FLAG_REALM_FIRST_REACH= 0x00000100, - ACHIEVEMENT_FLAG_REALM_FIRST_KILL = 0x00000200, + ACHIEVEMENT_FLAG_COUNTER = 0x00000001, // Just count statistic (never stop and complete) + ACHIEVEMENT_FLAG_UNK2 = 0x00000002, // not used + ACHIEVEMENT_FLAG_STORE_MAX_VALUE = 0x00000004, // Store only max value? used only in "Reach level xx" + ACHIEVEMENT_FLAG_SUMM = 0x00000008, // Use summ criteria value from all reqirements (and calculate max vale) + ACHIEVEMENT_FLAG_MAX_USED = 0x00000010, // Show max criteria (and calculate max vale ??) + ACHIEVEMENT_FLAG_REQ_COUNT = 0x00000020, // Use not zero req count (and calculate max vale) + ACHIEVEMENT_FLAG_AVERANGE = 0x00000040, // Show as averange value (value / time_in_days) depend from other flag (by def use last criteria value) + ACHIEVEMENT_FLAG_BAR = 0x00000080, // Show as progress bar (value / max vale) depend from other flag (by def use last criteria value) + ACHIEVEMENT_FLAG_REALM_FIRST_REACH = 0x00000100, // + ACHIEVEMENT_FLAG_REALM_FIRST_KILL = 0x00000200, // }; enum AchievementCriteriaCondition @@ -63,8 +67,12 @@ enum AchievementCriteriaCondition enum AchievementCriteriaCompletionFlags { - // some Achievements (like 698) have several criteria but only one has to be fulfilled. These are identified by this flag. - ACHIEVEMENT_CRITERIA_COMPLETE_FLAG_ALL = 2, + ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR = 0x00000001, // Show progress as bar + ACHIEVEMENT_CRITERIA_FLAG_HIDE_CRITERIA = 0x00000002, // Not show criteria in client + ACHIEVEMENT_CRITERIA_FLAG_UNK3 = 0x00000004, // BG related?? + ACHIEVEMENT_CRITERIA_FLAG_UNK4 = 0x00000008, // + ACHIEVEMENT_CRITERIA_FLAG_UNK5 = 0x00000010, // not used + ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER = 0x00000020, // Displays counter as money }; enum AchievementCriteriaGroupFlags diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp index 5149bc2ddd7..4d1ba2a5cff 100644 --- a/src/game/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -48,6 +48,7 @@ DBCStorage <CharTitlesEntry> sCharTitlesStore(CharTitlesEntryfmt); DBCStorage <ChatChannelsEntry> sChatChannelsStore(ChatChannelsEntryfmt); DBCStorage <ChrClassesEntry> sChrClassesStore(ChrClassesEntryfmt); DBCStorage <ChrRacesEntry> sChrRacesStore(ChrRacesEntryfmt); +DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore(CinematicSequencesEntryfmt); DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt); DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt); DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt); @@ -78,7 +79,9 @@ DBCStorage <GtOCTRegenHPEntry> sGtOCTRegenHPStore(GtOCTRegenHPfmt); //DBCStorage <GtOCTRegenMPEntry> sGtOCTRegenMPStore(GtOCTRegenMPfmt); -- not used currently DBCStorage <GtRegenHPPerSptEntry> sGtRegenHPPerSptStore(GtRegenHPPerSptfmt); DBCStorage <GtRegenMPPerSptEntry> sGtRegenMPPerSptStore(GtRegenMPPerSptfmt); + DBCStorage <HolidaysEntry> sHolidaysStore(Holidaysfmt); + DBCStorage <ItemEntry> sItemStore(Itemfmt); DBCStorage <ItemBagFamilyEntry> sItemBagFamilyStore(ItemBagFamilyfmt); //DBCStorage <ItemCondExtCostsEntry> sItemCondExtCostsStore(ItemCondExtCostsEntryfmt); @@ -93,6 +96,7 @@ DBCStorage <LockEntry> sLockStore(LockEntryfmt); DBCStorage <MailTemplateEntry> sMailTemplateStore(MailTemplateEntryfmt); DBCStorage <MapEntry> sMapStore(MapEntryfmt); +DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt); DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt); @@ -199,7 +203,7 @@ void LoadDBCStores(const std::string& dataPath) { std::string dbcPath = dataPath+"dbc/"; - const uint32 DBCFilesCount = 75; + const uint32 DBCFilesCount = 77; barGoLink bar( DBCFilesCount ); @@ -236,6 +240,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChatChannelsStore, dbcPath,"ChatChannels.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChrClassesStore, dbcPath,"ChrClasses.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChrRacesStore, dbcPath,"ChrRaces.dbc"); + LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCinematicSequencesStore, dbcPath,"CinematicSequences.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureDisplayInfoStore, dbcPath,"CreatureDisplayInfo.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureFamilyStore, dbcPath,"CreatureFamily.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureSpellDataStore, dbcPath,"CreatureSpellData.dbc"); @@ -286,6 +291,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales,bar,bad_dbc_files,sLockStore, dbcPath,"Lock.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMailTemplateStore, dbcPath,"MailTemplate.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMapStore, dbcPath,"Map.dbc"); + LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMovieStore, dbcPath,"Movie.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sQuestSortStore, dbcPath,"QuestSort.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sRandomPropertiesPointsStore, dbcPath,"RandPropPoints.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sScalingStatDistributionStore, dbcPath,"ScalingStatDistribution.dbc"); diff --git a/src/game/DBCStores.h b/src/game/DBCStores.h index e79cb44a534..c7c7b54608e 100644 --- a/src/game/DBCStores.h +++ b/src/game/DBCStores.h @@ -72,6 +72,7 @@ extern DBCStorage <CharStartOutfitEntry> sCharStartOutfitStore; extern DBCStorage <CharTitlesEntry> sCharTitlesStore; extern DBCStorage <ChrClassesEntry> sChrClassesStore; extern DBCStorage <ChrRacesEntry> sChrRacesStore; +extern DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore; extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore; extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore; extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore; @@ -108,6 +109,7 @@ extern DBCStorage <ItemSetEntry> sItemSetStore; extern DBCStorage <LockEntry> sLockStore; extern DBCStorage <MailTemplateEntry> sMailTemplateStore; extern DBCStorage <MapEntry> sMapStore; +extern DBCStorage <MovieEntry> sMovieStore; extern DBCStorage <QuestSortEntry> sQuestSortStore; extern DBCStorage <RandomPropertiesPointsEntry> sRandomPropertiesPointsStore; extern DBCStorage <ScalingStatDistributionEntry> sScalingStatDistributionStore; diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index 98fe0000ed4..fa5036c56d2 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -651,6 +651,27 @@ struct ChrRacesEntry uint32 addon; // 68 (0 - original race, 1 - tbc addon, ...) }; +/* not used +struct CinematicCameraEntry +{ + uint32 id; // 0 index + char* filename; // 1 + uint32 soundid; // 2 in SoundEntries.dbc or 0 + float start_x; // 3 + float start_y; // 4 + float start_z; // 5 + float unk6; // 6 speed? +}; +*/ + +struct CinematicSequencesEntry +{ + uint32 Id; // 0 index + //uint32 unk1; // 1 always 0 + //uint32 cinematicCamera; // 2 id in CinematicCamera.dbc + // 3-9 always 0 +}; + struct CreatureDisplayInfoEntry { uint32 Displayid; // 0 m_ID @@ -1084,6 +1105,13 @@ struct MapEntry } }; +struct MovieEntry +{ + uint32 Id; // 0 index + //char* filename; // 1 + //uint32 unk2; // 2 always 100 +}; + struct QuestSortEntry { uint32 id; // 0 m_ID diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index be412682685..23f9cc9c516 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -36,6 +36,7 @@ const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx"; // ChatChannelsEntryfmt, index not used (more compact store) const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii"; const char ChrRacesEntryfmt[]="nxixiixxixxxxissssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi"; +const char CinematicSequencesEntryfmt[]="nxxxxxxxxx"; const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx"; const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx"; const char CreatureSpellDatafmt[]="nxxxxxxxx"; @@ -72,6 +73,7 @@ const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiii const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx"; const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiffiixxix"; +const char MovieEntryfmt[]="nxx"; const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx"; const char RandomPropertiesPointsfmt[]="niiiiiiiiiiiiiii"; const char ScalingStatDistributionfmt[]="niiiiiiiiiiiiiiiiiiiii"; diff --git a/src/game/Debugcmds.cpp b/src/game/Debugcmds.cpp index 6e7ef493ce5..e50ca1677de 100644 --- a/src/game/Debugcmds.cpp +++ b/src/game/Debugcmds.cpp @@ -33,22 +33,7 @@ #include <fstream> #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; @@ -58,17 +43,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(); @@ -94,7 +93,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; @@ -104,7 +103,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; @@ -114,7 +113,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; @@ -243,6 +242,54 @@ bool ChatHandler::HandleDebugUpdateWorldStateCommand(const char* args) return true; } +bool ChatHandler::HandleDebugPlayCinematicCommand(const char* args) +{ + // USAGE: .debug play cinematic #cinematicid + // #cinematicid - ID decimal number from CinemaicSequences.dbc (1st column) + if( !*args ) + { + SendSysMessage(LANG_BAD_VALUE); + SetSentErrorMessage(true); + return false; + } + + uint32 dwId = atoi((char*)args); + + if(!sCinematicSequencesStore.LookupEntry(dwId)) + { + PSendSysMessage(LANG_CINEMATIC_NOT_EXIST, dwId); + SetSentErrorMessage(true); + return false; + } + + m_session->GetPlayer()->SendCinematicStart(dwId); + return true; +} + +bool ChatHandler::HandleDebugPlayMovieCommand(const char* args) +{ + // USAGE: .debug play movie #movieid + // #movieid - ID decimal number from Movie.dbc (1st column) + if( !*args ) + { + SendSysMessage(LANG_BAD_VALUE); + SetSentErrorMessage(true); + return false; + } + + uint32 dwId = atoi((char*)args); + + if(!sMovieStore.LookupEntry(dwId)) + { + PSendSysMessage(LANG_MOVIE_NOT_EXIST, dwId); + SetSentErrorMessage(true); + return false; + } + + m_session->GetPlayer()->SendMovieStart(dwId); + return true; +} + //Play sound bool ChatHandler::HandleDebugPlaySoundCommand(const char* args) { @@ -719,3 +766,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/game/GameObject.cpp b/src/game/GameObject.cpp index 5c945000579..def17130372 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -1050,12 +1050,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/Language.h b/src/game/Language.h index 7a344bd2b41..aebcd93a008 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -854,6 +854,13 @@ enum TrinityStrings LANG_WORLD_CLOSED = 7523, LANG_WORLD_OPENED = 7524, + // Debug commands + LANG_CINEMATIC_NOT_EXIST = 1200, + LANG_MOVIE_NOT_EXIST = 1201, + // Room for more debug 1202-1299 not used + + // FREE IDS 1300-9999 + // Use for not-in-offcial-sources patches // 10000-10999 // opvp hp diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index d52a6854328..bf15da9f7f6 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -199,7 +199,7 @@ bool ChatHandler::HandleGMNotifyCommand(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 91f5fc516da..d1f4c864f24 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -3696,17 +3696,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 b20c1ffb02b..37f7edf32cd 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -612,6 +612,7 @@ bool ChatHandler::HandleReloadAllSpellCommand(const char*) HandleReloadSpellAreaCommand("a"); HandleReloadSpellElixirCommand("a"); HandleReloadSpellLearnSpellCommand("a"); + HandleReloadSpellLinkedSpellCommand("a"); HandleReloadSpellProcEventCommand("a"); HandleReloadSpellBonusesCommand("a"); HandleReloadSpellScriptTargetCommand("a"); @@ -960,6 +961,14 @@ bool ChatHandler::HandleReloadSpellLearnSpellCommand(const char*) return true; } +bool ChatHandler::HandleReloadSpellLinkedSpellCommand(const char*) +{ + sLog.outString( "Re-Loading Spell Linked Spells..." ); + spellmgr.LoadSpellLinked(); + SendGlobalGMSysMessage("DB table `spell_linked_spell` reloaded."); + return true; +} + bool ChatHandler::HandleReloadSpellProcEventCommand(const char*) { sLog.outString( "Re-Loading Spell Proc Event conditions..." ); @@ -6179,7 +6188,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 41b32327395..9227cb7414c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5568,6 +5568,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 deafd63c0e9..087ca5e9cdc 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2001,6 +2001,9 @@ class TRINITY_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/ThreatManager.cpp b/src/game/ThreatManager.cpp index 60bb05b40b4..336f02c4470 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -83,7 +83,7 @@ void HostilReference::sourceObjectDestroyLink() //============================================================ // Inform the source, that the status of the reference changed -void HostilReference::fireStatusChanged(const ThreatRefStatusChangeEvent& pThreatRefStatusChangeEvent) +void HostilReference::fireStatusChanged(ThreatRefStatusChangeEvent& pThreatRefStatusChangeEvent) { if(getSource()) getSource()->processThreatEvent(&pThreatRefStatusChangeEvent); @@ -99,7 +99,11 @@ void HostilReference::addThreat(float pMod) if(!isOnline()) updateOnlineStatus(); if(pMod != 0.0f) - fireStatusChanged(ThreatRefStatusChangeEvent(UEV_THREAT_REF_THREAT_CHANGE, this, pMod)); + { + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_THREAT_CHANGE, this, pMod); + fireStatusChanged(event); + } + if(isValid() && pMod >= 0) { Unit* victim_owner = getTarget()->GetCharmerOrOwner(); @@ -154,8 +158,10 @@ void HostilReference::setOnlineOfflineState(bool pIsOnline) { iOnline = pIsOnline; if(!iOnline) - setAccessibleState(false); // if not online that not accessible as well - fireStatusChanged(ThreatRefStatusChangeEvent(UEV_THREAT_REF_ONLINE_STATUS, this)); + setAccessibleState(false); // if not online that not accessable as well + + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_ONLINE_STATUS, this); + fireStatusChanged(event); } } @@ -166,7 +172,9 @@ void HostilReference::setAccessibleState(bool pIsAccessible) if(iAccessible != pIsAccessible) { iAccessible = pIsAccessible; - fireStatusChanged(ThreatRefStatusChangeEvent(UEV_THREAT_REF_ASSECCIBLE_STATUS, this)); + + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_ASSECCIBLE_STATUS, this); + fireStatusChanged(event); } } @@ -177,7 +185,9 @@ void HostilReference::setAccessibleState(bool pIsAccessible) void HostilReference::removeReference() { invalidate(); - fireStatusChanged(ThreatRefStatusChangeEvent(UEV_THREAT_REF_REMOVE_FROM_LIST, this)); + + ThreatRefStatusChangeEvent event(UEV_THREAT_REF_REMOVE_FROM_LIST, this); + fireStatusChanged(event); } //============================================================ @@ -357,12 +367,18 @@ void ThreatManager::addThreat(Unit* pVictim, float pThreat, SpellSchoolMask scho //players and pets have only InHateListOf //HateOfflineList is used co contain unattackable victims (in-flight, in-water, GM etc.) - if (pVictim == getOwner()) // only for same creatures :) + // not to self + if (pVictim == getOwner()) return; + // not to GM if(!pVictim || (pVictim->GetTypeId() == TYPEID_PLAYER && ((Player*)pVictim)->isGameMaster()) ) return; + // not to dead and not for dead + if(!pVictim->isAlive() || !getOwner()->isAlive() ) + return; + assert(getOwner()->GetTypeId()== TYPEID_UNIT); float threat = ThreatCalcHelper::calcThreat(pVictim, iOwner, pThreat, schoolMask, pThreatSpell); @@ -460,18 +476,13 @@ void ThreatManager::setCurrentVictim(HostilReference* pHostilReference) // The hated unit is gone, dead or deleted // return true, if the event is consumed -bool ThreatManager::processThreatEvent(const UnitBaseEvent* pUnitBaseEvent) +void ThreatManager::processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusChangeEvent) { - bool consumed = false; - - ThreatRefStatusChangeEvent* threatRefStatusChangeEvent; - HostilReference* hostilReference; - - threatRefStatusChangeEvent = (ThreatRefStatusChangeEvent*) pUnitBaseEvent; threatRefStatusChangeEvent->setThreatManager(this); // now we can set the threat manager - hostilReference = threatRefStatusChangeEvent->getReference(); - switch(pUnitBaseEvent->getType()) + HostilReference* hostilReference = threatRefStatusChangeEvent->getReference(); + + switch(threatRefStatusChangeEvent->getType()) { case UEV_THREAT_REF_THREAT_CHANGE: if((getCurrentVictim() == hostilReference && threatRefStatusChangeEvent->getFValue()<0.0f) || @@ -509,6 +520,5 @@ bool ThreatManager::processThreatEvent(const UnitBaseEvent* pUnitBaseEvent) iThreatOfflineContainer.remove(hostilReference); break; } - return consumed; } diff --git a/src/game/ThreatManager.h b/src/game/ThreatManager.h index 3b07a4ec43d..aa84cb7d52c 100644 --- a/src/game/ThreatManager.h +++ b/src/game/ThreatManager.h @@ -45,20 +45,8 @@ class ThreatCalcHelper }; //============================================================== - class TRINITY_DLL_SPEC HostilReference : public Reference<Unit, ThreatManager> { - private: - float iThreat; - float iTempThreatModifyer; // used for taunt - uint64 iUnitGuid; - bool iOnline; - bool iAccessible; - private: - // Inform the source, that the status of that reference was changed - void fireStatusChanged(const ThreatRefStatusChangeEvent& pThreatRefStatusChangeEvent); - - Unit* getSourceUnit(); public: HostilReference(Unit* pUnit, ThreatManager *pThreatManager, float pThreat); @@ -125,6 +113,17 @@ class TRINITY_DLL_SPEC HostilReference : public Reference<Unit, ThreatManager> // Tell our refFrom (source) object, that the link is cut (Target destroyed) void sourceObjectDestroyLink(); + private: + // Inform the source, that the status of that reference was changed + void fireStatusChanged(ThreatRefStatusChangeEvent& pThreatRefStatusChangeEvent); + + Unit* getSourceUnit(); + private: + float iThreat; + float iTempThreatModifyer; // used for taunt + uint64 iUnitGuid; + bool iOnline; + bool iAccessible; }; //============================================================== @@ -170,14 +169,9 @@ class TRINITY_DLL_SPEC ThreatContainer class TRINITY_DLL_SPEC ThreatManager { - private: - HostilReference* iCurrentVictim; - Unit* iOwner; - ThreatContainer iThreatContainer; - ThreatContainer iThreatOfflineContainer; - - void _addThreat(Unit* target, float threat); public: + friend class HostilReference; + explicit ThreatManager(Unit *pOwner); ~ThreatManager() { clearReferences(); } @@ -191,7 +185,7 @@ class TRINITY_DLL_SPEC ThreatManager bool isThreatListEmpty() { return iThreatContainer.empty();} - bool processThreatEvent(const UnitBaseEvent* pUnitBaseEvent); + void processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusChangeEvent); HostilReference* getCurrentVictim() { return iCurrentVictim; } @@ -212,6 +206,13 @@ class TRINITY_DLL_SPEC ThreatManager std::list<HostilReference*>& getOfflieThreatList() { return iThreatOfflineContainer.getThreatList(); } ThreatContainer& getOnlineContainer() { return iThreatContainer; } ThreatContainer& getOfflineContainer() { return iThreatOfflineContainer; } + private: + void _addThreat(Unit *pVictim, float threat); + + HostilReference* iCurrentVictim; + Unit* iOwner; + ThreatContainer iThreatContainer; + ThreatContainer iThreatOfflineContainer; }; //================================================= diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index dbdbfd9b630..c9f7adc6a81 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4131,6 +4131,7 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) { caster->m_currentSpells[CURRENT_CHANNELED_SPELL]->cancel(); caster->m_currentSpells[CURRENT_CHANNELED_SPELL]=NULL; + } } diff --git a/src/game/World.cpp b/src/game/World.cpp index 4f8797945ff..def0bdf2691 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1781,7 +1781,7 @@ void World::ForceGameEventUpdate() } /// Put scripts in the execution queue -void World::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source, Object* target) +void World::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source, Object* target, bool start) { ///- Find the script map ScriptMapMap::const_iterator s = scripts.find(id); @@ -1809,7 +1809,7 @@ void World::ScriptsStart(ScriptMapMap const& scripts, uint32 id, Object* source, immedScript = true; } ///- If one of the effects should be immediate, launch the script execution - if (immedScript) + if (start && immedScript) ScriptsProcess(); } @@ -2539,12 +2539,9 @@ void World::ScriptsProcess() break; uint32 script_id = step.script->datalong2; - //delete iter and return it to begin pos(next one) - m_scriptSchedule.erase(iter); - iter = m_scriptSchedule.begin(); - - ScriptsStart(*datamap, script_id, target, NULL); - return; + //insert script into schedule but do not start it + ScriptsStart(*datamap, script_id, target, NULL, false); + break; } case SCRIPT_COMMAND_KILL: diff --git a/src/game/World.h b/src/game/World.h index 1200a868201..2f261467a6c 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -530,7 +530,7 @@ class World BanReturn BanAccount(BanMode mode, std::string nameOrIP, std::string duration, std::string reason, std::string author); bool RemoveBanAccount(BanMode mode, std::string nameOrIP); - void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target); + void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target, bool start = true); void ScriptCommandStart(ScriptInfo const& script, uint32 delay, Object* source, Object* target); bool IsScriptScheduled() const { return !m_scriptSchedule.empty(); } |