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

brauche hilfe für ein liga plugin !
https://www.adminmod.de/viewtopic.php?t=8195
Seite 1 von 1

Autor:  Hooktheboy [ 08.01.2004, 00:19 ]
Betreff des Beitrags:  brauche hilfe für ein liga plugin !

Hi !

ich hab ein kleines problem bei meinem liga plugin :
Mit dem plugin will ich jedem spieler auf dem server die möglichkeit geben, mit dem say command (normaler chat) sich für ein wettkampf anzumelden...

so soll der befehl aussehen :
say:liga register (die email adresse)

(das skript schreib in einer datei die AuthID und UserName Date und noch die email)

mit strsep teile ich die daten auf (befehl,key,value)/(liga,register,email@bla.de)
dann vergleich ich "befehl" mit dem string "liga".... nur bekomm ich kein vernünftiges ergebniss...

was mach ich falsch ?
hier ein kurzer ausschnitt (im erklären bin ich nich so toll :-) )
Code:
 strsep(Data, " ",root,50,key,50,value,50); 
    
    get_userAuthID(UserName, sAuthID);
    if (strstrx(root,"liga")==1)  { 

	if (strstrx(key,"register")==1) {
			selfmessage(root);
			selfmessage(key);
			selfmessage(value);
			
			if (strlen(value) < 8) {
				messageex(UserName,"Du hast keine oder eine Falsche email angegen!",print_chat);
				return PLUGIN_HANDLED;
			}
			
			iLineIndex=filesize(g_Index);

			a = 0;
   			while (a != iLineIndex) {
				a++;
				readfile(g_Index,fLine,a,200);
				strsep(Data, " ", fIndex,3,fUserName,MAX_NAME_LENGTH,fAuthID, 20,fEmail,50);    
				if (strstrx(fAuthID,sAuthID)!=1){
					messageex(UserName,"Du wurdest bereits regestriert !",print_chat);
					return PLUGIN_HANDLED;
				}
			}

			snprintf(fLine,150,"%s %s %s %s",iLineIndex,UserName,sAuthID,value);
			log(fLine);
   			writefile(g_Index,fLine,-1);
   			
   			snprintf(Text,80,"Hallo %s, du wurdest regestriert und",UserName);
			messageex(UserName,Text,print_chat);
			snprintf(Text,80,"bekommst in den nächsten tagen eine E-Mail von mir",UserName);
		    	messageex(UserName,Text,print_chat);
		    	return PLUGIN_HANDLED;
		}
.... und so weiter...
ich bekomme bei strstrx (wenn ich den wert in der konsole ausgebe) immer -75 ! strcomp hab ich auch schon ausprobiert... allerdings weiss ich nicht was da herauskommt... normal sollte eigentlich 1(true) sein...

ich hoffe das posting ist nicht zuu lang...
danke nochmal

Autor:  [WING] Black Knight [ 08.01.2004, 01:54 ]
Betreff des Beitrags: 

Hmmm.

strsep mal gegen strsplit austauschen. Ist aber eigentlich nur ein marginaler Unterschied.
Code:
if (strcasestrx(root,"liga")>=0){
Du willst ja nur überprüfen, ob der String "liga" in root vorkommt. Außerdem vernachlässigt das Groß- und Kleinschreibung.

Aber so direkt sehe ich kein Problem.

Autor:  Hooktheboy [ 08.01.2004, 02:51 ]
Betreff des Beitrags:  ne, geht nicht..

Hi, danke für die rasche Antwort.

Ich habs gleich mal ausprobiert ...
aber es geht nicht ?!...
und wenn ich z.B. der Variabel Text den srtring "Hallo" übergebe ihn anschließend auf der konsole ausgebe, wieso bekomm ich dann die Anführungsstriche zu sehen ?

Hier ein Beispiel:

new Text[80];
Text = "Hallo";
selfmessage(Text); <- ausgabe : "Hallo"
selfmessage("Hallo"); <- ausgabe : Hallo

Vielleicht hab ich irgendwas übersehen...
aber es sieht für mich so aus, als wenn die anführungzeichen mit in dem string gespeichert werden...

und irgendwie finde ich es sinnlos, dass strings als Arrays dekladiert werden müssen! ist vielleicht kann nachteil... aber ich hab lange gebraucht um es zu verstehen ... *g*

ach gibt es eigentlich irgendwelche Groups oder Listen oder Boards wo man seinen gameserver bekannt geben kann ?

MfG Hooktheboy

Autor:  Sir Drink a lot [ 08.01.2004, 10:24 ]
Betreff des Beitrags: 

Einige Hinweise:

- Data, die über den Chat reinkommt, besitzt auch Anführungszeichen. Diese müssen vorher mit strstripquotes entfernt werden.
- strstrx, strchr haben als Rückgabewert -1, wenn keine Übereinstimmung gefunden wird.
- strcmp, strncmp sind == 0, bei Übereinstimmung

Und hier mal meine Idee für den Liga-Manager :)
Er ist flexibel aufgebaut und ich denke, entsprechend erweiterbar.
Er besitzt sogar einen 2-Dim Array für die Keywords ;)
Angedacht wären dann z.B. Befehle wie changename, changeemail oder sowas. :)
Code:
/*
SDAL - LIGA MANAGER
--------------------
Reagiert auf Chateingaben mit dem Schlüsselwort: "liga".
Die Befehle werden im Array g_Keywords hinterlegt.
Übereinstimmende Befehle werden an die Funktion exec_keyword weitergeleitet,
welche dann die Daten an die entsprechende Befehls-Funktion übergibt.
*/

