From 928ea2bdcf33e5dbb3396699df6348cd15178861 Mon Sep 17 00:00:00 2001 From: Fredi Date: Mon, 3 Nov 2008 16:19:23 -0200 Subject: [PATCH] [6810] Added new command: .sendmoney player "subject" "message" money - Sends a mail with money to a player Signed-off-by: VladimirMangos --- sql/mangos.sql | 3 +- sql/updates/2008_11_09_02_mangos_command.sql | 5 ++ sql/updates/Makefile.am | 2 + src/game/Chat.cpp | 1 + src/game/Chat.h | 2 +- src/game/Level3.cpp | 89 ++++++++++++++++++++ src/shared/revision_nr.h | 2 +- 7 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 sql/updates/2008_11_09_02_mangos_command.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 382abdf70..0afdf1261 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_2008_11_09_01_mangos_command` bit(1) default NULL + `required_2008_11_09_02_mangos_command` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -396,6 +396,7 @@ INSERT INTO `command` VALUES ('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.'), ('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.'), diff --git a/sql/updates/2008_11_09_02_mangos_command.sql b/sql/updates/2008_11_09_02_mangos_command.sql new file mode 100644 index 000000000..50cd5d9ab --- /dev/null +++ b/sql/updates/2008_11_09_02_mangos_command.sql @@ -0,0 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_2008_11_09_01_mangos_command required_2008_11_09_02_mangos_command bit; + +delete from `command` where `name` = 'sendmoney'; +insert into `command` (`name`, `security`, `help`) values +('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 "".'); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 697618dfd..d24d427e2 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -128,6 +128,7 @@ pkgdata_DATA = \ 2008_11_07_03_characters_guild_bank_tab.sql \ 2008_11_07_04_realmd_account.sql \ 2008_11_09_01_mangos_command.sql \ + 2008_11_09_02_mangos_command.sql \ README ## Additional files to include when running 'make dist' @@ -237,4 +238,5 @@ EXTRA_DIST = \ 2008_11_07_03_characters_guild_bank_tab.sql \ 2008_11_07_04_realmd_account.sql \ 2008_11_09_01_mangos_command.sql \ + 2008_11_09_02_mangos_command.sql \ README diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 0389ef9ec..3662ad4e0 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -522,6 +522,7 @@ ChatCommand * ChatHandler::getCommandTable() { "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 }, { "rename", SEC_GAMEMASTER, true, &ChatHandler::HandleRenameCommand, "", NULL }, { "loadscripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleLoadScriptsCommand, "", NULL }, { "mute", SEC_GAMEMASTER, true, &ChatHandler::HandleMuteCommand, "", NULL }, diff --git a/src/game/Chat.h b/src/game/Chat.h index 1170ec9ff..86f310ee5 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -119,6 +119,7 @@ class ChatHandler bool HandleDrunkCommand(const char* args); bool HandleSendItemsCommand(const char* args); bool HandleSendMailCommand(const char* args); + bool HandleSendMoneyCommand(const char* args); bool HandleEventActiveListCommand(const char* args); bool HandleEventStartCommand(const char* args); @@ -414,7 +415,6 @@ class ChatHandler bool HandleSendMessageCommand(const char * args); bool HandleRepairitemsCommand(const char* args); bool HandleWaterwalkCommand(const char* args); - bool HandleSendMoneyCommand(const char* args); //! Development Commands bool HandleSetValue(const char* args); diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 622156a07..14de32781 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -6274,6 +6274,95 @@ bool ChatHandler::HandleSendItemsCommand(const char* args) return true; } +///Send money by mail +bool ChatHandler::HandleSendMoneyCommand(const char* args) +{ + if (!*args) + return false; + + /// format: name "subject text" "mail text" money + + char* pName = strtok((char*)args, " "); + if (!pName) + return false; + + char* tail1 = strtok(NULL, ""); + if (!tail1) + return false; + + char* msgSubject; + if (*tail1=='"') + msgSubject = strtok(tail1+1, "\""); + else + { + char* space = strtok(tail1, "\""); + if (!space) + return false; + msgSubject = strtok(NULL, "\""); + } + + if (!msgSubject) + return false; + + char* tail2 = strtok(NULL, ""); + if (!tail2) + return false; + + char* msgText; + if (*tail2=='"') + msgText = strtok(tail2+1, "\""); + else + { + char* space = strtok(tail2, "\""); + if (!space) + return false; + msgText = strtok(NULL, "\""); + } + + if (!msgText) + return false; + + int32 money = atoi(strtok(NULL, "")); + if (money <= 0) + return false; + + // pName, msgSubject, msgText isn't NUL after prev. check + std::string name = pName; + std::string subject = msgSubject; + std::string text = msgText; + + if (!normalizePlayerName(name)) + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage(true); + return false; + } + + uint64 receiver_guid = objmgr.GetPlayerGUIDByName(name); + if (!receiver_guid) + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage(true); + return false; + } + + uint32 mailId = objmgr.GenerateMailID(); + + // from console show not existed sender + uint32 sender_guidlo = m_session ? m_session->GetPlayer()->GetGUIDLow() : 0; + + uint32 messagetype = MAIL_NORMAL; + uint32 stationery = MAIL_STATIONERY_GM; + uint32 itemTextId = !text.empty() ? objmgr.CreateItemText( text ) : 0; + + Player *receiver = objmgr.GetPlayer(receiver_guid); + + WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, NULL, money, 0, MAIL_CHECK_MASK_NONE); + + PSendSysMessage(LANG_MAIL_SENT, name.c_str()); + return true; +} + /// Send a message to a player in game bool ChatHandler::HandleSendMessageCommand(const char* args) { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3a485697c..b5f334137 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "6809" + #define REVISION_NR "6810" #endif // __REVISION_NR_H__