Ein neues Thema erstellen  Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1 2 Nächste
Autor Nachricht
BeitragVerfasst: 27.06.2002, 15:53 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Hallo ! - Ich mal wieder :-?

In einem PlugIn habe ich folgenede Schleife die aus einer Datei "admins.cfg" eine WonID und einen Namen auslesen soll. Doch scheinbar öffnet er die Datei nicht.

Die Ausgabe die in der console erfolgt ( und zu diesem ProgramTeil gehört ) beinhaltet nur 3x "File nicht gefunden" ( siehe Zeile 14 ).

Kann mir jemand helfen ?
Code:
   new WONID=0;
   new Text1[MAX_TEXT_LENGTH]; 
   new Text2[MAX_TEXT_LENGTH];
   new Text3[MAX_TEXT_LENGTH];
   new Text4[MAX_TEXT_LENGTH];
   new k;
   new resultstr[MAX_TEXT_LENGTH]="empty";
   new resultwon[MAX_TEXT_LENGTH];
   new resultname[MAX_TEXT_LENGTH];
   new actwon[MAX_TEXT_LENGTH];

  #
  ...code ...
  #


1	 for(k=1;k<=3;k++){
2	   if(readfile("admins.cfg",resultstr,k,40) != 0) {
3		if(k<=1) {
4		   selfmessage("File gefunden");
5		}
6		strbreak(resultstr,resultname,resultwon,80);
7		if(strcmp(actwon,resultwon)==0){
8		   Text4=" ";
9		   snprintf(Text4,10," -> %s",resultname);
10		   strncat(Text1,Text4,53,MAX_TEXT_LENGTH);
11		}
12	   }
13	   else { 
14   	      selfmessage("File nicht gefunden"); 
15   	   } 
16			
17	}
admins.cfg befindet sich im gleichen Verzeichnis wie die plugin.ini ( cstrike ).
Der Inhalt der Datei sieht etwa so aus

123454 Text
23456 Blubb
123409 Blaaa
usw ...




Außerdem würde mich noch interessieren woher die Fehlerausgabe
in der Console beim Starten eines Plugins kommt, die mir sagt "Error 3".

Außerdem kann ich, wenn ich den plugIn geändert hab, ihn erst nach einem Mapchange
ausprobieren. Kann mir einer sagen ob und wie ich die entsprechenden Dateien manuel
selber neu lade ?


Danke schonmal für Eure Geduld und Hilfe.

Viper_de


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 16:09 

Registriert: 17.12.2001, 01:00
Beiträge: 697
1. Leserechte für die Datei im lokalen Dateisystem richtig setzen.
2. File Access Read für Plugins erlauben.

Die Plugins werden nur nach einem Mapwechsel oder Serverneustart geladen (was man ja manuell auslösen kann).

Was bedeutet Error 3? Bin genauso faul nachzuschauen wie Du.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 16:33 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Danke Warhead !

Ich habe soeben

file_access_read 1
file_access_write 1

in der server.cfg eingetragen. Die Rechte der Datei waren bereits entsprechend ausgelegt. Ich hoffe und denke das es jetzt funktionieren wird.

Das mit dem Error 3 ... da bin ich nicht zu faul, aber ich weiß nicht genau wo ich suchen muß ( Half-Life, Admin Mod, Smal ??? ).
Ich denke mir das die Fehlermeldung keine von Smal ist ... naja, ich werds schon finden.

Danke auf jeden Fall schonmal.

Viper_de


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 16:39 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
also so geht es:
Code:
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
public admin_write(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new k;
	new msgstring[MAX_DATA_LENGTH];
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	for(k=1 ; k<=3 ; k++){
		if(readfile("admins.cfg",msgstring,k,20) != 0) {
			if(k>=1) {
				selfmessage(msgstring);
			}
		}
	}
	return PLUGIN_HANDLED;
}
public plugin_init() {
	plugin_registercmd("admin_write","admin_write",ACCESS_SAY,"admin_write : test test test");
	return PLUGIN_CONTINUE;
}
aber ich weis ja nicht was du genau vor hast!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 16:53 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Wenn ich mich richtig erinnere stehen die Fehlercodes in der Small-Doku.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 17:18 
HLDS Team
Benutzeravatar

