diff options
| -rw-r--r-- | sql/base/world_database.sql | 1 | ||||
| -rw-r--r-- | sql/updates/world/2011_08_06_03_world_command.sql | 3 | ||||
| -rwxr-xr-x | src/server/game/Chat/Chat.cpp | 1 | ||||
| -rwxr-xr-x | src/server/game/Chat/Chat.h | 1 | ||||
| -rwxr-xr-x | src/server/game/Chat/Commands/Level3.cpp | 45 |
5 files changed, 51 insertions, 0 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql index 75970291fe4..fd56579cab4 100644 --- a/sql/base/world_database.sql +++ b/sql/base/world_database.sql @@ -386,6 +386,7 @@ INSERT INTO `command` VALUES ('cast dist',3,'Syntax: .cast dist #spellid [#dist [triggered]]\r\n You will cast spell to pint at distance #dist. If ''trigered'' or part provided then spell casted with triggered flag. Not all spells can be casted as area spells.'), ('cast self',3,'Syntax: .cast self #spellid [triggered]\r\nCast #spellid by target at target itself. If ''trigered'' or part provided then spell casted with triggered flag.'), ('cast target',3,'Syntax: .cast target #spellid [triggered]\r\n Selected target will cast #spellid to his victim. If ''trigered'' or part provided then spell casted with triggered flag.'), +('cast dest',3,'Syntax: .cast dest #spellid #x #y #z [triggered]\r\n Selected target will cast #spellid at provided destination. If ''trigered'' or part provided then spell casted with triggered flag.'), ('character customize',2,'Syntax: .character customize [$name]\r\n\r\nMark selected in game or by $name in command character for customize at next login.'), ('character erase',4,'Syntax: .character erase $name\r\n\r\nDelete character $name. Character finally deleted in case any deleting options.'), ('character deleted delete', 4, 'Syntax: .character deleted delete #guid|$name\r\n\r\nCompletely deletes the selected characters.\r\nIf $name is supplied, only characters with that string in their name will be deleted, if #guid is supplied, only the character with that GUID will be deleted.'), diff --git a/sql/updates/world/2011_08_06_03_world_command.sql b/sql/updates/world/2011_08_06_03_world_command.sql new file mode 100644 index 00000000000..7c627b1a94c --- /dev/null +++ b/sql/updates/world/2011_08_06_03_world_command.sql @@ -0,0 +1,3 @@ +DELETE FROM `command` WHERE `name` = 'cast dest'; +INSERT INTO `command` VALUES +('cast dest',3,'Syntax: .cast dest #spellid #x #y #z [triggered]\r\n Selected target will cast #spellid at provided destination. If ''trigered'' or part provided then spell casted with triggered flag.');
\ No newline at end of file diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index d0146184eae..9509302f87b 100755 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -98,6 +98,7 @@ ChatCommand * ChatHandler::getCommandTable() { "dist", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleCastDistCommand>, "", NULL }, { "self", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleCastSelfCommand>, "", NULL }, { "target", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleCastTargetCommand>, "", NULL }, + { "dest", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleCastDestCommand>, "", NULL }, { "", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleCastCommand>, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 217bb9538e2..d7a9c0b66f5 100755 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -152,6 +152,7 @@ class ChatHandler bool HandleCastDistCommand(const char *args); bool HandleCastSelfCommand(const char *args); bool HandleCastTargetCommand(const char *args); + bool HandleCastDestCommand(const char *args); bool HandleCharacterCustomizeCommand(const char * args); bool HandleCharacterChangeFactionCommand(const char * args); diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp index 1959feaaa0e..901d41e5c54 100755 --- a/src/server/game/Chat/Commands/Level3.cpp +++ b/src/server/game/Chat/Commands/Level3.cpp @@ -3957,6 +3957,51 @@ bool ChatHandler::HandleCastTargetCommand(const char *args) return true; } +bool ChatHandler::HandleCastDestCommand(const char *args) +{ + Unit* caster = getSelectedUnit(); + if (!caster) + { + SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); + SetSentErrorMessage(true); + return false; + } + + // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form + uint32 spell = extractSpellIdFromLink((char*)args); + if (!spell || !sSpellMgr->GetSpellInfo(spell)) + { + PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); + SetSentErrorMessage(true); + return false; + } + + char* px = strtok(NULL, " "); + char* py = strtok(NULL, " "); + char* pz = strtok(NULL, " "); + + if (!px || !py || !pz) + return false; + + float x = (float)atof(px); + float y = (float)atof(py); + float z = (float)atof(pz); + + char* trig_str = strtok(NULL, " "); + if (trig_str) + { + int l = strlen(trig_str); + if (strncmp(trig_str, "triggered", l) != 0) + return false; + } + + bool triggered = (trig_str != NULL); + + caster->CastSpell(x, y, z, spell, triggered); + + return true; +} + /* ComeToMe command REQUIRED for 3rd party scripting library to have access to PointMovementGenerator Without this function 3rd party scripting library will get linking errors (unresolved external) |
