AdminMod.de
https://www.adminmod.de/

nominate map plugin ???
https://www.adminmod.de/viewtopic.php?t=4292
Seite 5 von 7

Autor:  Rinde [ 25.11.2002, 22:42 ]
Betreff des Beitrags: 

nach ein wenig mehr rumprobieren glaube ich, dass der fehler nur kommt, wenn adminmod mit den zeilenumbrüchen rumpfuscht. wenn ich die datei selbet tippe gehts....bloss dass das sortieren auch nciht richtig funktioniert :(

Autor:  [WING] Black Knight [ 25.11.2002, 22:46 ]
Betreff des Beitrags: 

Code:
for (j=iNumber-1;j>=0; j--){
	for (i=0;i<=j;i++){
		if(Data[i]>Data[i+1]){
			Buffer[0]=Data[0][i];
			Buffer[1]=Data[1][i];
			Data[0][i+1]=Data[0][i];
			Data[1][i+1]=Data[1][i];
			Data[0][i]=Buffer[0];
			Data[1][i]=Buffer[1];
		}
	}
}
Das müsste Bubblesort sein. Zumindest so ähnlich. Lohnt sich aber nur bei Arrays kleiner als 20, sonst steigt der Rechenbedarf. Ansonsten kannst Du Dir mal Quicksort ansehen.
Ich hab es jetzt nicht ausprobiert, aber das Prinzip müsste stimmen.
Über den Restcode schweige ich mal. Da wären noch einige optimierungswürdig Dinge. Schau erst mal, dass Du die Sortierung in den Griff bekommst. Aber eins schon vorweg: "Niemals WHILE in Verbindung mit statischen Felder ohne Abfangroutine verwenden!"

Autor:  Rinde [ 25.11.2002, 22:58 ]
Betreff des Beitrags: 

den compile error hab ich wegbekommen, aber irgendwie isses das nicht. hier meine datei:
Code:
de_dust 4
de_cbble 3
cs_office 8
cs_italy 1
de_dust2 1
cs_assault 7
de_vertigo 6
1room 8
und was er draus macht

Autor:  aRved [ 25.11.2002, 23:07 ]
Betreff des Beitrags: 

joa hier wird ja hart gearbeitet *gg*

Rinde hab mal nochen kleinen fehler glau bich gefunden

Undzwar kommt nich immer der Vote am ende der map also die anzeige kommte der sound auch nur nich immer die auswahl vom vote...

Und wenn die anzeige doch mal erscheint und man no change wählt kommt zum schluss *vote passed* und change map to due to vote..Also die map anzeige bleibt leer...

Wollte ich mal ebnd so sagen *g*

Autor:  [WING] Black Knight [ 25.11.2002, 23:13 ]
Betreff des Beitrags: 

Ich glaube in meiner routine ist noch ein kleiner Bug drin. Muss wohl so lauten:
Code:
for (j=iNumber-1;j>0; j--){
   for (i=0;i<j;i++){
Probier's nochmal. Ansonsten musst Du mal das ganze Schritt für Schritt überlegen. Bubblesort ist nicht soo schwierig.

Autor:  Rinde [ 25.11.2002, 23:17 ]
Betreff des Beitrags: 

sieht aber genauso aus. naja, ich werd wohl für heute schluss machen. 4 stunden klausur morgen und ncoh nicht gelernt :roll:

Autor:  pod.virus [ 26.11.2002, 12:54 ]
Betreff des Beitrags: 

hiho ich wollte wissen was ich einstellen muss das 5 min vor ende der map das plugin automatisch gestartet wird ? habe folgendes in meiner plugin.ini zurzeit
Code:
addons/adminmod/scripts/plugin_rindy_votemap.amx
addons/adminmod/scripts/plugin_base.amx
addons/adminmod/scripts/plugin_chat.amx
addons/adminmod/scripts/plugin_cheat.amx
addons/adminmod/scripts/plugin_CS.amx
# addons/adminmod/scripts/plugin_hldsld_mapvote.amx
addons/adminmod/scripts/plugin_message.amx
addons/adminmod/scripts/plugin_retribution.amx
addons/adminmod/scripts/plugin_spawn.amx
# addons/adminmod/scripts/plugin_TFC.amx
addons/adminmod/scripts/plugin_chicken_l.amx
addons/adminmod/scripts/plugin_sank_al.amx
greetz virus

Autor:  Rinde [ 26.11.2002, 15:42 ]
Betreff des Beitrags: 

admin_vote_autostart 1

Autor:  Rinde [ 26.11.2002, 17:03 ]
Betreff des Beitrags: 

blacky, besten dank für deine mühe, aber ich behalt meinen, der funzt jetzt nämlich
Code:
for(i=1;i<iNumber;i++) { 
    for(j=0;j<i;j++) { 
        if(Data[1][i] > Data[1][j]) { 
            Buffer[0] = Data[0][i]; 
            Buffer[1] = Data[1][i]; 
            for(k=i-1;k>=j;k--) { 
                Data[0][k+1] = Data[0][k]; 
                Data[1][k+1] = Data[1][k]; 
            } 
            Data[0][j] = Buffer[0]; 
            Data[1][j] = Buffer[j];  // <----- das muss 1 sein, nicht j
        } 
    } 
} 
klar dass das den error erzeugt wenn j = 2 ist

/edit: grml textformatierung in code tags geht nicht

Autor:  Sir Drink a lot [ 26.11.2002, 17:03 ]
Betreff des Beitrags: 

wie sieht es aus mit der Sortier-Funktion :-)

Ich bastel vielleicht heute abend auch nochmal dran.

Bisher habe ich das 'while' rausgeworfen und mit einer Schleife von 0 bis max 249 (filesize) ersetzt.
habe in die Schleife ein strbreak rein gemacht. (sMap und sNominate, was ich zu iNominate per strtonum umwandle und in Data[0] benutze...) Das mit Deinem strtonum habe ich nicht verstanden...bzw. was ist wenn eine Map schon 11 (mehrstellige Zahl) Nominates hat...

Die Sortier-Funktion habe ich noch nicht verstanden (eure beiden Vorschläge funzen nicht)

Die Ausgabe der Sortierung habe ich auf 5 Zeilen begrenzt. Geht zur Zeit nicht, da die Sortierung der Data nicht geht...

Muss der Buffer nicht auch 2-Dimensional sein?? Buffer[0] ??? wie?? Größe 0?? nicht versteh...komisch das dann ein amx_error 4 entsteht?? :-)

Es gibt einen Thread, wo ich auch schon mal nach einer Sortierung Frage....und kompetente Leute haben geantwortet...
Nur leider bin ich nicht kompetent genug, um diese Vorschläge umzusetzen...

Autor:  Rinde [ 26.11.2002, 17:05 ]
Betreff des Beitrags: 

oh ja, die while funktion hab ich auch geändert
Code:
    new Data[2][250];
    new UserName[MAX_NAME_LENGTH];
    new LineData[MAX_DATA_LENGTH];
    new Outstring[255] = "Top voted maps:^n";
    new Line = 0;
    new i = 0;
    convert_string(HLUserName,UserName,MAX_NAME_LENGTH);
    for(Line=1;Line<=250;Line++) {
        if(readfile("addons/adminmod/statistics.txt",LineData,Line,MAX_DATA_LENGTH) == 1) {
            if(strlen(LineData) > 3 && strcount(LineData,' ') == 1 && LineData[0] != '#') {
                Data[0][i] = Line;
                Data[1][i] = strtonum(LineData[strchr(LineData,' ')+1]);
                i++;
            }
        } else {
            break;
        }
    }
    Sort(Data,i);
    for(i=0;i<g_Statistics && i<filesize("addons/adminmod/statistics.txt");i++) {
        readfile("addons/adminmod/statistics.txt",LineData,Data[0][i],MAX_DATA_LENGTH);
        snprintf(LineData,MAX_DATA_LENGTH,"^n  %i. %s",i+1,LineData);
        strcat(Outstring,LineData,255);
    }
    messageex(UserName,Outstring,print_tty);
    return PLUGIN_HANDLED;
}
ohja,
Data[1] = strtonum(LineData[strchr(LineData,' ')+1]);
kann ich dir erklären: LineData[x] ist der string LineData ab dem zeichen mit index x, LineData[0] wäre der komplette string. strchr gibt den index des ersten leerzeichens aus. d.h. der teil von LineData ab einem zeichen hinter dem ersten leerzeichen wird komplett in ne zahl umgewandelt.

Autor:  Sir Drink a lot [ 26.11.2002, 17:08 ]
Betreff des Beitrags: 

darf nicht = 250 sein....oder? 250 ist die 0....

was ist mit dem strtonum...klappen dann die mehrstelligen Zahlen?

wie groß ist g_Statistic bei Dir?

Autor:  Rinde [ 26.11.2002, 17:09 ]
Betreff des Beitrags: 

mehrstellige zahlen sollten klappen.
250 = 0? gnaa hast recht.

Autor:  Sir Drink a lot [ 26.11.2002, 17:11 ]
Betreff des Beitrags: 

hihi..das war ja schnell editiert :-)

Nun dann werde ich es auch mal testen :-)

Wie mach ich das ganze jetzt mit einer Liste von Namen?

Meier
Müller
Schmitz
Peter
Karl
??

Die sollen richtig sortiert werden!

NACHTRAG:

Zur Optimierung sollten alle Nullwerte des Data[1] rausfliegen.

Autor:  Sir Drink a lot [ 26.11.2002, 17:19 ]
Betreff des Beitrags: 

Geht das auch?
Code:
new iLinemax=filesize(TextFile);
	for(i=0;i<iLinemax;i++){
		readfile(TextFile,LineData,i,MAX_DATA_LENGTH);
		strbreak(LineData,Map,Nominate,MAX_DATA_LENGTH);
		iNominate = strtonum(Nominate);
		if(iNominate!=0){
			Data[0][i] = i;
			Data[1][i] = iNominate;
		}
	}

