So, das habt ihr jetzt davon. Version 2 meines Mulikill Plugins.
Einige Fehler wurden behoben und mann kann es jetz vom Spiel aus konfigurieren. Die Einstellungen werden in der vault.ini gespeichert.
Code:
/*
* Multikillcounter by [TV]Smudo.
* Based on Bud-froggys Killing Streak Announcer®.
*
* Funktionen des Plugins:
* - Zeigt an, dass ein Spieler X Kills in X Sekunden gemacht hat.
* - Zeigt den ersten Kill pro Runde oder pro Map an.
* - Zeigt an, dass ein Spieler die Fuehrung uebernommen hat.
*
* vault.ini:
* admin_mk_fb 1 //First Blood. 0=OFF, 1=First Blood pro Runde , 2=First Blood pro Map.
* admin_mk_hs 1 //Kills in Time Switch. 1=ON or 0=OFF.
* admin_mk_kit 1 //Highscore. 1=ON or 0=OFF.
* Einstellungen die im Spiel veraendert werden, werden in der vault.ini gespeichert.
*/
#pragma dynamic 16384
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
new STRING_VERSION[MAX_DATA_LENGTH] = "v2";
new FBSwitch;
new KITSwitch;
new HSSwitch;
#define KillInTime 2 /*Time in Seconds*/
#define KIT_Level1 2; /*Kills per Time*/
#define KIT_Level2 3; /*Kills per Time*/
#define ACCESS_CONSOLE 131072
#define CLEAN_SLATE 0
new FragCount[ MAX_PLAYERS ] = {CLEAN_SLATE,...};
new HSCount[ MAX_PLAYERS ] = {CLEAN_SLATE,...};
new KITTimer;
new KIT_Zeit = 0;
new KIT_Count;
new Name[MAX_NAME_LENGTH];
new lastName[MAX_TEXT_LENGTH];
new lastHSName[MAX_NAME_LENGTH];
new iIDA;
new iIDAlast;
new fbStatus = 1;
new highScore = 0;
new lastHighScore = 0;
new lastHSid = 0;
public vaultdata()
{
new Data[MAX_DATA_LENGTH];
get_vaultdata("admin_mk_fb",Data,MAX_DATA_LENGTH);
if(Data[0] == '0') {
FBSwitch = 0;
}
else if(Data[0] == '1'){
FBSwitch = 1;
}
else if(Data[0] == '2'){
FBSwitch = 2;
}
get_vaultdata("admin_mk_kit",Data,MAX_DATA_LENGTH);
if(Data[0] == '0') {
KITSwitch = 0;
}
else if(Data[0] == '1'){
KITSwitch = 1;
}
get_vaultdata("admin_mk_hs",Data,MAX_DATA_LENGTH);
if(Data[0] == '0') {
HSSwitch = 0;
}
else if(Data[0] == '1'){
HSSwitch = 1;
}
return PLUGIN_HANDLED;
}
playFile( sFileName[ ] )
{
new iUserID;
new iWONID;
new maxplayers = maxplayercount();
for( new i = 1; i <= maxplayers; i++ )
{
if( playerinfo(i, Name, MAX_NAME_LENGTH, iUserID, iWONID ) ) {
{
playsound(Name, sFileName );
}
}
}
return 1;
}
public logd_multikill( HLCommand,HLData,HLUserName,UserIndex )
{
new iIDV;
new Text[MAX_TEXT_LENGTH];
new sID1[3];
new sID2[3];
new Data[MAX_DATA_LENGTH];
new Message[ MAX_TEXT_LENGTH ];
convert_string( HLData, Data, MAX_DATA_LENGTH );
strsplit( Data, " ", sID1, 3, sID2, 3 );
iIDA = strtonum( sID1 );
iIDV = strtonum( sID2 );
playerinfo(iIDA,Name,MAX_DATA_LENGTH);
if(!playerinfo(iIDA, Name, MAX_NAME_LENGTH)){
return PLUGIN_FAILURE;
}
FragCount[ iIDV ] = CLEAN_SLATE;
/*tkr_checktk*/
new iUserID;
new iWONID;
new iTeamA;
new iTeamV;
new sIDA[3];
new sIDV[3];
/*new Data[MAX_NAME_LENGTH];*/
convert_string(HLData,Data,MAX_DATA_LENGTH);
strsplit(Data, " ", sIDA, 3, sIDV, 3 );
if(playerinfo(iIDA, Data, MAX_NAME_LENGTH, iUserID, iWONID, iTeamA))
{
if(playerinfo(iIDV, Data, MAX_NAME_LENGTH, iUserID, iWONID, iTeamV))
{
if(iTeamV != iTeamA) {
FragCount[ iIDA ] += 1;
KIT_Count += 1;
HSCount[ iIDA ] += 1;
}
if(iTeamV == iTeamA) {
FragCount[ iIDA ] -= 1;
KIT_Count -= 1;
HSCount[ iIDA ] -= 1;
}
}
}
if(KITSwitch==1 && iIDA == iIDAlast && KIT_Zeit > 0) {
playerinfo(iIDA,lastName,MAX_DATA_LENGTH);
Kill_In_Time();
}
else if(KITSwitch==1 && iIDA == iIDAlast && KIT_Zeit <= 0) {
KIT_Count = 1;
iIDAlast = iIDA;
playerinfo(iIDA,lastName,MAX_DATA_LENGTH);
KIT_Zeit = (KillInTime + 1);
KITTimer = set_timer("Kill_In_Time",1,KIT_Zeit);
Kill_In_Time();
}
else if(KITSwitch==1 && iIDA != iIDAlast && KIT_Count < 3) {
KIT_Count = 1;
iIDAlast = iIDA;
playerinfo(iIDA,lastName,MAX_DATA_LENGTH);
if (KIT_Zeit > 0) {
kill_timer(KITTimer);
}
KIT_Zeit = (KillInTime + 1);
KITTimer = set_timer("Kill_In_Time",1,KIT_Zeit);
Kill_In_Time();
}
else if(KITSwitch==1 && iIDA != iIDAlast && KIT_Count > 2) {
iIDAlast = iIDA;
KIT_Count = 1;
snprintf( Text, MAX_TEXT_LENGTH, "Double Kill von %s!!",lastName);
typesay(Text, 6, 255, 255, 255 );
/*snprintf( Text, MAX_TEXT_LENGTH, "%s machte 2 Kills in %i Sekunden!!!",Name,KillInTime);
say(Text);*/
playFile( "misc/dk.wav" );
if (KIT_Zeit > 0) {
kill_timer(KITTimer);
}
KIT_Zeit = (KillInTime + 1);
KITTimer = set_timer("Kill_In_Time",1,KIT_Zeit);
Kill_In_Time();
}
if(fbStatus==1 && FBSwitch>=1) {
snprintf( Message, MAX_TEXT_LENGTH, "First Blood: %s!", Name);
typesay(Message, 6, 255, 15, 15 );
playFile( "misc/fblood.wav" );
fbStatus=0;
}
if (HSCount[ iIDA ]>highScore && HSSwitch == 1 && HSCount[ iIDA ] <= 2) {
playerinfo(iIDA,lastHSName,MAX_DATA_LENGTH);
highScore = HSCount[ iIDA ];
lastHSid=iIDA;
}
else if(HSCount[ iIDA ]>highScore && (lastHighScore!=iIDA) && HSSwitch == 1 && HSCount[ iIDA ] > 2) {
playerinfo(iIDA,Name,MAX_DATA_LENGTH);
snprintf(Text,MAX_DATA_LENGTH,"%s hat die Fuehrung mit %i Kills uebernommen !",Name,HSCount[ iIDA ]);
typesay(Text, 6, 255, 15, 15 );
say(Text);
if(lastHSid == iIDA){
playsound(Name, "misc/takenlead.wav" );
}
else
{
playsound(lastHSName, "misc/lostlead.wav" );
playsound(Name, "misc/takenlead.wav" );
}
highScore = HSCount[ iIDA ];
lastHighScore=iIDA;
lastHSid=iIDA;
playerinfo(iIDA,lastHSName,MAX_DATA_LENGTH);
}
else if (HSCount[ iIDA ]==highScore && HSSwitch == 1 && HSCount[ iIDA ] > 2) {
playsound(Name, "misc/tiedlead.wav" );
playsound(lastHSName, "misc/tiedlead.wav" );
lastHighScore=0;
}
else if (HSCount[ iIDA ]>highScore && (lastHighScore==iIDA) && HSSwitch == 1 && HSCount[ iIDA ] > 2) {
highScore = HSCount[ iIDA ];
}
return PLUGIN_HANDLED;
}
public Kill_In_Time() {
new Text[MAX_TEXT_LENGTH];
KIT_Zeit--;
if (KIT_Zeit > 0){
return PLUGIN_CONTINUE;
}
if(KIT_Count == KIT_Level1) {
snprintf( Text, MAX_TEXT_LENGTH, "Double Kill von %s!!!",Name);
typesay(Text, 6, 255, 255, 255 );
/*snprintf( Text, MAX_TEXT_LENGTH, "%s machte %i Kills in %i Sekunden!!!",Name,KIT_Level1,KillInTime);
say(Text);*/
playFile( "misc/dk.wav" );
kill_timer(KITTimer);
} else if(KIT_Count == KIT_Level2) {
snprintf( Text, MAX_TEXT_LENGTH, "Monster Kill von %s!!!",Name);
typesay(Text, 6, 255, 255, 255 );
/*snprintf( Text, MAX_TEXT_LENGTH, "%s machte %i Kills in %i Sekunden!!!",Name,KIT_Level2,KillInTime);
say(Text);*/
playFile( "misc/monsterkill.wav" );
kill_timer(KITTimer);
} else if(KIT_Count > KIT_Level2){
snprintf( Text, MAX_TEXT_LENGTH, "Oh mein Gott! %i Kills!!^nEin Mega Mo-mo-mo-Monsterkill von %s",KIT_Count,Name);
typesay(Text, 6, 255, 255, 255 );
snprintf( Text, MAX_TEXT_LENGTH, "%s machte %i Kills in %i Sekunden!!!",Name,KIT_Count,KillInTime);
say(Text);
playFile( "misc/monsterkill.wav" );
kill_timer(KITTimer);
}
KIT_Count = 0;
KIT_Zeit = 0;
return PLUGIN_CONTINUE;
}
public resetfb(HLCommand,HLData,HLUserName,UserIndex)
{
new Data[MAX_NAME_LENGTH];
convert_string(HLData,Data,MAX_NAME_LENGTH);
if((strcmp("Round_Start", Data) != 0 ) && FBSwitch == 1)
return PLUGIN_HANDLED;
else if (FBSwitch == 1) {
fbStatus=1;
}
return PLUGIN_HANDLED;
}
public resetcount(HLCommand,HLData,HLUserName,UserIndex)
{
new maxplayers = maxplayercount();
new Data [MAX_DATA_LENGTH];
new Data2 [MAX_DATA_LENGTH];
convert_string( HLData, Data, MAX_DATA_LENGTH );
strsplit(Data,"# ",Data2,14);
if((strcmp(Data,"Game_Commencing")==0) || (strcmp(Data2,"Restart_Round")==0))
{
for( new i = 1; i <= maxplayers; i++ )
{
FragCount[i] = 0;
HSCount[i] = 0;
}
if (FBSwitch == 1) {
fbStatus=1;
}
}
return PLUGIN_HANDLED;
}
public plugin_connect(HLUserName, HLIP, UserIndex)
{
if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) {
FragCount[UserIndex] = CLEAN_SLATE;
HSCount[UserIndex] = CLEAN_SLATE;
}
return PLUGIN_CONTINUE;
}
public plugin_disconnect(HLUserName, UserIndex)
{
new maxplayers = maxplayercount();
if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS && highScore == HSCount[UserIndex]) {
FragCount[UserIndex] = CLEAN_SLATE;
HSCount[UserIndex] = CLEAN_SLATE;
highScore = 0;
for( new i = 1; i <= maxplayers; i++ )
{
if(HSCount[i] > highScore) {
highScore = HSCount[i];
}
}
}
return PLUGIN_CONTINUE;
}
public admin_mk_fb(HLCommand,HLData,HLUserName,UserIndex)
{
new Data[MAX_DATA_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
if(strcmp(Data,"0")==0)
{
FBSwitch = 0;
set_vaultdata("admin_mk_fb",Data);
selfmessage("First Blood ist ausgeschaltet.");
}
else if(strcmp(Data,"1")==0)
{
FBSwitch = 1;
set_vaultdata("admin_mk_fb",Data);
selfmessage("First Blood ist eingeschaltet und wird jede Runde angezeigt.");
}
else if(strcmp(Data,"2")==0)
{
FBSwitch = 2;
set_vaultdata("admin_mk_fb",Data);
selfmessage("First Blood ist eingeschaltet und wird einmal pro Map angezeigt.");
}
else
{
get_vaultdata("admin_mk_fb",Data,MAX_DATA_LENGTH);
snprintf(Text,MAX_TEXT_LENGTH,"First Blood Status: %s",Data);
selfmessage("Ungueltiger Wert fuer admin_mk_fb.");
selfmessage("0: First Blood Aus, 1: First Blood pro Runde, 2: First Blood pro Map.");
selfmessage(Text);
}
return PLUGIN_HANDLED;
}
public admin_mk_kit(HLCommand,HLData,HLUserName,UserIndex)
{
new Data[MAX_DATA_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
if(strcmp(Data,"0")==0)
{
KITSwitch = 0;
set_vaultdata("admin_mk_kit",Data);
selfmessage("Kill in Time ist ausgeschaltet.");
}
else if(strcmp(Data,"1")==0)
{
KITSwitch = 1;
set_vaultdata("admin_mk_kit",Data);
selfmessage("Kill in Time ist eingeschaltet.");
}
else
{
get_vaultdata("admin_mk_kit",Data,MAX_DATA_LENGTH);
snprintf(Text,MAX_TEXT_LENGTH,"Kill in Time Status: %s",Data);
selfmessage("Ungueltiger Wert fuer admin_mk_kit.");
selfmessage("0: Kill in Time Aus, 1: Kill in Time An.");
selfmessage(Text);
}
return PLUGIN_HANDLED;
}
public admin_mk_hs(HLCommand,HLData,HLUserName,UserIndex)
{
new Data[MAX_DATA_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLData,Data,MAX_DATA_LENGTH);
if(strcmp(Data,"0")==0)
{
HSSwitch = 0;
set_vaultdata("admin_mk_hs",Data);
selfmessage("Highscore ist ausgeschaltet.");
}
else if(strcmp(Data,"1")==0)
{
HSSwitch = 1;
set_vaultdata("admin_mk_hs",Data);
selfmessage("Highscore ist eingeschaltet.");
}
else
{
get_vaultdata("admin_mk_hs",Data,MAX_DATA_LENGTH);
snprintf(Text,MAX_TEXT_LENGTH,"Highscore Status: %s",Data);
selfmessage("Ungueltiger Wert fuer admin_mk_hs.");
selfmessage("0: Highscore Aus, 1: Highscore An.");
selfmessage(Text);
}
return PLUGIN_HANDLED;
}
public plugin_init()
{
plugin_registerinfo("Multikill Announcer.","Announces kills in Time.",STRING_VERSION);
plugin_registercmd("logd_multikill", "logd_multikill", ACCESS_CONSOLE, "");
plugin_registercmd("resetfb", "resetfb", ACCESS_CONSOLE, "");
plugin_registercmd("resetcount", "resetcount", ACCESS_CONSOLE, "");
plugin_registercmd("admin_mk_fb", "admin_mk_fb", ACCESS_BAN, "admin_mk_fb (2/1/0): 0=FirstBlood AUS, 1=FirstBlood pro Runde, 2=FirstBlood pro Map");
plugin_registercmd("admin_mk_kit", "admin_mk_kit", ACCESS_BAN, "admin_mk_kit (1/0): 0=Kills in Time: AUS, 1=Kills in Time: AN ");
plugin_registercmd("admin_mk_hs", "admin_mk_hs", ACCESS_BAN, "admin_mk_hs (1/0): 0=HighScore: AUS, 1=HighScore: AN ");
exec( "logd_reg 57 admin_command logd_multikill" );
exec( "logd_reg 62 admin_command resetfb" );
exec( "logd_reg 62 admin_command resetcount" );
vaultdata();
return PLUGIN_CONTINUE;
}
Viel spass damit
