Ein neues Thema erstellen  Auf das Thema antworten  [ 87 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 20.02.2003, 12:32 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
ä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?

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.02.2003, 15:52 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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()"


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.02.2003, 20:58 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
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.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.02.2003, 21:11 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
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.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.02.2003, 21:36 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 21.02.2003, 17:53 

Registriert: 17.12.2001, 01:00
Beiträge: 697
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.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2003, 19:50 

Registriert: 17.11.2002, 13:39
Beiträge: 34
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!

_________________
visit: http://www.mh-coding.de


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2003, 20:32 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
du sollst es auch nicht übersetzen, du sollst es lediglich lesen


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2003, 22:15 

Registriert: 17.11.2002, 13:39
Beiträge: 34
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!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2003, 22:55 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Dafür reichen auch schon 3 Wochen. Übel ist, dass man nach 3 Monaten versucht mit deutschen Bekannten englisch zu sprechen. ;)

_________________
Der schwarze Ritter triumphiert immer...
WING-Clan


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2003, 23:03 

Registriert: 17.11.2002, 13:39
Beiträge: 34
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!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2003, 19:10 

Registriert: 09.08.2002, 18:36
Beiträge: 95
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2003, 22:39 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2003, 23:52 

Registriert: 09.08.2002, 18:36
Beiträge: 95
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2003, 00:34 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 11.04.2003, 22:15 

Registriert: 09.08.2002, 18:36
Beiträge: 95
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12.04.2003, 00:24 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
ich hab heute schon den multislap code reingeladen. aber dann hatte ich doch nicht sone lust. aber demnächst vielleicht


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.04.2003, 22:32 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.04.2003, 22:34 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 20.04.2003, 22:40 
AM.de Team

Registriert: 04.10.2002, 16:14
Beiträge: 1212
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?


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 87 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 Nächste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de
Original Design von "[ Half-Life Admin Mod © Alfred Reynolds 2000-2003 ] - [ site design by Jägermeister ]"