Advertisement
Erictemponi

[AzerothCore] Top Kills

Jan 2nd, 2020
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.92 KB | None | 0 0
  1. #include "ScriptMgr.h"
  2. #include "ScriptedGossip.h"
  3.  
  4. using namespace std;
  5.  
  6. class TopKills : public CreatureScript {
  7. public:
  8.     uint64 time1;
  9.     TopKills() : CreatureScript("TopKills") { }
  10.  
  11.     bool OnGossipHello(Player *player, Creature *creature) {
  12.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\Achievement_BG_winWSG:35:35:-14|tTop 5 Total Kills", GOSSIP_SENDER_MAIN, 1);
  13.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_Sword_27:35:35:-14|tWarrior", GOSSIP_SENDER_MAIN, 2);
  14.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\Spell_Holy_DivineIntervention:35:35:-14|tPaladin", GOSSIP_SENDER_MAIN, 3);
  15.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_Weapon_Bow_07:35:35:-14|tHunter", GOSSIP_SENDER_MAIN, 4);
  16.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_ThrowingKnife_04:35:35:-14|tRogue", GOSSIP_SENDER_MAIN, 5);
  17.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_Staff_30:35:35:-14|tPriest", GOSSIP_SENDER_MAIN, 6);
  18.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\Spell_Deathknight_ClassIcon:35:35:-14|tDeath Knight", GOSSIP_SENDER_MAIN, 7);
  19.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\Spell_Nature_BloodLust:35:35:-14|tShaman", GOSSIP_SENDER_MAIN, 8);
  20.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_Staff_13:35:35:-14|tMage", GOSSIP_SENDER_MAIN, 9);
  21.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\Spell_Nature_Drowsy:35:35:-14|tWarlock", GOSSIP_SENDER_MAIN, 10);
  22.         player->ADD_GOSSIP_ITEM(10, "|TInterface\\icons\\INV_Misc_MonsterClaw_04:35:35:-14|tDruid", GOSSIP_SENDER_MAIN, 11);
  23.         player->SEND_GOSSIP_MENU(1, creature->GetGUID());
  24.         return true;
  25.     }
  26.  
  27.     bool OnGossipSelect(Player *player, Creature *creature, uint32 /*sender*/, uint32 action) {
  28.         player->PlayerTalkClass->ClearMenus();
  29.  
  30.         switch (action) {
  31.         case 1: // TOP 5 TOTAL
  32.         {
  33.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters ORDER BY totalKills DESC LIMIT 5");
  34.             if (!result)
  35.                 return false;
  36.  
  37.             Field *fields = NULL;
  38.             uint64 time2 = sWorld->GetGameTime(); // Getting actual game time
  39.  
  40.             if (time2 - time1 >= 30 * 60) { // 30 minutes between anoouncements
  41.                 //ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\Achievement_BG_winWSG:20:20|t |cffFF0000Top 5 Total Kills|r");
  42.                 sWorld->SendServerMessage(SERVER_MSG_STRING, "|TInterface\\icons\\Achievement_BG_winWSG:20:20|t |cffFF0000Top 5 Total Kills|r", 0);
  43.                 do {
  44.                     fields = result->Fetch();
  45.                     string arena_name = fields[0].GetString();
  46.                     uint32 rating = fields[1].GetUInt32();
  47.                     char msg[250];
  48.                     snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  49.                     //ChatHandler(player->GetSession()).SendSysMessage(msg);
  50.                     sWorld->SendServerMessage(SERVER_MSG_STRING, msg, 0);
  51.                     player->CLOSE_GOSSIP_MENU();
  52.                 } while (result->NextRow());
  53.                 time1 = time2;
  54.             } else { // Less than 30 minutes
  55.                 char msg2[250];
  56.                 uint32 tminute = (30*60 - (time2 - time1)) / 60;
  57.                 uint32 tsecond = (30*60 - (time2 - time1)) % 60;
  58.                 snprintf(msg2, 250, "You need to wait %u minute(s) and %u second(s) before showing Top 5 Kills.", tminute, tsecond);
  59.                 ChatHandler(player->GetSession()).SendSysMessage(msg2);
  60.                 player->CLOSE_GOSSIP_MENU();
  61.             }
  62.         }
  63.         break;
  64.  
  65.         case 2: // TOP 5 WARRIOR
  66.         {
  67.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='1' ORDER BY totalKills DESC LIMIT 5");
  68.             if (!result)
  69.                 return false;
  70.  
  71.             Field *fields = NULL;
  72.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_Sword_27:20:20|t |cffFF0000Top 5 Warrior|r");
  73.             do {
  74.                 fields = result->Fetch();
  75.                 string arena_name = fields[0].GetString();
  76.                 uint32 rating = fields[1].GetUInt32();
  77.                 char msg[250];
  78.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  79.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  80.                 player->CLOSE_GOSSIP_MENU();
  81.             } while (result->NextRow());
  82.         }
  83.         break;
  84.  
  85.         case 3: // TOP 5 PALADIN
  86.         {
  87.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='2' ORDER BY totalKills DESC LIMIT 5");
  88.             if (!result)
  89.                 return false;
  90.  
  91.             Field *fields = NULL;
  92.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\Spell_Holy_DivineIntervention:20:20|t |cffFF0000Top 5 Paladin|r");
  93.             do {
  94.                 fields = result->Fetch();
  95.                 string arena_name = fields[0].GetString();
  96.                 uint32 rating = fields[1].GetUInt32();
  97.                 char msg[250];
  98.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  99.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  100.                 player->CLOSE_GOSSIP_MENU();
  101.             } while (result->NextRow());
  102.         }
  103.         break;
  104.  
  105.         case 4: // TOP 5 HUNTER
  106.         {
  107.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='3' ORDER BY totalKills DESC LIMIT 5");
  108.             if (!result)
  109.                 return false;
  110.  
  111.             Field *fields = NULL;
  112.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_Weapon_Bow_07:20:20|t |cffFF0000Top 5 Hunter|r");
  113.             do {
  114.                 fields = result->Fetch();
  115.                 string arena_name = fields[0].GetString();
  116.                 uint32 rating = fields[1].GetUInt32();
  117.                 char msg[250];
  118.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  119.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  120.                 player->CLOSE_GOSSIP_MENU();
  121.             } while (result->NextRow());
  122.         }
  123.         break;
  124.  
  125.         case 5: // TOP 5 ROGUE
  126.         {
  127.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='4' ORDER BY totalKills DESC LIMIT 5");
  128.             if (!result)
  129.                 return false;
  130.  
  131.             Field *fields = NULL;
  132.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_ThrowingKnife_04:20:20|t |cffFF0000Top 5 Rogue|r");
  133.             do {
  134.                 fields = result->Fetch();
  135.                 string arena_name = fields[0].GetString();
  136.                 uint32 rating = fields[1].GetUInt32();
  137.                 char msg[250];
  138.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  139.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  140.                 player->CLOSE_GOSSIP_MENU();
  141.             } while (result->NextRow());
  142.         }
  143.         break;
  144.  
  145.         case 6: // TOP 5 PRIEST
  146.         {
  147.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='5' ORDER BY totalKills DESC LIMIT 5");
  148.             if (!result)
  149.                 return false;
  150.  
  151.             Field *fields = NULL;
  152.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_Staff_30:20:20|t |cffFF0000Top 5 Priest|r");
  153.             do {
  154.                 fields = result->Fetch();
  155.                 string arena_name = fields[0].GetString();
  156.                 uint32 rating = fields[1].GetUInt32();
  157.                 char msg[250];
  158.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  159.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  160.                 player->CLOSE_GOSSIP_MENU();
  161.             } while (result->NextRow());
  162.         }
  163.         break;
  164.  
  165.         case 7: // TOP 5 DEATH KNIGHT
  166.         {
  167.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='6' ORDER BY totalKills DESC LIMIT 5");
  168.             if (!result)
  169.                 return false;
  170.  
  171.             Field *fields = NULL;
  172.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\Spell_Deathknight_ClassIcon:20:20|t |cffFF0000Top 5 Death Knight|r");
  173.             do {
  174.                 fields = result->Fetch();
  175.                 string arena_name = fields[0].GetString();
  176.                 uint32 rating = fields[1].GetUInt32();
  177.                 char msg[250];
  178.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  179.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  180.                 player->CLOSE_GOSSIP_MENU();
  181.             } while (result->NextRow());
  182.         }
  183.         break;
  184.  
  185.         case 8: // TOP 5 SHAMAN
  186.         {
  187.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='7' ORDER BY totalKills DESC LIMIT 5");
  188.             if (!result)
  189.                 return false;
  190.  
  191.             Field *fields = NULL;
  192.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\Spell_Nature_BloodLust:20:20|t |cffFF0000Top 5 Shaman|r");
  193.             do {
  194.                 fields = result->Fetch();
  195.                 string arena_name = fields[0].GetString();
  196.                 uint32 rating = fields[1].GetUInt32();
  197.                 char msg[250];
  198.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  199.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  200.                 player->CLOSE_GOSSIP_MENU();
  201.             } while (result->NextRow());
  202.         }
  203.         break;
  204.  
  205.         case 9: // TOP 5 MAGE
  206.         {
  207.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='8' ORDER BY totalKills DESC LIMIT 5");
  208.             if (!result)
  209.                 return false;
  210.  
  211.             Field *fields = NULL;
  212.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_Staff_13:20:20|t |cffFF0000Top 5 Mage");
  213.             do {
  214.                 fields = result->Fetch();
  215.                 string arena_name = fields[0].GetString();
  216.                 uint32 rating = fields[1].GetUInt32();
  217.                 char msg[250];
  218.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  219.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  220.                 player->CLOSE_GOSSIP_MENU();
  221.             } while (result->NextRow());
  222.         }
  223.         break;
  224.  
  225.         case 10: // TOP 5 WARLOCK
  226.         {
  227.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='9' ORDER BY totalKills DESC LIMIT 5");
  228.             if (!result)
  229.                 return false;
  230.  
  231.             Field *fields = NULL;
  232.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\Spell_Nature_Drowsy:20:20|t |cffFF0000Top 5 Warlock|r");
  233.             do {
  234.                 fields = result->Fetch();
  235.                 string arena_name = fields[0].GetString();
  236.                 uint32 rating = fields[1].GetUInt32();
  237.                 char msg[250];
  238.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  239.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  240.                 player->CLOSE_GOSSIP_MENU();
  241.             } while (result->NextRow());
  242.         }
  243.         break;
  244.  
  245.         case 11: // TOP 5 DRUID
  246.         {
  247.             QueryResult result = CharacterDatabase.Query("SELECT name,totalKills FROM characters WHERE class='11' ORDER BY totalKills DESC LIMIT 5");
  248.             if (!result)
  249.                 return false;
  250.  
  251.             Field *fields = NULL;
  252.             ChatHandler(player->GetSession()).SendSysMessage("|TInterface\\icons\\INV_Misc_MonsterClaw_04:20:20|t |cffFF0000Top 5 Druid|r");
  253.             do {
  254.                 fields = result->Fetch();
  255.                 string arena_name = fields[0].GetString();
  256.                 uint32 rating = fields[1].GetUInt32();
  257.                 char msg[250];
  258.                 snprintf(msg, 250, "Name: |cffFF0000%s|r Kills: |cffFF0000%u|r ", arena_name.c_str(), rating);
  259.                 ChatHandler(player->GetSession()).SendSysMessage(msg);
  260.                 player->CLOSE_GOSSIP_MENU();
  261.             } while (result->NextRow());
  262.         }
  263.         break;
  264.         }
  265.  
  266.         return true;
  267.     }
  268. };
  269.  
  270. void AddSC_TopKills()
  271. {
  272.     new TopKills;
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement