/* CWC-MENUE by: Sir Drink a lot Plugin to make your settings of CW-Creator. !!!Use amv_enable_beta "menu1" in your adminmod.cfg!!! */ #include <core> #include <console> #include <string> #include <admin> #include <adminlib> #define ACCESS_WAR 256 new String_Version[]="05.05.03"; #define OK 0 #define BAD 1 new File[MAX_TEXT_LENGTH]="addons/adminmod/config/cwcreator/settings.ini"; new ruledir[MAX_DATA_LENGTH]="addons/adminmod/config/cwcreator/rules/"; #define SETTINGS 9 /*Hier werden die Setting reingeladen-- zur Zeit 9 Stück*/ new Commands[SETTINGS][MAX_COMMAND_LENGTH]={{"admin_war_pass"},{"admin_war_tag"},{"admin_war_map1"},{"admin_war_map2"},{"admin_war_endmap"},{"admin_war_rules"},{"admin_war_count"},{"admin_war_demo"},{"admin_war_countrules"}}; new Settings[SETTINGS][MAX_NAME_LENGTH]; new SaySettings[SETTINGS][MAX_TEXT_LENGTH]={{"Password"},{"Clantag"},{"Map 1"},{"Map 2"},{"Endmap"},{"Regel.cfg"},{"Score-Counter (0/1)"},{"Demo (0/1)"},{"Count-Modus (attack/all)"}}; /*Arrays zur Auswertung, anhand des UserIndex des Admins werden hoffentlich Fehlauswahlen verhindert*/ new MenuID[MAX_PLAYERS]; new LastMenuID[MAX_PLAYERS]; new MessageMode[MAX_PLAYERS]; new SelectedMenuCommand[MAX_PLAYERS]; new SelectedSet[MAX_PLAYERS]; new SelectedSetLoop[MAX_PLAYERS]={1,1,...}; new settingsloaded=0; public admin_war_menu(HLCommand,HLData,HLUserName,UserIndex){ new User[MAX_NAME_LENGTH]; convert_string(HLUserName,User,MAX_NAME_LENGTH); mainmenu(User,UserIndex); return PLUGIN_HANDLED; } mainmenu(User[],UserIndex){ new Text[512]; new keys; new on; get_vaultnumdata("admin_war_on",on); if(on){ snprintf(Text,MAX_TEXT_LENGTH,"\wCW-Creator-MainMenu:^n^n\y1. CW-Einstellungen^n\r2. -- CW Modus aktiv --^n\y3. CW-Regel.cfg nachtraeglich aendern^n4. CW-Runde mit Vote starten^n5. CW-Runde ohne Vote neu starten^n6. CW beenden^n^n\r0. Ende"); keys=573; }else{ snprintf(Text,MAX_TEXT_LENGTH,"\wCW-Creator-MainMenu:^n^n\y1. CW-Einstellungen^n2. CW-Modus starten^n\r3. -- nur im CW-Modus --^n4. -- nur im CW-Modus --^n5. -- nur im CW-Modus --^n6. -- nur im CW-Modus --^n^n0. Ende"); keys=515; } menu(User,Text,keys); MenuID[UserIndex]=1; return 0; } /*Settingsauswahl 8 ist Next, 9 ist Back, 0 ist Cancel*/ setmenu(User[],UserIndex){ new Text[512]; new Auswahl[MAX_TEXT_LENGTH]; new l=0; new i; new a=1; new keys=0; new on; get_vaultnumdata("admin_war_on",on); snprintf(Text,MAX_TEXT_LENGTH,"\wCW-Creator-Settings:^n^n"); for(i=SelectedSetLoop[UserIndex];i<=settingsloaded;i++){ l++; if(l==6){ if(settingsloaded>SelectedSetLoop[UserIndex]+5){ strcat(Text,"\y^n8. -x",MAX_TEXT_LENGTH); keys+=128; break; }else{ break; } }else{ if(!on){ snprintf(Auswahl,MAX_TEXT_LENGTH,"\y%i. %s: \w%s^n",l,SaySettings[i-1],Settings[i-1]); strcat(Text,Auswahl,MAX_TEXT_LENGTH); a+=a; keys=a-1; }else{ snprintf(Auswahl,MAX_TEXT_LENGTH,"\y%i. %s: \r%s^n",l,SaySettings[i-1],Settings[i-1]); strcat(Text,Auswahl,MAX_TEXT_LENGTH); } } } if(SelectedSetLoop[UserIndex]>=5){ strcat(Text,"\y^n9. x-",MAX_TEXT_LENGTH); keys+=256; } strcat(Text,"\r^n0. Ende",MAX_TEXT_LENGTH); keys+=512; menu(User,Text,keys); MenuID[UserIndex]=2; return 0; } show_text(User[],Text[],UserIndex,ID){ new Headline[512]="\w[CW-CREATOR] Meldung:^n^n"; new keys; strcat(Headline,Text,MAX_TEXT_LENGTH); if(ID){ strcat(Headline,"^n^n0. OK",MAX_TEXT_LENGTH); keys=512; }else{ keys=1024; } menu(User,Headline,keys); MenuID[UserIndex]=3; return 0; } /*Auswertung der Menüauswahl*/ public menuselect(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); if(MenuID[UserIndex]!=0){ SelectedMenuCommand[UserIndex]=strtonum(Data); if(MenuID[UserIndex]==1){ switch(SelectedMenuCommand[UserIndex]){ case 1: { setmenu(User,UserIndex); } case 2: { SelectedSet[UserIndex]=1; sethandling(User,UserIndex); } case 3: { SelectedSet[UserIndex]=5; sethandling(User,UserIndex); } case 4: { plugin_exec("admin_war_start",""); reset_array(UserIndex); } case 5: { plugin_exec("admin_war_restart",""); reset_array(UserIndex); } case 6: { plugin_exec("admin_war_end",""); reset_array(UserIndex); } case 10: { reset_array(UserIndex); } } }else if(MenuID[UserIndex]==2){ if(SelectedMenuCommand[UserIndex]==8){ SelectedSetLoop[UserIndex]=SelectedSetLoop[UserIndex]+5; setmenu(User,UserIndex); }else if(SelectedMenuCommand[UserIndex]==9){ SelectedSetLoop[UserIndex]=SelectedSetLoop[UserIndex]-5; setmenu(User,UserIndex); }else if(SelectedMenuCommand[UserIndex]==10){ reset_array(UserIndex); mainmenu(User,UserIndex); }else{ if(SelectedSetLoop[UserIndex]>=5){ SelectedSet[UserIndex]=SelectedSetLoop[UserIndex]+SelectedMenuCommand[UserIndex]-2; }else{ SelectedSet[UserIndex]=SelectedMenuCommand[UserIndex]-1; } sethandling(User,UserIndex); } }else if(MenuID[UserIndex]==3){ if(SelectedMenuCommand[UserIndex]==10){ /*Reset ohne den Loop des Users*/ MessageMode[UserIndex]=0; SelectedMenuCommand[UserIndex]=0; SelectedSet[UserIndex]=0; if(LastMenuID[UserIndex]==1){ mainmenu(User,UserIndex); }else if(LastMenuID[UserIndex]==2){ setmenu(User,UserIndex); } } } return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } /*Wenn Map ausgewählt, entsprechend zur Map wechseln, wenn genug Stimmen vorhanden sind*/ sethandling(User[],UserIndex){ if(SelectedSet[UserIndex]<=5){ new Text[MAX_TEXT_LENGTH]; if(MenuID[UserIndex]==1 && SelectedSet[UserIndex]==1){ snprintf(Text,MAX_TEXT_LENGTH,"Bitte gebe den Clantag des Gastes^nim Chat ein,^num den CW-Modus zu starten!"); }else if(MenuID[UserIndex]==1 && SelectedSet[UserIndex]==5){ snprintf(Text,MAX_TEXT_LENGTH,"Bitte gebe die Regel.cfg im Chat ein,^ndie neu geladen werden soll!"); }else if(MenuID[UserIndex]==2){ snprintf(Text,MAX_TEXT_LENGTH,"Bitte gebe den Wert fuer^n'%s' im Chat ein!",SaySettings[SelectedSet[UserIndex]]); } MessageMode[UserIndex]=1; LastMenuID[UserIndex]=MenuID[UserIndex]; show_text(User,Text,UserIndex,OK); }else{ if(SelectedSet[UserIndex]==6 || SelectedSet[UserIndex]==7){ if(Settings[SelectedSet[UserIndex]][0]=='0'){ strcpy(Settings[SelectedSet[UserIndex]],"1",MAX_NUMBER_LENGTH); }else{ strcpy(Settings[SelectedSet[UserIndex]],"0",MAX_NUMBER_LENGTH); } }else{ if(strcmp(Settings[SelectedSet[UserIndex]],"attack")==0){ strcpy(Settings[SelectedSet[UserIndex]],"all",MAX_NAME_LENGTH); }else{ strcpy(Settings[SelectedSet[UserIndex]],"attack",MAX_NAME_LENGTH); } } plugin_exec(Commands[SelectedSet[UserIndex]],Settings[SelectedSet[UserIndex]]); /*erneutes Laden nur für Debug*/ load_cw_settings(); /*Reset ohne den Loop des Users*/ MessageMode[UserIndex]=0; SelectedMenuCommand[UserIndex]=0; SelectedSet[UserIndex]=0; setmenu(User,UserIndex); } return PLUGIN_HANDLED; } /*Reaktion auf die Chateingaben*/ public HandleSay(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new UserName[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,UserName,MAX_NAME_LENGTH); strstripquotes(Data); if(MessageMode[UserIndex]==0){ if (strcasestr(Data,"cwmenu")!=-1) { mainmenu(UserName,UserIndex); return PLUGIN_HANDLED; } }else if(MessageMode[UserIndex]==1){ /*hier gilt 'cwmenu' als Abbruch der Chateingabe*/ if(strcasestr(Data,"cwmenu")==-1){ if(check_set(Commands[SelectedSet[UserIndex]],Data,UserName,UserIndex)==1){ if(LastMenuID[UserIndex]==1 && SelectedSet[UserIndex]==5){ strcpy(Settings[SelectedSet[UserIndex]],Data,MAX_TEXT_LENGTH); plugin_exec(Commands[SelectedSet[UserIndex]],Data); }else if(LastMenuID[UserIndex]==1 && SelectedSet[UserIndex]==1){ /*den CW-Modus starten*/ plugin_exec("admin_war_set",Data); }else if(LastMenuID[UserIndex]==2){ strcpy(Settings[SelectedSet[UserIndex]],Data,MAX_TEXT_LENGTH); plugin_exec(Commands[SelectedSet[UserIndex]],Data); } /*erneutes Laden nur für Debug*/ load_cw_settings(); /*Reset ohne den Loop des Users*/ SelectedMenuCommand[UserIndex]=0; SelectedSet[UserIndex]=0; if(LastMenuID[UserIndex]==1){ mainmenu(UserName,UserIndex); }else if(LastMenuID[UserIndex]==2){ setmenu(UserName,UserIndex); } } }else{ reset_array(UserIndex); mainmenu(UserName,UserIndex); } MessageMode[UserIndex]=0; return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } check_set(Command[],Value[],UserName[],UserIndex){ new Text[MAX_TEXT_LENGTH]; new error; if(strlen(Value)!=0){ if(strcmp(Command,"admin_war_pass")==0){ if (strcmp(Value,"none")== 0) { snprintf(Text,MAX_TEXT_LENGTH,"\rFehler:^nPasswort nicht korrekt!"); error=1; } }else if(strcmp(Command,"admin_war_tag")==0){ if(strlen(Value) > 20) { snprintf(Text,MAX_TEXT_LENGTH,"\rFehler:^nDer ClanTag^n%s^nist zu lang!",Value); error=1; } }else if(strcmp(Command,"admin_war_map1")==0 || strcmp(Command,"admin_war_map2")==0 || strcmp(Command,"admin_war_endmap")==0){ if(!valid_map(Value)) { snprintf(Text,MAX_TEXT_LENGTH,"\rFehler:^nMap %s^nexistiert nicht!",Value); error=1; } }else if(strcmp(Command,"admin_war_rules")==0){ new rule[MAX_DATA_LENGTH]; snprintf(rule,MAX_DATA_LENGTH,"%s%s",ruledir,Value); if(!fileexists(rule)) { snprintf(Text,MAX_TEXT_LENGTH,"\rFehler:^nRegeldatei^n%s^nexistiert nicht!",Value); error=1; } } if(error){ show_text(UserName,Text,UserIndex,BAD); return 0; }else{ return 1; } }else{ snprintf(Text,MAX_TEXT_LENGTH,"\rFehler:^nKeinen Wert fuer^n'%s' im chat eingegeben!",SaySettings[SelectedSet[UserIndex]]); show_text(UserName,Text,UserIndex,BAD); return 0; } return 0; } /*Lädt die settings.ini Datei.*/ load_cw_settings(){ new Data[MAX_DATA_LENGTH]; new Text[MAX_TEXT_LENGTH]; new j; settingsloaded=0; for(j=1; j <= SETTINGS; j++){ readfile(File,Data,j,MAX_TEXT_LENGTH); strcpy(Settings[settingsloaded],Data,MAX_TEXT_LENGTH); settingsloaded++; } snprintf(Text,MAX_TEXT_LENGTH,"[CWCREATOR-MENU] %i Settings loaded successfully from %s",settingsloaded,File); log(Text); return PLUGIN_CONTINUE; } /*Setzt die Arrays wieder zurück*/ reset_array(UserIndex){ MenuID[UserIndex]=0; LastMenuID[UserIndex]=0; MessageMode[UserIndex]=0; SelectedMenuCommand[UserIndex]=0; SelectedSet[UserIndex]=0; SelectedSetLoop[UserIndex]=1; return PLUGIN_CONTINUE; } public SetMenuData(HLCommand,HLData,HLUserName,UserIndex){ new UserName[MAX_NAME_LENGTH]; new Text[MAX_TEXT_LENGTH]; convert_string(HLUserName,UserName,MAX_NAME_LENGTH); if(MenuID[UserIndex]==1 || MenuID[UserIndex]==2 || MenuID[UserIndex]==3){ reset_array(UserIndex); snprintf(Text,MAX_TEXT_LENGTH,"[CW-CREATOR-MENU] Menue wurde durch ein anderes Menue beendet!"); messageex(UserName,Text,print_chat); } return PLUGIN_CONTINUE; } public plugin_init(){ plugin_registerinfo("CWC-MENUE","Menue for settings of CW-Creator >v2.0",String_Version); plugin_registercmd("admin_war_menu","admin_war_menu",ACCESS_WAR,"admin_war_menu: Menuebedinung des CW-Creators."); plugin_registercmd("menuselect","menuselect",ACCESS_ALL); plugin_registercmd("say","HandleSay",ACCESS_ALL); plugin_registerhelp("say",ACCESS_WAR,"say cwmenu, um das CW-Creator Menue aufzurufen."); plugin_registercmd("radio1","SetMenuData",ACCESS_ALL); plugin_registercmd("radio2","SetMenuData",ACCESS_ALL); plugin_registercmd("radio3","SetMenuData",ACCESS_ALL); plugin_registercmd("buyequip","SetMenuData",ACCESS_ALL); plugin_registercmd("buy","SetMenuData",ACCESS_ALL); plugin_registercmd("chooseteam","SetMenuData",ACCESS_ALL); plugin_registercmd("showbriefing","SetMenuData",ACCESS_ALL); load_cw_settings(); return PLUGIN_CONTINUE; }