Ein neues Thema erstellen  Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zeit anzeige
BeitragVerfasst: 17.04.2002, 14:22 

Registriert: 02.12.2001, 01:00
Beiträge: 5
Hi
say timeleft ist ja nicht genau. Kennt ihr da was was die Zeit genau anzeigt/sagt ?! Auch nach einem restarten oder verlängern der map.

mfG
Charos


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17.04.2002, 16:05 

Registriert: 31.12.2001, 01:00
Beiträge: 514
Wohnort: Lüneburg
clanmod oder das adminmod-statsme plugin
http://www.olo.counter-strike.pl (unter Files)

_________________
Geht nich, gibs nich: Suchen, FAQ
www.cola-clan.de - Whiskey@cola-clan.de


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17.04.2002, 23:40 

Registriert: 02.12.2001, 01:00
Beiträge: 5
THX
Das Teil für statsme funzt einwandfrei. Ich hab auch noch das speech PlugIn drauf und wollte ma fragen ob man das so umschreiben kann dass die Sprachausgabe nicht bei "say timeleft" sondern dann bei "say /timeleft" kommt?

mfG
Charos


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 00:58 

Registriert: 12.01.2002, 20:24
Beiträge: 227
Wohnort: Giessen, Hessen, Germany
Zitat:
THX
Das Teil für statsme funzt einwandfrei. Ich hab auch noch das speech PlugIn drauf und wollte ma fragen ob man das so umschreiben kann dass die Sprachausgabe nicht bei "say timeleft" sondern dann bei "say /timeleft" kommt?

mfG
Charos
Bitte!
Hab' nur 2 Zeilen minimal geändert...
Code:
/* This plugin contains speech functions and commands*/

/* $Id: plugin_speech.sma,v 1.0 2001/03/20 yensid $ */

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

#define ACCESS_SPEAK 64

new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.0";
new iLastSpeak = 0;

number_array(num, return_array[]) {
	new counter = 0;
	new isnegative = 1;
	if(num < 0)
		isnegative = -1;
	num = num * isnegative;
	for(counter = 0; counter < 50; counter = counter + 1) return_array[counter] = '^0';

	for(counter = 0; num != 0; counter=counter+1) {
		for(return_array[counter] = 0; num % 10 != 0; num = num -1) {
			return_array[counter] = return_array[counter] + 1;
		}
		num = num / 10;
	}

	if(isnegative == -1)
		return_array[counter] = -1;
}