Registriert: 26.11.2001, 01:00
Beiträge: 676
Zitat:
Wenn ich mich richtig erinnere stehen die Fehlercodes in der Small-Doku.
Zitat:
003
reserved
Reserved (unused) error message.
toll


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 27.06.2002, 21:23 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Den Fehler den Du da zitierst, ist ein Compilerfehler (wer lesen kann...). Also nicht das was wir suchen.
Nagut, weil wir alle etwas faul sind mach ich mich mal auf die Suche...
Und siehe da, da gibts ja eine amx_error_codes.txt in den Docs von Adminmod. Was da wohl drinsteht?

3 AMX_ERR_STACKERR, /* stack/heap collision */

Deutet ganz darauf hin, daß Du zuviele Variablen in einer Funktion deklariert hast, mach die doch mal global (die Variablen).


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 28.06.2002, 16:41 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Vielen Danke für Eure zahlreiche Hilfe.

Mein erstes kleines PlugIn funktioniert jetzt. Es soll die Spieler WonIds mit denen 2er Dateien Vergleichen und dann eine eine Ausgabe starten:


Admins on Server:
-----------------------------------------------------
SpielerName ..... WonID -> RichtigerName

Weitere bekannte Spieler:
-----------------------------------------------------
SpielerName ..... WonID -> RichtigerName

Andere Spieler:
-----------------------------------------------------
SpielerName ..... WonID



Und das macht das PlugIn jetzt sogar :D


admin_who macht zwar fast das Gleiche, überprüft aber die Spieler nur nach Ihren AdminRechten ( und wenn der Spieler nur über rcon am Server spielt bringts nix ), im übrigen haben wir auf unserem Server so ein paar Leute die gerne faken ... die stehen jetzt in der fakers.cfg und werden prompt entlarft.


Wegen der Error Message @ Warhead: Danke für die Mühe. Der Fehler trat meistens auf wenn ich per Readfile Daten bis Max_Text_Length ausgelesen habe. Bei einer beschränkung von 40 Zeichen pro Zeile war der Fehler weg ---- stack/heap collision klingt daher recht logisch.

Danke nochmals.


PS: Nur ein kleines PlugIn, aber zur Übung wars ok. -> Weiter dumme Fragen von mir werden folgen :D


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 28.06.2002, 21:43 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Achso, das wolltest Du machen :-)

Dann schau dir dieses mal an. Habe ich gerade mal für unseren [WING] Server gemacht, da mich die Faker auch annerven :-)

Basiert auf dem plugin admin_look, oder war es auch admin_who? Naja, egal...

Mit admin_look werden alle Spieler angezeigt, die in der Textdatei sind und gerade auf dem Server spielen. Egal ob sie mit gefaktem Namen spielen oder nicht.

Mit admin_look_list "STARTNUMMER" kann man sich die Einträge in der Textdatei von der STARTNUMMER + 10 anzeigen lassen.

Mit admin_look_add "Spielername-kürzel" wird der User in die Liste eingetragen.

bei plugin_connect werden NUR die Spieler entlarvt und angezeigt, die mit einem gefaktem Namen spielen. An alle anwesenden Spieler auf dem Server.

Ist aber noch Beta-Beta und es ist nix optimiert. Aber scheint zu laufen.

_________________
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: 28.06.2002, 21:55 

Registriert: 25.06.2002, 11:44
Beiträge: 16
hehe, das Faker Problem scheinen ja mehrere zu haben ;-)

Ich werde mir bestimmt mal Deine Version anschauen um zu sehen wie Du das ganze realisiert hast.

Die Funktion

admin_addfaker <target> <name>

Wobei "target" der aktuelle Spielername und "name" der name ist unter dem der Spieler gespeichert werden soll ( wenn name nicht angegeben wird -> speichern unter aktuellem namen )

ist das nächste was ich machen wollte. Da werde ich mich mal von Dir inspirieren lassen ;-)

Sobald das ganze fettisch ist ( laufen tuts ja bereits ) werde ich es ma hier posten.


Bis dann
Viper


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 02.07.2002, 00:21 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
ich habe das weasel_look-Plugin jetzt all meinen Bedürfnissen soweit angepasst.

Wie sehen denn Deine Ergebnisse mittlerweile aus?

Es wird jetzt bei Connect und bei Namensänderung während des Spiels überprüft, ob der Spieler in der LOOK.txt vorhanden ist. Wenn er mit Fakernamen spielt, wird er direkt angezeigt :-)

