Всем доброго дня Помогите оптимизировать этот патч под 4.3.4 вопшем текуший патч накатывается норм но команды не выполняет пишит нету такой команды может ктонибуть поможет
diff --git a/sql/custom/custom_commands_recruiter.sql b/sql/custom/custom_commands_recruiter.sql new file mode 100644 index 0000000..f36274c --- /dev/null +++ b/sql/custom/custom_commands_recruiter.sql @@ -0,0 +1,16 @@ +SET NAMES 'utf8'; + +DELETE FROM `command` WHERE `name`='promote friend'; +DELETE FROM `command` WHERE `name`='recruit friend'; +DELETE FROM `command` WHERE `name`='recruit delete'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('recruit friend', 0, 'Syntax: .recruit friend $CharacterName\r\nAllow set ingame friend(recruiter) to get party bonuses'), +('recruit delete', 1, 'Syntax: .recruit delete\r\nAllow delete recruiter data'); + +DELETE FROM `trinity_string` WHERE entry IN (788, 789, 790, 791); +INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES +('788', 'ERROR! You already set your recruiter', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Ошибка! Вы уже указали рекрутера.'), +('789', 'All characters from account of player %s now your friends. Please RE-Login to changes take effect.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Все персонажи с аккаунта игрока %s стали вашими друзьями. Пожалуйста перезалогиньтесь в игру чтобы изминения вступили в силу.'), +('790', '|cFF14ABFFYour friend (recruit)|cFFFF0021 %s |cFF14ABFFis loged in|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '|cFF14ABFFВаш друг (рекрут)|cFFFF0021 %s |cFF14ABFFзашел в игру|r'), +('791', '|cFF14ABFFYour friend (recruiter)|cFFFF0021 %s |cFF14ABFFis loged in|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '|cFF14ABFFВаш друг (рекрутер)|cFFFF0021 %s |cFF14ABFFзашел в игру|r'), +('792', 'You have deleted your recruiter data. Please RE-Login to changes take effect.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Вы успешно удалили данные о рекрутере. Пожалуйста перезалогиньтесь в игру чтобы изминения вступили в силу.'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 0da63a6..17c03ed 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -750,6 +750,12 @@ enum TrinityStrings // LANG_BG_AB_START_TWO_MINUTES = 754, - defined above // LANG_BG_EY_START_TWO_MINUTES = 755, - defined above
+ LANG_PLAYER_CAN_NOT_SET_RECRUITER = 788, + LANG_PLAYER_SET_RECRUITER_SUCCESS = 789, + RECRUIT_ONLINE = 790, + RECRUITER_ONLINE = 791, + LANG_PLAYER_DELETE_RECRUITER = 792, + // Room for BG/ARENA = 773-784, 788-799 not used LANG_ARENA_TESTING = 785, LANG_AUTO_ANN = 786, diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index ce31fa1..01e5150 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -18,6 +18,7 @@ set(scripts_STAT_SRCS Commands/cs_cast.cpp Commands/cs_character.cpp Commands/cs_cheat.cpp + Commands/cs_custom.cpp Commands/cs_debug.cpp Commands/cs_deserter.cpp Commands/cs_disable.cpp diff --git a/src/server/scripts/Commands/cs_custom.cpp b/src/server/scripts/Commands/cs_custom.cpp new file mode 100644 index 0000000..64360d6 --- /dev/null +++ b/src/server/scripts/Commands/cs_custom.cpp @@ -0,0 +1,109 @@ +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "AccountMgr.h" +#include "Player.h" +#include "Chat.h" +#include "ObjectMgr.h" +#include "ScriptMgr.h" +#include "Chat.h" +#include "Language.h" + + +class custom_commandscript : public CommandScript +{ +public: + custom_commandscript() : CommandScript("custom_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand customCommandTable[] = + { + { "friend", SEC_PLAYER, true, &HandleSetPlayerRecruitCommand, "", NULL }, + { "delete", SEC_PLAYER, true, &HandleDeletePlayerRecruitCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "recruit", SEC_PLAYER, true, NULL, "", customCommandTable}, + { NULL, 0, false, NULL, "", NULL } + }; + + return commandTable; + } + + static bool HandleSetPlayerRecruitCommand(ChatHandler* handler, const char* args) + { + + Player* target; + uint64 targetGuid; + uint64 recruiter = 0; + std::string targetName; + + if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) + return false; + + if (Player* initiator = handler->GetSession()->GetPlayer()) + { + uint64 InitiatorAccount = sObjectMgr->GetPlayerAccountIdByGUID(initiator->GetGUID()); + uint64 FriendAccount = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); + + if (InitiatorAccount != FriendAccount) + { + if (handler->GetSession()->GetRecruiterId() == 0) + { + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SET_RECRUITER); + stmt->setUInt64(0, FriendAccount); + stmt->setUInt64(1, InitiatorAccount); + LoginDatabase.Execute(stmt); + + handler->PSendSysMessage(LANG_PLAYER_SET_RECRUITER_SUCCESS, targetName.c_str()); + } + else + { + handler->PSendSysMessage(LANG_PLAYER_CAN_NOT_SET_RECRUITER); + //handler->PSendSysMessage("%u", recruiter); + } + } + else + { + handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND); + return false; + } + } + return true; + } + + static bool HandleDeletePlayerRecruitCommand(ChatHandler* handler, const char* /*args*/) + { + Player* initiator = handler->GetSession()->GetPlayer(); + uint64 InitiatorAccount = sObjectMgr->GetPlayerAccountIdByGUID(initiator->GetGUID()); + + PreparedStatement* stmt; + stmt = LoginDatabase.GetPreparedStatement(LOGIN_DELETE_RECRUITER); + stmt->setUInt64(0, InitiatorAccount); + LoginDatabase.Execute(stmt); + + handler->PSendSysMessage(LANG_PLAYER_DELETE_RECRUITER); + + return true; + } +}; + +void AddSC_custom_commandscript() +{ + new custom_commandscript(); +} \ No newline at end of file diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index 6113dd6..42818f6 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -106,4 +106,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH); PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC); + + PrepareStatement(LOGIN_SET_RECRUITER, "UPDATE account SET recruiter = ? WHERE id = ?", CONNECTION_ASYNC); + PrepareStatement(LOGIN_DELETE_RECRUITER, "UPDATE account SET recruiter = 0 WHERE id = ?", CONNECTION_ASYNC); } diff --git a/src/server/shared/Database/Implementation/LoginDatabase.h b/src/server/shared/Database/Implementation/LoginDatabase.h index 97cf91f..cbe712f 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.h +++ b/src/server/shared/Database/Implementation/LoginDatabase.h @@ -113,6 +113,9 @@ enum LoginDatabaseStatements LOGIN_SEL_IP2NATION_COUNTRY, LOGIN_SEL_AUTOBROADCAST,
rbac_role_permissions нету у меня такой базы но вот в rbac_permissions прописал вот так сначало вот так Command: recruit delete а потом без Command: но не робит всеровно в worldservere пишит типо в таближе command нету команды recruet хз может проблема в то что в sql к патчу в command колонка security а у меня permission и я permission прописал любой может из за этого не робит но мне кажется просто пачт некатируется на 434
Вместо SEC_PLAYER Поставь rbac::RPAC_PERM_COMMAND_RECRUIT Чтобы добавить RPAC_PERM_COMMAND_RECRUIT зайди в src/server/game/Accounts/RBAC.h найти RBAC_PERM_COMMAND_WP_SHOW = 774, ниже добавь RPAC_PERM_COMMAND_RECRUIT = 800,
Запросы в базу auth
1)
Код
DELETE FROM `rbac_permissions` WHERE id='800'; INSERT INTO `rbac_permissions` VALUES ('800', 'commands: recruit');
2) Для игроков Значение = 195 | Для модера = 194 | Для GameMastera = 193 | Для админа = 192
Код
DELETE FROM `rbac_linked_permissions` WHERE linkedId='800'; INSERT INTO `rbac_linked_permissions` VALUES ('Значение', '800');
Добавлено (02.06.2014, 14:44) --------------------------------------------- Да и еще добавь #include "RBAC.h"
Сообщение # 5 отредактировано doomkas - Понедельник, 02.06.2014, 14:43