Преработка на RockThevote Plugin

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
Drea<M>40BG ;]]
Извън линия
Потребител
Потребител
Мнения: 750
Регистриран на: 11 Окт 2016, 11:35
Се отблагодари: 115 пъти
Получена благодарност: 63 пъти
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от Drea<M>40BG ;]] » 19 Мар 2018, 21:37

Здравейте, ртв плъгинът ми е бъгнат и когато напишат ртв - окей, до тук добре, но когато пуска мапове за избиране, мапа се сменя на съвсем различен, неизбран от хората мап. Не ползвам Galileo и моля ви - не ми предлагайте да го ползвам. И ще помоля да ми оправите този плъгин, че да сменя мапа на точния, избран от играчите. Плъгинът ще се ползва за сървър само с 1 рунд (не е класик).

Код за потвърждение: Избери целия код

/*
*			Made by DA
* 
* 			Description:
* 							This plugin allows the players on your server to vote for a mapvoting.
* 							The players can say in the chat "/rockthevote", "rockthevote" or "rtv" to vote for the vote.
* 							The maps will be automaticle loaded from the maps.ini (if it exists) or from the mapcycle.txt.
* 
* 			
* 			Installation:
* 							1. Download the rockthevote_custom.sma and compile it on your local machine.
* 							2. Put the rockthevote_custom.amxx in your plugins folder.
* 							3. Add at the end from the plugins.ini this line: rockthevote_custom.amxx
* 							4. Open your amxx.cfg (mod/addons/amxmodx/configs/) and add the cvar's.
* 							5. Restart or change the map from your server.
* 
* 							
* 			CVAR's:
* 							amx_timevote number             - Default 5      - After 5 MINUTES (Default) is rockthevote allowed.
* 							amx_howmanypercentage float     - Default 0.30   - When 30% (Default) of the players said rockthevote then comes the mapvote.
* 							amx_howmanyvotes number			- Default 8      - When 8 (default) players said rockthevote then comes the mapvote.
* 							amx_rocktime time	 			- Default 10     - After 10 (default) seconds the voting is over and the server change the map.  
* 
* 
* 			Credits:
* 							Deagles - The main idea
* 							arkshine - Some code
* 							X-olent - Percentage idea
* 
*/

#include <amxmodx>
#include <amxmisc>

#define PLUGIN	"RockTheVote"
#define AUTHOR	"DA"
#define VERSION	"1.8"

#define MAX_MAPS 5
#define MAX_MAP_LENGTH 64
#define MAPSINI "maps.ini"

new rtv[33], howmanyvotes, task_time, keycount[MAX_MAPS], s_Maps[MAX_MAPS][MAX_MAP_LENGTH], count;
new presskeys, howmanyvotesperc, timevote, directmapchange, bool:NextRoundChangeMap = false, nextmap[MAX_MAP_LENGTH];

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_dictionary("mapchooser.txt");
	register_dictionary("common.txt");
	register_clcmd("say", "rockthevote");
	register_menu("Chose your Map", 1023, "gonna_chose");
	howmanyvotes = register_cvar("amx_howmanyvotes", "5");
	howmanyvotesperc = register_cvar("amx_howmanypercentage", "0.30");
	task_time = register_cvar("amx_rocktime", "10.0");
	timevote = register_cvar("amx_timevote", "5");
	directmapchange = register_cvar( "amx_directmapchange", "1" );
	
	register_logevent ( "RoundStart", 2, "1=Round_Start" );
	
	for (new i=0; i < MAX_MAPS+2; i++)
		presskeys = presskeys | (1<<i)
}

public  client_disconnect(id)
{
	if (rtv[id-1] == id)
	{
		rtv[id-1] = 0;
		count--;
	}
}

public RoundStart()
{
	if ( !get_pcvar_num( directmapchange ) && NextRoundChangeMap )
	{
		server_cmd( "amx_map %s", nextmap );
	}
}