Autor:  Rinde [ 26.11.2002, 17:21 ]
Betreff des Beitrags: 

dieses hier funzt jetzt sehr gut.
Code:
public admin_showstatistic(HLCommand,HLData,HLUserName,UserIndex) {
    new Data[2][251];
    new UserName[MAX_NAME_LENGTH];
    new LineData[MAX_DATA_LENGTH];
    new Outstring[255] = "Top voted maps:^n";
    new Line = 0;
    new i = 0;
    convert_string(HLUserName,UserName,MAX_NAME_LENGTH);
    for(Line=1;Line<251;Line++) {
        if(readfile("addons/adminmod/statistics.txt",LineData,Line,MAX_DATA_LENGTH) == 1) {
            if(strlen(LineData) > 3 && strcount(LineData,' ') == 1 && LineData[0] != '#') {
                Data[0][i] = Line;
                Data[1][i] = strtonum(LineData[strchr(LineData,' ')+1]);
                i++;
            }
        } else {
            break;
        }
    }
    Sort(Data,i);
    Line = min(g_Statistics,i);
    for(i=0;i<Line;i++) {
        readfile("addons/adminmod/statistics.txt",LineData,Data[0][i],MAX_DATA_LENGTH);
        snprintf(LineData,MAX_DATA_LENGTH,"^n  %i. %s",i+1,LineData);
        strcat(Outstring,LineData,255);
    }
    messageex(UserName,Outstring,print_tty);
    return PLUGIN_HANDLED;
}
es hat dieses file
Code:
de_dust 0
de_cbble 347
cs_office 82
cs_italy -13
de_dust2 17
cs_assault 7
de_vertigo 63
1room 89
anstandslos korrekt sortiert, obwohl g_Statistics grösser als die anzahl der maps war. immoment fallen mir keine verbesserungen mehr ein
und diese
Code:
Line = min(g_Statistics,i);
stellt sicher, dass die nullwerte rausfliegen.
noch was? achso, deine namen. willst du die alphabetisch sortieren oder wie?

Autor:  Sir Drink a lot [ 26.11.2002, 18:08 ]
Betreff des Beitrags: 

jep!

mit Sonderzeichen...(Clantags haben ja meist welche)

Ist aus meinem admin_look

Das Textfile LOOK.txt hat als Aufbau:

WONID Name

Autor:  Rinde [ 26.11.2002, 18:14 ]
Betreff des Beitrags: 

mmh, mit strings ist das schwieriger. mal sehen ob ich nachher noch zeit habe, aber erstmal muss ich zum cw

Autor:  [WING] Black Knight [ 26.11.2002, 18:35 ]
Betreff des Beitrags: 

Nee, nee, nee.

SDal, was passiert, wenn die Datei länger als 250 Zeilen lang ist? Nur mal so ne Frage.

Autor:  Sir Drink a lot [ 26.11.2002, 18:39 ]
Betreff des Beitrags: 

keine Ahnung...amx_error 4 nehme ich an. :-)

Aber hier zu Rindes Sortierung...ich habe mir den Code kopiert, aber bei mir sortiert er gar nichts...er nimmt den letzten Eintrag und Ende...

aber ich suche mal weiter...

Seite 5 von 7 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/