AdminMod.de https://www.adminmod.de/ |
|
was is hier dran falsch (plugin_logd_multikill) https://www.adminmod.de/viewtopic.php?t=3167 |
Seite 1 von 3 |
Autor: | [COLA]*Whiskey [ 30.05.2002, 20:22 ] |
Betreff des Beitrags: | was is hier dran falsch (plugin_logd_multikill) |
ich habe es umgeschrieben aber der sound lostlead.wav wird nicht abgespielt. hat jemand ne idee ? Code: if(Name == lastHSName) playsound(Name, "misc/takenlead.wav" ); else { playsound(Name, "misc/takenlead.wav" ); playsound(lastHSName, "misc/lostlead.wav" ); } |
Autor: | Sir Drink a lot [ 31.05.2002, 00:51 ] |
Betreff des Beitrags: | |
ohne Fehlermeldung bei dem Versuch, den Sound an Spieler lastHSName abzuspielen? |
Autor: | [COLA]*Whiskey [ 31.05.2002, 01:10 ] |
Betreff des Beitrags: | |
hui bin ich doch nochma schneller als SDal ![]() wenn man genau hinsieht sieht man das ich da müll geschrieben hab, habs halt schnell geschrieben und compiliert und ohne fehlermeldung aber es muss natürlich so heissen: Code: if([b]Name && lastHSName == 1[/b]) playsound(Name, "misc/takenlead.wav" ); else { playsound(Name, "misc/takenlead.wav" ); playsound(lastHSName, "misc/lostlead.wav" ); }naja aber das plugin hat trotzdem noch viele bugs z.b. bei restartround oder disconnect wird die Highscore nich auf 0 gestellt obwohl irgend etwas dadrüber im plugin drin steht |
Autor: | Sir Drink a lot [ 31.05.2002, 01:20 ] |
Betreff des Beitrags: | |
ich muss zu geben, dass ich im Moment mit dem CW-Creator und einem Multimapvote-Plugin voll auf ausgelastet bin und dieses interessante Plugin nicht weiter testen kann. |
Autor: | [COLA]*Whiskey [ 31.05.2002, 02:02 ] |
Betreff des Beitrags: | |
ja morgen is LAN Inferno www.lan-inferno.de und da wollt ich die COLA Kiste ma startklar machen ![]() allerdings sind beim multikill plugin und beim killstreak plugin noch n paar bugs drin die ich noch fixen wollte ausserdem läuft das sank_sounds plugin noch nich aber da muss ich mir wohl ma die neuste version ziehn naja zum multikill/killstreak plugin ich wollte das so machen das bei einem Restartround die score auch zurück gesetzt wird allerdings frag ich mich wie man das hier auswerten soll?: Code: World triggered "Restart_Round_(1_second)"denn es is ja nich immer 1 second |
Autor: | daRope [ 31.05.2002, 09:27 ] |
Betreff des Beitrags: | |
Zitat:
wenn man genau hinsieht sieht man das ich da müll geschrieben hab, habs halt schnell geschrieben und compiliert und ohne fehlermeldung
Interessant. Ich haette vermutet, dass dieser Code voelliger Quatsch ist und Dir schon beim compilieren um die Ohren fliegt. Aber wenn Du sagst das tut.... Man lernt doch nie aus.
aber es muss natürlich so heissen: Code: if([b]Name && lastHSName == 1[/b]) playsound(Name, "misc/takenlead.wav" ); else { playsound(Name, "misc/takenlead.wav" ); playsound(lastHSName, "misc/lostlead.wav" ); } |
Autor: | [COLA]*Whiskey [ 31.05.2002, 10:12 ] |
Betreff des Beitrags: | |
ja es is so das wenn du leader bist dich dann aber einer einholt das gleichstand kommt und du wieder taken the lead hast dann würde bei dir you have lost the lead kommen da du ja der letzte warst der leader war ![]() naja nu ma nochma zu meinem anderen problemchen Es is aus dem Killstreak Plugin: Code: public ks_resetscore(HLCommand,HLData,HLUserName,UserIndex,Param) { new loop; new Data[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_NAME_LENGTH); if(strcmp("Game_Commencing", Data) != 0 [b]|| strcmp("Restart", Data) != 0[/b]) { return PLUGIN_HANDLED; } for( loop = 0; loop < MAX_PLAYERS; loop += 1 ) { FragCount[loop] = CLEAN_SLATE; } return PLUGIN_HANDLED; }Ich habe anstatt "Restart" schon folgendes ausprobiert: Restart_Round, Restart_Round_, Restart_Round_(1_Second) Das Problem is nur: Es klappt nicht ![]() Weis einer wo da der Fehler drin is ? muss man Restart Round vielleicht über die Variable sv_restartround laufen lassen so das wenn die auf 0 is das dann die scores zurück gesetzt werden ? |
Autor: | Sir Drink a lot [ 31.05.2002, 11:25 ] |
Betreff des Beitrags: | |
zu dem was daRope gesagt hat: Ich habe mich auch gewundert, da ich von einem String == "1" ausgegangen bin. Aber es wurde wohl vorher ein numtostr gmacht. Den kannte ich auch noch nicht: Name && lastHSName == 1 Wie wäre es mit einem Split der Data? Code: strsplit(Data,"_",x,MAX_DATA_LENGTH,dummy,MAX_DATA_LENGTH);Dann müsste im x nur noch "Game" oder "Restart" übrig bleiben. Diese kann man dann schön vergleichen. Darauf zu achten ist, das Du 2 mal ganz am Anfang ein Game_Commencing erhälst. (Ok. Ist jetzt nicht so tragisch. Wird eben 2 mal der Code ausgeführt.) @daRope: MAX_DATA_LENGTH ist doch hier eigentlich zu groß, oder? Man weiß ja, was in x oder dummy später steht. Wie groß wäre der Array in diesem Fall? x [8]? |
Autor: | [COLA]*Whiskey [ 31.05.2002, 11:53 ] |
Betreff des Beitrags: | |
hmm war kurz davor das so zu machen weil ichs in irgend nem andern plugin auch so gesehn habe, allerdings war ich bisher noch zu faul dazu *g* aber ich probier das gleich ma aus @ sir drink a lot ich wollt da ja nur nen vergleich aufstellen wenn a = b is dann soll er das machen wenn a aber nich b is dann soll er das andere machen. ich hab ja kein plan vom scripten ich klau mir das ja immer nur aus andern plugins zusammen ![]() |
Autor: | Sir Drink a lot [ 31.05.2002, 12:10 ] |
Betreff des Beitrags: | |
mit dem Vergleich war schon klar. Ich wusste aber nicht, dass man es so machen kann. Ich habe es bisher immer so gemacht. Name ==1 && lastHSName == 1 |
Autor: | [COLA]*Whiskey [ 31.05.2002, 12:21 ] |
Betreff des Beitrags: | |
hmm aha naja egal ich hab n anderes problem unzwar in 4 Std fahr ich los zur lan ![]() und der server läuft noch nich so wie er soll habe hier mal das killstreak plugin das mit dem reseten bei restart round funzt noch nich: Code: /* * Bud-froggy Productions® -- July 26nd, 2001 * Killing Streak Announcer® * * Announces Kill streaks * Place in logd_kill * new features added by SDal */ #include <core> #include <console> #include <string> #include <admin> #include <adminlib> new STRING_VERSION[MAX_DATA_LENGTH] = "1.6"; #define Level1 4 //Multikill #define Level2 6 //Ultrakill #define Level3 8 //Killingspree #define Level4 10 //Monsterkill #define Level5 15 //Monsterkill #define Level6 20 //Godlike #define Level7 30 //Godlike #define ACCESS_CONSOLE 131072 #define CLEAN_SLATE 0 new FragCount[ MAX_PLAYERS ] = {CLEAN_SLATE,...}; new on = 1; playFile( sFileName[ ] ) { new Name[ MAX_NAME_LENGTH ]; new iUserID; new iWONID; new maxplayers = maxplayercount(); for( new i = 1; i <= maxplayers; i++ ) { if( playerinfo(i, Name, MAX_NAME_LENGTH, iUserID, iWONID ) ) { //if its not a bot if( iWONID != 0 ) { playsound(Name, sFileName ); } } } return 1; } public admin_killstreak( HLCommand,HLData,HLUserName,UserIndex ) { new User[MAX_NAME_LENGTH]; new Data[MAX_DATA_LENGTH]; convert_string(HLUserName, User, MAX_NAME_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); if (streq(Data, "1")==1) { on = 1; selfmessage("Killstreak aktiviert"); return PLUGIN_HANDLED; } if (streq(Data, "0")==1) { on = 0; selfmessage("Killstreak deaktiviert"); return PLUGIN_HANDLED; } selfmessage("Muss Zahl zwischen 0 und 1 sein!"); return PLUGIN_HANDLED; } public logd_killstreak( HLCommand,HLData,HLUserName,UserIndex ) { if (on == 1) { new iIDA; new iIDV; new sID1[3]; new sID2[3]; new Data[MAX_DATA_LENGTH]; new Message[ MAX_TEXT_LENGTH ]; new Name[MAX_NAME_LENGTH]; new Victim[MAX_NAME_LENGTH]; new iUserID; new iWONID; new iTeamA; new iTeamV; convert_string( HLData, Data, MAX_DATA_LENGTH ); strsplit( Data, " ", sID1, 3, sID2, 3); iIDA = strtonum( sID1 ); iIDV = strtonum( sID2 ); if(playerinfo(iIDA, Name, MAX_NAME_LENGTH, iUserID, iWONID, iTeamA)) { if(playerinfo(iIDV, Victim, MAX_NAME_LENGTH, iUserID, iWONID, iTeamV)) { if(iTeamV != iTeamA) FragCount[ iIDA ] += 1; else { FragCount[iIDA] -=1; } } } FragCount[ iIDV ] = CLEAN_SLATE; if (FragCount[ iIDA ] == Level1) { playFile( "misc/multikill.wav" ); snprintf(Message, MAX_TEXT_LENGTH, "%s: Multi Kill !!! (%i Kills)", Name,FragCount[iIDA]); typesay(Message,3, 255, 255, 255); } else if( FragCount[ iIDA ] == Level2 ) { playFile( "misc/ultrakill.wav" ); snprintf( Message, MAX_TEXT_LENGTH, "%s: Ultra Kill !!! (%i Kills)", Name,FragCount[iIDA]); typesay(Message,3,150,200,0); } else if( FragCount[iIDA ] == Level3 ) { playFile( "misc/killingspree.wav" ); snprintf( Message, MAX_TEXT_LENGTH, "%s is on a Killing Spree !!! (%i Kills)", Name,FragCount[iIDA]); typesay(Message,4,200,100,0); } else if( FragCount[iIDA ] == Level4 || FragCount[iIDA ] == Level5 ) { playFile( "misc/monsterkill.wav" ); snprintf( Message, MAX_TEXT_LENGTH, "%s made a MONSTERKILLLLL !!! (%i Kills)", Name,FragCount[iIDA]); typesay(Message,4,0,100,200); } else if( FragCount[iIDA ] == Level6 || FragCount[iIDA ] == Level7 ) { playFile( "misc/godlike.wav" ); snprintf( Message, MAX_TEXT_LENGTH, "%s is playing G - O - D - L - I - K - E ! ! ! (%i Kills)", Name,FragCount[iIDA]); typesay(Message,4,225,0,0); } return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } public ks_resetscore(HLCommand,HLData,HLUserName,UserIndex,Param) { new loop; new Data[MAX_NAME_LENGTH]; new x [MAX_DATA_LENGTH]; convert_string(HLData,Data,MAX_NAME_LENGTH); strsplit(Data,"# ",x,MAX_DATA_LENGTH); if(strcmp("Game_Commencing", Data) != 0) { return PLUGIN_HANDLED; } for( loop = 0; loop < MAX_PLAYERS; loop += 1) { FragCount[loop] = CLEAN_SLATE; } if(strcmp(x,"Restart_Round_") != 0) { return PLUGIN_HANDLED; } for( loop = 0; loop < MAX_PLAYERS; loop += 1) { FragCount[loop] = CLEAN_SLATE; } return PLUGIN_HANDLED; } public plugin_connect(HLUserName,HLIP, UserIndex) { if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) { FragCount[UserIndex] = CLEAN_SLATE; } return PLUGIN_CONTINUE; } public plugin_disconnect(HLUserName,UserIndex) { if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) { FragCount[UserIndex] = CLEAN_SLATE; } return PLUGIN_CONTINUE; } public plugin_init() { plugin_registerinfo("Kill Streak Announcer","Announces kill streaks.",STRING_VERSION); plugin_registercmd("logd_killstreak", "logd_killstreak", ACCESS_CONSOLE, ""); plugin_registercmd("ks_resetscore", "ks_resetscore", ACCESS_CONSOLE, ""); plugin_registercmd("admin_killstreak","admin_killstreak",ACCESS_BAN, "admin_killstreak (0/1): 0 = Aus,1= AN"); plugin_registerhelp("admin_killstreak",ACCESS_BAN,"admin_killstreak (0/1): 0 = Aus,1= AN"); exec( "logd_reg 57 admin_command logd_killstreak" ); exec( "logd_reg 62 admin_command ks_resetscore" ); return PLUGIN_CONTINUE; } das gleiche problem bei dem multikill plugin: Code: /* * Multikillcounter by [TV]Smudo. * Announces Kills per seconds. * Announces First Blood. * Announces the leading Player. * Based on Bud-froggys Killing Streak Announcer®. */ #pragma dynamic 16384 #include <core> #include <console> #include <string> #include <admin> #include <adminlib> new STRING_VERSION[MAX_DATA_LENGTH] = "1.1"; new FBSwitch = 2; /*First Blood. 0=OFF, 1=First Blood pro Runde , 2=First Blood pro Map.*/ #define KITSwitch 1; /*Kills in Time Switch. 1=ON or 0=OFF.*/ #define HSSwitch 1; /*Highscore. 0=OFF, 1=ON.*/ #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_TEXT_LENGTH]; new iIDA; new iIDAlast; new fbStatus = 1; new highScore = 0; new lastHighScore = 0; 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 ); 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 schaffte 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 && (lastHighScore!=iIDA) && HSSwitch == 1 && HSCount[ iIDA ] > 2) { 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(Name && lastHSName == 1) { playsound(Name, "misc/takenlead.wav" ); } else { playsound(Name, "misc/takenlead.wav" ); playsound(lastHSName, "misc/lostlead.wav" ); } highScore = HSCount[ iIDA ]; lastHighScore=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 schaffte %i Kills in %i Sekunden!!!",Name,KIT_Level1,KillInTime); say(Text); playFile( "misc/dk.wav" ); } 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 schaffte %i Kills in %i Sekunden!!!",Name,KIT_Level2,KillInTime); say(Text); playFile( "misc/monsterkill.wav" ); } 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 schaffte %i Kills in %i Sekunden!!!",Name,KIT_Count,KillInTime); say(Text); playFile( "misc/monsterkill.wav" ); } 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 Data [MAX_DATA_LENGTH]; new x [MAX_DATA_LENGTH]; convert_string( HLData, Data, MAX_DATA_LENGTH ); strsplit(Data,"# ",x,MAX_DATA_LENGTH); if(strcmp(Data,"Game_Commencing")==0) { FragCount[ iIDA ] = 0; HSCount[ iIDA ] = 0; } else if(strcmp(x,"Restart_Round_")==0) { FragCount[ iIDA ] = 0; HSCount[ iIDA ] = 0; } 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) { FragCount[UserIndex] = CLEAN_SLATE; HSCount[UserIndex] = CLEAN_SLATE; for( new i = 1; i <= maxplayers; i++ ) { if(HSCount[i] > highScore) { highScore = HSCount[i]; } } } return PLUGIN_CONTINUE; } 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("resetfb", "resetcount", ACCESS_CONSOLE, ""); exec( "logd_reg 57 admin_command logd_multikill" ); exec( "logd_reg 62 admin_command resetfb" ); exec( "logd_reg 62 admin_command resetcount" ); return PLUGIN_CONTINUE; } |
Autor: | daRope [ 31.05.2002, 16:33 ] |
Betreff des Beitrags: | |
Zitat:
Ich wusste aber nicht, dass man es so machen kann. Ich habe es bisher immer so gemacht.
Was? Das ist doch genauso Quatsch. Na, bin ich denn jetzt voellig bescheuert? Name ==1 && lastHSName == 1 Name und lastHSName sind beides Arrays und werden mit einem Integer verglichen? Das sollte der Compiler aber sowas von anmeckern! Und das tut wirklich? Allen Ernstes? |
Autor: | daRope [ 31.05.2002, 20:11 ] |
Betreff des Beitrags: | |
Also ich habe das noch mal ausprobiert mit diesem Code: if ( Name && lastHSName == 1 )Der Compiler frisst das. Das ist aber ein Fehler. Wenn Du dasselbe mit zwei lokalen Arrays machst, dann meckert er. Bleibt die Frage, was dass denn ueberhaupt sein soll. Vom programmiertechnischen Standpunkt macht dieser Ausdrueck genu gar keinen Sinn. Du solltest das also schleunigst nochmal ueberdenken und umschreiben. Denn das wird mit Sicherheit nicht das machen, was Du eigentlich wolltest. |
Autor: | Sir Drink a lot [ 01.06.2002, 15:37 ] |
Betreff des Beitrags: | |
wie gesagt, bin ich davon ausgegangen, das es sich hier um Zahlen handelt und nicht um Arrays. Wenn es sich hier in dem Fall wirklich um Arrays handelt, kann man so nicht das gewünschte Ergebnis erzielen, wie daRope schon sagte. dann muss ein strcmp her. Oder eine ähnliche String Behandlung. Ich habe mir das Plugin noch nicht angesehen. |
Autor: | Smudo [ 13.06.2002, 22:04 ] |
Betreff des Beitrags: | |
Hier ist nochmal mein Original. Hab noch 2 Bugs gefunden, sind aber immer noch welche drin ![]() Man kanns aber schon mal so laufen lassen. Ab und zu verzählt es sich halt mal aber nicht so oft. Ist bestimmt schlecht programmiert aber ich kann ja auch nicht programmieren ![]() Code: /* * Multikillcounter by [TV]Smudo. * Announces Kills per seconds. * Announces First Blood. * Announces the leading Player. * Based on Bud-froggys Killing Streak Announcer®. */ #pragma dynamic 16384 #include <core> #include <console> #include <string> #include <admin> #include <adminlib> new STRING_VERSION[MAX_DATA_LENGTH] = "v1"; new FBSwitch = 1; /*First Blood. 0=OFF, 1=First Blood pro Runde , 2=First Blood pro Map.*/ #define KITSwitch 1; /*Kills in Time Switch. 1=ON or 0=OFF.*/ #define HSSwitch 1; /*Highscore. 1=ON or 0=OFF.*/ #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; 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 Data [MAX_DATA_LENGTH]; new x [MAX_DATA_LENGTH]; convert_string( HLData, Data, MAX_DATA_LENGTH ); strsplit(Data,"# ",x,MAX_DATA_LENGTH); if(strcmp(Data,"Game_Commencing")==0) { FragCount[ iIDA ] = 0; HSCount[ iIDA ] = 0; } else if(strcmp(x,"Restart_Round_")==0) { FragCount[ iIDA ] = 0; HSCount[ iIDA ] = 0; } 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) { FragCount[UserIndex] = CLEAN_SLATE; HSCount[UserIndex] = CLEAN_SLATE; for( new i = 1; i <= maxplayers; i++ ) { if(HSCount[i] > highScore) { highScore = HSCount[i]; } } } return PLUGIN_CONTINUE; } 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("resetfb", "resetcount", ACCESS_CONSOLE, ""); exec( "logd_reg 57 admin_command logd_multikill" ); exec( "logd_reg 62 admin_command resetfb" ); exec( "logd_reg 62 admin_command resetcount" ); return PLUGIN_CONTINUE; } |
Autor: | [COLA]*Whiskey [ 14.06.2002, 13:08 ] |
Betreff des Beitrags: | |
bei mir is es so das z.b. teamkills mitgezählt werden und wenn jemand erster is und rausgeht aus dem spiel wird die leaderscore auch nich zurück gesetzt ausserdem wärs ja auch cool wenn man das in 2 teams aufteilen würde also das es einen ter leader und einen ct leader gibt ich krieg das allerdings auch nich hin sowas zu programmieren ![]() |
Autor: | Smudo [ 14.06.2002, 15:46 ] |
Betreff des Beitrags: | |
Also Teamkills zählt es richtig. Jedenfalls hat es das getan als ichs ausprobiert hab und da es auf unserem Server läuft, wär mir bestimmt schon aufgefallen wenns nicht funzen würde (oder ich mach zu wenig TKs ![]() ![]() ![]() Das mit dem einteilen in 2 teams könnte man ja mal angehen wenn es so 100%ig funzt aber solange noch Fehler drin sind macht das glaube ich nicht so viel sinn. |
Autor: | frostschutz [ 14.06.2002, 16:15 ] |
Betreff des Beitrags: | |
Was mir so auffällt: Du hast eine globale Variable Code: new HSCount[ MAX_PLAYERS ] = {CLEAN_SLATE,...};In Schleifen (z.B. in disconnect) durchläufst du die aber nicht mit MAX_PLAYERS, sondern fragst den Playercount auf dem Server ab: Code: new maxplayers = maxplayercount(); ... for( new i = 1; i <= maxplayers; i++ ) ...Das ist verwirrend, da du ja mit dem tastächlichen playercount ganz andere Array-Grenzen haben könntest als das Array tatsächlich hat. Sowas könnte auch zu seltsamen Fehlern führen, was passiert, wenn auf dem Server mehr Leute drauf sind als maxplayercount() liefert? Denn möglich ist das... ich würde da also durchweg mit MAX_PLAYERS arbeiten. Was für mich noch komisch aussieht, ist die Neuberechnung der Highscore in plugin_disconnect. An allen anderen Stellen, an denen was mit der HighScore-Variable gemacht wird, wird auch lastHighScore etc. mitgeändert. Dort jedoch nicht. Ist das gewollt? |
Autor: | Warhead [ 14.06.2002, 16:31 ] |
Betreff des Beitrags: | |
Der Einsatz der maxplayercount() Funktion ist schon korrekt, da diese den Playercount vom Server zurückgibt. MAX_PLAYERS ist jedoch eine Konstante mit dem Wert 32 (glaub ich). |
Autor: | frostschutz [ 14.06.2002, 16:51 ] |
Betreff des Beitrags: | |
Der Unterschied von maxplayercount() und MAX_PLAYERS ist mir schon klar. Das Array ist eben mit [MAX_PLAYERS] deklariert, und so wie ich den Code verstehe soll an dieser Stelle das gesamte Array durchlaufen werden um nach einem höheren Wert für Highscore zu suchen. Durch die Abfrage mit maxplayercount() wird jedoch nur ein Teil des Arrays durchlaufen. Das kann zu Inkonsistenzen führen, vor allem dann wenn es wie in früheren HL-Versionen immer noch möglich ist, daß mehr Spieler als maxplayercount() auf dem Server sind. Meiner Meinung nach besteht die Gefahr, daß dort gültige Einträge aus dem Array übersehen werden. Die Behandlung des Arrays mit einer willkürlich gewählten niedrigeren Array-Größe ist inkonsistent. |
Seite 1 von 3 | Alle Zeiten sind UTC+01:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |