Ein neues Thema erstellen  Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1 2 Nächste
Autor Nachricht
 Betreff des Beitrags: plugin_sdal_mapnominate
BeitragVerfasst: 18.12.2003, 01:05 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Hi!

Das Plugin macht folgendes:

mit dem Befehl admin_vote_nominate wird eine 60 s andauernde Nominierungsphase aufgerufen. Damit können alle Spieler im Chat soviele Mapvorschläge machen, wie sie wollen...

Ausser:
- wenn ein anderer diese Map schon vorgeschlagen hat(es wird natürlich darauf hingewiesen)
- Wenn es eine Map ist, die zuvor gelaufen ist. (Die letzten 4 gelaufen Maps können nicht mehr nominiert werden)
- Wenn die nächste Map normal per Mapcycle dran ist
- Wenn ein Extend bzw. selber Mapname wie die gerade gespielte Map, laut 'admin_vote_maxextend' in der adminmod.cfg nicht mehr erlaubt ist.

Nach den 60 s werden die Vorschläge ausgewertet und 30 s per Vote angeboten. Hat man gevotet, so kann man mit "votemap" im chat sich seinen Vote nochmal ansehen und ggf. ändern. (Besonders gut, wenn der Vote genau dann auftaucht, wenn man gerade einkauft und ausversehen irgend etwas votet)
Neben den vorgeschlagenen Maps steht einem auch die Option "0. Keine davon" zur Verfügung...soll heissen, dass einem keine der Maps gefällt und man lieber nach Mapcycle weiter spielen möchte.

Es gewinnt die Map, die eine einfache Mehrheit hat und nicht mehr Spieler nach Mapcycle spielen wollen.

Nun, ich muss noch was daran basteln. Aber das Plugin hat schon mal Beta-Status :)

Bugreport wie immer hier.

P.S.: Zur Automation des Befehlsaufrufes nutze ich z.Z. meinen Time-Manager, damit der Befehl 'admin_vote_nominate' 93 s vor Mapchange automatisch aufgerufen wird... (3 s als Lag-Kompensation). Wenn man die Maprestriktion der letzten 4 Maps kurzfristig ausschalten will, steht noch der Befehl 'admin_vote_restrict 1' zur Verfügung. Der Befehl 'admin_vote_stop', um die Nominierung und Vote zu stoppen, ist leider noch etwas buglastig...


Dateianhänge:
Dateikommentar: plugin_sdal_mapnominate.sma
plugin_sdal_mapnominate.sma [13.32 KiB]
183-mal heruntergeladen

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion
Nach oben
   
 Betreff des Beitrags: gut!
BeitragVerfasst: 18.12.2003, 22:57 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
sehr gut ..getestet ok..

..würde gerne auch die sounds dabei haben wie beim alten plugin -->VFI2 mit sounds!


siehe..vault.ini
VFI_VOTEWARN sound/ambience/doorbell.wav
VFI_VOTENOW sound/misc/vote_now.wav
VFI_VOTEPASSED sound/misc/vote_passed.wav
VFI_VOTEFAILED sound/misc/vote_failed.wav


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 18.12.2003, 23:14 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
ok...das wird dann von mir der nächste Schritt sein, die Sounds wieder hinzuzufügen...:)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19.12.2003, 00:13 
Benutzeravatar

Registriert: 31.05.2003, 09:16
Beiträge: 790
blatt_map unterbricht den vote bis nach der kaufphase...
kannst das net auch? dann kannst dir votemap sparen...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 19.12.2003, 00:48 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
hm..benutzt blatt_map LogD? Ohne LogD wüsste ich gerade nicht, wie es geht.

Aber ich finde gerade die votemap Funktion toll ;) Damit kann man ja nachträglich seinen Vote verändern.

hier erst mal eine neue Version mit Sounds...
Die Sounds werden wie im VFI2 in der vault.ini angelegt.


Dateianhänge:
Dateikommentar: plugin_sdal_mapnominatev0.81
plugin_sdal_mapnominate.zip [4.91 KiB]
122-mal heruntergeladen

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion
Nach oben
   
 Betreff des Beitrags: mehr maps verbieten!