ansonsten hat es noch ein
admin_look_add #playername, der sich auf dem Server befindet#,
admin_look_list #startende listennummer (+10 wird immer angezeigt)# und
admin_look_del #ListenNr.#

eine interne Sortierfunktion werde ich aber nicht schreiben. Da fehlt mir der Grips zu. Auch lösche ich nicht die Zeile in der LOOK.txt, sondern nur deren Inhalt. Auch nicht sehr schön...naja--aber mir genügt es.

_________________
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: 02.07.2002, 16:14 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Ich bin derweil im Klausur Stress, und habe daher die Programiererei etwas vernachläßigt.

Die admin_add_faker Funktion habe ich mir Dir übernommen und noch etwas verändert, so das zum Beispiel erst nachgeschaut wird ob die WonID schon in der Liste enthalten ist bevor sie übernommen wird.

Da meine Faker.cfg umgekehrt aufgebaut ist wie Deine
( also bei mir

Name WonID

) muß ich mir nochwas einfallen das auch Leerzeichen im Namen vorkommen können. Werde ich wohl heute abend mal danach sehen wie ich das am besten lösen kann.

Du kannst mich ja mal bei ICQ adden :D

6628324

Viper


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 02.07.2002, 22:43 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Weasel hat sich sicherlich schon was dabei gedacht, warum er erst die WONID und dann den Namen nimmt :lol:

Sonst würde ich in Deinem Fall ein Sonderzeichen aus der ASCII-Tabelle als Trennungszeichen vorschlagen und dann mit
strsplit(Data,"Sonderzeichen",.....) arbeiten.

Aber um Dir die Arbeit zu ersparen mache es lieber umgekehrt!

Die Überprüfung habe ich noch rausgelassen, da es den Server etwas Laggen könnte, meiner Meinung nach.

Aber mal sehen. Vielleicht muss man es wirklich noch machen, da es bei doppelten Einträgen zu leichten Problemen kommt....(keine Probleme, sondern zu einer falschen Anzeige...., die man dann immer manuell im textfile korrigieren muss.)

_________________
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: 03.07.2002, 00:15 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Jo, das es am schnellsten ging die Speicherart ( also ERST die WonID und dann den Namen ) zu ändern, habe ich das doch gleich mal gedacht. Ansonsten hätte ich warscheinlich jedes erste Zeichen nach einem Leerzeichen geprüft ob es eine Zahl ist.

Naja, es funktioniert soweit jetzt alles.

Bin noch dabei eine Funktion zu schreiben die die Faker entfaked ...

Dann is es aber auch gut ... mmmh, obwohl, eine Löschfunktion wäre ja auch noch fein :roll:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03.07.2002, 02:25 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
um die faker zu entlarven kannst du du ja bei mir nachsehen.

das mit der delte funktion ist so eine sache. Meine ist sehr unschön und hinterlässt Lücken im Textfile.

Aber jetzt alle Data aus dem Textfile in ein 2-Dimensionalen-Array zu laden und dann wieder auszuspucken...das will ich dann auch nicht.

_________________
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: 03.07.2002, 13:32 

Registriert: 25.06.2002, 11:44
Beiträge: 16
Mit dem entlarfen meinte ich auch eine gleichzeitige umbenennung der Faker in Ihre richtigen Namen.
Das habe ich durch den folgeneden Ausdruck in einer Schleife 1->maxplayers realisiert - scheint sogar zu funktionieren.
Code:
if(strcmp(actwon,resultwon)==0){
	snprintf(Kommando,29,"name %s",resultname);
	execclient( Name, Kommando );
	hit++; 
	snprintf(Message,29,"%s entfaked",resultname);
	selfmessage(Message);
}

Wegen der löschproblematik würde ich hingehen und einfach den Eintrag filesize-1 in die gelöschte Zeile schreiben. Wenn eine Sortierung nicht verloren gehen soll und Zeile k=20 gelöscht werden soll, könnte man eine Schleife von