public SpeakTimeleft() {
        new i;
	new maxplayers = maxplayercount();
	new SessionID;
	new Target[MAX_NAME_LENGTH];
	new Team;
	new WONID;
	new words[13][30];
	new secondsleft[50];
	new outputstring[300];
	new time1=timeleft();
	new time2 = 0;
	new minutesleft[50];
	time2 = time1 % 60;
	time1 = time1 / 60;
	number_array(time2, secondsleft);
	number_array(time1, minutesleft);
	if(secondsleft[0] > 0 || secondsleft[1] > 0) {
		strncpy(words[12], "seconds ", strlen("seconds "),MAX_DATA_LENGTH);
	}
	if(secondsleft[1] == 1) {
		if(secondsleft[0] == 0) {
			strncpy(words[10], "ten ", strlen("ten "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 1) {
			strncpy(words[10], "eleven ", strlen("eleven "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 2) {
			strncpy(words[10], "twelve ", strlen("twelve "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 3) {
			strncpy(words[10], "thirteen ", strlen("thriteen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 4) {
			strncpy(words[10], "fourteen ", strlen("fourteen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 5) {
			strncpy(words[10], "fifteen ", strlen("fifteen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 6) {
			strncpy(words[10], "sixteen ", strlen("sixteen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 7) {
			strncpy(words[10], "seventeen ", strlen("seventeen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 8) {
			strncpy(words[10], "eightteen ", strlen("eightteen "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 9) {
			strncpy(words[10], "nineteen ", strlen("nineteen "),MAX_DATA_LENGTH);
		}
	}
	else {
		if(secondsleft[1] == 2) {
			strncpy(words[10], "twenty ", strlen("twenty "),MAX_DATA_LENGTH);
		}
		if(secondsleft[1] == 3) {
			strncpy(words[10], "thirty ", strlen("thirty "),MAX_DATA_LENGTH);
		}
		if(secondsleft[1] == 4) {
			strncpy(words[10], "fourty ", strlen("fourty "),MAX_DATA_LENGTH);
		}
		if(secondsleft[1] == 5) {
			strncpy(words[10], "fifty ", strlen("fifty "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 1) {
			strncpy(words[11], "one ", strlen("one "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 2) {
			strncpy(words[11], "two ", strlen("two "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 3) {
			strncpy(words[11], "three ", strlen("three "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 4) {
			strncpy(words[11], "four ", strlen("four "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 5) {
			strncpy(words[11], "five ", strlen("five "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 6) {
			strncpy(words[11], "six ", strlen("six "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 7) {
			strncpy(words[11], "seven ", strlen("seven "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 8) {
			strncpy(words[11], "eight ", strlen("eight "),MAX_DATA_LENGTH);
		}
		if(secondsleft[0] == 9) {
			strncpy(words[11], "nine ", strlen("nine "),MAX_DATA_LENGTH);
		}
	}
	if(minutesleft[0] > 0 || minutesleft[1] > 0) strncpy(words[9], "minutes ", strlen("minutes "),MAX_DATA_LENGTH);
	if(minutesleft[1] == 1) {
		if(minutesleft[0] == 0) {
			strncpy(words[7], "ten ", strlen("ten "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 1) {
			strncpy(words[7], "eleven ", strlen("eleven "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 2) {
			strncpy(words[7], "twelve ", strlen("twelve "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 3) {
			strncpy(words[7], "thirteen ", strlen("thriteen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 4) {
			strncpy(words[7], "fourteen ", strlen("fourteen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 5) {
			strncpy(words[7], "fifteen ", strlen("fifteen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 6) {
			strncpy(words[7], "sixteen ", strlen("sixteen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 7) {
			strncpy(words[7], "seventeen ", strlen("seventeen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 8) {
			strncpy(words[7], "eightteen ", strlen("eightteen "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 9) {
			strncpy(words[7], "nineteen ", strlen("nineteen "),MAX_DATA_LENGTH);
		}
	}
	else {
		if(minutesleft[1] == 2) {
			strncpy(words[7], "twenty ", strlen("twenty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 3) {
			strncpy(words[7], "thirty ", strlen("thirty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 4) {
			strncpy(words[7], "fourty ", strlen("fourty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 5) {
			strncpy(words[7], "fifty ", strlen("fifty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 6) {
			strncpy(words[7], "sixty ", strlen("sixty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 7) {
			strncpy(words[7], "seventy ", strlen("seventy "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 8) {
			strncpy(words[7], "eighty ", strlen("eighty "),MAX_DATA_LENGTH);
		}
		if(minutesleft[1] == 9) {
			strncpy(words[7], "ninety ", strlen("ninety "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 1) {
			strncpy(words[8], "one ", strlen("one "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 2) {
			strncpy(words[8], "two ", strlen("two "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 3) {
			strncpy(words[8], "three ", strlen("three "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 4) {
			strncpy(words[8], "four ", strlen("four "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 5) {
			strncpy(words[8], "five ", strlen("five "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 6) {
			strncpy(words[8], "six ", strlen("six "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 7) {
			strncpy(words[8], "seven ", strlen("seven "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 8) {
			strncpy(words[8], "eight ", strlen("eight "),MAX_DATA_LENGTH);
		}
		if(minutesleft[0] == 9) {
			strncpy(words[8], "nine ", strlen("nine "),MAX_DATA_LENGTH);
		}
	}
        snprintf(outputstring, MAX_DATA_LENGTH, "speak ^"fvox/%s%s%s%s%s%s^"", words[7], words[8], words[9], words[10], words[11], words[12]); 
	for(i=1; i<=maxplayers; i++) {
		strinit(Target);
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
			execclient(Target,outputstring);
		}
	}
}

public HandleSay(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);

	strstripquotes(Data);
	if (streq(Data, "/timeleft")==1) {
		if (systemtime() < iLastSpeak) {
			return PLUGIN_CONTINUE;
  		} else {
			SpeakTimeleft();
			iLastSpeak = systemtime();
			iLastSpeak += 60;
		}
	}
	return PLUGIN_CONTINUE;
}

public admin_speak(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new Target[MAX_NAME_LENGTH];
	new Speak[MAX_DATA_LENGTH];
	new Cmd[MAX_DATA_LENGTH];
	
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);

	strbreak(Data, Target, Cmd, MAX_DATA_LENGTH);
	if (Cmd[0] == NULL_CHAR) {
		selfmessage( "Unparsable format: no command found.");
		return PLUGIN_HANDLED;
	}

	if(check_user(Target)==0) {
		selfmessage( "Unrecognized player: ");
		selfmessage( Target);
		return PLUGIN_HANDLED;
	}
        snprintf(Speak, MAX_DATA_LENGTH, "speak ^"%s^"", Cmd); 
	
	if (execclient(Target,Speak)==0) {
		selfmessage( "Failed.");
	} else {
		selfmessage( "Succeeded.");
	}
	log_command(User,Command,Data);
	return PLUGIN_HANDLED;
}

public admin_speakall(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
        new Speak[MAX_DATA_LENGTH];
        new i;
	new maxplayers = maxplayercount();
	new SessionID;
	new Target[MAX_NAME_LENGTH];
	new Team;
	new WONID;
	
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH); 
        snprintf(Speak, MAX_DATA_LENGTH, "speak ^"%s^"", Data); 
	for(i=1; i<=maxplayers; i++) {
		strinit(Target);
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
			execclient(Target,Speak);
		}
	}
	log_command(User,Command,Data);
	return PLUGIN_HANDLED; 
}

public admin_speakteam(HLCommand,HLData,HLUserName,UserIndex) {
	new Cmd[MAX_DATA_LENGTH];
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new i;
	new maxplayers = maxplayercount();
	new SessionID;
	new ExecTeam = 0;
	new strTeam[MAX_TEXT_LENGTH];
	new Target[MAX_NAME_LENGTH];
	new Team;
	new User[MAX_NAME_LENGTH];
	new WONID;
        new Speak[MAX_DATA_LENGTH];
		
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	strbreak(Data, strTeam, Cmd, MAX_DATA_LENGTH);
	if (strlen(Cmd) == 0) {
		selfmessage( "Unparsable format: no command found.");
		return PLUGIN_HANDLED;
	}
	ExecTeam = strtonum(strTeam);
        snprintf(Speak, MAX_DATA_LENGTH, "speak ^"%s^"", Cmd);
	if(ExecTeam > 0) {
		for(i=1; i<=maxplayers; i++) {
			strinit(Target);
			if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
				if(Team==ExecTeam) {
					execclient(Target,Speak);
				}
			}
		}
	} else {
		selfmessage("The team to exec must be a number.");
	}
	log_command(User,Command,Data);
	return PLUGIN_HANDLED;
}

public plugin_init() {
	plugin_registerinfo("Admin Speech Plugin","Commands for speaking on clients systems.",STRING_VERSION);
	
	plugin_registercmd("admin_speak","admin_speak",ACCESS_SPEAK,"admin_speak <target> <msg>: Speak words on system of target.");
	plugin_registercmd("admin_speakall","admin_speakall",ACCESS_SPEAK,"admin_speakall <msg>: Speak words on system of everyone.");
	plugin_registercmd("admin_speakteam","admin_speakteam",ACCESS_SPEAK,"admin_speakteam <team> <msg>: Speak words on systems of everyone on team.");
	plugin_registercmd("say","HandleSay",ACCESS_ALL);
	plugin_registerhelp("say",ACCESS_ALL,"say /timeleft: Will speak the time left.");
		
	return PLUGIN_CONTINUE;	
}

_________________
Denn nur wer was zu sagen hat,
Der hat's, wenn es nicht unabdingbar ist

http://clan-ggg.de.vu/


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 12:11 

Registriert: 02.12.2001, 01:00
Beiträge: 5
Es funzt zwar aber beim kompilieren bekomm ich komischerweise ne Fehlermeldung:
plugin_speech.sma(330) Warning [217]: loose indentation
Hab ich da irgendwas falsch gemacht?!

Außerdem wird zwar nun die Zeit bei say /timeleft gesagt aber leider nicht die die vom statsme plugin angezeigt wird sondern wieder die falsche. Die die auch beim say timeleft kommen würde.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 12:21 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Die Warnung kommt sicher aus dem übelartig langen Code von SpeakTimeleft(), die Funktion hätte man auch bequem in einem 3-Zeiler unterbringen können.
Prinzipiell kann man die Warnung ignorieren, da es sich nur auf die Formatierung des Quelltextes bezieht.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 13:20 

Registriert: 12.01.2002, 20:24
Beiträge: 227
Wohnort: Giessen, Hessen, Germany
Zitat:
Die Warnung kommt sicher aus dem übelartig langen Code von SpeakTimeleft(), die Funktion hätte man auch bequem in einem 3-Zeiler unterbringen können.
Prinzipiell kann man die Warnung ignorieren, da es sich nur auf die Formatierung des Quelltextes bezieht.
Mal abgesehen das es das ganz normale plugin ist, an dem ich lediglich die gewünschten Änderungen vorgenommen habe, würde es mich doch interessieren, wie du das in 3 Zeilen machst! Versteh' mich nicht falsch - ich bin nur wissbegierig... :D

_________________
Denn nur wer was zu sagen hat,
Der hat's, wenn es nicht unabdingbar ist

http://clan-ggg.de.vu/


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 15:01 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Der Code für die Funktion könnte folgendermaßen aussehen:
Code:
public SpeakTimeleft()
{
        new time;
        new minutes;
        new seconds;
        new first;
        new second;
        new third;
        new fourth;
        new speech[MAX_DATA_LENGTH];
        new cents[MAX_DATA_LENGTH];
        new i;
        new Target[MAX_NAME_LENGTH];
        new maxplayers;

        new low[20][]={"","one ", "two ","three ","four ","five ","six ","seven ","eight ","nine ","ten ","eleven ","twelve ","thirteen ","fourteen ","fifteen ","sixteen ","seventeen ","eighteen ","nineteen "};
        new high[10][]={"", "", "twenty ","thirty ","fourty ","fifty ","sixty ","seventy ","eighty ","ninety "};
        
        maxplayers=maxplayercount();
        time=timeleft();
        minutes=time/60;
        seconds=time%60;
        
        if(minutes<=0 && seconds <=0) return PLUGIN_FAILURE;

        first=minutes/10;
        second=minutes%10;
        
        if(first==1)
        {
            second=minutes;
            first=0;
        }
        
        third=seconds/10;
        fourth=seconds%10;
        
        if(third==1)
        {
            fourth=seconds;
            third=0;
        }
        
        speech="speak ^"fvox/";
        
        if(minutes>0)
        {
            snprintf(cents, MAX_DATA_LENGTH, "%s%sminutes ", high[first], low[second]);
            strcat(speech, cents, MAX_DATA_LENGTH);
        }
        
        if(seconds>0)
        {
            snprintf(cents, MAX_DATA_LENGTH, "%s%sseconds", high[third], low[fourth]);
            strcat(speech, cents, MAX_DATA_LENGTH);
        }
        
        strcat(speech, " remaining^"", MAX_DATA_LENGTH);

        for(i=1; i<=maxplayers; i++)
        {
            if(playerinfo(i,Target,MAX_NAME_LENGTH))
            {
                execclient(Target,speech);
            }
        }
        
        return PLUGIN_HANDLED;
}

Zugegeben kein 3-Zeiler, jedoch effektiver und kompakter. Sinnlose Vergleiche entfallen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.04.2002, 23:01 

Registriert: 02.12.2001, 01:00
Beiträge: 5
Könntest du die Funktion ma in das komplette PlugIn einfügen und dann posten?! Weiß nämlich nich genau an welche Stelle das kommen muss.

thx
Charos


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19.04.2002, 00:46 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Einfach die Funktion SpeakTimeleft ersetzen. Die Funktion wird durch die geschweiften Klammern begrenzt. Die Funktion number_array(...) wird dann auch nicht mehr benötigt.

Das Problem mit der ungenauen Zeit wird damit jedoch nicht gelöst, auch diese Funktion nutzt das ungenaue timeleft() von Adminmod.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.09.2002, 16:04 

Registriert: 06.01.2002, 01:00
Beiträge: 415
Wohnort: nicht weit weg von Köln
Gestattet mir zwei Fragen:

1.) Woher rührt die ungenaue Timeleft-Anzeige bei AdminMod ?

2.) Wieso darf man folgendes schreiben:

new high[10][]={"", "", "twenty ","thirty ","fourty ","fifty ","sixty ","seventy ","eighty ","ninety "};

Muß dem Array nicht die Größe der zweiten dimension mitgeteilt werden ?

Bio

_________________
It's not a bug, it's a feature !


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.09.2002, 16:25 

Registriert: 17.12.2001, 01:00
Beiträge: 697
Zitat:
Gestattet mir zwei Fragen:

1.) Woher rührt die ungenaue Timeleft-Anzeige bei AdminMod ?

2.) Wieso darf man folgendes schreiben:

new high[10][]={"", "", "twenty ","thirty ","fourty ","fifty ","sixty ","seventy ","eighty ","ninety "};

Muß dem Array nicht die Größe der zweiten dimension mitgeteilt werden ?

Bio
1. Die ungenaue Timeleft-Anzeige kommt nur bei Counterstrike zum tragen, da dort seit Version 1.4 (?) ein Game Commencing stattfindet, welches derzeit nicht von AM berücksichtigt wird.

2. Sofern es sich um feste Strings handelt, deren Länge später irrelevant ist, muss man die Länge dieser Strings nicht angeben. Es wird dabei nur soviel Platz für die Strings reserviert, wie sie wirklich benötigen. Wenn man jedoch die Strings verändern möchte, bzw. aus einem anderen Grund eine gewisse Länge festlegen will, muss die 2. Dimension angegeben werden.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07.09.2002, 17:38 

Registriert: 06.01.2002, 01:00
Beiträge: 415
Wohnort: nicht weit weg von Köln
Danke Warhead.

Bio

_________________
It's not a bug, it's a feature !


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 13 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 ]"