diff --git a/data/sql/db-world/base/1v1_Battlemaster.sql b/data/sql/db-world/base/1v1_Battlemaster.sql index c053cf5..2118b1f 100644 --- a/data/sql/db-world/base/1v1_Battlemaster.sql +++ b/data/sql/db-world/base/1v1_Battlemaster.sql @@ -15,3 +15,8 @@ INSERT INTO `command` (`name`, `security`, `help`) VALUES ('q1v1', 0, 'Syntax .q1v1 rated/unrate\nJoin arena 1v1 rated or unrated'), ('q1v1 rated', 0, 'Syntax .q1v1 rated\nJoin arena 1v1 rated'), ('q1v1 unrated', 0, 'Syntax .q1v1 unrated\nJoin arena 1v1 unrated'); + +SET @NPC_TEXT_1v1="This NPC enables you to join 1v1 unrated arenas, create a 1v1 arena team, and join 1v1 rated arenas.$B$BIf you prefer not to interact with the NPC, you can use the following commands to join or create the arena:$B$B.q1v1 rated$B$B.q1v1 unrated$B$BNote that if you don’t already have a 1v1 arena team, using .q1v1 rated will automatically create one for you."; +DELETE FROM `npc_text` WHERE `id`=999992; +INSERT INTO `npc_text` (`id`, `text0_0`, `text0_1`, `Probability0`) VALUES +(999992, @NPC_TEXT_1v1, @NPC_TEXT_1v1, 1); diff --git a/src/npc_arena1v1.cpp b/src/npc_arena1v1.cpp index c225902..10b3ae9 100644 --- a/src/npc_arena1v1.cpp +++ b/src/npc_arena1v1.cpp @@ -23,6 +23,8 @@ #include "Chat.h" #include "npc_1v1arena.h" +#define NPC_TEXT_ENTRY_1v1 999992 + //Const for 1v1 arena constexpr uint32 ARENA_TEAM_1V1 = 1; constexpr uint32 ARENA_TYPE_1V1 = 1; @@ -39,7 +41,9 @@ enum npcActions { NPC_ARENA_1V1_ACTION_LEAVE_QUEUE = 3, NPC_ARENA_1V1_ACTION_GET_STATISTICS = 4, NPC_ARENA_1V1_ACTION_DISBAND_ARENA_TEAM = 5, - NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_UNRATED = 20 + NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_UNRATED = 20, + NPC_ARENA_1V1_MAIN_MENU = 21, + NPC_ARENA_1V1_ACTION_HELP = 22, }; @@ -48,6 +52,7 @@ bool teamExistForPlayerGuid(Player* player) QueryResult queryPlayerTeam = CharacterDatabase.Query("SELECT * FROM `arena_team` WHERE `captainGuid`={} AND `type`=1", player->GetGUID().GetCounter()); if (queryPlayerTeam) return true; + return false; } @@ -71,9 +76,7 @@ class configloader_1v1arena : public WorldScript std::stringstream ss(sConfigMgr->GetOption("Arena1v1.ForbiddenTalentsIDs", "0")); for (std::string blockedTalentsStr; std::getline(ss, blockedTalentsStr, ',');) - { forbiddenTalents.push_back(stoi(blockedTalentsStr)); - } ARENA_SLOT_1V1 = sConfigMgr->GetOption("Arena1v1.ArenaSlotID", 3); @@ -101,12 +104,8 @@ class playerscript_1v1arena : public PlayerScript void OnGetMaxPersonalArenaRatingRequirement(const Player* player, uint32 minslot, uint32& maxArenaRating) const override { if (sConfigMgr->GetOption("Arena1v1.VendorRating", false) && minslot < (uint32)sConfigMgr->GetOption("Arena1v1.ArenaSlotID", 3)) - { if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamByCaptain(player->GetGUID(), ARENA_TEAM_1V1)) - { maxArenaRating = std::max(at->GetRating(), maxArenaRating); - } - } } void OnGetArenaTeamId(Player* player, uint8 slot, uint32& result) override @@ -132,29 +131,27 @@ bool npc_1v1arena::OnGossipHello(Player* player, Creature* creature) } if (player->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeId)) - { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Queue leave 1v1 Arena", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_LEAVE_QUEUE, "Are you sure?", 0, false); - } + AddGossipItemFor(player, GOSSIP_ICON_DOT, "|TInterface/ICONS/Achievement_Arena_2v2_7:30:30:-20:0|t Queue leave 1v1 Arena", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_LEAVE_QUEUE, "Are you sure?", 0, false); else - { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Queue enter 1v1 Arena (UnRated)", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_UNRATED); - } + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface\\icons\\Achievement_Arena_2v2_4:30:30:-20:0|t Queue enter 1v1 Arena (UnRated)", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_UNRATED); if (!teamExistForPlayerGuid(player)) { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Create new 1v1 Arena Team", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_CREATE_ARENA_TEAM, "Are you sure?", sConfigMgr->GetOption("Arena1v1.Costs", 400000), false); + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface/ICONS/Achievement_Arena_2v2_7:30:30:-20:0|t Create new 1v1 Arena Team", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_CREATE_ARENA_TEAM, "Are you sure?", sConfigMgr->GetOption("Arena1v1.Costs", 400000), false); } else { if (!player->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeId)) { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Queue enter 1v1 Arena (Rated)", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_RATED); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Arenateam Clear", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_DISBAND_ARENA_TEAM, "Are you sure?", 0, false); + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface\\icons\\Achievement_Arena_2v2_1:30:30:-20:0|t Queue enter 1v1 Arena (Rated)", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_RATED); + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface/ICONS/Achievement_Arena_2v2_7:30:30:-20:0|t Arenateam Clear", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_DISBAND_ARENA_TEAM, "Are you sure?", 0, false); } - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Shows your statistics", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_GET_STATISTICS); + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface/ICONS/INV_Misc_Coin_01:30:30:-20:0|t Shows your statistics", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_GET_STATISTICS); } + AddGossipItemFor(player, GOSSIP_ICON_VENDOR, "|TInterface/ICONS/inv_misc_questionmark:30:30:-20:0|t Help", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_ACTION_HELP); + SendGossipMenuFor(player, 68, creature); return true; } @@ -179,7 +176,7 @@ bool npc_1v1arena::OnGossipSelect(Player* player, Creature* creature, uint32 /*s } else { - handler.PSendSysMessage("You have to be level %u + to create a 1v1 arena team.", sConfigMgr->GetOption("Arena1v1.MinLevel", 70)); + handler.PSendSysMessage("You have to be level {} + to create a 1v1 arena team.", sConfigMgr->GetOption("Arena1v1.MinLevel", 70)); return true; } CloseGossipMenuFor(player); @@ -194,7 +191,7 @@ bool npc_1v1arena::OnGossipSelect(Player* player, Creature* creature, uint32 /*s CloseGossipMenuFor(player); return true; } - break; + case NPC_ARENA_1V1_ACTION_JOIN_QUEUE_ARENA_UNRATED: { @@ -204,7 +201,6 @@ bool npc_1v1arena::OnGossipSelect(Player* player, Creature* creature, uint32 /*s CloseGossipMenuFor(player); return true; } - break; case NPC_ARENA_1V1_ACTION_LEAVE_QUEUE: { @@ -219,7 +215,7 @@ bool npc_1v1arena::OnGossipSelect(Player* player, Creature* creature, uint32 /*s CloseGossipMenuFor(player); return true; } - break; + case NPC_ARENA_1V1_ACTION_GET_STATISTICS: { @@ -249,8 +245,20 @@ bool npc_1v1arena::OnGossipSelect(Player* player, Creature* creature, uint32 /*s CloseGossipMenuFor(player); return true; } + + case NPC_ARENA_1V1_ACTION_HELP: + { + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "<- Back", GOSSIP_SENDER_MAIN, NPC_ARENA_1V1_MAIN_MENU); + SendGossipMenuFor(player, NPC_TEXT_ENTRY_1v1, creature->GetGUID()); + } break; + + case NPC_ARENA_1V1_MAIN_MENU: + OnGossipHello(player, creature); + break; + } + return true; }