aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/mangos.sql18
-rw-r--r--sql/updates/1304_world.sql3
-rw-r--r--sql/updates/7615_01_mangos_command.sql9
-rw-r--r--sql/updates/7616_01_mangos_mangos_string.sql6
-rw-r--r--sql/updates/7616_02_mangos_command.sql8
-rw-r--r--src/bindings/interface/ScriptMgr.cpp10
-rw-r--r--src/bindings/interface/ScriptMgr.h2
-rw-r--r--src/game/AchievementMgr.cpp10
-rw-r--r--src/game/CharacterHandler.cpp20
-rw-r--r--src/game/Chat.cpp74
-rw-r--r--src/game/Chat.h274
-rw-r--r--src/game/DBCEnums.h24
-rw-r--r--src/game/DBCStores.cpp8
-rw-r--r--src/game/DBCStores.h2
-rw-r--r--src/game/DBCStructure.h28
-rw-r--r--src/game/DBCfmt.h2
-rw-r--r--src/game/Debugcmds.cpp98
-rw-r--r--src/game/GameObject.cpp9
-rw-r--r--src/game/Language.h7
-rw-r--r--src/game/Level1.cpp2
-rw-r--r--src/game/Level2.cpp11
-rw-r--r--src/game/Level3.cpp11
-rw-r--r--src/game/Player.cpp14
-rw-r--r--src/game/Player.h3
-rw-r--r--src/game/ThreatManager.cpp44
-rw-r--r--src/game/ThreatManager.h41
-rw-r--r--src/game/Unit.cpp1
-rw-r--r--src/game/World.cpp13
-rw-r--r--src/game/World.h2
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(); }