Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add Help option, improve icons and gossip menu #58

Merged
merged 1 commit into from
Sep 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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