public rockthevote(id)
{
	new said[192];
	read_args(said, 192);
	if	((contain(said, "/rockthevote") != -1) || (contain(said, "rockthevote") != -1) || (contain(said, "rtv") != -1))
	{
		if (get_gametime() < (get_pcvar_float(timevote) * 60.0))
			client_print(id, print_chat, "Vote is currently not allowed. Wait %d minutes.", (floatround(((get_pcvar_float(timevote) * 60.0) - get_gametime()) / 60.0)));
		else
		{
			if	(rtv[id-1] == id)
				client_print(id, print_chat, "You have already voted!");
			else
			{
				rtv[id-1] = id;
				count++;
							
				static num;
				num = get_playersnum();
				num = floatround((get_pcvar_float(howmanyvotesperc) * num));
				if ((num == count) || (count >= get_pcvar_num(howmanyvotes)))
				{
					// AMXX Nextmap Chooser by cheap_suit
					if(find_plugin_byfile("mapchooser.amxx") != INVALID_PLUGIN_ID)
					{
						new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds");
						set_cvar_num("mp_winlimit",0); 
						set_cvar_num("mp_maxrounds",-1); 
  
						if(callfunc_begin("voteNextmap","mapchooser.amxx") == 1)
							callfunc_end();
  
						set_cvar_num("mp_winlimit",oldWinLimit);
						set_cvar_num("mp_maxrounds",oldMaxRounds);
						set_task(get_pcvar_float(task_time), "change_map", true);
						return PLUGIN_CONTINUE;
					}
				
					StartTheVote();
					return PLUGIN_CONTINUE;
				}
				static name[32];
				get_user_name( id, name, charsmax( name ) );
				
				client_print ( 0, print_chat, "%s vote was added. Need %d or %d^%^%  to start voting!", name, (get_pcvar_num(howmanyvotes)-count), (floatround(get_pcvar_float(howmanyvotesperc) * 100.00)))
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public gonna_chose(id, key)
{
	if (key < MAX_MAPS)
	{
		keycount[key]++;
		static name[32]
		get_user_name(id, name, charsmax(name));
		client_print(0, print_chat, "%L", LANG_PLAYER, "X_CHOSE_X", name, s_Maps[key]);
	}
}

StartTheVote()
{
	if (!RetrieveMaps(s_Maps))
		return PLUGIN_CONTINUE;
	
	static i, chosetext[256];
	count=0;
	
	formatex(chosetext, charsmax(chosetext), "\y%L:\w^n^n", LANG_SERVER, "CHOOSE_NEXTM");
	for (i=0; i < MAX_MAPS; i++)
		formatex(chosetext, charsmax(chosetext), "%s%d. %s^n", chosetext, i+1, s_Maps[i]);
	
	
	formatex(chosetext, charsmax(chosetext), "%s^n%d. %L", chosetext, MAX_MAPS+2, LANG_SERVER, "NONE");
	client_cmd(0, "spk Gman/Gman_Choose2");
	client_print(0, print_chat, "%L", LANG_SERVER, "TIME_CHOOSE");
	show_menu(0, presskeys, chosetext, 15, "Chose your Map");
	set_task(get_pcvar_float(task_time), "change_map", false);
	return PLUGIN_CONTINUE;
}

	
bool:RetrieveMaps(s_MapsFound[][])
{
	new s_File[256], s_ConfigsDir[256];
	get_configsdir(s_ConfigsDir, 255);
	formatex(s_File, 255, "%s/%s", s_ConfigsDir, MAPSINI);
	
	if (!file_exists(s_File))
		get_cvar_string("mapcyclefile", s_File, charsmax(s_File)); 
		
	new s_CurrentMap[MAX_MAP_LENGTH];
	get_mapname(s_CurrentMap, charsmax(s_CurrentMap));

	new p_File = fopen(s_File, "rt");
	new Array:a_Maps;
	new i_MapsCount = SaveAllMaps(p_File, a_Maps);

	new bool:b_Error = true, i;   
	switch (i_MapsCount)
    {
        case 0             : log_amx("There are no maps in the %s.", s_File);
        case 1 .. MAX_MAPS : log_amx("Not enough maps found. (requires at least %d maps)", MAX_MAPS + 1 );
        default            :  b_Error = false;
    }
	if (b_Error)
    {
        fclose(p_File); 
        ArrayDestroy(a_Maps);
        return false;
    }
	fclose(p_File);

	new i_Rand, i_Cnt;
	while (i_Cnt != MAX_MAPS)
    {
        i_Rand = random_num(0, ArraySize(a_Maps) - 1);
        ArrayGetString(a_Maps, i_Rand, s_MapsFound[i_Cnt], MAX_MAP_LENGTH - 1);

        if (equal(s_MapsFound[i_Cnt], s_CurrentMap))
        {
            continue;
        }

        for (i = 0; i < i_Cnt; i++)
        {
            if (equal(s_MapsFound[i], s_MapsFound[i_Cnt]))
            {
                break;
            }
        }

        if (i == i_Cnt)
        {
            ArrayDeleteItem(a_Maps, i_Rand);
            i_Cnt++;
        }
    }
	ArrayDestroy(a_Maps);
	return true;
}

SaveAllMaps(p_File, &Array:a_Maps)
{
	a_Maps = ArrayCreate(MAX_MAP_LENGTH);
	new s_Buffer[MAX_MAP_LENGTH]
	
	while (!feof(p_File))
	{
		fgets(p_File, s_Buffer, charsmax(s_Buffer));
		trim(s_Buffer);
		if (!s_Buffer[0] || s_Buffer[0] == ';' || (s_Buffer[0] == '/' && s_Buffer[1] == '/'))
		{
			continue;
		}
		if (is_map_valid(s_Buffer))
		{
			ArrayPushString(a_Maps, s_Buffer);
		}
	}
	return ArraySize(a_Maps);
}

public change_map(bool:chooserornot)
{
	if (!chooserornot)
	{
		static keypuffer=0, i=0;
		for (i=0; i < MAX_MAPS; i++)
			if (keycount[i] > keycount[keypuffer])
				keypuffer = i;
			
		copy(nextmap, charsmax(nextmap), s_Maps[keypuffer]);
	}
	else
		get_cvar_string("amx_nextmap", nextmap, charsmax(nextmap));
		
	log_amx("[SS] Map will be changed to %s.", nextmap)
	if (chooserornot)
		client_print(0, print_chat, "%L", LANG_PLAYER, "CHO_FIN_NEXT", nextmap);
		
	if ( !get_pcvar_num( directmapchange ) )
	{
		set_hudmessage(210, 0, 0, 0.05, 0.45, 1, 20.0, 10.0, 0.5, 0.15, 4);
		show_hudmessage(0, "[SS] The map will change in few seconds.");
		
		NextRoundChangeMap = true;
	}
	
	else
	{
		server_cmd("amx_map %s", nextmap);
	}
}

Аватар
Drea<M>40BG ;]]
Извън линия
Потребител
Потребител
Мнения: 750
Регистриран на: 11 Окт 2016, 11:35
Се отблагодари: 115 пъти
Получена благодарност: 63 пъти
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от Drea<M>40BG ;]] » 20 Мар 2018, 19:18

МНЕНИЕТО Е СКРИТО ОТ СТРАНА НА МОДЕРАТОР! ЦЪКНИ ВЪРХУ ЛЕНТАТА ЗА ДА ГО ПРЕГЛЕДАШ.
Последно промяна от OciXCrom на 20 Мар 2018, 22:16, променено общо 1 път.
Причина: Следващият път предупреждение!

Аватар
DoPe ;]]
Извън линия
Потребител
Потребител
Мнения: 402
Регистриран на: 27 Фев 2017, 22:10
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от DoPe ;]] » 20 Мар 2018, 20:14

Защо не използваш Galileo а ползваш този боклук ?
The Best Deathrun Server: 79.124.49.91:27019
The Best Respawn Server: 79.124.49.88:27021

Аватар
Drea<M>40BG ;]]
Извън линия
Потребител
Потребител
Мнения: 750
Регистриран на: 11 Окт 2016, 11:35
Се отблагодари: 115 пъти
Получена благодарност: 63 пъти
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от Drea<M>40BG ;]] » 21 Мар 2018, 16:09

Погледни кво съм писал по-горе...

Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Преработка на RockThevote Plugin

Мнение от [N]eXuS » 21 Мар 2018, 16:12

За да работи плъгина коректно май трябва nextmap.amxx mapchooser.amxx да ги спреш :think:

Аватар
DoPe ;]]
Извън линия
Потребител
Потребител
Мнения: 402
Регистриран на: 27 Фев 2017, 22:10
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от DoPe ;]] » 21 Мар 2018, 16:12

1. Ти изобщо не беше написал следното нещо, за което ми говориш преди аз да бях писал в темата.
2. Използваш плъгини, които са стари и пълни с задни вратички, не безпричинно плъгина се намира в Unnaprovved/Old Plugins.
3. Плъгина Galileo съдържа това, което на теб ти трябва, но иска да не те мързи да погледнеш.
The Best Deathrun Server: 79.124.49.91:27019
The Best Respawn Server: 79.124.49.88:27021

Аватар
Drea<M>40BG ;]]
Извън линия
Потребител
Потребител
Мнения: 750
Регистриран на: 11 Окт 2016, 11:35
Се отблагодари: 115 пъти
Получена благодарност: 63 пъти
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от Drea<M>40BG ;]] » 21 Мар 2018, 16:17

Айде погледни кода и ми кажи къде са задните вратички?
Знам, че е стар, просто питам има ли начин да се оправи и надали ти можеш. :rofl:
И от вчера съм писал да не ми пишете Galileo та Galileo

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Преработка на RockThevote Plugin

Мнение от deadlylord » 26 Апр 2018, 10:54

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <colorchat>

#define PREFIX "^1 [^4 Base Builder^1 ]"

new rtv[33], count;
new min_players, max_players, howmanyvotesperc, timevote, directmapchange, vote_delay, bool:ChangeMap = false, nextmap[64]

public plugin_init()
{
	register_plugin("SimpleRockTheVote", "1.0", "deadly");
	
	register_clcmd("say", "cmdSay");
	register_clcmd("say_team",	"cmdSay");

	min_players = register_cvar("amx_min_players", "4"); // how many votes the plugin needs in order to start the vote (below this it will take the count of the players)
	max_players = register_cvar("amx_max_players", "8"); // how many players the plugin needs in order to start working with howmanyvotesperc
	howmanyvotesperc = register_cvar("amx_howmanypercentage", "0.50"); // how much percent of the players need to vote in order to start the vote
	timevote = register_cvar("amx_timevote", "5"); // how much time players need to wait before the plugin is active
	directmapchange = register_cvar( "amx_directmapchange", "0" ); // 0 = map changes on roundstart || 1 = map changes after xx seconds(vote_delay)
	vote_delay = register_cvar("amx_voteDelay", "20"); // don't write less than 20, because the map will change before the vote is over
	
	register_logevent ( "RoundStart", 2, "1=Round_Start" );
}

public  client_disconnect(id)
{
	if (rtv[id-1] == id)
	{
		rtv[id-1] = 0;
		count--;
	}
}

public cmdSay(id)
{
	new szMessage[32]
	read_args(szMessage, charsmax(szMessage));
	remove_quotes(szMessage);
	if	((equali(szMessage, "rtv") == 1) || (equali(szMessage, "/rtv") == 1))
	{
		if (get_gametime() < (get_pcvar_float(timevote) * 60.0))
			ColorChat(id, TEAM_COLOR, "%s Vote is currently not allowed. Wait ^4%d^1 minutes.", PREFIX, (floatround(((get_pcvar_float(timevote) * 60.0) - get_gametime()) / 60.0)))
		else
		{
			if	(rtv[id-1] == id)
				ColorChat(id, TEAM_COLOR, "%s You have already voted!",PREFIX);
			else
			{
				rtv[id-1] = id;
				count++;
				
				static name[32];
				get_user_name( id, name, charsmax( name ) );
				

				new playerNum = get_playersnum();
				new minPlayers = get_pcvar_num(min_players)
				new maxPlayers = get_pcvar_num(max_players)
				new minPlayersPercent = floatround((get_pcvar_float(howmanyvotesperc) * playerNum))
				
				if(playerNum <= minPlayers) {
					if (count == playerNum || playerNum-count <= 0) {
						StartVoteMap()
						return PLUGIN_HANDLED;
					}
					ColorChat(0, TEAM_COLOR, "%s Player ^4%s^1 vote was added. Need ^4%d^1 more votes to start voting!",PREFIX, name, playerNum-count)
				}
				
				if (playerNum > minPlayers && playerNum < maxPlayers) {
					if (count == minPlayers || minPlayers-count <= 0) {
						StartVoteMap()
						return PLUGIN_HANDLED;
					}
					ColorChat(0, TEAM_COLOR, "%s Player ^4%s^1 vote was added. Need ^4%d^1 more votes to start voting!",PREFIX, name, minPlayers-count)
				}
				if(playerNum >= maxPlayers) {
					if (count == minPlayersPercent || minPlayersPercent-count <= 0) {
						StartVoteMap()
						return PLUGIN_HANDLED;
					}
					ColorChat(0, TEAM_COLOR, "%s Player ^4%s^1 vote was added. Need ^4%d^1 more votes to start voting!",PREFIX, name, minPlayersPercent-count)
				}
			}
		}
	}
	return PLUGIN_CONTINUE;
}
public StartVoteMap() {
	ChangeMap = true
	
	if (get_pcvar_num(directmapchange)) {
		new delay = max(get_pcvar_num(vote_delay),20)
		set_hudmessage(210, 0, 0, 0.02, 0.43, 1, 20.0, 10.0, 0.5, 0.15, 4);
		show_hudmessage(0, "The map will change in %d seconds", delay);
		set_task(float(delay),"RoundStart")
	} else {
		set_hudmessage(210, 0, 0, 0.02, 0.43, 1, 20.0, 10.0, 0.5, 0.15, 4);
		show_hudmessage(0, "This is the final round");
	}
	
	if(find_plugin_byfile("mapchooser.amxx") != INVALID_PLUGIN_ID)
	{
		new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds");
		set_cvar_num("mp_winlimit",0); 
		set_cvar_num("mp_maxrounds",-1); 
		
		if(callfunc_begin("voteNextmap","mapchooser.amxx") == 1)
			callfunc_end();

		set_cvar_num("mp_winlimit",oldWinLimit);
		set_cvar_num("mp_maxrounds",oldMaxRounds);
		return PLUGIN_CONTINUE;
	}
	return PLUGIN_HANDLED;
}

public RoundStart()
{
	if (ChangeMap == true)
	{
		get_cvar_string("amx_nextmap", nextmap, charsmax(nextmap));
		server_cmd( "changelevel %s", nextmap );
	}
}
Изчистени са всичките глупости от кода и съм подобрил CVARs + сложил съм описание за тях!
Последно промяна от deadlylord на 27 Апр 2018, 15:59, променено общо 6 пъти.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot] и 24 госта