Ein neues Thema erstellen  Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: brauche hilfe für ein liga plugin !
BeitragVerfasst: 08.01.2004, 00:19 

Registriert: 08.01.2004, 00:12
Beiträge: 4
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


Zuletzt geändert von Hooktheboy am 08.01.2004, 12:23, insgesamt 1-mal geändert.

Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.01.2004, 01:54 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
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.

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


Nach oben
   
 Betreff des Beitrags: ne, geht nicht..
BeitragVerfasst: 08.01.2004, 02:51 

Registriert: 08.01.2004, 00:12
Beiträge: 4
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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.01.2004, 10:24 
AM.de Team
Benutzeravatar

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

_________________
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: woww..
BeitragVerfasst: 08.01.2004, 11:26 

Registriert: 08.01.2004, 00:12
Beiträge: 4
!

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 !


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.01.2004, 11:57 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Und die Rechtschreibung sollte dringend beachtet werden. :roll: :)

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


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.01.2004, 12:12 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Rechtschreibung beachten um 8 Uhr morgens...?

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

_________________
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: 08.01.2004, 12:21 

Registriert: 08.01.2004, 00:12
Beiträge: 4
japp.. ich meine rechtschreibung hin oder her, solange man sich untereinander versteht, ist es nur halb so wild... (meine meinung)...

;)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08.01.2004, 14:53 
AM.de Team
Benutzeravatar

Registriert: 23.11.2001, 00:00
Beiträge: 3842
Wohnort: Vor König Arthus
Wenn man eine Liga plant, sollte man das Ganze auch professionell aussehen lassen, oder? ;)

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


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 9 Beiträge ] 


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 ]"