#include <core> 
#include <console> 
#include <string> 
#include <admin> 
#include <adminlib>
#include <plugin>

new STRING_VERSION[MAX_DATA_LENGTH] = "0.8";

new g_RegistrationFile[MAX_TEXT_LENGTH]="addons/adminmod/config/liga_register.txt";

#define MAX_KEYWORDS	2
#define HELPME		0
#define REGISTER	1

new g_Keywords[MAX_KEYWORDS][15]={"help","register"};

public plugin_init() {
	plugin_registerinfo("LIGA MANAGER","Reagiert auf Liga-Befehle, die im Chat abgegeben werden.",STRING_VERSION);
	plugin_registercmd("say","HandleSay",ACCESS_ALL);
	plugin_registerhelp("say",ACCESS_ALL,"say: liga <help> : Befehlsuebersicht der Liga");
	plugin_registerhelp("say",ACCESS_ALL,"say: liga <register> <email_adresse>: Anmeldung zur Liga");
	return PLUGIN_CONTINUE;
}

/**************************/
/*CHAT-EINGABE-ÜBERPRÜFUNG*/
/**************************/

public HandleSay(HLCommand,HLData,HLUserName,UserIndex){
	new Data[MAX_DATA_LENGTH];
	new Text[MAX_TEXT_LENGTH];
	new User[MAX_NAME_LENGTH];
	new First[5];
	new KeyWord[10];
	new DataEnter[MAX_TEXT_LENGTH];
	new i;
	
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	
	strstripquotes(Data);
	
	if(strncmp(Data,"liga",4)==0){
		convert_string(HLUserName,User,MAX_NAME_LENGTH);
		strsep(Data," ",First,5,KeyWord,10,DataEnter,MAX_TEXT_LENGTH);
		for(i=0;i<MAX_KEYWORDS;i++){
			if(strcmp(KeyWord,g_Keywords[i])==0){
				exec_keyword(DataEnter,User,i);
				return PLUGIN_HANDLED;
				break;
			}
		}
		snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Sorry, %s! Aber der Befehl ^"%s^" steht nicht zur Verfuegung!",User,KeyWord);
		messageex(User,Text,print_chat);
		snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Bitte gib ^"liga help^" im Chat fuer weitere Informationen ein!");
		messageex(User,Text,print_chat);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

/********************/
/*FUNKTIONS-ÜBERGABE*/
/********************/

exec_keyword(Data[],User[],KeyID){
	switch(KeyID){
		case HELPME: helpme(User);
		case REGISTER: registration(Data,User);
	}
}

/*************************/
/*Liga Befehls-Funktionen*/
/*************************/

/*HELP: LIGA-BEFEHLSÜBERSICHT*/
helpme(User[]){
	new Text[MAX_TEXT_LENGTH];
	new i;
	snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s, dir stehen folgende Befehle mit dem Schluesslwort ^"liga^" zur Verfuegung:",User);
	messageex(User,Text,print_chat);
	snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-BEFEHLE]: ");
	for(i=0;i<MAX_KEYWORDS;i++){
		strcat(Text,"^"",MAX_TEXT_LENGTH);
		strcat(Text,g_Keywords[i],MAX_TEXT_LENGTH);
		strcat(Text,"^" ",MAX_TEXT_LENGTH);
	}
	messageex(User,Text,print_chat);
}

/*REGISTRIERUNGS-FUNKTION*/
registration(Data[],User[]){
	new Text[MAX_TEXT_LENGTH];
	new AuthID[MAX_AUTHID_LENGTH];
	new FileData[MAX_DATA_LENGTH];
	new i;
	new iFileSize;
	new error;
	
	if(strlen(Data)==0 || strchr(Data, '@')==-1){
		snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Sorry, %s! Aber die Email-Adresse ^"%s^" scheint nicht gueltig zu sein!",User,Data);
		error=1;
	}else{
		get_userAuthID(User,AuthID,MAX_AUTHID_LENGTH);
		iFileSize=filesize(g_RegistrationFile);
		for(i=1;i<=iFileSize;i++){
			readfile(g_RegistrationFile,FileData,i,MAX_DATA_LENGTH);
			/*Wenn Spieler schon registriert ist -> Abbruch*/
			if(strstrx(FileData,User)!=-1 && strstrx(FileData,AuthID)!=-1){
				snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s! Du bist bereits in der Liga registriert!",User);
				error=1;
				break;
			/*Wenn ein Spieler existiert, der den selben Spielernamen hat -> Abbruch*/
			}else if(strstrx(FileData,User)!=-1){
				snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s! Jemand mit diesem Namen ist bereits registriert!",User);
				error=1;
				break;
			/*Wenn ein Spieler existiert, der die selbe Steam_ID hat -> Abbruch*/
			}else if(strstrx(FileData,AuthID)!=-1){
				snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s! Jemand mit der Steam_ID ^"%s^" ist bereits registriert!",User,AuthID);
				error=1;
				break;
			/*Wenn ein Spieler existiert, der die selbe Email_Adresse hat -> Abbruch*/
			}else if(strstrx(FileData,Data)!=-1){
				snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s! Jemand hat sich breits mit der Email-Adresse registriert!",User);
				error=1;
				break;
			}				
		}
	}
			
	if(error){
		messageex(User,Text,print_chat);
	}else{
		/*Als Break zwischen User,AuthID und Data nehme ich ALT + NUMPAD 169 = ®*/
		snprintf(Text,MAX_TEXT_LENGTH,"%s®%s®%s",User,AuthID,Data);
		writefile(g_RegistrationFile,Text,-1);
		snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] Hallo %s, du wurdest regestriert und",User);
		messageex(User,Text,print_chat);
		snprintf(Text,MAX_TEXT_LENGTH,"[LIGA-MANAGER] erhaelst in den naechsten Tagen eine Email von mir!");
		messageex(User,Text,print_chat);
	}
}	
P.S.: Der Code ist auf jeden Fall optimierbar. (Wie immer :) ). Ich würde nach dem strsep im HandleSay direkt die Länge des Keywords auf 0 untersuchen, damit die Schleife nicht durchlaufen wird.

Autor:  Hooktheboy [ 08.01.2004, 11:26 ]
Betreff des Beitrags:  woww..

!

Das sieht ja viieel besser aus als meins ... :-)

ich danke dir, vielleicht schaffe ich es ja doch noch meine Liga rechtzeitig fertig zu bekommen.

Nochmals vielen Dank !

Autor:  [WING] Black Knight [ 08.01.2004, 11:57 ]
Betreff des Beitrags: 

Und die Rechtschreibung sollte dringend beachtet werden. :roll: :)

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

Rechtschreibung beachten um 8 Uhr morgens...?

Bin überhaupt froh, dass ich meine Augen offen halten kann :)

Autor:  Hooktheboy [ 08.01.2004, 12:21 ]
Betreff des Beitrags: 

japp.. ich meine rechtschreibung hin oder her, solange man sich untereinander versteht, ist es nur halb so wild... (meine meinung)...

;)

Autor:  [WING] Black Knight [ 08.01.2004, 14:53 ]
Betreff des Beitrags: 

Wenn man eine Liga plant, sollte man das Ganze auch professionell aussehen lassen, oder? ;)

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