/* 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; } /********************************************************************************/