BeitragVerfasst: 21.12.2003, 13:28 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
supi... aber ne frage? ..unser Mapcycle ist relativ gross ca. 15 maps.. und da laufen dann doch per vote fast immer dir 5 gleichen maps.. wie könnte man mehr als nur die letzten 4 maps verbieten? ..also evtl. 5 und mehr? ..danke


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 21.12.2003, 17:11 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
guter Einwand... :)

Ich werde mir mal was einfallen lassen, damit man dies flexibel einstellen kann.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags: maps verbieten!
BeitragVerfasst: 22.12.2003, 21:23 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
hi ..ich habe versucht einfach die verbotenen 4 letzten maps auf 5 bzw. 6 zu erweitern leider bekomme ich beim kompilieren immer fehler meldung ..kanste mir da weiter helfen?

code:
Code:
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>

new AM_VERSION_STRING[] = "2.50.58_v081";

/************************************************************/
/* KANN ENTSPRECHEND EDITIERT UND DANN NEU KOMPILIERT WERDEN*/
/************************************************************/
/*Nominate settings*/
new g_setnominatetime = 60;
new g_setnominatewarntime = 15;
new g_setvotetime = 30;
/************************************************************/

/*Vote*/
new g_LastMaps[5][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;

public plugin_init() {
	plugin_registerinfo("Map-Nomination-Plugin","Mapnominierung im Chat mit anschließendem 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);
	
	/*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;
	
	/*Alte Maprestriktion laden*/
	get_vaultdata("VFI_NOMINATE_LASTMAP1",g_LastMaps[0],MAX_NAME_LENGTH);
	get_vaultdata("VFI_NOMINATE_LASTMAP2",g_LastMaps[1],MAX_NAME_LENGTH);
                get_vaultdata("VFI_NOMINATE_LASTMAP3",g_LastMaps[2],MAX_NAME_LENGTH);
	get_vaultdata("VFI_NOMINATE_LASTMAP4",g_LastMaps[3],MAX_NAME_LENGTH);
                get_vaultdata("VFI_NOMINATE_LASTMAP5",g_LastMaps[4],MAX_NAME_LENGTH);
	
	
	/*Neue Maprestriktion für die nächsten Map speichern*/
	set_vaultdata("VFI_NOMINATE_LASTMAP1",g_LastMaps[1]);
	set_vaultdata("VFI_NOMINATE_LASTMAP2",g_LastMaps[2]);
	set_vaultdata("VFI_NOMINATE_LASTMAP3",g_LastMaps[3]);
                set_vaultdata("VFI_NOMINATE_LASTMAP4",g_LastMaps[4]);
	set_vaultdata("VFI_NOMINATE_LASTMAP5",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;
}

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<=5;i++){
			strinit(g_LastMaps[i]);
			selfmessage("[VFI-NOMINATE]: Maprestriktion fuer diese Map aufgehoben!");
		}
	}else{
		snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Ausgeschlossene Maps sind:^n%s  %s  %s  %s  %s",g_LastMaps[0],g_LastMaps[1],g_LastMaps[2],g_LastMaps[3],g_LastMaps[4]);
		selfmessage(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;
		set_timer("vote_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 vote_warning(Timer,Repeat,HLName,HLParam) {
	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]: Mapvorschlaege im Chat abgeben (z.B. ^"vote de_dust^"). Ihr habt noch %i Sekunden Zeit!",g_nominatetime);
			say(Text);
			set_timer("vote_warning",g_setnominatewarntime,0);
		}else{
			g_votestart=1;
			sound_all(g_VoteNow);
			show_vote("all",0);
			set_timer("vote_calculate",g_setvotetime,0);
			snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]:^nGebt Euren Vote ab!");
			centersay(Text,12,255,255,255);
		}
	}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) {
	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;
			}
		}
		if(winvotes!=0 && MapVotes[9]<winvotes){
			sound_all(g_VotePassed);
			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{
			sound_all(g_VoteFailed);
			snprintf(Text,MAX_TEXT_LENGTH,"[VFI-NOMINATE]: Leider hat keine Map eine Mehrheit erzielt! Vote fehlgeschlagen!");
			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",Text);
		strcat(VoteDisplay,"^n^n\y0. keine davon",512);
		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,"Enthaltung");
	}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 sich enthalten!",User);
			}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]: Naechste Map ist %s und braucht daher nicht 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<=5;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: %s  %s  %s  %s  %s",g_LastMaps[0],g_LastMaps[1],g_LastMaps[2],g_LastMaps[3],g_LastMaps[4]);
							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;


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 22.12.2003, 21:35 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Da fehlt die letzte geschweifte Klammer am Ende.
Oder nur vergessen zu kopieren?

