• This is a read only backup of the old Emudevs forum. If you want to have anything removed, please message me on Discord: KittyKaev

[C++] KillStreak

Estorn

Respected Member
the orginal script is for : Kjanko

Edited By : Me Fixed For Last Rev

Code:
/*
Originally by Kjanko
Edited by Tommy
Edited by Rochet2 ~ Made dynamic
Last Edit By Estorn
Change : Fix For Last Rev
*/

#include "ScriptPCH.h"

class System_OnKill : public PlayerScript
{
public:
    System_OnKill() : PlayerScript("System_OnKill") {}

    void OnPVPKill(Player * Killer, Player * Victim)
    {
        uint32 KillerGUID = Killer->GetGUIDLow();
        uint32 VictimGUID = Victim->GetGUIDLow();

        struct KillStreak_Info
        {
            uint32 killstreak;
            uint32 lastkill;
        };

        static std::map<uint32, KillStreak_Info> KillStreakData;

        if (KillerGUID == VictimGUID || KillStreakData[KillerGUID].lastkill == VictimGUID)
            return;

        if (KillStreakData[VictimGUID].killstreak >= 3)
        {
            std::ostringstream ss;
            ss << "|cFF81CF42" << Killer->GetName() << "|r Server Killer Has Ended |cFFFFFFFF" << Victim->GetName() << " !!!! ";
            sWorld->SendServerMessage(SERVER_MSG_STRING, ss.str().c_str());
        }

        ++KillStreakData[KillerGUID].killstreak;
        KillStreakData[KillerGUID].lastkill = VictimGUID;
        KillStreakData[VictimGUID].killstreak = 0;
        KillStreakData[VictimGUID].lastkill = 0;

        if (KillStreakData[KillerGUID].killstreak % 10 == 0) // send killstreak message every 10 kills
        {
            std::ostringstream ss;
            ss << "|cFF81CF42" << Killer->GetName() << "|r Server Killer Has A KillStreak Of |cFF42A0CF" << KillStreakData[KillerGUID].killstreak << "|r!!!!!";
            sWorld->SendServerMessage(SERVER_MSG_STRING, ss.str().c_str());
        }
        else if (KillStreakData[KillerGUID].killstreak == 3)
        {
            std::ostringstream ss;
            ss << "|cFF81CF42" << Killer->GetName() << "|r Server Killer Is On A KillingSpree!!!!!!";
            sWorld->SendServerMessage(SERVER_MSG_STRING, ss.str().c_str());
        }

    }
};

void AddSC_PvP_System()
{
    new System_OnKill;
}
 

Eleinder

BETA Tester
Work perfect thanks¡¡

PD: To add other killstreak is ???
Code:
else if (KillStreakData[KillerGUID].killstreak == X)

Where X the number of killstreak
 

Maxsense

Emulation Addict
Errors in linux/debian
Any idea how to fix them?

Code:
src/server/scripts/Custom/pvp_system.cpp: In member                           function ‘virtual void System_OnKill::OnPVPKill(Player*, Player*)’:

src/server/scripts/Custom/pvp_system.cpp:19:42: error: template argument for ‘template<class _T1, class _T2> struct std::pair’ uses                           local type ‘System_OnKill::OnPVPKill(Player*, Player*)::KillStreak_Info’
   static std::map<uint32, KillStreak_Info> KillStreakData;
                                          ^
src/server/scripts/Custom/pvp_system.cpp:19:42: error:   trying to instantiate ‘template<class _T1, class _T2> struct std::pair’

/src/server/scripts/Custom/pvp_system.cpp:19:42: error: template argument 4 is invalid

src/server/scripts/Custom/pvp_system.cpp:19:58: error: invalid type in declaration before ‘;’ token
   static std::map<uint32, KillStreak_Info> KillStreakData;
                                                          ^
src/server/scripts/Custom/pvp_system.cpp:21:60: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   if (KillerGUID == VictimGUID || KillStreakData[KillerGUID].lastkill == Victim                          GUID)
                                                            ^
src/server/scripts/Custom/pvp_system.cpp:24:32: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   if (KillStreakData[VictimGUID].killstreak >= 5)
                                ^
src/server/scripts/Custom/pvp_system.cpp:31:30: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   ++KillStreakData[KillerGUID].killstreak;
                              ^
src/server/scripts/Custom/pvp_system.cpp:32:28: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   KillStreakData[KillerGUID].lastkill = VictimGUID;
                            ^
src/server/scripts/Custom/pvp_system.cpp:33:28: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   KillStreakData[VictimGUID].killstreak = 0;
                            ^
src/server/scripts/Custom/pvp_system.cpp:34:28: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   KillStreakData[VictimGUID].lastkill = 0;
                            ^
src/server/scripts/Custom/pvp_system.cpp:36:32: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   if (KillStreakData[KillerGUID].killstreak % 10 == 0) // send killstreak messa                          ge every 10 kills
                                ^
src/server/scripts/Custom/pvp_system.cpp:39:111: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
    ss << "|cFFFF0000" << Killer->GetName() << "|r has a killstreak of |cFFFF000                          0" << KillStreakData[KillerGUID].killstreak << "|r!";
                                                                                                                                         ^
src/server/scripts/Custom/pvp_system.cpp:42:37: error: invalid types ‘int[uint32 {aka unsigned int}]’ for array subscript
   else if (KillStreakData[KillerGUID].killstreak == 5)
                                     ^
make[2]: *** [src/server/scripts/CMakeFiles/scripts.dir/Custom/pvp_system.cpp.o]                           Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [src/server/scripts/CMakeFiles/scripts.dir/all] Error 2
make: *** [all] Error 2
 
Last edited:

Rochet2

Moderator / Eluna Dev
Try moving
Code:
        struct KillStreak_Info
        {
            uint32 killstreak;
            uint32 lastkill;
        };

below the include.

Btw, killing is probably handled for each map separately causing this possibly to be unsafe script if using multiple map update threads.
 
Top