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

Der "Ich habe ein Scripting-Problem"-Thread
https://www.adminmod.de/viewtopic.php?t=4561
Seite 4 von 5

Autor:  Sir Drink a lot [ 20.02.2003, 12:32 ]
Betreff des Beitrags: 

ähm..weiß jetzt nicht, ob das hier reinpasst. Aber ich habe manchmal einfach das Problem, dass er mir Globale Variablen nicht setzt.

Es geht um das Vote For It.

Das Grundprinzip:
In Hilfsfunktionen wird bei if(status==0) der Vote mit entsprechender Frage gestartet und ist der Vote abgeschlossen, wird die Hilfsfunktion mit status=1 erneut aufgerufen und der 'else' Teil bearbeitet.

Das Problem:
Bei einem vote zu ff, chasecam, awp und pistolsonly benutze ich entsprechend 4 globale Variablen, die mit 0 oder 1 sich merken, wie der Zustand gerade ist. Dementsprechend ist bei Aufrufen des Votes auch die Fragestellung.

Es funktioniert auch, ausser bei dem awp-vote. Er stellt mir die globale Variable 'noawpx' nicht auf 1, wenn ein Vote gegen das Benutzen der AWP erfolgreich war. Er führt aber den 'else' Teil korrekt aus und zeigt auch an, dass 'die Awp ab jetzt verboten ist'. Aber noawpx=1 wird nicht gesetzt....

Snip:
Code:
awp(status){
	new Question[MAX_TEXT_LENGTH];
	if(status==1){
		if(pistolsonly==1){
			displayconsole("","Macht keinen Sinn, da sowieso nur Pistolen erlaubt sind!","");
			return PLUGIN_CONTINUE;
		}
		if(noawpx==0){
			strcpy(Question,"AWP verbieten?^n",MAX_TEXT_LENGTH);
		}else{
			strcpy(Question,"AWP erlauben?^n",MAX_TEXT_LENGTH);
		}
		sound_all(VoteNow);
		vote(Question,"JA","NEIN","NormVote","");
	}else{
		if(noawpx==0){
			noawpx=1;
			snprintf(Question,MAX_TEXT_LENGTH,"Der Vote hat ergeben,^ndass die AWP verboten ist!");
			displayall(Question);
			plugin_exec("admin_restrictweapon","4 6");
		}else{
			snprintf(Question,MAX_TEXT_LENGTH,"Der Vote hat ergeben,^ndass die AWP erlaubt ist!");
			noawpx=0;
			pistolsonly=0;
			displayall(Question);
			plugin_exec("admin_enableallweapons","");
		}
	}
	return PLUGIN_CONTINUE;
}
Die displayall(...) Funktion sieht so aus:
Code:
displayall(Text[]){
	centersay(Text,12,100,140,255);
	say(Text);
	return PLUGIN_CONTINUE;
}
Ich kann es nicht verstehen. Alle anderen Vote Funktionen sehen gleich aus und führen das Ändern der globalen Variable auf 1 durch.

1. Frage: kann es mit dem PLUGIN_CONTINUE zusammenhängen?
2. Frage: Das Plugin ist sehr lang und ich benutze auch #pragma dynamic 4096. Darf man nicht zuviele Hilfsfunktionen (Unterfunktionen) benutzen? 3. Frage: Sollte ich die (Unter-)Funktionen forwarden?

Autor:  Rinde [ 20.02.2003, 15:52 ]
Betreff des Beitrags: 

1. ich denke nicht. warum du allerdings eine funktion hast und keine prozedur, ist mir nicht klar. du solltest evtl. überlegen, ob hier die funktion überhaupt benötigt wird (nur public functions müssen einen rückgabewert haben)
2. wenn der stack voll wäre, würdest du zumindest in der ausführenden console den error #3 (AMX_ERR_STACKERR) angezeigt bekommen
3. funktionen sollte man alle forwarden, egal ob command handler oder eigene funktion. müssen tust du es nicht, aber ein versuch wäre es wert

PS: klar passt das hier rein. hier gehts schon lange nicht mehr um "merkwürdiges problem mit maxplayercount()"

Autor:  Sir Drink a lot [ 20.02.2003, 20:58 ]
Betreff des Beitrags: 

Hm.. :oops:

Unterschied zwischen einer Funktion und Prozedur?

Ich habe public functions, die auch einen Rückgabe Wert haben müssen/sollten.

Also sind die Hilfsfunktionen in dem Sinne Prozeduren. (Ausser zwei, bei denen ich den Rückgabewert brauche)

Der Kompiler sagt mir aber, dass ich was returnen sollte. Auch bei der awp 'prozedur'. Bei der Pistols-Prozedur nicht.