for ( k ; k<=filesize ; ++k) {
readfile(###, k+1,#####);
writefile (###,k,#####);
}

dann noch die letzte Zeile löschen und fetisch.

Sollte doch eigentlich funktionieren. Ich habe nur leider bißher noch keine Small Befehlstabelle gefunden und weiß nicht was alles von C übernommen werden kann - daher muß ich immer in anderen Scripten nachgucken was es so für Befehle gibt ( nervig ).

Wenn Du da was hast, kannst Du es mir ja mal zukommen lassen.

Ich habe mir überlegt das es ganz nett wäre die funktion um einen Spieler hinzuzufügen umzuschreiben, so das man noch bestimmen kann mit welchem namen der Spieler in die Liste aufgenommen wird.

admin_add_faker PlaY0r Dummbatz

Der Spieler mit dem aktuellen Spielernamen PlaY0r wird als Dummbatz gespeichert. Wenn das 2te Argument fehlt als PlaY0r.

Naja, habich heute Abend auch keine langeweile :D


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03.07.2002, 14:01 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Zitat:
Sollte doch eigentlich funktionieren. Ich habe nur leider bißher noch keine Small Befehlstabelle gefunden und weiß nicht was alles von C übernommen werden kann - daher muß ich immer in anderen Scripten nachgucken was es so für Befehle gibt ( nervig ).
Schau doch mal in die Include-Dateien...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 03.07.2002, 14:15 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
ich möchte aber nur korrekte Spielernamen in der Liste speichern. Deswegen habe ich das mit der Spielernamen überprüfung eingebaut.

Sobald sie sich entfaken, kommen sie in meine Liste :-)

Das execclient habe ich nicht reingenommen, da sich vielleicht einige auf den Schlips getreten fühlen, wenn man sie nicht richtig umbenennt. Das es angezeigt wird, soll erst mal reichen.

ui..Deine Löschfunktion muss ich mir nochmal durch den Kopf gehen lassen.

_________________
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: 03.07.2002, 14:57 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Deine Idee mit dem Löschen funktioniert so ungefähr, wie Du gesagt hast.

Nur dann hat man eben am Ende die Leerzeilen stehen. Ich habe mich jetzt zu dieser Lösung hinreissen lassen:
Code:
public admin_look_del(HLCommand,HLData,HLUserName,UserIndex) {
	new User[MAX_NAME_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new Command[MAX_COMMAND_LENGTH];
	new Inhalt[MAX_DATA_LENGTH];
	new UserLine;
	new iLine;
	new tempiLine;
	new i;
	new j;
		
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
        convert_string(HLData,Data,MAX_DATA_LENGTH);
        convert_string(HLUserName,User,MAX_NAME_LENGTH);
 	
	UserLine=strtonum(Data);
	iLine=filesize(TextFile,1);
	if(UserLine>iLine){
		selfmessage("");
		selfmessage("Zeilennummer existiert nicht!");
		selfmessage("");
	}else{
		writefile(TextFile,"",UserLine);
		selfmessage("");
		selfmessage("Zeile wurde gelöscht!");
		selfmessage("");
		for(j=1;j<=iLine;j++){
			readfile(TextFile,Inhalt,j,MAX_DATA_LENGTH);
			if(strlen(Inhalt)!=0){
				writefile(TextFile1,Inhalt,-1);
			}
		}
		resetfile(TextFile);
		tempiLine=filesize(TextFile1,1);
		for(i=1;i<=tempiLine;i++){
			readfile(TextFile1,Inhalt,i,MAX_DATA_LENGTH);
			writefile(TextFile,Inhalt,-1);
		}
		deletefile(TextFile1);	
	}
        log_command(User,Command,Data);
	return PLUGIN_HANDLED;
}
ich nutze als TextFile 1 eine tempLOOK.txt, die ich dann am Ende wieder lösche.

So stimmt dann die Angabe, wieviele Spieler in der Database sind.

Mal sehen, ob den Code unser Server verkraftet! :lol:

_________________
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: 03.07.2002, 17:38 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
naja...habe noch ein paar Sachen eingebaut.

Bis auf die Anzeigen in der Console, bin ich eigentlich ganz zu frieden. Auf dem Server läuft es auch.

Es wird jetzt doch bei admin_look_add anhand der Wonid kontrolliert, ob der Spieler schon in der DB ist. Wenn ja, wird die Positonsnummer angeben.

Diese kann man dann mit del löschen und den Spieler mit add wieder einfügen.

Jetzt muss ich mir nur noch was wegen des Sortierens überlegen :-)

Bitte hänge Deine sma als ZIP auch hier ins Forum!

_________________
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
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1 2 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 ]"