Was sagt denn der Compiler?

Sieht ja schon mal nicht schlecht aus eigentlich.

Wenn man jetzt einfach nur die 5 vorher mit einem #define definiert, kann man es flexibler gestalten.

also z.B. so:

#define MAX_LASTMAPS 5

dann sähen folgende Sachen so aus:

new g_LastMaps[MAX_LASTMAPS ][MAX_NAME_LENGTH];

im plugin_init() käme dann sowas zusätzlich:
Code:
[...]
new i;
   new VaultEntry[MAX_NAME_LENGTH];
   /*Alte Maprestriktion laden*/ 
   for(i=0;i<MAX_LASTMAPS;i++){
   	snprintf(VaultEntry,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i);
   	get_vaultdata(VaultEntry,g_LastMaps[i],MAX_NAME_LENGTH);
   }
   /*Neue Maprestriktion für die nächsten Map speichern*/ 
    for(i=1;i<MAX_LASTMAPS;i++){
   	snprintf(VaultEntry,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i);
   	set_vaultdata(VaultEntry,g_LastMaps[i],MAX_NAME_LENGTH);
   }
   i++;
   snprintf(VaultEntry,MAX_NAME_LENGTH,"VFI_NOMINATE_LASTMAP%i",i);
   set_vaultdata(VaultEntry,g_CurrentMap);
[...]
in der Funktion del_maprestict:
Code:
[...]
for(i=0;i<=MAX_LASTMAPS;i++){ 
         strinit(g_LastMaps[i]); 
      }
selfmessage("[VFI-NOMINATE]: Maprestriktion fuer alle Maps aufgehoben"); 
[...]
 
In der Funktion HandleSay:
Code:
[...]
/*Überprüfung, ob die Map nicht schon zuvor gelaufen ist*/ 
                  for(i=0;i<MAX_LASTMAPS;i++){ 
                     if(strcasecmp(g_LastMaps[i],Map)==0){ 
                        x=1; 
                        break; 
                     } 
                  } 
[...]
Leider stimmen hier jetzt nicht immer die Code-Einrückung, was zur Warnmeldung "Loose Identation" führt. Der Compiler gibt ja die Zeilennummer an. Einfach dort mal nachsehen und die Zeile (oder die davor) entsprechend zurecht rücken :)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags: maps verbieten!
BeitragVerfasst: 22.12.2003, 22:41 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
ola.. das ist mir ein wenig zu hoch ;) .. bin kein experte.. habs denoch probiert aber da kommen zu viele fehler bei mir raus dabei.. ohhh yehhh ,,da muss doch ein profi ran :shock:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.12.2003, 05:11 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
och komm...

wir brauchen unbedingt Nachwuchs :lol:

Ok...wennn ich Zeit habe, dann mache ich es mal.

*morgen!*

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.12.2003, 13:07 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
Nachwuchs ;)..hmm da bin wohl ein wenig alt dazu ,,, aber ich gib mein bestes :twisted: also es läuft nach der alten formel.. aber keine ahnung obs daran nun liegt mein mapcycle zeigt nexmap aber changet immer zur der übernächsten map? :roll:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 23.12.2003, 14:37 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
Zitat:
Nachwuchs ..hmm da bin wohl ein wenig alt dazu
Zu alt? Blacky und ich befinden uns ja langsam auch am Ende unseres 1/3 des Lebensabschnitts. (hm..wenn man davon ausgeht, dass wir 90 Jahre werden :) )

Das nextmap Problem kann eigentlich nicht mehr mit AM zusammenhängen bzw. mit dem Plugin. AM merkt sich ja immer, welche Map als nächstes offiziell nach mapcycle drankommen wird bzw. kehrt auch nach den gevoteten Maps wieder dorthin zurück. Deswegen habe ich auch den Vote zur nextmap verboten, da es sonst passieren kann, dass eine Map 2 mal nacheinander geladen wird.

Beim Server Start am Besten immer mit der letzten Map im mapcycle starten.

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags: maps voting
BeitragVerfasst: 24.12.2003, 19:24 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
.. hier noch paar erfahrungen..

1. die map die als nächste kommen würde kaman ja nicht als vote vorschlagen so verschiebt sich diese immer weiter nach hinten wenn immer eine andere map gevotet wird

2. wird eine map gevotet die im mapcycle als übernächste map drinn ist so läuft diese ja wieder also zb. 1.dust(vote) nächste 2. aztec (mapcycle) , 3.dust (mapcycle)

Vorschlag:

1. auch die nächste map im mapcycle für voting frei geben!
2. alle maps die für voting verboten sind auch im mapcycle umgehen bzw. sperren !

,,ich hab ka ob dies technisch möglich ist ;) es ist wohl mehr ein Gedanke von mir ;)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2003, 01:38 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
:)

tja...es gibt leider 2 verschiedene Vorstellungen davon, was eigentlich die nextmap sein soll. Ich habe auch den Standpunkt vertreten, dass immer die Map als Nextmap drankommen soll, die im Mapcycle nach der momentan gespielten Map dran sein soll...so macht es z.B. Clanmod.

Aber es hat sich nun folgende Vorstellung für AM durchgesetzt, die natürlich auch ihre Berechtigung hat:
Alle Maps, auf die per admin_map oder admin_vote_map gewechselt werden, laufen neben dem Mapcycle und es wird danach wieder zur "offiziellen" Nextmap nach Mapcycle zurückgekehrt.

Soll heißen:

zu 1. gar nicht so schlecht :) Ich kann sie ja freigeben zum Vote, aber ich führe einfach kein changelevel durch. Eigentlich wollte ich es ja so, dass sich dann die Leute enthalten, um eben einfach damit zu signalisieren, dass sie lieber nach Mapcycle weiter spielen wollen. (Hm...man ersetzt einfach "0. keine davon" mit dem Namen der nextmap.)

zu 2. das ist leider so eben nicht mit AM möglich...ein Clan-Mitglied hat mich aber auch schon darauf angesprochen, dass es Blödsinn ist, sie per Vote zu verbieten, da die Map schon damals gelaufen ist, sie aber nun als nextmap sowieso dran wäre. (ich habe da aber schon eine Idee, die ich noch ausprobieren muss! siehe: Theorie)

Argh...faszinierend, dass so ein einfacher Sachverhalt doch durch verschiedene Auffassungen der "nextmap" kompliziert werden kann. Ich glaube fast, man muss das irgendwie von einer ganz anderen Seite anfassen.

Theorie:
Wir haben einen Mapcycle von z.B. 15 Maps. Man will als Admin nicht, dass dauernd de_dust, de_dust2, de_aztec und de_inferno läuft. Komischerweise wollen aber genau 80% der Leute diese Maps. Es sind ja nun auch die beliebtesten Maps. (laut Statistik bei uns...ok...laut meiner Empfindung auf unserem Server :) )

Leute connecten auf den Server gerade bei diesen Maps. Da durch haben sie auch am liebsten dort ein Extend bzw. wollen danach wieder einer der beliebten Maps, obwohl diese ja gerade zuvor gelaufen ist, was die neuen Spieler ja nicht wissen können.

Hm...ich rede wieder zuviel....

Wie wäre es nun, wenn man dem Vote-System ein Map-Ranking-System verpasst und dementsprechend die mapcycle.txt auch anpasst :) Ist ja nun mittlerweile ja auch möglich. Wenn maps also mehr als x% gespielt werden, fliegen sie erst mal aus dem Mapcycle raus. Kommen sie unter die x%, kommen sie wieder in den Mapcycle...

Ok. Ich werde mir das ganze nochmal durch den Kopf gehen lassen. Ich schreibe es gerade einfach nur so hier hin, wie es mir gerade einfällt.....
Ob man allerdings damit alle Leute zufrieden stellt, sei mal dahingestellt. Es gibt nunmal ziemlich viele Spieler, die nur azze und dust spielen wollen.
Aber wenn die Leute mal vier Maps lang drauf sind, spielen sie auch die anderen Maps mit :)

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
 Betreff des Beitrags: mapcycle?
BeitragVerfasst: 25.12.2003, 13:32 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
..jo türlich wollen die meisten zocker immer die top 5 maps zognn,,nun wir haben einen dust only und nen aztec only server also sollte der bedarf gedekt sein und doch haben wir auf unseren 3en server auch eben diese top maps wollen aber denoch auch andere maps laufen lassen..und da dise server mit cs 1.5 läuft gehe ich davon aus dass sehr viele zocker druf sind die schon seit langen zognn und gerne auch ältere und custom maps zognn wollen also soll ein gute voting plugin dies auch ermöglichen wenn kein admin druf ist.. ich habe schon ein paar plugings diese art ausprobiert.. und meine erfahrung ist was man den zockern anbietet das nehmen die auch gerne an dh ein einfaches system ohne möglichst wenig agieren zu müssen.. da war unter anderen das random map plugin auch schon sehr gut.. da wurden einfach per zufall 5 zufälige maps zum changen vorgeschlagen aud maps.ini ..leider könnte man damit auch nicht verhindern dass unter umständen eine map mehrmals hinteinader lief..deswegen finde ich dein plugin schon sehr gut :) auch das vfi2 hatte ich druf ;) ... das problem dass viele connecten oder disconnecten bei bestimten maps ist normal und betrifft zumindest unsere server weniger.. ;)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2003, 13:57 
Benutzeravatar

Registriert: 31.05.2003, 09:16
Beiträge: 790
was heisst nextmap = nächste karte

also ist das doch keine frage, die map die als nächstes kommt... egal ob mapcycle oder nicht... wäre doch einfacher oder?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2003, 18:42 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
So...

ich habe dann erst mal einfach den Text verändert.
Anstatt "0. keine davon", lasse ich einfach "0. nextmap: xyz" im Menü anzeigen.

Die nextmap taucht also immer im Vote auf, wenn andere Mapvorschläge gemacht wurden und braucht daher nicht nominiert werden.

Zusätzlich habe ich es etwas flexibler gestaltet, dass man die Anzahl der ausgeschlossenen Maps im Source mit MAX_MAP_RESTRICT
selber festlegen kann. (bin noch nicht ganz sicher, ob das so 100%ig klappt...)

Bugfixes:
- del_maprestrict: Habe das selfmessage aus der Schleife genommen
- nominate_warning: Wenn gar keine Vorschläge gemacht wurden, dann wird auch ordentlich abgebrochen und nicht noch auf eine Abstimmung gewartet.

Das Problem, dass eine Map zwar als Vorschlag verboten ist, aber regulär nach mapcycle nun dran kommt, besteht also z.Z. noch.


Dateianhänge:
Dateikommentar: v.082
plugin_sdal_mapnominate.zip [5.17 KiB]
107-mal heruntergeladen

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion
Nach oben
   
 Betreff des Beitrags: mapcycle
BeitragVerfasst: 25.12.2003, 21:21 
Benutzeravatar

Registriert: 13.07.2003, 10:02
Beiträge: 37
Wohnort: Bayern
roger! ...gesaugt ..kompiliert und am testen.... :shock:


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2003, 22:17 
AM.de Team
Benutzeravatar

Registriert: 27.11.2001, 01:00
Beiträge: 3564
Wohnort: In der Nähe von Bonn
sehr jut...thx!

_________________
Fehleranalyse: Poste den Inhalt Deiner liblist.gam, (listen)server.cfg, adminmod.cfg, users.ini, vault.ini, plugin.ini von adminmod und plugins.ini von metamod. Benutze auch die Such-Funktion


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1 2 Nächste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de
Original Design von "[ Half-Life Admin Mod © Alfred Reynolds 2000-2003 ] - [ site design by Jägermeister ]"