Also nicht bei allen Prozeduren.

Bitte erkläre mir nochmal den genauen Unterschied.
(Funktion gibt einen Wert zurück und eine Prozedur verändert Variablen oder gibt etwas am Bildschirm aus)

Hier mal die pistols Prozedur als Vergleich, die funktioniert:
Code:
pistols(status){
	new Question[MAX_TEXT_LENGTH];
	if(status==1){
		if(pistolsonly==0){
			strcpy(Question,"Nur mit Pistolen spielen? ^n",MAX_TEXT_LENGTH);
		}else{
			strcpy(Question,"Wieder alle Waffen erlauben? ^n",MAX_TEXT_LENGTH);
		}
		vote(Question,"JA","NEIN","NormVote","");
		sound_all(VoteNow);
	}else{
		if(pistolsonly==0){
			snprintf(Question,MAX_TEXT_LENGTH,"Der Vote hat ergeben,^ndass nur Pistolen erlaubt sind!");
			pistolsonly=1;
			noawpx=0;
			displayall(Question);
			plugin_exec("admin_enableallweapons","");
			plugin_exec("admin_restrictmenu","2"); 
			plugin_exec("admin_restrictmenu","3"); 
			plugin_exec("admin_restrictmenu","4"); 
			plugin_exec("admin_restrictmenu","5"); 
		}else{
			snprintf(Question,MAX_TEXT_LENGTH,"Der Vote hat ergeben,^ndass alle Waffen erlaubt sind!");
			pistolsonly=0;
			noawpx=0;
			displayall(Question);
			plugin_exec("admin_enableallweapons","");
		}
	}
}
Edit:
Hm mir fällt auf, dass ich sehr viel mit "" übergebe.

Autor:  Sir Drink a lot [ 20.02.2003, 21:11 ]
Betreff des Beitrags: 

Ok. Ich kann mir denken, warum er bei der awp Funktion einen Rückgabewert verlangt hat.

Weil ich im 2 If Satz ein return PLUGIN_CONTINUE benutzt habe. Dann denkt er wohl, er muss auch nochmal ein return drin haben.

Habe alle returns gelöscht und es geht ohne Warnung zu kompilieren.

Nachtrag:
Da muss man aber wirklich mit mehreren If-Sätzen sauber programmieren, wenn man ein return in einer Prozedur vermeiden will.

Ich benutze das return eben sehr häufig als Abbruch der Prozedur. So habe ich eben gedacht, dass man dieses 'return' auch dafür benutzt.

Autor:  Rinde [ 20.02.2003, 21:36 ]
Betreff des Beitrags: 

wenn irgendwo ein return ist, geht der compiler davon aus, dass es eine funktion ist. eine funktion ist alles, das einen rückgabewert hat. wenn eine funktion nur manchmal einen rückgabewert hat und manchmal nciht, dann mötzt der compiler natürlich.
idee: gibt es den befehl "exit" oder vergleichbares in small, mit dem man die aktuelle prozedur/funktion abbricht? mal im manual suchen

Autor:  Warhead [ 21.02.2003, 17:53 ]
Betreff des Beitrags: 

Ein Return ohne Parameter sollte den gewünschten Effekt erzielen.

Der Unterschied zwischen Prozeduren und Funktionen (wenn man diesen heutzutage überhaupt noch macht) ist der Rückgabewert. Funktionen besitzen einen Rückgabewert, Prozeduren nicht.

Autor:  KingGinord [ 23.02.2003, 19:50 ]
Betreff des Beitrags: 

könntet ihr mir mal sagen wo ich nen tutorial, oder eine befehlsliste mit erklärung oder sontwas von small finde????
wäre echt dankbar!!!

aber nicht www.adminmod-hilfe.de

EDIT: habe zuvor im thread das schon gesehen, aber ist nur auf englisch, und ich habe keine lust (oder bin manchmal zublöd) DAS GANZE zu übersetzen, also wärt so lieb, danke!

Autor:  Rinde [ 23.02.2003, 20:32 ]
Betreff des Beitrags: 

du sollst es auch nicht übersetzen, du sollst es lediglich lesen

Autor:  KingGinord [ 23.02.2003, 22:15 ]
Betreff des Beitrags: 

honkitoy, aber wenn ich es lese dann übersetz ich die wörter die ich lese, ich spreche noch nich so lange englisch, dass sich das übersetzen automatisch abstellt.

PS: leute die länger als 3 monate englisch sprechen, (also leute die muttersprache bspweise deutsch haben) träumen dann ach in englisch!

Autor:  [WING] Black Knight [ 23.02.2003, 22:55 ]
Betreff des Beitrags: 

Dafür reichen auch schon 3 Wochen. Übel ist, dass man nach 3 Monaten versucht mit deutschen Bekannten englisch zu sprechen. ;)

Autor:  KingGinord [ 23.02.2003, 23:03 ]
Betreff des Beitrags: 

also, na gut ih war auch noch mit deutschen in kontakt als das solange gedauert aht, naja als wir mal nen austausch hatten, da habe ich nach dem 2ten tag schon immer anstatt weil because gesagt....
und sone sachen!

Autor:  metaxa [ 06.04.2003, 19:10 ]
Betreff des Beitrags: 

Hi Rinde

Hab noch mal ne frage zu deinem Plugin.

Bei uns wird die Banreasons.log nicht erstellt woran kann das liegen ?

Könnte man die Multislap funktion aus deinem entsprechenden Plugin integrieren und evt. die anderen AM Betrafungsfunktionen ?

Dann hätte man nämlich ein einwandfreies Player Menu Plugin um Bestrafungen an Lamern usw. durchzuführen

Greets

metaxa

Autor:  Rinde [ 06.04.2003, 22:39 ]
Betreff des Beitrags: 

dass er die logdatei nicht erstellt, könnte daran liegen, dass file_access_write 0 ist

zu anderen bestrafungen: möglich, aber dafür war das plugin von anfang an nicht ausgelegt. das plugin ist speziell für unseren server geschrieben worde, und da sind sachen wie slap, gag o.ä gar nciht drauf. so ein kinterkram verleitet nur zum missbrauch

Autor:  metaxa [ 06.04.2003, 23:52 ]
Betreff des Beitrags: 

THX

für die Antwort Rinde, war halt nur ne Frage.

file_acess_write ist 1, die anderen *.log Dateien werden ja erstellt.

Hast du evt. noch ne andere Idee warum die banreasons.log nicht erstellt wird ?

Frage evt. weil nicht über menu gebannt wurde sondern über admin_ban ohne Grundangabe ?

Dein Plugin ist schon toll, aber wir müssen die bans schon nachvollziehen können. Z.b. beim sdal_userban plugin war es so das man ein geändertes plugin_base brauchte oder das Plugin vor dem plugin_base in die plugin.ini schreiben muss.

Wie gesagt evt. eine Idee ??

Greets

metaxa

Autor:  Rinde [ 07.04.2003, 00:34 ]
Betreff des Beitrags: 

also wenn die anderen beiden erstellt werden hab ich keine idee. das prinzip ist das gleiche, und es sollte auch funktionieren, wenn es von der console aus aufgerufen wird. geänderte plugins werden dafür nciht benötigt. ich empfehle lediglich, die funktion kill_menu(UserIndex) auch in alle anderen plugins einzubauen, die auf irgendeine art und weise das menü überdecken könnten.
ausserdem heisst, dass es dafür nciht gemacht wurde, nicht, dass ich es nciht einbauen kann. es steht halt nicht sehr weit oben auf meiner prioritätetliste

Autor:  metaxa [ 11.04.2003, 22:15 ]
Betreff des Beitrags: 

Update:

Der ban logfile wird bei uns erstellt wenn ich das Plugin vor dem plugin_base lade. Leider funktionieren dann der kickvote und banvote nicht mehr. Vorteil des Plugins, man kann dein plugin admin_who ersetzen.


Wie gesagt sauberes plugin, ich hoffe du integrierst noch deinen multislap.


Greets metaxa

Autor:  Rinde [ 12.04.2003, 00:24 ]
Betreff des Beitrags: 

ich hab heute schon den multislap code reingeladen. aber dann hatte ich doch nicht sone lust. aber demnächst vielleicht

Autor:  Rinde [ 20.04.2003, 22:32 ]
Betreff des Beitrags: 

ich ahb ne frage an alle, die sich im AM quelltext auskennen. (bzw die ihn haben, ich habs bisher nciht geschafft den runterzuladen)

wie gross ist der puffer der readfile() funktion in AM 2.50.50? soll heissen, wie lang kann der eingelesenen string maximal sein?

Autor:  Rinde [ 20.04.2003, 22:34 ]
Betreff des Beitrags: 

und noch eine: wenn ich einen user mit rechtelevel 0 in die users.ini eintrage, wird dann auth("") für diesen user weiterhin true zurückliefern?

Autor:  Rinde [ 20.04.2003, 22:40 ]
Betreff des Beitrags: 

und schonwieder:
die vorgegebenen userrechte gehen bis 65536 (2^16)
kann ich einfach einen weitere level in meinen scripten verwenden und diese den usern zuordnen? wo ist die grenze? 2^32?

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