/*CWC MENÜ*/ #include <core> #include <string> #include <admin> #include <plugin> #include <adminlib> #pragma dynamic 16384 #define ACCESS_WAR 256 new AM_VERSION_STRING[] = "cwc_3.0.1_menu_1.1"; /*PLAYER => RULES*/ /*SERVER => SET COMMANDS*/ /*VOTE => EXECUTE COMMANDS*/ /******************/ /* LOAD VAULT.INI */ /******************/ #define MAX_VAULT_SET 17 #define DISPLAY_SETTINGS 9 new g_VaultNames[MAX_VAULT_SET][]= {"CWC_MAP1","CWC_MAP2","CWC_ENDMAP","CWC_PASS","CWC_RULES", "CWC_TAG","CWC_RESTARTS","CWC_ALTIP","CWC_MAXROUNDS","CWCI_OPPONENT", "CWCI_LAUNCHED","CWCI_TIMELIMIT","CWCI_MAXROUNDS","CWCI_MCCF", "CWCI_OLDPASS","CWCI_OLDMCF","CWCI_ON"}; new g_VaultData[MAX_VAULT_SET][MAX_NAME_LENGTH]; new g_WarModus[3]; new g_VoteSuccess; /****************************************/ /* EDIT MAX COMMANDS AVAILABLE */ /* FROM COMMANDS-FILE (MAX 100!!) */ /****************************************/ #define MAX_PLAYER_COMMANDS 40 #define MAX_MAP_COMMANDS 5 #define MAX_SERVER_COMMANDS 30 #define MAX_VOTE_COMMANDS 30 /****************************************/ #define MAX_MAPS 60 /****************************************/ #define ITEMS_PER_PAGE 6 new g_PlayerCommandFile[]="addons/adminmod/config/cwcreator/menu/cwrules.cfg"; new g_MapCommandFile[]="addons/adminmod/config/cwcreator/menu/cwcmapcommands.cfg"; new g_MapFile[]="addons/adminmod/config/cwcreator/menu/cwmaps.cfg"; new g_ServerCommandFile[]="addons/adminmod/config/cwcreator/menu/cwcsettings.cfg"; new g_VoteCommandFile[]="addons/adminmod/config/cwcreator/menu/cwccommands.cfg"; new g_Maps[MAX_MAPS][MAX_NAME_LENGTH]; new g_lmaps; /*MENUES*/ /*EBENE 1*/ #define MAINMENU 1 /*EBENE 2*/ #define PLAYERMENU 2 #define MAPMENU 3 #define SERVERMENU 4 #define VOTEMENU 5 #define DISPLAY 6 /*EBENE 3*/ #define PLAYERSELECT 7 #define MAPSELECT 8 /*EBENE 4*/ #define EXECUTEMENU 9 new g_PlayerCommands[MAX_PLAYER_COMMANDS][MAX_COMMAND_LENGTH]; new g_MapCommands[MAX_MAP_COMMANDS][MAX_COMMAND_LENGTH]; new g_ServerCommands[MAX_SERVER_COMMANDS][MAX_COMMAND_LENGTH]; new g_VoteCommands[MAX_VOTE_COMMANDS][MAX_COMMAND_LENGTH]; new g_lplayercommands; new g_lmapcommands; new g_lservercommands; new g_lvotecommands; /*USER SELECTS*/ new g_UserMenu[MAX_PLAYERS]; new g_UserLastMenu[MAX_PLAYERS]; new g_UserLastSelectLoop[MAX_PLAYERS]={1,1,...}; new g_UserMessageMode[MAX_PLAYERS]; new g_UserSelectLoop[MAX_PLAYERS]={1,1,...}; new g_UserCommand[MAX_PLAYERS][MAX_COMMAND_LENGTH]; new g_UserCommandData[MAX_PLAYERS][MAX_DATA_LENGTH]; public plugin_init(){ new Menu[MAX_NAME_LENGTH]; getstrvar("amv_enable_beta",Menu,MAX_NAME_LENGTH); if(strstrx(Menu,"menu1")!=-1){ new Text[MAX_TEXT_LENGTH]; plugin_registerinfo("CWC Menu","Administrate the CW-Creator with menu",AM_VERSION_STRING); plugin_registercmd("admin_war_menu","cw_menu",ACCESS_WAR,"admin_war_menu: opens the menu"); plugin_registercmd("say","HandleSay",ACCESS_ALL,"cwmenu: opens the admin mod menu"); plugin_registercmd("menuselect","menuselect",ACCESS_ALL); 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); read_file(g_PlayerCommandFile,g_PlayerCommands,MAX_PLAYER_COMMANDS,g_lplayercommands); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] loaded %i rules ",g_lplayercommands); selfmessage(Text); strinit(Text); read_file(g_MapCommandFile,g_MapCommands,MAX_MAP_COMMANDS,g_lmapcommands); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] loaded %i mapcommands",g_lmapcommands); selfmessage(Text); strinit(Text); read_file(g_ServerCommandFile,g_ServerCommands,MAX_SERVER_COMMANDS,g_lservercommands); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] loaded %i setting commands",g_lservercommands); selfmessage(Text); strinit(Text); read_file(g_VoteCommandFile,g_VoteCommands,MAX_VOTE_COMMANDS,g_lvotecommands); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] loaded %i execute commands",g_lvotecommands); selfmessage(Text); strinit(Text); read_file(g_MapFile,g_Maps,MAX_MAPS,g_lmaps); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] loaded %i maps",g_lmaps); selfmessage(Text); strinit(Text); /*LOAD VAULT DATA*/ load_vault_data(); get_serverinfo("war_start",g_WarModus,3); /*REACT ON CW-START*/ plugin_registercmd("cwc_addon_start","cwc_addon_start",ACCESS_WAR); /*REACT ON CW-CHANIGINGS*/ plugin_registercmd("cwc_addon_end","cwc_addon_set",ACCESS_WAR); plugin_registercmd("cwc_addon_set","cwc_addon_set",ACCESS_WAR); }else{ plugin_registerinfo("CWC Menu","Script is disabled, because 'amv_enable_beta menu1' is not set in adminmod.cfg!",AM_VERSION_STRING); } return PLUGIN_CONTINUE; } read_file(File[],StoreArray[][],max_entries,&loaded){ new Data[MAX_DATA_LENGTH]; new iFileSize; new i; if(fileexists(File)){ iFileSize=filesize(File); for(i=1;i<=iFileSize;i++){ if(loaded==max_entries){ break; } readfile(File,Data,i,MAX_NAME_LENGTH); if(strncmp(Data,"//",2)!=0 && strncmp(Data,"#",1)!=0 && strncmp(Data,";",1)!=0 && strlen(Data)!=0){ loaded++; strcpy(StoreArray[loaded],Data,MAX_COMMAND_LENGTH); } } }else{ snprintf(Data,MAX_DATA_LENGTH,"[CWC-MENU] File not found: %s !",File); selfmessage(File); } } /*LOAD VAULT.INI SETTINGS*/ load_vault_data(){ new i; for(i=0;i<MAX_VAULT_SET;i++){ get_vaultdata(g_VaultNames[i],g_VaultData[i],MAX_NAME_LENGTH); } } /*VOTE SUCCESSFUL in CWC*/ public cwc_addon_start(HLCommand,HLData,HLUserName,UserIndex){ g_VoteSuccess+=1; load_vault_data(); return PLUGIN_CONTINUE; } /*CWC-SETTINGS CHANGED*/ public cwc_addon_set(HLCommand,HLData,HLUserName,UserIndex){ load_vault_data(); 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(g_UserMenu[UserIndex]!=0){ reset_array(UserIndex); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] cw-menu is closed by another menu!"); messageex(UserName,Text,print_chat); } return PLUGIN_CONTINUE; } public cw_menu(HLCommand,HLData,HLUserName,UserIndex){ new UserName[MAX_NAME_LENGTH]; convert_string(HLUserName,UserName,MAX_NAME_LENGTH); main_menu(UserName,UserIndex); return PLUGIN_HANDLED; } /*MENUES*/ main_menu(UserName[],UserIndex){ new Text[512]; new keys; if(g_VaultData[16][0]=='0'){ snprintf(Text,MAX_TEXT_LENGTH,"\w[CWC-MENU]^n\r[CW MODE INACTIV]\y^n"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"\w[CWC-MENU]^n\r[CW MODE ACTIV]\y^n"); } snprintf(Text,MAX_TEXT_LENGTH,"%s1. SET RULES^n2. SET MAPS^n3. SET CONFIG^n4. EXECUTE^n5. DISPLAY SETTINGS^n^n\w0. CANCEL",Text); keys=543; g_UserMenu[UserIndex]=MAINMENU; menu(UserName,Text,keys); } second_menu(UserName[],UserIndex,menuID){ new Data[100][MAX_COMMAND_LENGTH]; new Text[512]; new a=1; new keys=0; new i; new x; new loaded; /*WHICH DATA SHALL BE DISPLAYED*/ switch(menuID){ case MAPMENU:{ snprintf(Text,MAX_TEXT_LENGTH,"\w[MAP SETTINGS]^n"); loaded=g_lmapcommands; for(i=1;i<=loaded;i++){ strcpy(Data[i],g_MapCommands[i],MAX_COMMAND_LENGTH); } } case SERVERMENU:{ snprintf(Text,MAX_TEXT_LENGTH,"\w[CWC SETTINGS]^n\r[admin_war_set]^n"); loaded=g_lservercommands; for(i=1;i<=loaded;i++){ strcpy(Data[i],g_ServerCommands[i],MAX_COMMAND_LENGTH); } } case VOTEMENU:{ snprintf(Text,MAX_TEXT_LENGTH,"\w[CWC COMMANDS]^n"); loaded=g_lvotecommands; for(i=1;i<=loaded;i++){ strcpy(Data[i],g_VoteCommands[i],MAX_COMMAND_LENGTH); } } case DISPLAY:{ new Display[MAX_COMMAND_LENGTH]; snprintf(Text,MAX_TEXT_LENGTH,"\w[CURRENT SETTINGS]^n\r[DISPLAY ONLY!]^n"); loaded=DISPLAY_SETTINGS; for(i=0;i<=loaded;i++){ snprintf(Display,MAX_COMMAND_LENGTH,"%s: \w%s",g_VaultNames[i][4],g_VaultData[i]); strcpy(Data[i+1],Display,MAX_COMMAND_LENGTH); strinit(Display); } } case PLAYERSELECT:{ snprintf(Text,MAX_TEXT_LENGTH,"\w[RULES]^n"); loaded=g_lplayercommands; for(i=1;i<=loaded;i++){ strcpy(Data[i],g_PlayerCommands[i],MAX_COMMAND_LENGTH); } } case MAPSELECT:{ snprintf(Text,MAX_TEXT_LENGTH,"\w[MAP SELECT]^n\r%s:^n",g_UserCommand[UserIndex]); loaded=g_lmaps; for(i=1;i<=loaded;i++){ strcpy(Data[i],g_Maps[i],MAX_NAME_LENGTH); } } } /*CREATE MENU*/ for(i=g_UserSelectLoop[UserIndex];i<=loaded;i++){ x++; if(x>ITEMS_PER_PAGE){ if(loaded>g_UserSelectLoop[UserIndex]+5){ strcat(Text,"\w^n8. Next",MAX_TEXT_LENGTH); keys+=128; break; }else{ break; } }else{ if(menuID!=DISPLAY){ snprintf(Text,MAX_TEXT_LENGTH,"%s\y%i. %s^n",Text,x,Data[i]); a+=a; keys=a-1; }else{ snprintf(Text,MAX_TEXT_LENGTH,"%s\y %s^n",Text,Data[i]); } } } if(g_UserSelectLoop[UserIndex]>=5){ strcat(Text,"\w^n9. Back",MAX_TEXT_LENGTH); keys+=256; } strcat(Text,"\r^n^n0. Cancel",MAX_TEXT_LENGTH); keys+=512; g_UserMenu[UserIndex]=menuID; menu(UserName,Text,keys); } 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_DATA_LENGTH); strstripquotes(Data); if(g_UserMessageMode[UserIndex]==1){ handle_data(Data,UserName,UserIndex); return PLUGIN_HANDLED; } if(strcmp(Data,"cwmenu")==0 && access(256)){ main_menu(UserName,UserIndex); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } /*BULDING USERCOMMAND-DATA WITH MESSAGEMODE-DATA*/ handle_data(Data[],UserName[],UserIndex){ if(strlen(g_UserCommandData[UserIndex])==0){ snprintf(g_UserCommandData[UserIndex],MAX_DATA_LENGTH,"%s",Data); }else{ snprintf(g_UserCommandData[UserIndex],MAX_DATA_LENGTH,"%s %s",g_UserCommandData[UserIndex],Data); } messagemode_menu(UserName,UserIndex); } messagemode_menu(UserName[],UserIndex){ new Text[512]; new keys=513; snprintf(Text,MAX_TEXT_LENGTH,"\w[CWC MENU]^n\yCommand (with parameter): \w%s^n\y other parameter:^n\w%s^n^n\yOther parameter must be entered in chat!^n^n\w1. Execute command^n0. Cancel",g_UserCommand[UserIndex],g_UserCommandData[UserIndex]); g_UserMessageMode[UserIndex]=1; g_UserMenu[UserIndex]=EXECUTEMENU; menu(UserName,Text,keys); } public menuselect(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new UserName[MAX_NAME_LENGTH]; new iSelect; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,UserName,MAX_NAME_LENGTH); if(g_UserMenu[UserIndex]!=0){ iSelect=strtonum(Data); /*NEXT*/ if(iSelect==8){ g_UserSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]+ITEMS_PER_PAGE; second_menu(UserName,UserIndex,g_UserMenu[UserIndex]); /*BACK*/ }else if(iSelect==9){ g_UserSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]-ITEMS_PER_PAGE; second_menu(UserName,UserIndex,g_UserMenu[UserIndex]); /*CANCEL*/ }else if(iSelect==10){ if(g_UserMenu[UserIndex]==MAINMENU){ reset_array(UserIndex); }else if(g_UserMenu[UserIndex]>MAINMENU && g_UserMenu[UserIndex]< PLAYERSELECT){ reset_array(UserIndex); main_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]>=PLAYERSELECT && g_UserMenu[UserIndex]<EXECUTEMENU){ g_UserSelectLoop[UserIndex]=1; strinit(g_UserCommandData[UserIndex]); if(g_UserLastMenu[UserIndex]==PLAYERSELECT){ reset_array(UserIndex); main_menu(UserName,UserIndex); return PLUGIN_CONTINUE; }else if(g_UserLastMenu[UserIndex]==MAPSELECT){ g_UserLastMenu[UserIndex]=MAPMENU; } second_menu(UserName,UserIndex,g_UserLastMenu[UserIndex]); }else if(g_UserMenu[UserIndex]==EXECUTEMENU){ g_UserSelectLoop[UserIndex]=g_UserLastSelectLoop[UserIndex]; g_UserMessageMode[UserIndex]=0; strinit(g_UserCommandData[UserIndex]); second_menu(UserName,UserIndex,g_UserLastMenu[UserIndex]); } }else{ if(g_UserMenu[UserIndex]==MAINMENU){ iSelect+=1; switch(iSelect){ case PLAYERMENU:{ g_UserLastMenu[UserIndex]=PLAYERSELECT; strcpy(g_UserCommand[UserIndex],"admin_war_set rules",MAX_COMMAND_LENGTH); second_menu(UserName,UserIndex,PLAYERSELECT); } case MAPMENU:{ second_menu(UserName,UserIndex,MAPMENU); } case SERVERMENU:{ strcpy(g_UserCommand[UserIndex],"admin_war_set",MAX_COMMAND_LENGTH); second_menu(UserName,UserIndex,SERVERMENU); } case VOTEMENU:{ second_menu(UserName,UserIndex,VOTEMENU); } case DISPLAY:{ second_menu(UserName,UserIndex,DISPLAY); } } }else if(g_UserMenu[UserIndex]==MAPMENU){ g_UserLastMenu[UserIndex]=MAPMENU; g_UserLastSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]; if(g_UserSelectLoop[UserIndex]>=5){ strcpy(g_UserCommand[UserIndex],g_MapCommands[g_UserSelectLoop[UserIndex]+iSelect-1],MAX_COMMAND_LENGTH); }else{ strcpy(g_UserCommand[UserIndex],g_MapCommands[iSelect],MAX_COMMAND_LENGTH); } g_UserSelectLoop[UserIndex]=1; second_menu(UserName,UserIndex,MAPSELECT); }else if(g_UserMenu[UserIndex]==SERVERMENU){ g_UserLastMenu[UserIndex]=SERVERMENU; g_UserLastSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]; if(g_UserSelectLoop[UserIndex]>=5){ strcpy(g_UserCommandData[UserIndex],g_ServerCommands[g_UserSelectLoop[UserIndex]+iSelect-1],MAX_COMMAND_LENGTH); }else{ strcpy(g_UserCommandData[UserIndex],g_ServerCommands[iSelect],MAX_COMMAND_LENGTH); } messagemode_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]==VOTEMENU){ g_UserLastMenu[UserIndex]=VOTEMENU; g_UserLastSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]; if(g_UserSelectLoop[UserIndex]>=5){ strcpy(g_UserCommand[UserIndex],g_VoteCommands[g_UserSelectLoop[UserIndex]+iSelect-1],MAX_COMMAND_LENGTH); }else{ strcpy(g_UserCommand[UserIndex],g_VoteCommands[iSelect],MAX_COMMAND_LENGTH); } strbreak(g_UserCommand[UserIndex],g_UserCommand[UserIndex],g_UserCommandData[UserIndex],MAX_COMMAND_LENGTH); messagemode_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]==DISPLAY){ reset_array(UserIndex); main_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]==PLAYERSELECT){ g_UserLastMenu[UserIndex]=PLAYERSELECT; g_UserLastSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]; if(g_UserSelectLoop[UserIndex]>=5){ strcpy(g_UserCommandData[UserIndex],g_PlayerCommands[g_UserSelectLoop[UserIndex]+iSelect-1],MAX_COMMAND_LENGTH); }else{ strcpy(g_UserCommandData[UserIndex],g_PlayerCommands[iSelect],MAX_COMMAND_LENGTH); } messagemode_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]==MAPSELECT){ g_UserLastMenu[UserIndex]=MAPSELECT; g_UserLastSelectLoop[UserIndex]=g_UserSelectLoop[UserIndex]; if(g_UserSelectLoop[UserIndex]>=5){ strcpy(g_UserCommandData[UserIndex],g_Maps[g_UserSelectLoop[UserIndex]+iSelect-1],MAX_NAME_LENGTH); }else{ strcpy(g_UserCommandData[UserIndex],g_Maps[iSelect],MAX_NAME_LENGTH); } messagemode_menu(UserName,UserIndex); }else if(g_UserMenu[UserIndex]==EXECUTEMENU){ if(iSelect==1){ exec_command(UserName,UserIndex); } } } } return PLUGIN_CONTINUE; } exec_command(UserName[],UserIndex){ new Text[MAX_TEXT_LENGTH]; new Command[MAX_COMMAND_LENGTH]; new Param[MAX_DATA_LENGTH]; strsep(g_UserCommand[UserIndex]," ",Command,MAX_COMMAND_LENGTH,Param,MAX_DATA_LENGTH); if(strlen(Param)!=0 && strlen(g_UserCommandData[UserIndex])!=0){ snprintf(Param,MAX_DATA_LENGTH,"%s %s",Param,g_UserCommandData[UserIndex]); }else if(strlen(Param)==0 && strlen(g_UserCommandData[UserIndex])!=0){ snprintf(Param,MAX_DATA_LENGTH,"%s",g_UserCommandData[UserIndex]); } plugin_exec(Command,Param); snprintf(Text,MAX_TEXT_LENGTH,"[CWC-MENU] %s: %s %s executed!",UserName,Command,Param); messageex(UserName,Text,print_chat); log(Text); reset_array(UserIndex); main_menu(UserName,UserIndex); } reset_array(UserIndex){ g_UserMenu[UserIndex]=0; g_UserLastMenu[UserIndex]=0; g_UserLastSelectLoop[UserIndex]=1; g_UserMessageMode[UserIndex]=0; g_UserSelectLoop[UserIndex]=1; strinit(g_UserCommand[UserIndex]); strinit(g_UserCommandData[UserIndex]); }