Skip to content

Commit

Permalink
feat: add Help option, improve icons and gossip menu (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
Helias authored Sep 29, 2024
1 parent c19703e commit 7964c8b
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 21 deletions.
5 changes: 5 additions & 0 deletions data/sql/db-world/base/1v1_Battlemaster.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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);
50 changes: 29 additions & 21 deletions src/npc_arena1v1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
};


Expand All @@ -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;
}

Expand All @@ -71,9 +76,7 @@ class configloader_1v1arena : public WorldScript
std::stringstream ss(sConfigMgr->GetOption<std::string>("Arena1v1.ForbiddenTalentsIDs", "0"));

for (std::string blockedTalentsStr; std::getline(ss, blockedTalentsStr, ',');)
{
forbiddenTalents.push_back(stoi(blockedTalentsStr));
}

ARENA_SLOT_1V1 = sConfigMgr->GetOption<uint32>("Arena1v1.ArenaSlotID", 3);

Expand Down Expand Up @@ -101,12 +104,8 @@ class playerscript_1v1arena : public PlayerScript
void OnGetMaxPersonalArenaRatingRequirement(const Player* player, uint32 minslot, uint32& maxArenaRating) const override
{
if (sConfigMgr->GetOption<bool>("Arena1v1.VendorRating", false) && minslot < (uint32)sConfigMgr->GetOption<uint32>("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
Expand All @@ -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<uint32>("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<uint32>("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;
}
Expand All @@ -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<uint32>("Arena1v1.MinLevel", 70));
handler.PSendSysMessage("You have to be level {} + to create a 1v1 arena team.", sConfigMgr->GetOption<uint32>("Arena1v1.MinLevel", 70));
return true;
}
CloseGossipMenuFor(player);
Expand All @@ -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:
{
Expand All @@ -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:
{
Expand All @@ -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:
{
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 7964c8b

Please sign in to comment.