Guest User

Killstreak.cpp

a guest
Jan 14th, 2024
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.35 KB | None | 0 0
  1. /**
  2.     This plugin can be used for common player customizations
  3.  */
  4.  
  5. #include "ScriptPCH.h"
  6. #include "Config.h"
  7. #include <unordered_map>
  8.  
  9.  
  10. uint32 conf_minAmmount = 0;
  11. uint32 conf_PVPToken = 0;
  12. bool conf_AnnounceType = 0;
  13.  
  14. /* CLASS COLORS */
  15. std::string kill_streak_ClassColor[11] =
  16. {
  17.     "|cffC79C6E", // WARRIOR
  18.     "|cffF58CBA", // PALADIN
  19.     "|cffABD473", // HUNTER
  20.     "|cffFFF569", // ROGUE
  21.     "|cffFFFFFF", // PRIEST
  22.     "|cffC41F3B", // DEATHKNIGHT
  23.     "|cff0070DE", // SHAMAN
  24.     "|cff40C7EB", // MAGE
  25.     "|cff8787ED", // WARLOCK
  26.     "", // ADDED IN MOP FOR MONK - NOT USED
  27.     "|cffFF7D0A", // DRUID
  28. };
  29.  
  30. struct SystemInfo
  31. {
  32.     uint32 KillStreak = 0;
  33.     uint32 LastGUIDKill = 0;
  34.     uint32 LastKillTime = 0;
  35. };
  36.  
  37. static std::unordered_map<uint32, SystemInfo> KillingStreak;
  38.  
  39. class MODKillStreak_Config : public WorldScript
  40. {
  41. public: MODKillStreak_Config() : WorldScript("MODKillStreak_Config") { };
  42.     void OnBeforeConfigLoad(bool reload) override
  43.     {
  44.         if (!reload) {
  45.             std::string conf_path = _CONF_DIR;
  46.             std::string cfg_file = conf_path + "/mod_killstreak.conf";
  47.             std::string cfg_file_2 = cfg_file + ".dist";
  48.  
  49.             sConfigMgr->LoadMore(cfg_file_2.c_str());
  50.             sConfigMgr->LoadMore(cfg_file.c_str());
  51.             conf_minAmmount = sConfigMgr->GetIntDefault("KillStreak.MinAmount", 10);
  52.             conf_PVPToken = sConfigMgr->GetIntDefault("KillStreak.PVPToken", 29434);
  53.             conf_AnnounceType = sConfigMgr->GetBoolDefault("KillStreak.AnnounceGlobal", true);
  54.         }
  55.     }
  56. };
  57.  
  58. class MODKillStreak : public PlayerScript{
  59. public:
  60.  
  61.     MODKillStreak() : PlayerScript("MODKillStreak") { }
  62.  
  63.     void SendKillStreakMessage(Player* pKiller, char* msg) {
  64.         if(conf_AnnounceType)
  65.             sWorld->SendGlobalText(msg, NULL);
  66.         else
  67.             sWorld->SendZoneText(pKiller->GetZoneId(), msg, NULL, TEAM_NEUTRAL);
  68.     }
  69.  
  70.     void OnPVPKill(Player *pKiller, Player *pVictim)
  71.     {
  72.         uint32 killerGUID;
  73.         uint32 victimGUID;
  74.         killerGUID = pKiller->GetGUID();
  75.         victimGUID = pVictim->GetGUID();
  76.  
  77.         uint32 currentTime = sWorld->GetGameTime();
  78.         if(killerGUID == victimGUID)
  79.         {
  80.             return;
  81.         }
  82.         if(KillingStreak[killerGUID].LastKillTime == 0){
  83.             KillingStreak[killerGUID].LastKillTime = sWorld->GetGameTime();
  84.         }
  85.         else if  (sWorld->GetGameTime() - KillingStreak[killerGUID].LastKillTime >= 2 * 60) { // hold the kill streak only for 2 minutes
  86.             KillingStreak[killerGUID].KillStreak = 0;
  87.             KillingStreak[killerGUID].LastKillTime = sWorld->GetGameTime();
  88.             KillingStreak[killerGUID].LastGUIDKill = 0;
  89.         }
  90.         if(KillingStreak[killerGUID].LastGUIDKill == victimGUID) {
  91.             //return;
  92.         }
  93.         KillingStreak[killerGUID].KillStreak++;
  94.         KillingStreak[victimGUID].KillStreak = 0;
  95.         KillingStreak[killerGUID].LastGUIDKill = victimGUID;
  96.         KillingStreak[victimGUID].LastGUIDKill = 0;
  97.         KillingStreak[victimGUID].LastKillTime = 0;
  98.  
  99.         char msg[1000];
  100.  
  101.         if (KillingStreak[killerGUID].KillStreak % conf_minAmmount == 0) {
  102.             pKiller->AddItem(conf_PVPToken, KillingStreak[killerGUID].KillStreak);
  103.             switch (KillingStreak[killerGUID].KillStreak / conf_minAmmount) {
  104.             case 1:
  105.                 sprintf(msg, "|cffFF0000[PVP System]|r %s%s|r killed %s%s|r and is on a |cff00FF96Killing Spree|r!", kill_streak_ClassColor[pKiller->getClass() - 1].c_str(), pKiller->GetName().c_str(), pVictim->GetName().c_str(), kill_streak_ClassColor[pVictim->getClass() - 1].c_str());
  106.                 SendKillStreakMessage(pKiller, msg);
  107.                 break;
  108.             case 2:
  109.                 sprintf(msg, "|cffFF0000[PVP System]|r %s%s|r killed %s%s|r and is |cffA330C9Dominating|r!", kill_streak_ClassColor[pKiller->getClass() - 1].c_str(), pKiller->GetName().c_str(), pVictim->GetName().c_str(), kill_streak_ClassColor[pVictim->getClass() - 1].c_str());
  110.                 SendKillStreakMessage(pKiller, msg);
  111.                 break;
  112.             case 3:
  113.                 sprintf(msg, "|cffFF0000[PVP System]|r %s%s|r killed %s%s|r and is |cffFF7D0AUnstoppable|r.", kill_streak_ClassColor[pKiller->getClass() - 1].c_str(), pKiller->GetName().c_str(), pVictim->GetName().c_str(), kill_streak_ClassColor[pVictim->getClass() - 1].c_str());
  114.                 SendKillStreakMessage(pKiller, msg);
  115.                 break;
  116.             case 4:
  117.                 sprintf(msg, "|cffFF0000[PVP System]|r %s%s|r killed %s%s|r. |cff40C7EBGODLIKE MODE ENABLED|r!", kill_streak_ClassColor[pKiller->getClass() - 1].c_str(), pKiller->GetName().c_str(), pVictim->GetName().c_str(), kill_streak_ClassColor[pVictim->getClass() - 1].c_str());
  118.                 SendKillStreakMessage(pKiller, msg);
  119.                 break;
  120.             case 5:
  121.                 sprintf(msg, "|cffFF0000[PVP System]|r %s%s|r killed %s%s|r. |cffCC0000SOMEBODY STOP HIM|r!.", kill_streak_ClassColor[pKiller->getClass() - 1].c_str(), pKiller->GetName().c_str(), pVictim->GetName().c_str(), kill_streak_ClassColor[pVictim->getClass() - 1].c_str());
  122.                 SendKillStreakMessage(pKiller, msg);
  123.                 break;
  124.             }
  125.         }
  126.     }
  127. };
  128.  
  129. void AddKillStreakScripts() {
  130.     new MODKillStreak_Config();
  131.     new MODKillStreak();
  132. }
  133.  
Tags: Killstreak
Advertisement
Add Comment
Please, Sign In to add comment