Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptPCH.h"
- // Edited from Parranoia's script:
- // http://pastebin.com/mBUfpgaE
- struct KillstreakData { uint32 killstreak, high_ks; };
- static UNORDERED_MAP<uint64, KillstreakData> m_killstreak;
- void alertServer(Player * killer, Player * victim, uint32 killstreak, int code)
- {
- char msg[256];
- switch(code)
- {
- case 0: sprintf(msg, "|cffff0000[Killstreak] |cffffffff%s's |cff00ffffkillstreak of %u has been ended by |cffffffff%s", victim->GetName(), killstreak, killer->GetName()); break;
- case 1: sprintf(msg, "|cffff0000[Killstreak] |cffffffff%s|cff00ffff has a killstreak of %u", killer->GetName(), killstreak); break;
- case 2: sprintf(msg, "|cffff0000[Killstreak] |cffffffff%s|cff00ffff has a killstreak of %u. A bounty worth 50 arena points has been placed for their head.", killer->GetName(), killstreak); break;
- }
- sWorld->SendServerMessage(SERVER_MSG_STRING, msg, 0);
- }
- class Killstreak : public PlayerScript
- {
- public:
- Killstreak() : PlayerScript("Killstreak"){}
- void OnPVPKill(Player * killer, Player * victim)
- {
- uint64 kGUID = killer->GetGUID();
- uint64 vGUID = victim->GetGUID();
- if (kGUID == vGUID)
- return;
- if (killer->InArena() || victim->InArena())
- return;
- m_killstreak[kGUID].killstreak++;
- uint32 kKillstreak = m_killstreak[kGUID].killstreak;
- uint32 vKillstreak = m_killstreak[vGUID].killstreak;
- m_killstreak[kGUID].high_ks = kKillstreak > m_killstreak[kGUID].high_ks ? kKillstreak : m_killstreak[kGUID].high_ks;
- if (vKillstreak >= 25)
- killer->ModifyArenaPoints(50);
- if (vKillstreak >= 5)
- alertServer(killer, victim, vKillstreak, 0);
- m_killstreak[vGUID].killstreak = 0;
- if(kKillstreak > 0) // hate large switches
- {
- if(kKillstreak % 5 == 0)
- {
- alertServer(killer, victim, kKillstreak, kKillstreak <= 20 ? 1 : 2);
- if(kKillstreak == 5)
- killer->AddItem(6657, 5);
- else if(kKillstreak == 15)
- killer->AddItem(8529, 15);
- else if(kKillstreak % 10 == 0)
- killer->AddItem(20558, uint32(kKillstreak/10));
- }
- }
- }
- void OnLogin(Player* player)
- {
- QueryResult ks = CharacterDatabase.PQuery("SELECT ks, high_ks FROM killstreak WHERE guid = %u", player->GetGUIDLow());
- if (!ks)
- return;
- Field * killstreak = ks->Fetch();
- KillstreakData temp = {killstreak[0].GetUInt32(), killstreak[1].GetUInt32()};
- m_killstreak[player->GetGUID()] = temp;
- }
- void OnLogout(Player* player)
- {
- uint64 pGUID = player->GetGUID();
- if(m_killstreak.find(pGUID) != m_killstreak.end())
- CharacterDatabase.PExecute("REPLACE INTO killstreak (guid, ks, high_ks) VALUES (%u, %u, %u)", m_killstreak[pGUID].killstreak, m_killstreak[pGUID].high_ks, player->GetGUIDLow());
- }
- };
- void AddSC_Killstreak()
- {
- new Killstreak();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement