mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
334 lines
12 KiB
C++
334 lines
12 KiB
C++
|
|
#include "ScriptPCH.h"
|
||
|
|
|
||
|
|
enum Actions
|
||
|
|
{
|
||
|
|
// alliance
|
||
|
|
ACTION_TITLE_PRIVATE,
|
||
|
|
ACTION_TITLE_CORPORAL,
|
||
|
|
ACTION_TITLE_SERGEANT,
|
||
|
|
ACTION_TITLE_MASTER_SERGEANT,
|
||
|
|
ACTION_TITLE_SERGEANT_MAJOR,
|
||
|
|
ACTION_TITLE_KNIGHT,
|
||
|
|
ACTION_TITLE_KNIGHT_LIEUTENANT,
|
||
|
|
ACTION_TITLE_KNIGHT_CAPTAIN,
|
||
|
|
ACTION_TITLE_KNIGHT_CHAMPION,
|
||
|
|
ACTION_TITLE_LIEUTENANT_COMMANDER,
|
||
|
|
ACTION_TITLE_COMMANDER,
|
||
|
|
ACTION_TITLE_MARSHAL,
|
||
|
|
ACTION_TITLE_FIELD_MARSHAL,
|
||
|
|
ACTION_TITLE_GRAND_MARSHAL,
|
||
|
|
// horde
|
||
|
|
ACTION_TITLE_SCOUT,
|
||
|
|
ACTION_TITLE_GRUNT,
|
||
|
|
ACTION_TITLE_SERGEANT_H,
|
||
|
|
ACTION_TITLE_SENIOR_SERGEANT,
|
||
|
|
ACTION_TITLE_FIRST_SERGEANT,
|
||
|
|
ACTION_TITLE_STONE_GUARD,
|
||
|
|
ACTION_TITLE_BLOOD_GUARD,
|
||
|
|
ACTION_TITLE_LEGIONNAIRE,
|
||
|
|
ACTION_TITLE_CENTURION,
|
||
|
|
ACTION_TITLE_CHAMPION,
|
||
|
|
ACTION_TITLE_LIEUTENANT_GENERAL,
|
||
|
|
ACTION_TITLE_GENERAL,
|
||
|
|
ACTION_TITLE_WARLORD,
|
||
|
|
ACTION_TITLE_HIGH_WARLORD
|
||
|
|
};
|
||
|
|
|
||
|
|
class TitleNpc : public CreatureScript
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
TitleNpc() : CreatureScript("TitleNpc"){}
|
||
|
|
|
||
|
|
uint32 GetTotalKill(Player* player)
|
||
|
|
{
|
||
|
|
QueryResult result = CharacterDatabase.PQuery("SELECT totalKills FROM characters WHERE guid = %u", player->GetGUID());
|
||
|
|
if (result)
|
||
|
|
{
|
||
|
|
Field* field = result->Fetch();
|
||
|
|
if (field)
|
||
|
|
return field[0].GetUInt32();
|
||
|
|
}
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool OnGossipHello(Player* player, Creature* creature)
|
||
|
|
{
|
||
|
|
if (player->GetTeam() == ALLIANCE)
|
||
|
|
{
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_01:24|t|r Private.(1 Kill)", GOSSIP_SENDER_MAIN, ACTION_TITLE_PRIVATE);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_02:24|t|r Corporal.(50 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_CORPORAL);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_03:24|t|r Sergeant.(100 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_SERGEANT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_04:24|t|r Master Sergeant.(250 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_MASTER_SERGEANT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_05:24|t|r Sergeant Major.(500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_SERGEANT_MAJOR);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_06:24|t|r Knight.(750 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_KNIGHT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_07:24|t|r Knight Lieutenant.(1000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_KNIGHT_LIEUTENANT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_08:24|t|r Knight Captain.(1500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_KNIGHT_CAPTAIN);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_09:24|t|r Knight Champion.(3000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_KNIGHT_CHAMPION);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_10:24|t|r Lieutenant Commander.(5000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_LIEUTENANT_COMMANDER);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_11:24|t|r Commander.(7500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_COMMANDER);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_12:24|t|r Marshal.(10000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_MARSHAL);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_13:24|t|r Field Marshal.(15000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_FIELD_MARSHAL);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_A_14:24|t|r Grand Marshal.(30000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_GRAND_MARSHAL);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_01:24|t|r Scout.(1 Kill)", GOSSIP_SENDER_MAIN, ACTION_TITLE_SCOUT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_02:24|t|r Grunt.(50 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_GRUNT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_03:24|t|r Sergeant.(100 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_SERGEANT_H);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_04:24|t|r Senior Sergeant.(250 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_SENIOR_SERGEANT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_05:24|t|r First Sergeant.(500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_FIRST_SERGEANT);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_06:24|t|r Stone Guard.(750 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_STONE_GUARD);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_07:24|t|r Blood Guard.(1000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_BLOOD_GUARD);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_08:24|t|r Legionnaire.(1500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_LEGIONNAIRE);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_09:24|t|r Centurion.(3000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_CENTURION);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_10:24|t|r Champion.(5000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_CHAMPION);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_11:24|t|r Lieutenant General.(7500 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_LIEUTENANT_GENERAL);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_12:24|t|r General.(10000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_GENERAL);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_13:24|t|r Warlord.(15000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_WARLORD);
|
||
|
|
player->ADD_GOSSIP_ITEM(4, "|cff00ff00|TInterface\\icons\\Achievement_PVP_H_14:24|t|r High Warlord.(30000 Kills)", GOSSIP_SENDER_MAIN, ACTION_TITLE_HIGH_WARLORD);
|
||
|
|
}
|
||
|
|
player->PlayerTalkClass->SendGossipMenu(9425, creature->GetGUID());
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool OnGossipSelect(Player* Player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
|
||
|
|
{
|
||
|
|
WorldSession* ws = Player->GetSession();
|
||
|
|
|
||
|
|
switch (uiAction)
|
||
|
|
{
|
||
|
|
case ACTION_TITLE_PRIVATE:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(1));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_CORPORAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 50)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(2));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_SERGEANT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 100)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(3));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_MASTER_SERGEANT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 250)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(4));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_SERGEANT_MAJOR:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(5));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_KNIGHT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 750)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(6));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_KNIGHT_LIEUTENANT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(7));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_KNIGHT_CAPTAIN:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(8));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_KNIGHT_CHAMPION:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 3000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(9));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_LIEUTENANT_COMMANDER:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 5000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(10));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_COMMANDER:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 7500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(11));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_MARSHAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 10000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(12));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_FIELD_MARSHAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 15000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(13));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_GRAND_MARSHAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 30000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(14));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_SCOUT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(15));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_GRUNT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 50)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(16));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_SERGEANT_H:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 100)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(17));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_SENIOR_SERGEANT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 250)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(18));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_FIRST_SERGEANT:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(19));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_STONE_GUARD:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 750)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(20));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_BLOOD_GUARD:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(21));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_LEGIONNAIRE:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 1500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(22));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_CENTURION:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 3000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(23));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_CHAMPION:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 5000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(24));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_LIEUTENANT_GENERAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 7500)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(25));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_GENERAL:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 10000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(26));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_WARLORD:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 15000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(27));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case ACTION_TITLE_HIGH_WARLORD:
|
||
|
|
{
|
||
|
|
if (GetTotalKill(Player) >= 30000)
|
||
|
|
Player->SetTitle(sCharTitlesStore.LookupEntry(28));
|
||
|
|
else
|
||
|
|
ws->SendNotification("You dont have enough kills");
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
Player->PlayerTalkClass->SendCloseGossip();
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
void AddSC_TitleNpc()
|
||
|
|
{
|
||
|
|
new TitleNpc();
|
||
|
|
}
|