/* MAP-NOMINATION (LogD) (c)by Sir Drink a lot 17.04.03 Beschreibung: -------------------------- Startet eine 60* sekündige Nominierungsphase, in der die Spieler Maps (auch mehrere) im Chat vorschlagen dürfen. Es sind alle Maps erlaubt, ausser - wenn es eine der letzten vier Maps* ist, die zuvor gelaufen sind. - wenn es die Map ist, die sowieso nach Mapcycle dran wäre. - wenn ein Extend bzw. gleicher Mapname nach 'admin_vote_maxextend' nicht mehr erlaubt ist - wenn ein anderer Spieler die Map schon vorgeschlagen hat, wird man darauf hingewiesen. Nach den 60* Sekunden werden die Vorschläge ausgewertet und 30* Sekunden als Vote bereitgestellt. Hat man was falsches gevotet, kann man mit der Chateingabe "votemap" seinen Vote ansehen und ggf. korrigieren. *) die Zeiten bzw. Anzahl der verbotenen Maps können geändert werden. Befehle: -------------------------- admin_vote_nominate: Manueller start einer Nominierungsphase mit anschließendem Vote. admin_vote_restrict <[1]>: ohne 1: Listet die Maps auf, die nicht nominiert werden dürfen. mit 1: Löscht die restriktierten Maps, so dass wieder alle Maps gevotet werden dürfen. admin_vote_stop: unterbricht die Nominierungsphase bzw. Vote und es kommt zu keiner Auswertung. Notwendige Einstellungen: -------------------------- ab v0.83: - automatischer Start der Nominierungsphase - LogD muss installiert sein. - "log on" muss aktiviert sein, um logs zu empfangen. ab v0.81: - Man kann in der *.sma die Nominierungszeit, die Warnzeit und die anschließende Votezeit definieren - Sounds können in der vault.ini hinterlegt werden. VFI_VOTEWARN pfad/datei.wav -> Dieser Sound wird alle 15 s während der Nominierungsphase abgespielt. VFI_VOTENOW pfad/datei.wav -> Dieser Sounds wird zu Beginn der Nominierungsphase sowie zum Votestart abgespielt. VFI_VOTEPASSED pfad/datei.wav -> Dieser Sound wird abgespielt, wenn der Vote erfolgreich war. VFI_VOTEFAILED pfad/datei.wav -> Dieser Sound wird abgespielt, wenn der Vote nicht erfolgreich war. Damit die Clients selber entscheiden können, ob sie diese Sounds hören wollen, wird das Plugin sdal_allowsounds benötigt. Damit kann der Client dann durch die Chateingaben /stop bzw. /play das Abspielen der Sounds bei sich abstellen bzw. auch wieder aktivieren. Ohne das Plugin, werden allen Clients die Sounds abgespielt, ausser sie haben bei sich manuell in der config.cfg setinfo "am_sound" "0" eingetragen. - allow_client_exec muss auf 1 stehen, damit die Sounds abgespielt werden können. ab v.08: - in der adminmod.cfg muss amv_enable_beta menu1 aktiviert sein. - die vault.ini muss vorhanden und in der adminmod.cfg definiert sein. Changelog: -------------------------- v.083: - eigenes Zeitmanagement unter Verwendung von LogD v.082: - how many maps are restricted can be set by MAX_MAP_RESTRICT now. - changed menu option 0 from "0. keine davon" to "0. nextmap: xyz" v.081: - added Sounds - removed useless timerfunctions - admin_vote_stop should work correctly now. - nominate time, warn time and vote time can be changed easily in source v.08: - Initial Release */ #include <core> #include <console> #include <string> #include <admin> #include <adminlib> #define ACCESS_CONSOLE 131072 new AM_VERSION_STRING[] = "2.50.58_v083"; /************************************************************/ /* KANN ENTSPRECHEND EDITIERT UND DANN NEU KOMPILIERT WERDEN*/ /************************************************************/ /*Map Restrict*/ #define MAX_MAP_RESTRICT 4 /*Nominate settings*/ new g_setnominatetime = 60; new g_setnominatewarntime = 15; new g_setvotetime = 30; /************************************************************/ /*Vote*/ new g_LastMaps[MAX_MAP_RESTRICT][MAX_NAME_LENGTH]; new g_NominatedMaps[9][MAX_NAME_LENGTH]; new g_suggestions; new g_votestart; new g_nominatetime; new g_vote_canceled; /*Sounds*/ new g_VoteWarn[MAX_TEXT_LENGTH]; new g_VoteNow[MAX_TEXT_LENGTH]; new g_VoteFailed[MAX_TEXT_LENGTH]; new g_VotePassed[MAX_TEXT_LENGTH]; /*Menu*/ new g_UserVoteMenu[MAX_PLAYERS]; new g_UserSelect[MAX_PLAYERS]; /*Map-Settings*/ new g_CurrentMap[MAX_NAME_LENGTH]; new g_NextMap[MAX_NAME_LENGTH]; new g_curextend; new g_maxextend; new g_origtimelimit; new g_newtimelimit; /*Time-Settings*/ new g_timelimit; new g_checktime; new g_TimerIndex; new g_TimerWarnIndex; new g_TimerCalculateIndex; public plugin_init() { plugin_registerinfo("Map-Nomination-Plugin","Mapnominierung im Chat mit anschliessendem Vote",AM_VERSION_STRING); plugin_registercmd("admin_vote_nominate","start_nominate",ACCESS_VOTE_MAP,"admin_vote_nominate: starts map-nomination and vote"); plugin_registercmd("admin_vote_restrict","del_maprestrict",ACCESS_VOTE_MAP,"admin_vote_restrict <[1]>: displays restricted maps, 1=allows to nominate every map"); plugin_registercmd("admin_vote_stop","stop_vote",ACCESS_VOTE_MAP,"admin_vote_stop: stops map-nomination and vote"); plugin_registercmd("say","HandleSay",ACCESS_ALL,"vote mapname: make suggestions for mapchange"); 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); plugin_registercmd("mn_world","mn_world",ACCESS_CONSOLE); exec( "logd_reg 62 admin_command mn_world" ); /*Map-Settings*/ currentmap(g_CurrentMap,MAX_NAME_LENGTH); nextmap(g_NextMap,MAX_NAME_LENGTH); g_maxextend= getvar("admin_vote_maxextend"); g_origtimelimit= getvar("mp_timelimit"); g_newtimelimit = g_origtimelimit; g_checktime= systemtime(); new i; new MapRestrict[MAX_NAME_LENGTH]; strinit(MapRestrict); /*Alte Maprestriktion laden*/ for(i=1;i<=MAX_MAP_RESTRICT;i++){ snprintf(MapRestrict,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i); get_vaultdata(MapRestrict,g_LastMaps[i-1],MAX_NAME_LENGTH); strinit(MapRestrict); } /*Neue Maprestriktion für die nächsten Map speichern*/ for(i=1;i<MAX_MAP_RESTRICT;i++){ snprintf(MapRestrict,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i); set_vaultdata(MapRestrict,g_LastMaps[i]); strinit(MapRestrict); } snprintf(MapRestrict,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i); set_vaultdata(MapRestrict,g_CurrentMap); /*Sounds laden*/ get_vaultdata( "VFI_VOTEWARN", g_VoteWarn, MAX_TEXT_LENGTH ); get_vaultdata( "VFI_VOTENOW", g_VoteNow, MAX_TEXT_LENGTH ); get_vaultdata( "VFI_VOTEPASSED", g_VotePassed, MAX_TEXT_LENGTH ); get_vaultdata( "VFI_VOTEFAILED", g_VoteFailed, MAX_TEXT_LENGTH ); return PLUGIN_CONTINUE; } /*AUTOMATISCHES MAPNOMINATE bei g_setnominatetime+g_setvotetime*/ public mn_world(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_NAME_LENGTH); if(Data[0]=='G' || Data[8]=='R'){ g_checktime=systemtime(); } time_change(); return PLUGIN_CONTINUE; } time_change(){ new settimer; if (getvar("mp_timelimit")*60!= g_timelimit){ g_timelimit=getvar("mp_timelimit")*60; if(g_TimerWarnIndex!=0){ kill_timer(g_TimerWarnIndex); g_nominatetime=1; g_TimerWarnIndex=0; } if(g_TimerCalculateIndex!=0){ kill_timer(g_TimerCalculateIndex); g_votestart=0; g_TimerCalculateIndex=0; } if(g_TimerIndex!=0){ kill_timer(g_TimerIndex); g_TimerIndex=0; } settimer= g_timelimit-(systemtime()-g_checktime)-(g_setnominatetime + g_setvotetime); g_vote_canceled=0; g_TimerIndex=set_timer("exec_vote",settimer,0); } } public exec_vote(Timer,Repeat,HLName,HLParam) { g_TimerIndex=0; plugin_exec("admin_vote_nominate",""); return PLUGIN_CONTINUE; } allowsound(User[]){ new Key[]="am_sound"; new Info[MAX_NUMBER_LENGTH]; new iInfo; new Authid[MAX_AUTHID_LENGTH]; get_userAuthID(User,Authid,MAX_AUTHID_LENGTH); if(strcmp(Authid,"BOT")!=0){ get_userinfo(User,Key,Info,MAX_NUMBER_LENGTH); iInfo=strtonum(Info); if(strlen(Info)==0 || iInfo > 0){/*damit wird automatisch immer der Sound auf 1 gesetzt,wenn kein setinfo vorhanden, bis 'stop' eingegeben wird*/ return 1; } } return 0; } sound_all(Sound[]){ new Name[MAX_NAME_LENGTH]; new maxplayers = maxplayercount(); new i; for(i=1;i<=maxplayers; i++ ){ if( playerinfo(i, Name, MAX_NAME_LENGTH)){ if(allowsound(Name)==1){ playsound(Name,Sound); } } } } public stop_vote(HLCommand,HLData,HLUserName,UserIndex){ g_vote_canceled=1; selfmessage("[VFI-NOMINATE]: Manominierung und Vote abgebrochen!"); return PLUGIN_HANDLED; } public del_maprestrict(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new Text[MAX_TEXT_LENGTH]; new i; convert_string(HLData,Data,MAX_DATA_LENGTH); if(Data[0]=='1'){ for(i=0;i<=MAX_MAP_RESTRICT;i++){ strinit(g_LastMaps[i]); } selfmessage("[VFI-NOMINATE]: Maprestriktionen fuer diese Map aufgehoben!"); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Ausgeschlossene Maps sind:"); selfmessage(Text); for(i=0;i<MAX_MAP_RESTRICT;i++){ snprintf(Text,MAX_TEXT_LENGTH,"* %i. %s",i,g_LastMaps[i]); selfmessage(Text); strinit(Text); } } return PLUGIN_HANDLED; } public start_nominate(HLCommand,HLData,HLUserName,UserIndex){ new Text[MAX_TEXT_LENGTH]; if(!g_nominatetime && !g_votestart){ sound_all(g_VoteNow); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]:^nGebt Eure Mapvorschlaege^nim Chat ab!"); centersay(Text,12,255,255,255); g_nominatetime=g_setnominatetime; snprintf(Text,MAX_TEXT_LENGTH,"[VFI-VOTEMAPS]: Bitte Mapvorschlaege im Chat abgeben (z.B. ^"vote de_dust^"). Ihr habt noch %i Sekunden Zeit!",g_nominatetime); say(Text); g_vote_canceled=0; g_TimerWarnIndex=set_timer("nominate_warning",15,0); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Eine Map-Nominierung bzw. Vote ist bereits im Gange!"); selfmessage(Text); } return PLUGIN_HANDLED; } public nominate_warning(Timer,Repeat,HLName,HLParam) { g_TimerWarnIndex=0; new Text[MAX_TEXT_LENGTH]; if(!g_vote_canceled){ g_nominatetime-=g_setnominatewarntime; if(g_nominatetime>0){ sound_all(g_VoteWarn); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Bitte Mapvorschlaege im Chat abgeben (z.B. ^"vote de_dust^"). Ihr habt noch %i Sekunden Zeit!",g_nominatetime); say(Text); g_TimerWarnIndex=set_timer("nominate_warning",g_setnominatewarntime,0); }else{ if(g_suggestions!=0){ g_votestart=1; sound_all(g_VoteNow); show_vote("all",0); g_TimerCalculateIndex=set_timer("vote_calculate",g_setvotetime,0); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]:^nGebt Euren Vote ab!"); centersay(Text,12,255,255,255); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Bitte Vote abgeben! (im Chat: ^"votemap^"). Ihr habt %i Sekunden Zeit!",g_setvotetime); say(Text); }else{ sound_all(g_VoteFailed); say("[VFI-NOMINATE]: Es wurden keine Mapvorschlaege gemacht!"); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Naechste Map ist %s",g_NextMap); say(Text); reset_nominations(); } } }else{ sound_all(g_VoteFailed); say("[VFI-NOMINATE]: Vote wurde abgebrochen!"); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Naechste Map ist %s",g_NextMap); say(Text); reset_nominations(); } } public vote_calculate(Timer,Repeat,HLName,HLParam) { g_TimerCalculateIndex=0; calculate(); } calculate(){ new Text[MAX_TEXT_LENGTH]; snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]:^nVote abgeschlossen!"); centersay(Text,12,255,255,255); if(!g_vote_canceled){ new UserName[MAX_NAME_LENGTH]; new MapVotes[10]; new maxplayers=maxplayercount(); new i; new winmap; new winvotes; new votes; new votecount; /*Calculating votes*/ for(i=1;i<=maxplayers;i++){ if(playerinfo(i,UserName,MAX_NAME_LENGTH)){ if(g_UserSelect[i]!=0){ MapVotes[g_UserSelect[i]-1]+=1; votecount++; } } } /*Find maxvotes and winning map*/ for(i=0;i<=g_suggestions;i++){ votes=max(MapVotes[i],winvotes); if(votes>winvotes){ winvotes=MapVotes[i]; winmap=i; } } sound_all(g_VotePassed); if(winvotes!=0 && MapVotes[9]<winvotes){ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: ^"%s^" hat mit %i von %i Stimmen gewonnen!",g_NominatedMaps[winmap],winvotes,votecount); say(Text); if(strcmp(g_NominatedMaps[winmap],g_CurrentMap)==0){ g_curextend++; g_newtimelimit+=g_origtimelimit; snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: ^"%s^" wird um %i Minuten verlaengert!",g_NominatedMaps[winmap],g_origtimelimit); say(Text); snprintf(Text,MAX_TEXT_LENGTH, "mp_timelimit %i", g_newtimelimit); exec(Text); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Mapwechsel zu ^"%s^"!",g_NominatedMaps[winmap]); say(Text); changelevel(g_NominatedMaps[winmap],3); } }else{ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Die Mehrheit will weiter nach Mapcycle spielen!"); say(Text); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Naechste Map ist %s",g_NextMap); say(Text); } }else{ sound_all(g_VoteFailed); say("[VFI-NOMINATE]: Vote wurde abgebrochen!"); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Naechste Map ist %s",g_NextMap); say(Text); } reset_nominations(); } show_vote(User[],UserIndex) { new VoteDisplay[512]; new UserName[MAX_NAME_LENGTH]; new MapName[MAX_NAME_LENGTH]; new Text[512]; new i; new x; new keys=1; new maxplayers=maxplayercount(); for(i=0;i<=g_suggestions;i++){ if(strlen(g_NominatedMaps[i])!=0){ x++; if(x!=1){ keys+=keys; } if(strcasecmp(g_CurrentMap,g_NominatedMaps[i])==0){ strcpy(MapName,"EXTEND",MAX_NAME_LENGTH); }else{ strcpy(MapName,g_NominatedMaps[i],MAX_NAME_LENGTH); } snprintf(Text,512,"%s^n%i.%s",Text,x,MapName); if(x==8){ keys+=keys-1; break; } }else{ keys+=keys-1; break; } } if(x!=0){ snprintf(VoteDisplay,512,"\yVOTE-MENU:^n\w%s^n^n\y0. nextmap: %s",Text,g_NextMap); keys=keys+512; if(UserIndex!=0){ g_UserVoteMenu[UserIndex]=1; menu(User,VoteDisplay,keys); }else{ for(i=1;i<=maxplayers;i++){ if(playerinfo(i,UserName,MAX_NAME_LENGTH)){ g_UserVoteMenu[i]=1; menu(UserName,VoteDisplay,keys); } } } }else{ centersay("[VFI-NOMINATE]:^nEs wurden keine^nMapvorschlaege gemacht!",12,255,255,255); } say("[VFI-NOMINATE]: Mit der Chateingabe ^"votemap^" kann man seinen Vote korrigieren!"); } show_votechange(User[],UserIndex) { new Text[512]; new UserVote[MAX_NAME_LENGTH]; if(g_UserSelect[UserIndex]==0){ snprintf(UserVote,MAX_NAME_LENGTH,"keine Map"); }else if(g_UserSelect[UserIndex]==10){ snprintf(UserVote,MAX_NAME_LENGTH,"nextmap: %s",g_NextMap); }else{ snprintf(UserVote,MAX_NAME_LENGTH,"%s",g_NominatedMaps[g_UserSelect[UserIndex]-1]); } snprintf(Text,MAX_TEXT_LENGTH,"\y[VFI-NOMINATE]:^n^n\wDu hast zur Zeit fuer^n\y%s^n\wabgestimmt. Willst Du den:^n^n1. Vote aendern^n0. Nein. Ist OK",UserVote); g_UserVoteMenu[UserIndex]=2; menu(User,Text,513); } public menuselect(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new Text[MAX_TEXT_LENGTH]; new User[MAX_NAME_LENGTH]; new iSelect; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); if(g_UserVoteMenu[UserIndex]!=0){ iSelect=strtonum(Data); if(g_UserVoteMenu[UserIndex]==1){ if (iSelect==10){ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: %s hat fuer die naechste Map %s abgestimmt!",User,g_NextMap); }else{ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: %s hat fuer %s abgestimmt!",User,g_NominatedMaps[iSelect-1]); } g_UserSelect[UserIndex]=iSelect; say(Text); return PLUGIN_HANDLED; }else if(g_UserVoteMenu[UserIndex]==2){ if(iSelect==1){ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: %s aendert vielleicht sein Meinung!",User); say(Text); show_vote(User,UserIndex); return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } } 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_UserVoteMenu[UserIndex]!=0){ reset_array(UserIndex); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Menue wurde durch ein anderes Menue beendet! Benutze ^"votemap^" im Chat, um es nochmal aufzurufen!"); messageex(UserName,Text,print_chat); } return PLUGIN_CONTINUE; } reset_array(UserIndex){ g_UserVoteMenu[UserIndex]=0; } reset_nominations(){ new i; new maxplayers=maxplayercount(); for(i=0;i<=g_suggestions;i++){ strinit(g_NominatedMaps[i]); } for(i=1;i<=maxplayers;i++){ g_UserVoteMenu[i]=0; g_UserSelect[i]=0; } g_suggestions=0; g_nominatetime=0; g_vote_canceled=0; g_votestart=0; } public HandleSay(HLCommand,HLData,HLUserName,UserIndex) { new Data[MAX_DATA_LENGTH]; new Text[MAX_TEXT_LENGTH]; new UserName[MAX_NAME_LENGTH]; new Map[MAX_NAME_LENGTH]; new i; new x; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,UserName,MAX_NAME_LENGTH); strstripquotes(Data); if(strcmp(Data,"votemap")==0){ if(g_votestart){ show_votechange(UserName,UserIndex); }else{ messageex(UserName,"[VFI-NOMINATE]: Vote hat noch nicht stattgefunden oder ist bereits abgeschlossen!",print_chat); return PLUGIN_HANDLED; } }else if(strstr(Data,"vote")==0){ if(g_votestart==0){ strbreak(Data,Data,Map,MAX_NAME_LENGTH); if(g_suggestions<8){ if(strcmp(Map,"extend")==0){ strcpy(Map,g_CurrentMap,MAX_NAME_LENGTH); } if(valid_map(Map)){ /*Nächste Map nach Mapcycle von der Nominierung ausschliessen*/ if(strcasecmp(g_NextMap,Map)==0){ snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Die naechste Map ist %s und braucht daher nicht extra nominiert zu werden!",g_NextMap); say(Text); return PLUGIN_HANDLED; } /*Überprüfung, ob die Map bereits vorgeschlagen wurde*/ for(i=0;i<=g_suggestions;i++){ if(strcasecmp(Map,g_NominatedMaps[i])==0){ messageex(UserName,"[VFI-NOMINATE]: Fuer die Map wurde bereits eine Nominierung abgegeben!",print_chat); return PLUGIN_HANDLED; } } /*Überprüfung , ob ein EXTEND zulässig ist*/ if(strcasecmp(Map,g_CurrentMap)==0){ if(g_curextend<g_maxextend){ strcpy(g_NominatedMaps[g_suggestions],Map,MAX_NAME_LENGTH); g_suggestions++; snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: %s hat eine Verlaengerung der Map vorgeschlagen!",UserName); say(Text); return PLUGIN_HANDLED; }else{ messageex(UserName,"[VFI-NOMINATE]: Map kann nicht nochmal verlaengert werden!",print_chat); return PLUGIN_HANDLED; } }else{ /*Überprüfung, ob die Map nicht schon zuvor gelaufen ist*/ for(i=0;i<MAX_MAP_RESTRICT;i++){ if(strcasecmp(g_LastMaps[i],Map)==0){ x=1; break; } } if(!x){ strcpy(g_NominatedMaps[g_suggestions],Map,MAX_NAME_LENGTH); g_suggestions++; snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: %s hat als Mapwechsel %s vorgeschlagen!",UserName,Map); say(Text); return PLUGIN_HANDLED; }else{ messageex(UserName,"[VFI-NOMINATE]: Map lief bereits und kann vorerst nicht nochmal vorgeschlagen werden!",print_chat); snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Ausgeschlossene Maps sind:"); for(i=0;i<MAX_MAP_RESTRICT;i++){ strcat(Text,g_LastMaps[i],MAX_TEXT_LENGTH); strcat(Text,", ",MAX_TEXT_LENGTH); } say(Text); return PLUGIN_HANDLED; } } }else{ messageex(UserName,"[VFI-NOMINATE]: Die Map ist leider nicht gueltig!",print_chat); return PLUGIN_HANDLED; } }else{ messageex(UserName,"[VFI-NOMINATE]: Maximale Anzahl von 8 Mapvorschlaegen wurde erreicht!",print_chat); return PLUGIN_HANDLED; } }else{ messageex(UserName,"[VFI-NOMINATE]: Ein Vote ist bereits im Gange! Es koennen keine Vorschlaege mehr angenommen werden!",print_chat); return PLUGIN_HANDLED; } } return PLUGIN_CONTINUE; }