/* Black Knight's und Sir Drink a lot's ClanWar Creator 3.0.2 (24.03.2005) */
#pragma dynamic 8192
 
#include <core> 
#include <console> 
#include <string> 
#include <admin> 
#include <adminlib>
#include <plugin>
 
#define ACCESS_WAR 256
#define TERROR 1
#define CT 2
#define MAX_MESSAGES 38
#define MAX_IP_LENGTH 22
 
new STRING_VERSION[MAX_DATA_LENGTH] = "3.0.2";
 
new aTeam[MAX_PLAYERS];
new aSessionID[MAX_PLAYERS][MAX_AUTHID_LENGTH];
new iTausch=0;
 
language(iNummer,sMessage[]){
	new Text[MAX_TEXT_LENGTH];
	new i;
 
	if(!iNummer){
		static sMessages[MAX_MESSAGES][MAX_TEXT_LENGTH];
 
		/* Sprachdatei auslesen */
		strcpy(Text,"language.ini",MAX_TEXT_LENGTH);
		create_path(Text,"cwcreator");
		if(fileexists(Text)){
			for(i=1;i<MAX_MESSAGES;i++){
				readfile(Text,sMessages[i],i,MAX_TEXT_LENGTH);
			}
		}
		else{
			snprintf(Text,MAX_TEXT_LENGTH,"%s ??",Text);
			for(i=1;i<MAX_MESSAGES;i++){
				strcpy(sMessages[i],Text,MAX_TEXT_LENGTH);
			}
		}
 
		return PLUGIN_CONTINUE;
	}
	else{
		strcpy(sMessage,sMessages[iNummer],MAX_TEXT_LENGTH);
	}
	return PLUGIN_CONTINUE;
}
 
/* Setzt das Passwort */
set_password(){
 	new Text[MAX_TEXT_LENGTH];
 
	get_vaultdata("CWC_PASS",Text,MAX_TEXT_LENGTH);
	setstrvar("sv_password",Text);
	return 1;
}
 
/* Überprüfung, ob vault.ini existiert */
is_vaultfile_set(){
	new vault[MAX_DATA_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	getstrvar("admin_vault_file",vault,MAX_DATA_LENGTH);
	if(streq(vault,"0") || strlen(vault)==0){
		if(getvar("admin_debug")>0){
			language(1,sLanguage);
			log(sLanguage);
		}
		return 0;
	}
	return 1;
}
 
/* Überprüfung, ob mapspezifische Datei existiert */
map_specific_exists(){
	new map[MAX_NAME_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	currentmap(map,MAX_NAME_LENGTH);
	strcat(map,".cfg",MAX_NAME_LENGTH);
	if(fileexists(map)){
		if(getvar("admin_debug")>0){
			language(2,sLanguage);
			log(sLanguage);
		}
		return 1;
	}
	return 0;
}
 
/* Merken der Timelimit und Maxrounds bei Warbeginn und Warmup-Settings einstellen */
launched() {
	new check;
	new Text[MAX_TEXT_LENGTH];
	if(get_vaultnumdata("CWCI_LAUNCHED",check) && check) {
		set_vaultnumdata("CWCI_TIMELIMIT",getvar("mp_timelimit"));
		set_vaultnumdata("CWCI_MAXROUNDS",getvar("mp_maxrounds"));
		set_vaultnumdata("CWCI_LAUNCHED",0);
	}
	/* benutzerdefiniertes File ausführen */
	strcpy(Text,"startwar.cfg",MAX_TEXT_LENGTH);
	create_path(Text,"cwcreator");
	if(fileexists(Text)){
		snprintf(Text,MAX_TEXT_LENGTH,"exec %s",Text);
		exec(Text);
	}
	setstrvar("mp_timelimit","0");
	setstrvar("mp_maxrounds","0");
}
 
/* Check, ob War bereits läuft */
war_on() {
	new check;
	new sLanguage[MAX_TEXT_LENGTH];
 
	get_vaultnumdata("CWCI_ON",check);
 	if(check){
		language(3,sLanguage);
		selfmessage(sLanguage);
 		return 1;
	}
	return 0;
}
 
/* Clantaglängencheck und Speicherung */
clantag(Text[]){
	new sLanguage[MAX_TEXT_LENGTH];
 
	if(strlen(Text)>20){
		language(4,sLanguage);
		selfmessage(sLanguage);
		return 1;
	}
	if(strlen(Text)==0){
		language(5,sLanguage);
		set_vaultdata("CWCI_OPPONENT",sLanguage);
	}
	else {
		set_vaultdata("CWCI_OPPONENT",Text);
	}
	return 0;
}
 
/* HLTV Online-Ueberpruefung */
hltvonline() {
	new i;
	new maxplayers = maxplayercount();
	new Target[MAX_NAME_LENGTH];
	new SessionID, WONID, Team;
	new iAccess;
	new hltvinfo[MAX_TEXT_LENGTH];
 
	for(i=1; i<=maxplayers; i++) {
 		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
 			if (Team == TEAM_PROXY && plugin_checkcommand("admin_hltv_connect",iAccess)>0) {
				new freeslots=0;
				get_userinfo(Target,"hltv_slots",hltvinfo,MAX_TEXT_LENGTH);
				freeslots=strtonum(hltvinfo);
				get_userinfo(Target,"hltv_specs",hltvinfo,MAX_TEXT_LENGTH);
				freeslots-=strtonum(hltvinfo);
				iAccess=0;
 				return freeslots;
 			}
 		}
 	}
	return -1;
}
 
/* Schiebt Nicht-CW-Teilnehmer auf einen HLTV */
sendtohltv(UserIndex,iFreeslots) {
  	new maxplayers = maxplayercount();
 	new Target[MAX_NAME_LENGTH];
	new i;
 	new SessionID,WONID,Team;
	new Text[MAX_TEXT_LENGTH];
	new merk=0;
 
	for(i=1; i<=maxplayers; i++) {
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team) && get_vaultdata("CWC_TAG",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && get_vaultdata("CWCI_OPPONENT",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && Team!=TEAM_PROXY && check_immunity(Target)==0 && i!=UserIndex) {
			execclient(Target,"admin_hltv_connect");
			merk++;
			if(merk==iFreeslots){
				break;
			}
		}
 	}
	return PLUGIN_CONTINUE;
}
 
/* Schiebt Nicht-CW-Teilnehmer auf einen anderen Server */
redirect(UserIndex,sIP[]) {
  	new maxplayers = maxplayercount();
 	new Target[MAX_NAME_LENGTH];
	new i;
 	new SessionID,WONID,Team;
	new Text[MAX_TEXT_LENGTH];
 
	for(i=1; i<=maxplayers; i++) {
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team) && get_vaultdata("CWC_TAG",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && get_vaultdata("CWCI_OPPONENT",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && Team!=TEAM_PROXY && check_immunity(Target)==0 && i!=UserIndex) {
			snprintf(Text,MAX_TEXT_LENGTH,"connect %s",sIP);
			execclient(Target,Text);
		}
 	}
	return PLUGIN_CONTINUE;
}
 
/* Grundsätzliche Gültigkeit der IP überprüfen */
is_valid_ip(sIP[]){
	new sSubIP[5][11];
	new i,iSubIP;
 
	strsplit(sIP,".",sSubIP[0],11,sSubIP[1],11,sSubIP[2],11,sSubIP[3],11);
	strsplit(sSubIP[3],":",sSubIP[3],11,sSubIP[4],11);
	for(i=0;i<3;i++){
		iSubIP=strtonum(sSubIP[i]);
		if(iSubIP<0 && iSubIP>255){
			return 0;
		}
	}
	iSubIP=strtonum(sSubIP[3]);
	if(iSubIP<1 && iSubIP>255){
		return 0;
	}
	iSubIP=strtonum(sSubIP[4]);
	if(iSubIP<1 && iSubIP>65535){
		return 0;
	}
	return 1;
}
 
/* Kickt Nicht-CW-Teilnehmer vom Server und setzt das CW-Passwort*/
kickplayers(UserIndex) {
  	new maxplayers = maxplayercount();
 	new Target[MAX_NAME_LENGTH];
	new i;
 	new SessionID,WONID,Team;
	new Text[MAX_TEXT_LENGTH];
	new sMessage[MAX_TEXT_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	get_vaultdata("CWC_PASS",sMessage,MAX_TEXT_LENGTH);
	language(6,sLanguage);
	/* Warmodus und Passwort ankündigen */
	snprintf(sMessage,MAX_TEXT_LENGTH,sLanguage,sMessage);
 
	for(i=1; i<=maxplayers; i++) {
		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)){
			if(get_vaultdata("CWC_TAG",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && get_vaultdata("CWCI_OPPONENT",Text,MAX_TEXT_LENGTH) && strstr(Target,Text)==-1 && Team!=TEAM_PROXY && check_immunity(Target)==0 && i!=UserIndex) {
 				kick(Target);
			}
			else {
				if(Team!=TEAM_PROXY){
					get_vaultdata("CWC_PASS",Text,MAX_TEXT_LENGTH);
					snprintf(Text,MAX_TEXT_LENGTH,"password %s",Text);
					execclient(Target,Text);
					centersayex(Target,sMessage,10,68,255,125);
				}
			}
		}
 	}
	return PLUGIN_CONTINUE;
}
 
/* Mapchangecfgfile abschalten und alte Datei speichern */
delete_mccf() {
	new Text[MAX_DATA_LENGTH];
	new sPath[MAX_DATA_LENGTH]="cwcreator/rules";
 
	getstrvar("mapchangecfgfile",Text,MAX_DATA_LENGTH);
	set_vaultdata("CWCI_MCCF",Text);
 
	get_vaultdata("CWC_RULES",Text,MAX_DATA_LENGTH);
	create_path(Text,sPath);
	setstrvar("mapchangecfgfile",Text);
	return PLUGIN_CONTINUE;
}
 
/* Defaultwerte laden inkl. Regeldatei */
set_default() {
	new Text[MAX_DATA_LENGTH];
	new sPath[MAX_DATA_LENGTH];
 
	/* Warplugin.ini definieren */
	getstrvar("amv_default_config_dir",Text,MAX_DATA_LENGTH);
	strcpy(sPath,Text,MAX_DATA_LENGTH);
	strcat(sPath,"/cwcreator/warplugin.ini",MAX_DATA_LENGTH);
	setstrvar("admin_plugin_file",sPath);
	/* Regeldatei ausführen */
	get_vaultdata("CWC_RULES",sPath,MAX_DATA_LENGTH);
	snprintf(sPath,MAX_DATA_LENGTH,"exec %s%s%s",Text,"/cwcreator/rules/",sPath);
	exec(sPath);
	/* Admin Mod Variablen setzen */
	setstrvar("vote_freq","1");
	setstrvar("admin_vote_echo","1");
	setstrvar("admin_vote_autostart","0");
	setstrvar("amv_vote_duration","15");
	setstrvar("admin_cs_restrict","0");
	setstrvar("admin_repeat_freq","0");
	return PLUGIN_CONTINUE;
}
 
/* Altes Passwort und Mapcycle sichern */
save_password(){
	new Text[MAX_TEXT_LENGTH];
 
	getstrvar("sv_password",Text,MAX_TEXT_LENGTH);
	if(!strlen(Text)){
		strcpy(Text,"none",MAX_TEXT_LENGTH);
	}
	set_vaultdata("CWCI_OLDPASS",Text);
	getstrvar("mapcyclefile",Text,MAX_TEXT_LENGTH);
	set_vaultdata("CWCI_OLDMCF",Text);
	return PLUGIN_CONTINUE;
}
 
/* Pfad erstellen */
create_path(filename[],subdir[]){
	new sPath[MAX_DATA_LENGTH];
	getstrvar("amv_default_config_dir",sPath,MAX_DATA_LENGTH);
	snprintf(filename,MAX_DATA_LENGTH,"%s/%s/%s",sPath,subdir,filename);
	return PLUGIN_CONTINUE;
}
 
/* Mapcycle erzeugen und aktivieren*/
create_mapcycle(){
	new Text[MAX_DATA_LENGTH];
	new sPath[MAX_DATA_LENGTH];
 
	/* Pfad erstellen */
	strcpy(sPath,"cwmapcycle.txt",MAX_DATA_LENGTH);
	create_path(sPath,"cwcreator");
 
	/* Mapcyclefile erstellen */
	resetfile(sPath);
	get_vaultdata("CWC_MAP1",Text,MAX_DATA_LENGTH);
	writefile(sPath,Text,-1);
 
	/* Mapcycle einstellen */
	setstrvar("mapcyclefile",sPath);
 
	return PLUGIN_CONTINUE;
}
 
public mapchange(Timer,Repeat,HLUser,HLParam) {
	new Map[MAX_NAME_LENGTH];
 
	convert_string(HLParam,Map,MAX_NAME_LENGTH);
	changelevel(Map,1);
	return PLUGIN_CONTINUE;
}
 
/* Bei Warmodus, Serversettings ausführen */
execute_settings(){
	new iNum;
 
	if(get_vaultnumdata("CWCI_ON",iNum) && iNum){
		set_vaultnumdata("CWCI_LAUNCHED",1);
		/* Restart zum Verhindern des Mapchanges bei zu langem Warmup */
		set_timer("Restart_Round",1,0);
		set_timer("settings_timed",3,0);
		set_timer("launched_timed",5,0);
	}
	return PLUGIN_CONTINUE;
}
 
/* Neue Settings ausführen */
public settings_timed(Timer,Repeat,HLUserName,HLParam) {
	new sMerk[MAX_TEXT_LENGTH];
	new sValue[MAX_TEXT_LENGTH];
	new sMessage[MAX_TEXT_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	get_vaultdata("CWC_RULES",sMerk,MAX_TEXT_LENGTH);
	strcpy(sValue,sMerk,MAX_TEXT_LENGTH);
	create_path(sMerk,"cwcreator/rules");
	language(7,sLanguage);
	snprintf(sMessage,MAX_TEXT_LENGTH,sLanguage,sValue);
	say(sMessage);
	language(8,sLanguage);
	say(sLanguage);
	snprintf(sMessage,MAX_DATA_LENGTH,"exec %s",sMerk);
	exec(sMessage);
 
	return PLUGIN_CONTINUE;
}
 
/* Neue Warmupphase einleiten */
public launched_timed(Timer,Repeat,HLUserName,HLParam) {
	launched();
	return PLUGIN_CONTINUE;
}
 
/* Say-Message */
info_msg(UserIndex,sString[]){
	new sName[MAX_NAME_LENGTH];
 
	if(playerinfo(UserIndex,sName,MAX_NAME_LENGTH)){
		messageex(sName,sString,print_chat);
	}
	else{
		selfmessage(sString);
	}
 
	return PLUGIN_CONTINUE;
}
 
/******************************** WARMODE AKTIVIEREN ***************************************/
public admin_war_launch(HLCommand,HLData,HLUserName,UserIndex) {
	new Text[MAX_DATA_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
	new iFreeslots;
	new sIP[MAX_IP_LENGTH];
 
	/* Check-Funktionen */
	convert_string(HLData,Text,MAX_DATA_LENGTH);
	strtrim(Text," ",2);
	if(war_on() || clantag(Text)) {
		return PLUGIN_HANDLED;
	}
 
	/* Nicht CW-Teinehmer kicken oder auf einen anderen Server schicken, Passwort zur Sicherheit beim Spieler setzen */ 
	language(5,sLanguage);
	if(get_vaultdata("CWCI_OPPONENT",Text,MAX_DATA_LENGTH) && strlen(Text)!=0 && !streq(Text,sLanguage)){
		iFreeslots=hltvonline();
		if(iFreeslots>0){
			sendtohltv(UserIndex,iFreeslots);
		}
		/* Grundsätzliche Gültigkeit der IP überprüfen und Leute auf alternativen Server schicken, sonst kicken*/
		if(get_vaultdata("CWC_ALTIP",sIP,MAX_IP_LENGTH) && is_valid_ip(sIP)){
			redirect(UserIndex,sIP);
		}
		kickplayers(UserIndex);
	}
 
	/* Mapchangecfgfile abschalten und alte Datei speichern */
	delete_mccf();
 
	/* Altes Passwort und Mapcycle sichern */
	save_password();
 
	/* Passwort setzen */
	set_password();
 
	/* Defaultwerte laden inkl. Regeldatei */
	set_default();
 
	/* War modus aktivieren */
	set_vaultnumdata("CWCI_ON",1);
 
	/* Mapcycle erzeugen und aktivieren*/
	create_mapcycle();
 
	/* Flag für erste Runde setzen */
	set_serverinfo("war_start","1");
 
	/* Mapchange */
	get_vaultdata("CWC_MAP1",Text,MAX_DATA_LENGTH);
 	set_timer("mapchange",10,0,Text);
 	return PLUGIN_HANDLED;
}
/********************************************************************************/
 
/********************************** CW - START **********************************/
/* War starten */
public admin_war_start(HLCommand,HLData,HLUserName,UserIndex) {
	new Text[MAX_DATA_LENGTH];
	new dummy[10];
	new no;
	new sLanguage[3][MAX_TEXT_LENGTH];
 
	/* Check, ob Server im Warmodus */
	if(war_off(UserIndex)==0) {
		return PLUGIN_HANDLED;
	}
 
	/* Sofortiger Start */
	convert_string(HLData,Text,MAX_DATA_LENGTH);
	strtrim(Text," ",2);
 
	if(!strcasecmp(Text,"now")){
		set_timer("restarttimers",5,0);
		return PLUGIN_HANDLED;
	}
 
	/* Clanbegruessung in der ersten Runde */
	language(5,sLanguage[0]);
	if (get_serverinfo("war_start",Text,MAX_DATA_LENGTH) && streq(Text,"1") && get_vaultdata("CWCI_OPPONENT",Text,MAX_DATA_LENGTH) && !streq(sLanguage[0],Text) && strlen(Text)!=0) {
		language(9,sLanguage[0]);
		snprintf(Text,MAX_DATA_LENGTH,sLanguage[0],Text);
	}
	else{
		strinit(Text);
	}
 
	/* Vote initiieren */
	get_vaultnumdata("CWC_RESTARTS",no);
	language(10,sLanguage[0]);
	snprintf(Text,MAX_DATA_LENGTH,sLanguage[0],Text,min(max(no,2),10));
	centersay(Text,30,68,255,125);
	for(no=0;no<3;no++){
		language(no+11,sLanguage[no]);
	}
	vote(sLanguage[0],sLanguage[1],sLanguage[2],"HandleWarVote",dummy);
 
	return PLUGIN_HANDLED;
}
 
/* Startvote auswerten */
public HandleWarVote(WinningOption,HLMap,VoteCount,UserCount) {
	new VoteMap[MAX_DATA_LENGTH];
	new a=0;
	new sLanguage[MAX_TEXT_LENGTH];
	new maxplayers = maxplayercount();
	new Target[MAX_NAME_LENGTH];
	new SessionID, WONID, Team;
 
	for(new i=1; i<=maxplayers; i++) {
 		if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
 			if (Team == TEAM_PROXY) {
				a=1;
			}
		}
	}
 
	convert_string(HLMap,VoteMap,MAX_DATA_LENGTH);
 
	if (WinningOption == 1 && VoteCount >= (UserCount-a)) {
		set_timer("restarttimers",5,0,"1");
		return PLUGIN_CONTINUE;
	}
	else {
		language(14,sLanguage);
		centersay(sLanguage,10,255,40,44);
	}
	return PLUGIN_CONTINUE;
}
 
/* Timer für Warstart */
public restarttimers(Timer,Repeat,HLUserName,HLParam){
	new no;
	new Text[MAX_DATA_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	/* Begruessung des Gegnerclans abschalten */
	set_serverinfo("war_start","");
 
	/* String für erfolgreichen Vote */
	convert_string(HLParam,Text,MAX_DATA_LENGTH);
	if(strtonum(Text)){
		language(15,sLanguage);
		strcpy(Text,sLanguage,MAX_DATA_LENGTH);
	}
	else {
		strinit(Text);
	}
 
	/* Teamzugehörigkeit für admin_war_switch merken */
	who_is_in_which_team();
 
	/* Ankündigung des Starts */
	get_vaultnumdata("CWC_RESTARTS",no);
	no=min(max(no,2),10);
	language(16,sLanguage);
	snprintf(Text,MAX_DATA_LENGTH,sLanguage,Text,no);
	centersay(Text,10,68,255,125);
 
	/* Restarts auslösen */
	set_timer("Restart_Round",2,no);
 
	/* Timelimit und Maxrounds zurücksetzen; Addons auslösen */
	set_timer("warmup_end",3,0);
	/* Warstart Nachricht */
	set_timer("War_Starts",(no+1)*2+1,0);
}
 
/* Teamzugehörigkeit für admin_war_switch merken */
who_is_in_which_team(){
	new iTeam;
	new iMaxPlayers=maxplayercount();
	new i;
	new sName[MAX_NAME_LENGTH];
	new iUserID,iWONID,iDead;
	new sAuthID[MAX_AUTHID_LENGTH];
	new iLAN;
 
	iLAN=getvar("sv_lan");
	/* Globale Array beschreiben, wenn kein Spieler im Slot Null eintragen */	
	for(i=0;i<iMaxPlayers;i++){
		if(playerinfo(i+1,sName,MAX_NAME_LENGTH,iUserID,iWONID,iTeam,iDead,sAuthID)){
			aTeam[i]=iTeam;
			/* SessionID benutzen um Kompatibilität zum LAN zu erhalten */
			if(iLAN){
				get_userIP(sName,aSessionID[i],MAX_AUTHID_LENGTH);
			}
			else{
				strcpy(aSessionID[i],sAuthID,MAX_AUTHID_LENGTH);
			}
		}
		else{
			aTeam[i]=0;
			strinit(aSessionID[i]);
		}
	}
	iTausch=1;
	return PLUGIN_CONTINUE;
}
 
/* Restarts auslösen */
public Restart_Round(Timer,Repeat,HLUserName,HLParam) {
	setstrvar("sv_restartround","1");
	return PLUGIN_CONTINUE;
}
 
/* Timelimit und Maxrounds zurücksetzen; Addons auslösen */
public warmup_end(Timer,Repeat,HLUserName,HLParam) {
	new merk[MAX_TEXT_LENGTH];
	new iAccess;
 
	get_vaultdata("CWCI_TIMELIMIT",merk,MAX_TEXT_LENGTH);
	setstrvar("mp_timelimit",merk);
	get_vaultdata("CWCI_MAXROUNDS",merk,MAX_TEXT_LENGTH);
	setstrvar("mp_maxrounds",merk);
 
	if (plugin_checkcommand("cwc_addon_start",iAccess)>0){
		plugin_exec("cwc_addon_start","");
		iAccess=0;
	}
 
	return PLUGIN_CONTINUE;
}
 
/* Die aktuellen Einstellungen vor jeder Runde allgemein anzeigen */
show_settings(){
	new cmd[4][MAX_COMMAND_LENGTH]={"CWC_PASS","CWC_MAP1","CWC_MAP2","CWC_RULES"};
	new i;
	new sLanguage[MAX_DATA_LENGTH];
	new maxplayers=maxplayercount();
	new sName[MAX_NAME_LENGTH];
	new iMenu=0;
	new iFreeze=getvar("mp_freezetime");
	new sMerke[MAX_DATA_LENGTH];
	new SessionID,WONID,Team;
 
	for(i=0;i<=3;i++){
		get_vaultdata(cmd[i],cmd[i],MAX_TEXT_LENGTH);
	}
	language(35,sLanguage);
	snprintf(sLanguage,MAX_DATA_LENGTH,sLanguage,cmd[0],cmd[1],cmd[2],cmd[3]);
	if(getstrvar("amv_enable_beta",sMerke,MAX_DATA_LENGTH) && strcasestrx(sMerke,"menu1")!=-1){
		iMenu=1;
	}
	for(i=1;i<=maxplayers;i++){
		if(playerinfo(i,sName,MAX_NAME_LENGTH,SessionID,WONID,Team) && Team!=TEAM_PROXY){
			if(iMenu && iFreeze>0){
				if(iFreeze>0){
					menu(sName,sLanguage,1024,iFreeze);
				}
				else{
					menu(sName,sLanguage,1024,5);
				}
			}
			else{
				messageex(sName,sLanguage,print_tty);
			}
		}
	}	
	return PLUGIN_CONTINUE;
}
 
 
/* Warstart Nachricht */
public War_Starts(Timer,Repeat,HLUserName,HLParam) {
	new sLanguage[MAX_TEXT_LENGTH];
 
	show_settings();
 
	language(17,sLanguage);
	centersay(sLanguage,10,68,255,125);
 
	return PLUGIN_CONTINUE;
}
 
/* Check, ob Server im Warmodus */
war_off(UserIndex) {
	new on;
	new sLanguage[MAX_TEXT_LENGTH];
 
	if(get_vaultnumdata("CWCI_ON",on) && !on) {
		language(18,sLanguage);
		info_msg(UserIndex,sLanguage);
		return 0;
	}
	return 1;
}
/********************************************************************************/
 
/********************************** CW - END ************************************/
public admin_war_end(HLCommand,HLData,HLUserName,UserIndex) {
	new Text[MAX_TEXT_LENGTH];
	new on;
	new sLanguage[MAX_TEXT_LENGTH];
 
	if(get_vaultnumdata("CWCI_ON",on) && on!=1){
		language(19,sLanguage);
		info_msg(UserIndex,sLanguage);
		return PLUGIN_HANDLED;
	}
 
	/* Altes Passwort wiederhergestellt */
	get_vaultdata("CWCI_OLDPASS",Text,MAX_TEXT_LENGTH);
	if (strlen(Text)==0){
		strcpy(Text,"none",MAX_DATA_LENGTH);
	}
	setstrvar("sv_password",Text);
 
	/* Alter Mapcycle wiederhergestellt */
	get_vaultdata("CWCI_OLDMCF",Text,MAX_TEXT_LENGTH);
	setstrvar("mapcyclefile",Text);
 
	/* Altes Mapchangecfgfile wiederhergestellt */
	strinit(Text);
	get_vaultdata("CWCI_MCCF",Text,MAX_TEXT_LENGTH);
	setstrvar("mapchangecfgfile",Text);
 
	/* Einstellungen resetten */
	if(!strlen(Text)){
		getstrvar("servercfgfile",Text,MAX_DATA_LENGTH);
	}
	snprintf(Text,MAX_TEXT_LENGTH,"exec %s",Text);
	exec(Text);
 
	/* Warmodus deaktivieren */
	set_vaultnumdata("CWCI_ON",0);
 
	/* Kleines Dankeschön für den War */
	language(20,sLanguage);
	info_msg(UserIndex,sLanguage);
	language(21,sLanguage);
	centersay(sLanguage,10,68,255,125);
 
	/* Wechsel auf bevorzugte Map initiiert */
	get_vaultdata("CWC_ENDMAP",Text,MAX_TEXT_LENGTH);
	set_timer("ChangeMap",59,0,Text);
	language(22,sLanguage);
	snprintf(Text,MAX_TEXT_LENGTH,sLanguage,Text);
	say(Text);
 
	/* Addons Warende bekanntmachen */
	if (plugin_checkcommand("cwc_addon_end",on)>0){
		plugin_exec("cwc_addon_end","");
		on=0;
	}
 
	/* benutzerspezifisches File am Ende des Wars ausführen */
	strcpy(Text,"endwar.cfg",MAX_TEXT_LENGTH);
	create_path(Text,"cwcreator");
	if(fileexists(Text)){
		snprintf(Text,MAX_TEXT_LENGTH,"exec %s",Text);
		exec(Text);
	}
	return PLUGIN_HANDLED;
}
/********************************************************************************/
 
/************************ CW Creator CVars setzen *******************************/
 
/* Schreiben von Pluginsettings */
change_settings(sWarCvar[],sValue[]){
	new sLocalCvar[MAX_TEXT_LENGTH]="CWC_";
	new sLocalValue[MAX_TEXT_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	strcat(sLocalCvar,sWarCvar,MAX_TEXT_LENGTH);
 
	if(get_vaultdata(sLocalCvar,sLocalValue,MAX_TEXT_LENGTH) && strlen(sValue)!=0){
		set_vaultdata(sLocalCvar,sValue);
		if(getvar("admin_debug")>0){
			language(23,sLanguage);
			snprintf(sLocalValue,MAX_TEXT_LENGTH,sLanguage,sLocalCvar,sValue,sLocalValue);
			log(sLocalValue);
		}
	}
 
	return PLUGIN_CONTINUE;
}
 
/* Rückgabe von Pluginsettings */
display_settings(){
	new cmd[8][MAX_COMMAND_LENGTH]={"PASS","TAG","MAP1","MAP2","ENDMAP","RULES","RESTARTS","ALTIP"};
	new i;
	new Text[MAX_TEXT_LENGTH];
	new sLanguage[MAX_TEXT_LENGTH];
 
	language(24,sLanguage);
	selfmessage(sLanguage);
	for(i=0;i<=7;i++){
		strcpy(Text,"CWC_",MAX_TEXT_LENGTH);
		strcat(Text,cmd[i],MAX_TEXT_LENGTH);
		/* Aktuellen Wert ausgeben */
		get_vaultdata(Text,Text,MAX_TEXT_LENGTH);
		snprintf(Text,MAX_TEXT_LENGTH,"%s %s",cmd[i],Text);
		selfmessage(Text);
	}
 
	return PLUGIN_CONTINUE;
}
 
/* Variablen Check */
public admin_war_set(HLCommand,HLData,HLUserName,UserIndex){
	new sValue[MAX_DATA_LENGTH];
	new sWarCvar[MAX_DATA_LENGTH];
	new sMerke[MAX_DATA_LENGTH];
	new i;
	new sLanguage[MAX_TEXT_LENGTH];
	new sName[MAX_NAME_LENGTH];
 
	convert_string(HLData,sMerke,MAX_DATA_LENGTH);
	convert_string(HLUserName,sName,MAX_NAME_LENGTH);
	strtrim(sMerke," ",2);
 
	for(i=0;i<8;i++){
		strbreak(sMerke,sWarCvar,sValue,MAX_DATA_LENGTH);
		strbreak(sValue,sValue,sMerke,MAX_DATA_LENGTH);
 
		/* Variablencheck */
		if(strcasecmp(sWarCvar,"pass")==0){
			/* Leeres Passwort ablehnen */
			if (strcmp(sValue,"none")== 0) {
				language(25,sLanguage);
		 		info_msg(UserIndex,sLanguage);
				return PLUGIN_HANDLED;
			}
		}
		else if(strcasecmp(sWarCvar,"tag")==0){
			/* Clantag auf 20 Zeichen limitiert */
			if(strlen(sValue) > 20) {
				language(4,sLanguage);
				info_msg(UserIndex,sLanguage);
				return PLUGIN_HANDLED;
			}
		}
		else if(strcasecmp(sWarCvar,"map1")==0 || strcasecmp(sWarCvar,"map2")==0 || strcasecmp(sWarCvar,"endmap")==0){
			/* Überprüfen, ob eine gültige Map angegeben wurde */
			if(!valid_map(sValue)) {
				language(26,sLanguage);
				info_msg(UserIndex,sLanguage);
				return PLUGIN_HANDLED;
			}
		}
		else if(strcasecmp(sWarCvar,"rules")==0){
			/* Pfad erstellen */
			new sMerk[MAX_DATA_LENGTH];
			strcpy(sMerk,sValue,MAX_DATA_LENGTH);
			create_path(sMerk,"cwcreator/rules");
			/* Überprüfen, ob die Regeldatei existiert */
			if(!fileexists(sMerk)) {
				info_msg(UserIndex,sMerk);
				language(27,sLanguage);
				info_msg(UserIndex,sLanguage);
				return PLUGIN_HANDLED;
			}
			else {
				/* Bei Warmodus, Serversettings ausführen */
				set_timer("overwrite_settings",1,0);
			}
		}
		else if(strcasecmp(sWarCvar,"altip")==0){
			if(!is_valid_ip(sValue)){
				language(36,sLanguage);
				info_msg(UserIndex,sLanguage);
				strcpy(sValue,"0",MAX_DATA_LENGTH);
			}
		}
		else if(strcasecmp(sWarCvar,"restarts")==0){
			new iValue;
			iValue=strtonum(sValue);
			if(iValue>10 || iValue<2){
				iValue=min(max(iValue,2),10);
				numtostr(iValue,sValue);
			}
		}
		change_settings(sWarCvar,sValue);
		strtrim(sMerke," ",2);
		if(!strlen(sMerke)){
			break;
		}
	}
	display_settings();
	/* Addons Änderungen der Settings bekanntmachen */
	if (plugin_checkcommand("cwc_addon_set",i)>0){
		plugin_exec("cwc_addon_set",sName);
		i=0;
	}
 
 
	return PLUGIN_HANDLED;
}
/********************************************************************************/
 
/****************************** PLUGIN-START ************************************/
 
public admin_war_switch(HLCommand,HLData,HLUserName,UserIndex){
	new iTeam;
	new iMaxPlayers=maxplayercount();
	new i,j;
	new sName[MAX_NAME_LENGTH];
	new sCommand[MAX_TEXT_LENGTH];
	new iUserID,iWONID,iDead;
	new sAuthID[MAX_AUTHID_LENGTH];
	new iMerk=0;
	new sLanguage[MAX_TEXT_LENGTH];
	new iLAN;
 
	if(war_off(UserIndex)) {
		if(!iTausch){
			language(37,sLanguage);
			info_msg(UserIndex,sLanguage);
			return PLUGIN_HANDLED;
		}
		if(!getvar("admin_ignore_immunity")){
			setstrvar("admin_ignore_immunity","1");
			iMerk=1;
		}
		language(28,sLanguage);
		say(sLanguage);
 
		iLAN=getvar("sv_lan");
 
		/* Switch Teams */
		for(i=0;i<iMaxPlayers;i++){
			if(playerinfo(i+1,sName,MAX_NAME_LENGTH,iUserID,iWONID,iTeam,iDead,sAuthID)){
				if(iLAN){
					get_userIP(sName,sAuthID,MAX_AUTHID_LENGTH);
				}
				for(j=0;j<iMaxPlayers;j++){
					if(streq(aSessionID[j],sAuthID) && aTeam[j]==iTeam){
						if(iTeam==CT){
							iTeam=TERROR;
						}
						else{
							iTeam=CT;
						}
						snprintf(sCommand,MAX_TEXT_LENGTH,"jointeam %d",iTeam);
						execclient(sName,sCommand);
						break;
					}
				}
			}
		}
		if(iMerk){
			setstrvar("admin_ignore_immunity","0");
		}
	}
	return PLUGIN_HANDLED;
}
 
/********************************************************************************/
 
/******************************** NEXTMAP ***************************************/
public admin_war_nextmap(HLCommand,HLData,HLUserName,UserIndex){
	new sMap[MAX_DATA_LENGTH];
	new sCurrentMap[MAX_DATA_LENGTH];
	new sPath[MAX_DATA_LENGTH];
	new Text[MAX_DATA_LENGTH];
 
	/* Check, ob Server im Warmodus */
	if(war_off(UserIndex)==0) {
		return PLUGIN_HANDLED;
	}
 
	/* Alter Mapcycle wiederhergestellt wegen Problemen im Mapcycle von HLDS*/
	get_vaultdata("CWCI_OLDMCF",Text,MAX_TEXT_LENGTH);
	setstrvar("mapcyclefile",Text);
 
	/* Pfad erstellen */
	strcpy(sPath,"cwmapcycle.txt",MAX_DATA_LENGTH);
	create_path(sPath,"cwcreator");
	resetfile(sPath);
 
	get_vaultdata("CWC_MAP2",sMap,MAX_DATA_LENGTH);
	currentmap(sCurrentMap,MAX_DATA_LENGTH);
 
	if(streq(sMap,sCurrentMap)){
		get_vaultdata("CWC_MAP1",sMap,MAX_DATA_LENGTH);
	}
	writefile(sPath,sMap,-1);
	/* Den neuen Cycle aktivieren, hoffen wir, dass das Prozedere die Probleme behebt */
	setstrvar("mapcyclefile",sPath);
	changelevel(sMap);
 
 	return PLUGIN_HANDLED; 
}
/********************************************************************************/
 
/****************************** PLUGIN-START ************************************/
public plugin_init() {
	new merk;
	new sLanguage[MAX_TEXT_LENGTH]="";
 
	/* Sprache initieren */
	language(0,sLanguage);
 
	/* CVar Check */
	if(getvar("file_access_write")*getvar("file_access_read")*getvar("allow_client_exec")*is_vaultfile_set()){
		/* Plugin Registrierung */
		language(29,sLanguage);
		plugin_registerinfo("Clan War Creator",sLanguage,STRING_VERSION);
		language(30,sLanguage);
		plugin_registercmd("admin_war_launch","admin_war_launch",ACCESS_WAR,sLanguage);
		plugin_registercmd("admin_war_start","admin_war_start",ACCESS_WAR,"admin_war_start [now]");
		plugin_registercmd("admin_war_end","admin_war_end",ACCESS_WAR,"admin_war_end");
		language(31,sLanguage);
		plugin_registercmd("admin_war_set","admin_war_set",ACCESS_WAR,sLanguage);
		plugin_registercmd("admin_war_switch","admin_war_switch",ACCESS_WAR,"admin_war_switch");
		plugin_registercmd("admin_war_nextmap","admin_war_nextmap",ACCESS_WAR,"admin_war_nextmap");
 
		/* Im Warmodus? Passwort setzen und evtl. Mapsettings ueberschreiben */
 
		if(get_vaultnumdata("CWCI_ON",merk) && merk) {
			if(map_specific_exists()){
				set_timer("overwrite_settings",5,0);
			}
			else{
				new Text[MAX_TEXT_LENGTH];
				if(get_serverinfo("war_start",Text,MAX_TEXT_LENGTH) && strtonum(Text)){
					set_vaultnumdata("CWCI_LAUNCHED",1);
				}
				launched();
			}
		}
 
		/* Bei fehlenden Vault.ini-Einträgen Default setzen */
 
		if(!get_vaultnumdata("CWC_RESTARTS",merk)){
			set_vaultdata("CWC_PASS","test");
			set_vaultdata("CWC_TAG","[WING]");
			set_vaultdata("CWC_MAP1","de_dust");
			set_vaultdata("CWC_MAP2","de_inferno");
			set_vaultdata("CWC_ENDMAP","de_aztec");
			set_vaultdata("CWC_RESTARTS","3");
			set_vaultdata("CWC_RULES","esl5on5mr.cfg");
			set_vaultdata("CWCI_ON","0");
			set_vaultdata("CWC_ALTIP","213.202.195.22:27015");
		}
 
		if (plugin_checkcommand("cwc_addon_init",merk)>0){
			plugin_exec("cwc_addon_init","");
			merk=0;
		}
 
	}
	else{
		language(32,sLanguage);
		plugin_registerinfo("Clan War Creator",sLanguage,STRING_VERSION);
		language(33,sLanguage);
		log(sLanguage);
		language(34,sLanguage);
		log(sLanguage);
	}
 
 	return PLUGIN_CONTINUE; 
}
 
public overwrite_settings(Timer,Repeat,HLUserName,HLParam) {
	execute_settings();
	return PLUGIN_CONTINUE;
}
 
/********************************************************************************/