/*ultimate Killingspree 1.Kill >>> Firstblood 4.Kills >>> Killingspree 5.Kills >>> Rampage 6.Kills >>> Domination 7.Kills >>> Unstoppable 8.Kills >>> Godlike 9.Kills >>> Wickedsick Zeitabhängige Awards 2.Kills >>> Doublekill 3.Kills >>> Triplekill 4.Kills >>> Multikill 5.Kills >>> Megakill 6.Kills >>> Ultrakill 7.Kills >>> Monsterkill */ #include <string> #include <admin> #include <adminlib> #define ACCESS_CONSOLE 131072 new g_SoundFile[MAX_TEXT_LENGTH]="sound/misc/"; new g_maxplayers; ///////////////////////////////////// //// Kills-Reset bei Round_Start //// //// wenn = 0, dann nur bei TOD //// ///////////////////////////////////// new g_resetround=1; //////////////////////// //// Zeitunabhängig //// //////////////////////// //Anzahl der AWARDS #define MAX_KILLS 10 //Anzahl der notwendigen Kills für AWARD (-1 = nicht belegt) new g_Kills1[MAX_KILLS]={ -1, -1, -1, -1, 4, 5, 6, 7, 8, 9 }; //Nachricht für AWARD z.B. Spielername: KILLINGSPREE! new g_Announce1[MAX_KILLS][MAX_TEXT_LENGTH]={ "", "", "", "", "KILLINGSPREE!", "RAMPAGE!", "DOMINATION!", "UNSTOPPABLE!", "GODLIKE!!!", "WHICKEDSICK!" }; //Farbe der typesay Anzeige (rot, grün, blau) new g_Color1[3]={ 200, 20, 20 }; //Sound für AWARD new g_Sound1[MAX_KILLS][MAX_TEXT_LENGTH]={ "", "", "", "", "killingspree.wav", "rampage.wav", "dominating.wav", "unstoppable.wav", "godlike.wav", "whickedsick.wav" }; //////////////////////// //// Zeitabhängig //// //////////////////////// #define MAX_TIME_KILLS 8 new g_Kills2[MAX_TIME_KILLS]={ -1, -1, 2, 3, 4, 5, 6, 7 }; new g_Announce2[MAX_TIME_KILLS][MAX_TEXT_LENGTH]={ "", "", "DOUBLEKILL!", "TRIPLEKILL!", "MULTIKILL!", "MEGAKILL!", "ULTRAKILL!", "MONSTERKILL!" }; new g_Sound2[MAX_TIME_KILLS][MAX_TEXT_LENGTH]={ "", "", "doublekill.wav", "tripplekill.wav", "multikill.wav", "megakill.wav", "ultrakill.wav", "monsterkill.wav" }; new g_KillTime=5; //Farbe der typesay Anzeige (rot, grün, blau) new g_Color2[3]={ 20, 20, 200 }; //////////////////////// //// sonstige //// //////////////////////// new g_firstblood; new g_UserKills[MAX_PLAYERS]; new g_UserTimeKills[MAX_PLAYERS]; new g_UserTimer[MAX_PLAYERS]; public plugin_init() { plugin_registerinfo("Ultimate Killingspree","Announces Doublekills, Monsterkills etc.","0.8"); plugin_registercmd("uk_kill","uk_kill",ACCESS_CONSOLE); exec( "logd_reg 57 admin_command uk_kill" ); /*KILL-EVENT*/ plugin_registercmd("uk_world","uk_world",ACCESS_CONSOLE); exec( "logd_reg 62 admin_command uk_world" ); /*WORLD-EVENT*/ g_maxplayers=maxplayercount(); return PLUGIN_CONTINUE; } public uk_kill(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new Weapon[MAX_NAME_LENGTH]; new Attacker[MAX_NAME_LENGTH]; new Victim[MAX_NAME_LENGTH]; new sAID[3]; new sVID[3]; new iAID; new iVID; new iTeamA; new iTeamV; convert_string(HLData,Data,MAX_DATA_LENGTH); strsplit(Data," ",sAID,3,sVID,3,Weapon,MAX_NAME_LENGTH); iAID=strtonum(sAID); iVID=strtonum(sVID); if(playerinfo(iAID,Attacker,MAX_NAME_LENGTH,_,_,iTeamA)){ if(playerinfo(iVID,Victim,MAX_NAME_LENGTH,_,_,iTeamV)){ //Teamkillcheck if(iTeamA!=iTeamV){ //Kills zählen g_UserKills[iAID]+=1; g_UserTimeKills[iAID]+=1; //Firstblood checken if(!g_firstblood){ g_firstblood=1; sound_all(Attacker,"firstblood.wav","FIRSTBLOOD!",0); } //Timer für zeitabhängige Kills starten, wenn noch nicht vorhanden if(!g_UserTimer[iAID]){ g_UserTimer[iAID]=1; set_timer("check_timer",g_KillTime,0,sAID); } //Überprüfen, ob ein zeitunabhängiger AWARD vorliegt// check_kills(iAID,0); }else{ //Teamkill abziehen g_UserKills[iAID]-=1; } //Kills des toten Spieler nullen g_UserKills[iVID]=0; g_UserTimeKills[iVID]=0; g_UserTimer[iVID]=0; } } return PLUGIN_CONTINUE; } public check_timer(Timer,Repeat,HLName,HLParam) { new User[3]; new iUser; convert_string(HLParam,User,3); iUser=strtonum(User); if(g_UserTimer[iUser]){ g_UserTimer[iUser]=0; //Überprüfen, ob ein zeitabhängiger AWARD vorliegt// check_kills(iUser,1); } } check_kills(UserIndex,ID){ new Player[MAX_NAME_LENGTH]; new i; if(playerinfo(UserIndex,Player,MAX_NAME_LENGTH)){ if(ID){ //AWARD für zeitabhängige Kills prüfen for(i=0;i<MAX_TIME_KILLS;i++){ if(g_Kills2[i]!=-1 && g_Kills2[i]==g_UserTimeKills[UserIndex]){ sound_all(Player,g_Sound2[i],g_Announce2[i],ID); break; } } g_UserTimeKills[UserIndex]=0; }else{ //AWARD für zeitunabhängige Kills prüfen for(i=0;i<MAX_KILLS;i++){ if(g_Kills1[i]!=-1 && g_Kills1[i]==g_UserKills[UserIndex]){ sound_all(Player,g_Sound1[i],g_Announce1[i],ID); break; } } } } } sound_all(UserName[],WavFile[],Msg[],ID){ new Data[MAX_DATA_LENGTH]; new Player[MAX_NAME_LENGTH]; new i; snprintf(Data,MAX_DATA_LENGTH,"%s:^n%s",UserName,Msg); if(ID){ typesay(Data,12,g_Color2[0],g_Color2[1],g_Color2[2]); }else{ typesay(Data,12,g_Color1[0],g_Color1[1],g_Color1[2]); } snprintf(Data,MAX_DATA_LENGTH,"%s%s",g_SoundFile,WavFile); for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Player,MAX_NAME_LENGTH)){ speakto(Player,Data); } } } //Kills der Spieler, die den Server verlassen oder neu connecten, nullen public plugin_disconnect(HLUserName,UserIndex) { g_UserKills[UserIndex]=0; g_UserTimeKills[UserIndex]=0; g_UserTimer[UserIndex]=0; } public plugin_connect(HLUserName,HLIP, UserIndex) { g_UserKills[UserIndex]=0; g_UserTimeKills[UserIndex]=0; g_UserTimer[UserIndex]=0; } //Kills nach jeder Spielrunde resetten public uk_world(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new i; convert_string(HLData,Data,MAX_DATA_LENGTH); if(Data[8]=='R' || Data[0]=='G' || Data[6]=='S'){ if(g_resetround){ for(i=0;i<=g_maxplayers;i++){ g_UserKills[i]=0; g_UserTimeKills[i]=0; g_UserTimer[i]=0; } } g_firstblood=0; } return PLUGIN_CONTINUE; }