Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptPCH.h"
- struct KillstreakData
- {
- int32 killstreak;
- int32 high_ks;
- };
- typedef std::map<uint64 guid, KillstreakData> KillstreakMap;
- static KillstreakMap m_killstreak;
- int32 GetKillstreak(Player * player, bool high)
- {
- QueryResult ks = CharacterDatabase.PQuery("SELECT ks, high_ks FROM killstreak WHERE guid = '%u'", player->GetGUIDLow());
- if (!ks)
- return -1;
- Field * killstreak = ks->Fetch();
- return high ? killstreak[1].GetUInt32() : killstreak[0].GetUInt32();
- }
- void alertServer(Player * killer, Player * victim, int32 killstreak, int code)
- {
- char msg[200];
- switch(code)
- {
- case 0:
- sprintf(msg, "|cffff0000[Killstreak] |cffffffff%s's |cff00ffffkillstreak of %d 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 %d", killer->GetName(), killstreak);
- break;
- case 2:
- sprintf(msg, "|cffff0000[Killstreak] |cffffffff%s|cff00ffff has a killstreak of %d. 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)
- {
- if (killer->GetGUIDLow() == victim->GetGUIDLow())
- return;
- if (killer->InArena() || victim->InArena())
- return;
- int32 kKillstreak = m_killstreak[killer->GetGUID()].killstreak;
- int32 vKillstreak = m_killstreak[victim->GetGUID()].killstreak;
- if (vKillstreak >= 25)
- killer->SetArenaPoints(killer->GetArenaPoints() + 50);
- if (kKillstreak == -1)
- m_killstreak[killer->GetGUID()].killstreak = 1;
- else
- m_killstreak[killer->GetGUID()].killstreak = kKillstreak++;
- m_killstreak[killer->GetGUID()].high_ks = kKillstreak > m_killstreak[killer->GetGUID()].high_ks ? kKillstreak : m_killstreak[killer->GetGUID()].high_ks;
- // Only send a server message if their streak is 5 or more
- if (vKillstreak >= 5)
- alertServer(killer, victim, vKillstreak, 0);
- m_killstreak[victim->GetGUID()].killstreak = 0;
- switch(kKillstreak)
- {
- case 5:
- alertServer(killer, victim, kKillstreak, 1);
- killer->AddItem(6657, 5);
- break;
- case 10:
- alertServer(killer, victim, kKillstreak, 1);
- killer->AddItem(20558, 1);
- break;
- case 15:
- alertServer(killer, victim, kKillstreak, 1);
- killer->AddItem(8529, 15);
- break;
- case 20:
- alertServer(killer, victim, kKillstreak, 1);
- killer->AddItem(20558, 2);
- break;
- case 25:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 30:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 3);
- break;
- case 35:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 40:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 4);
- break;
- case 45:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 50:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 5);
- break;
- case 55:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 60:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 6);
- break;
- case 65:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 70:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 7);
- break;
- case 75:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 80:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 8);
- break;
- case 85:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 90:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 9);
- break;
- case 95:
- alertServer(killer, victim, kKillstreak, 2);
- break;
- case 100:
- alertServer(killer, victim, kKillstreak, 2);
- killer->AddItem(20558, 10);
- break;
- }
- }
- void OnLogin(Player* player)
- {
- KillstreakData ksd;
- ksd.killstreak = GetKillstreak(player, false);
- ksd.high_ks = GetKillstreak(player, true);
- m_killstreak[player->GetGUID()] = ksd;
- }
- void OnLogout(Player* player)
- {
- if (m_killstreak.find(player->GetGUID()) != m_killstreak.end())
- CharacterDatabase.PExecute("REPLACE INTO killstreak (guid, ks, high_ks) VALUES (%u, %u, %u)", player->GetGUIDLow(), m_killstreak[player->GetGUID()].killstreak, m_killstreak[player->GetGUID()].high_ks);
- }
- };
- void AddSC_Killstreak()
- {
- new Killstreak();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement