Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Добавить проценты голосов в меню

, timeleftvote
Статус пользователя BaJIepbI4
сообщение 27.2.2016, 21:43
Сообщение #1


Стаж: 11 лет

Сообщений: 457
Благодарностей: 115
Полезность: 456

Всем привет!
Помогите пожалуйста добавить в этот плагин цифры (проценты или количество голосов) напротив каждого варианта для голосования.
timelimitvote.sma
Код:

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

#define PLUGIN "TimeLimit vote rus and colorchat"
#define AUTHOR "modernized - wise"
#define VERSION "0.7"

#define MAX_RESULTS 5

//thnx pr4er for help

new Float:g_timelimit
new menu

new g_voteCount[MAX_RESULTS + 1]
new g_tls[MAX_RESULTS]
new tls[MAX_RESULTS]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

new name[12], string[12]
new multiplic = 20 // +++++

for(new i=0;i<MAX_RESULTS;i++)
{
format(name, sizeof name -1, "amx_tl_%d", i+1)

format(string, sizeof string -1, "%d", multiplic)

tls[i] = register_cvar(name, string)

multiplic += 10
}
}

public plugin_cfg()
{
menu = menu_create("\rСколько минут хотите играть на этой карте?", "menu_handler")

for(new i=0;i<MAX_RESULTS;i++)
g_tls[i] = get_pcvar_num(tls[i])

set_task(180.0, "start_vote")

build_menu()
}

build_menu()
{
new option[64], temp[12]
for(new i=0;i<MAX_RESULTS;i++)
{
format(option, sizeof option -1, "\y%d \dМинут", g_tls[i])
format(temp, sizeof temp -1, "%d", i+1)

menu_additem(menu, option, temp, 0)
}

menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER )
}

public start_vote(id)
{
new players[32], inum, i
get_players(players, inum, "ch")

for(i=0;i<inum;i++)
menu_display(players[i], menu, 0)

set_task(15.0, "finish_vote")

for(i=1;i<(MAX_RESULTS+1);i++)
g_voteCount[i] = 0

return PLUGIN_CONTINUE
}

public menu_handler(id, menu, item)
{
if( !is_user_connected( id ) )
return PLUGIN_HANDLED

if(item == MENU_EXIT)
{
menu_cancel(id)

return PLUGIN_HANDLED
}

new data[6], name[32]
new access, callback

menu_item_getinfo(menu, item, access, data, 5, "", 0, callback)

new key = str_to_num(data)
get_user_name(id, name, 31)

ColorChat(0,GREEN,"^1Игрок ^4%s ^1проголосовал за ^4%d ^1минут.", name, g_tls[key -1])

g_voteCount[key]++

menu_cancel(id)

return PLUGIN_HANDLED
}

public finish_vote()
{
g_timelimit = get_cvar_float("mp_timelimit")

new best = 0, i

for(i=0;i<(MAX_RESULTS+1);i++)
{
if(g_voteCount[i] > g_voteCount[best])
best = i
}

new votesNum = 0
for(i=0;i<(MAX_RESULTS+1);i++)
votesNum += g_voteCount[i]

new iRatio = votesNum ? floatround(get_cvar_float("amx_vote_ratio") * float(votesNum), floatround_ceil) : 1
new iResult = g_voteCount[best]

if(iResult >= iRatio)
{
new new_time = g_tls[best -1]

ColorChat(0,GREEN,"^3Голосование прошло успешно. ^1Будем играть ^4%d ^1минут.", new_time)

set_cvar_num("mp_timelimit", new_time)
}
else
{
ColorChat(0,GREEN,"^4Голосование неудачно.")
}

new players[32], inum
get_players(players, inum, "ch")

for(i=0;i<inum;i++)
client_cmd(players[i], "slot10")
}

public plugin_end()
{
set_cvar_float("mp_timelimit", g_timelimit)
}



Как пример:
Пример

Код:

/**==============================================================================
=============
*
* /) -=-=- Версии -=-=- (\
*
* 0.1 - Релиз.
* 0.2 - Добавлены проценты в меню.
* 0.3 - Фиксы.
* 0.4 - Добавлены звуки.
* 0.5 - Добавлены дхуды.
* 0.6 - Добавлено *RTV*
* 0.7 - Убраны баги с отсутствующими картами.
* 0.8 - Оптимизирован код.
* 0.9 - Фиксы.
* 1.0 - Добавлен отсчёт в меню голосования.
*
================================================================================
=============*/
#include <amxmodx>
#include <dhudmessage>
#include <fakemeta>

/**==============================================================================
=============
Константы
================================================================================
=============*/
new g_szMaps[5][64];
new g_Votes[5];
new g_iTimerVote[33];
new g_szWinMap[64];
new g_iNumRTV;
new g_iPlayerProcc;
new bool:g_LastRound;
new b_HasRTV[33];
new Float:g_iLastSec[33];
new bool:g_Vote;
new bool:b_HasAlreadyVoted[33];
new iAllVoted;

new const szSoundTimer[6][] = {"","fvox/one","fvox/two","fvox/three","fvox/four","fvox/five"}
new const szSoundVote[3][] = {"sound/MapManager_by_BlackSmoke/g_start.mp3", "sound/MapManager_by_BlackSmoke/g_end.mp3", "sound/MapManager_by_BlackSmoke/g_sps.wav"}

/**==============================================================================
=============
Макросы
================================================================================
=============*/
#define TimeVote 30 // Сколько будет длится голосование

/**==============================================================================
=============
Инициализация
================================================================================
=============*/
public plugin_init()
{
register_plugin("MapManager", "1.0", "BlackSmoke");

register_clcmd("say /rtv", "RockTheVote")
register_clcmd("say /rockthevote", "RockTheVote")
register_clcmd("say rtv", "RockTheVote")
register_clcmd("say rockthevote", "RockTheVote")

register_clcmd("say nextmap", "Show_Nextmap")
register_clcmd("say /nextmap", "Show_Nextmap")

register_menucmd(register_menuid("VoteMenu"), 1023, "ActionVoteMenu");

register_logevent("RoundEnd", 2, "1=Round_End")

set_task(121.0, "ClCmdVote", _, _, _, "d")

register_cvar("amx_nextmap", "[Не определена]");
set_cvar_string("amx_nextmap", "[Не определена]");

LoadMapsInVote();
}

/**==============================================================================
=============
Показываем следующую карту.
================================================================================
=============*/
public Show_Nextmap(id)
{
new cmd[127];
get_cvar_string("amx_nextmap", cmd, 126)
ChatColor(0, "!teamСледующая карта: !g%s", cmd)
}

/**==============================================================================
=============
Конец раунда
================================================================================
=============*/
public RoundEnd()
if(g_LastRound)
set_task(1.0, "changelevel");

/**==============================================================================
=============
Досрочная смена карты
================================================================================
=============*/
public RockTheVote(id)
{
if(g_Vote)
{
ChatColor(id, "!teamГолосование уже начато. !g*RTV*")
return PLUGIN_CONTINUE;
}
if(b_HasRTV[id])
{
ChatColor(id, "!teamВы уже голосовали. !g*RTV*")
return PLUGIN_CONTINUE;
}
new iNum, szPlayers[32];
get_players(szPlayers, iNum, "hc")
g_iNumRTV++;
b_HasRTV[id] = true;
if(g_iNumRTV == iNum)
{
ChatColor(0, "!teamВсе игроки !g(%d) !teamзахотели досрочную смену карты. !g*RTV*", g_iNumRTV)
set_task(5.0, "ClCmdVote");
}
else
ChatColor(0, "!teamЧтобы начать досрочное голосование нужно !g%d !teamголосов. !g*RTV*", iNum-g_iNumRTV)

return PLUGIN_HANDLED;
}

/**==============================================================================
=============
Загрузки плагина
================================================================================
=============*/
public plugin_precache()
{
for(new i; i < sizeof(szSoundVote); i++)
precache_generic(szSoundVote[i])
}

/**==============================================================================
=============
Ставим карты для голосования
================================================================================
=============*/
public LoadMapsInVote()
{
new szFileName[64], Len, iNumRandomMap, q, iRepeat, szMapName[32], szDirMaps[127];
get_mapname(szMapName, 31);
format(szFileName, 63, "addons/amxmodx/configs/maps.ini")
q = random_num(0, file_size(szFileName, 1)-1)

while(read_file(szFileName, q ,g_szMaps[iNumRandomMap], 63, Len))
{
q = random_num(0, file_size(szFileName, 1)-1)

if(iRepeat == q)
continue;

iRepeat = q;

if(g_szMaps[iNumRandomMap][0] == ';' || Len == 0)
continue

format(szDirMaps, 126, "maps/%s.bsp", g_szMaps[iNumRandomMap]);
if(!equali(szMapName, g_szMaps[iNumRandomMap]) && file_exists(szDirMaps))
iNumRandomMap++

if(iNumRandomMap > 4)
break;
}
}

/**==============================================================================
=============
Включаем отсчёт до голосования
================================================================================
=============*/
public ClCmdVote()
set_task(1.0, "ValueVote", _, _, _, "a", 6);

/**==============================================================================
=============
Отсчёт до голосования
================================================================================
=============*/
public ValueVote()
{
new szSec[32];
set_dhudmessage( 255,255,0, -1.0, -0.80, 0, 6.0, 0.001, 0.1, 1.5 )
static timer = 6
timer--
switch(timer)
{
case 0:
{
g_Vote = true;
startvote()
arrayset(g_Votes, 0, sizeof(g_Votes));
arrayset(g_iTimerVote, TimeVote-10, 33);
arrayset(b_HasAlreadyVoted, false, 33);
set_task(float(TimeVote), "endvote");
timer = 6;
client_cmd(0, "mp3 play %s", szSoundVote[0])
set_cvar_string("amx_nextmap", "[Идёт голосование]");
}
default:
{
get_ending(timer, szSec, "у")
show_dhudmessage(0, "Голосование пройдёт через %d %s", timer, szSec)
client_cmd(0, "spk %s", szSoundTimer[timer])
}
}
}

/**==============================================================================
=============
Голосование
================================================================================
=============*/
public startvote()
{
if(!g_Vote)
return PLUGIN_CONTINUE;

new szPlayers[32], iNum;
get_players(szPlayers, iNum);
iAllVoted = 0;

for(new i; i < iNum; i++)
ChooseMap(szPlayers[i])

return PLUGIN_HANDLED;
}

/**==============================================================================
=============
Меню выбора карт.
================================================================================
=============*/
public ChooseMap(id)
{
if(!g_Vote)
return PLUGIN_CONTINUE;

new szMenu[512], iLen, iKey, szSec[32]
get_ending(g_iTimerVote[id], szSec, "а");
iLen = format(szMenu[iLen], charsmax(szMenu)-iLen, "\yПора выбирать следующую карту.^n\dУ вас \r%d \dсек, чтобы подумать^n", g_iTimerVote[id], szSec)
for(new q; q < 5; q++)
{
if(!b_HasAlreadyVoted[id])
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\r%d. \w%s \d[\y%d%%\d]",q+1, g_szMaps[q], g_Votes[q] * g_iPlayerProcc)
else
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\d%s [\y%d%%\d]", g_szMaps[q], g_Votes[q] * g_iPlayerProcc)
}

if(!b_HasAlreadyVoted[id])
{
iKey |= MENU_KEY_0;
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n^n\r0. \wНичего")
}

iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n^n\yПроголосовало: \r%d \dчеловек", iAllVoted)

iKey |= MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5

if(b_HasAlreadyVoted[id])
iKey &= ~(MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5);

show_menu(id, iKey, szMenu, -1, "VoteMenu");
return PLUGIN_HANDLED;
}

/**==============================================================================
=============
Игрок голосует
================================================================================
=============*/
public ActionVoteMenu(id, iKey)
{
if(!g_Vote)
return PLUGIN_CONTINUE;

new szName[32]
get_user_name(id, szName, 31)

if(iKey == 9)
{
if(!b_HasAlreadyVoted[id])
ChatColor(0, "!g%s !teamне принял участие в голосовании.", szName);
b_HasAlreadyVoted[id] = true
return PLUGIN_CONTINUE;
}

iAllVoted++;

g_Votes[iKey]++, b_HasAlreadyVoted[id] = true;
ChatColor(0, "!g%s !teamвыбрал !g%s", szName, g_szMaps[iKey]);

return PLUGIN_HANDLED;
}

/**==============================================================================
=============
Конец голосования
================================================================================
=============*/
public endvote()
{
g_Vote = false;
new win = 0, szDirFile[127];
for(new i; i < sizeof(g_Votes); i++)
{
if(win < g_Votes[i])
{
win = i
format(g_szWinMap, 63, g_szMaps[win])
}
}

if(win < g_Votes[0])
{
win = 0;
format(g_szWinMap, 63, g_szMaps[win]);
}

if(!g_szWinMap[0])
{
LoadMapsInVote();
set_task(5.0, "ClCmdVote");
ChatColor(0, "!teamГолосование отложено.")
return PLUGIN_CONTINUE;
}
format(szDirFile, 126, "maps/%s.bsp", g_szWinMap);
if(!file_exists(szDirFile))
{
LoadMapsInVote();
set_task(5.0, "ClCmdVote");
ChatColor(0, "!teamГолосование отложено из за отсутствующей карты.")
return PLUGIN_CONTINUE;
}
set_dhudmessage( 149,68,0, -1.0, -0.70, 2, 4.0, 11.0, 0.01, 1.5 )
show_dhudmessage(0, "Следующая карта: %s^nКарта сменится по окончанию раунда",g_szWinMap, win)
ChatColor(0, "!teamСледующая карта: !g%s", g_szWinMap)
set_cvar_string("amx_nextmap", g_szWinMap);
set_cvar_float("mp_timelimit", 0.0)
g_LastRound = true;
client_cmd(0, "mp3 play %s", szSoundVote[1])

return PLUGIN_HANDLED;
}

/**==============================================================================
=============
Меняем карту.
================================================================================
=============*/
public changelevel()
{
set_cvar_float("mp_timelimit", 0.0);
set_dhudmessage( 0,255,0, -1.0, -0.40, 0, 11.0, 6.0, 0.1, 1.5 )
show_dhudmessage(0, "Всем спасибо^nКарта меняется на %s", g_szWinMap)
client_cmd(0, "+showscores;wait;wait;wait;mp3 stop;stopsound;spk %s", szSoundVote[2])
new iNum, szPlayers[32];
get_players(szPlayers, iNum)
for(new i; i < iNum; i++)
{
client_cmd(szPlayers[i], "drop;wait;wait;wait;wait;wait;drop;wait;wait;wait;wait;wait;drop");
set_pev(szPlayers[i], pev_flags, pev(szPlayers[i], pev_flags) | FL_FROZEN)
}
set_task(4.0, "changelevel1")
}

/**==============================================================================
=============
Меняем карту
================================================================================
=============*/
public changelevel1()
{
server_cmd("changelevel %s", g_szWinMap);
}

/**==============================================================================
=============
Синк
================================================================================
=============*/
public client_PreThink(id)
{
if(!g_Vote)
return;

if(g_iTimerVote[id] <= -1)
return;

if(iAllVoted)
g_iPlayerProcc = 100 / iAllVoted;
else
g_iPlayerProcc = 0;

if((get_gametime() - g_iLastSec[id]) >= 1.0)
if(g_iTimerVote[id] != 0)
g_iTimerVote[id]--, ChooseMap(id), g_iLastSec[id] = get_gametime();
else
show_menu(id, 0, "^n"), g_iTimerVote[id] = -1;
}

/**==============================================================================
==
Получение Окончания Секунд
================================================================================
=*/
stock get_ending(num, output[32], const l[])
{
new num100=num%100, num10=num%10;
if(num100>=5&&num100<=20||num10==0||num10>=5&&num10<=9) format(output, 31, "секунд");
else if(num10==1) format(output, 31, "секунд%s", l);
else if(num10>=2&&num10<=4) format(output, 31, "секунды");
}

/**==============================================================================
==
Цветной чат
================================================================================
===*/
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
format(msg, sizeof(msg), "^1[^4Голосование^1] %s", msg)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}



Спасибо заранее за помощь.



Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Solo
сообщение 27.2.2016, 22:35
Сообщение #2


Стаж: 10 лет
Город: Україна

Сообщений: 300
Благодарностей: 137
Полезность: 111

Уже это давно реализовано
[Stable Release] Map Manager. Измененный от Mistrick

Отредактировал: Solo, - 27.2.2016, 22:37
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaJIepbI4
сообщение 28.2.2016, 7:22
Сообщение #3


Стаж: 11 лет

Сообщений: 457
Благодарностей: 115
Полезность: 456

Цитата(Solo @ 27.2.2016, 23:35) *
Уже это давно реализовано
[Stable Release] Map Manager. Измененный от Mistrick


Просьба еще раз внимательно прочитать первый пост и посмотреть плагин, в который я прошу помочь добавить количество проголосовавших за каждый вариант.



Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: