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

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

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

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

Restart Vote

, Плагин для голосования за рестарт для серверов "карты ONLY"
Статус пользователя Bloo
сообщение 4.4.2014, 21:42
Сообщение #1


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Делюсь по навеянной щедрости товарища Неугомона)

Автор: Imagine
Заказчик: Bloo
Описание:
Плагин применяется на Only сервере. Через указанное количество раундов выводится голосование за рестарт, похожее на UMM (я фанат UFPS psych.gif ),звуковой отсчет, фриз, скрин то фейд, ход и результаты голосования прилагаются))
Есть чат команда на подобии rtv для досрочного вызова голосования по дефолту стоит /rr, сменить в 25 строке:
Код:
register_clcmd("say /rr", "clcmd_rr")

Квары:
Код
pCvarRound = register_cvar("vr_round", "40")                 // через сколько раундов будет первого голосование
pCvarVoteTime = register_cvar("vr_vote_time", "10")         // время (сек) сколько будет длится голосование
pCvarStartTime = register_cvar("vr_start_time", "6")         // время (сек) через сколько начнется голосование
pCvarExtRound = register_cvar("vr_ext_round", "10")             // кол-во раундов на продление
pCvarMinPlayers = register_cvar("vr_rr_minplayers", "2")    // мин кол-во игроков при котором доступно /rr
pCvarRatio = register_cvar("vr_rr_ratio", "50")                // процент игроков для досрочного голосования


Отредактировал: Bloo, - 4.4.2014, 21:43
Прикрепленные файлы:
Прикрепленный файл  restart_vote.sma ( 8,67 килобайт ) Кол-во скачиваний: 113
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   Цитировать сообщение
Статус пользователя Bloo
сообщение 14.4.2014, 8:26
Сообщение #2


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Кто нибудь может помочь добавить сюда ограничение на количество раз продления игры без рестарта? Буду очень благодарен.
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>

#define keysmenu (1<<0)|(1<<1)

new g_iTimer[33], g_total_vote[2], g_Voted[33]

new g_iSayText, g_maxplayers, g_SyncMsg, g_msgScrenFade
new g_Round, g_Time, g_MapExt

new bool:g_voterr_full = false
new bool:g_voterr_id[33]

new pCvarRound, pCvarVoteTime, pCvarStartTime, pCvarExtRound, pCvarMinPlayers, pCvarRatio

public plugin_init()
{
register_plugin("Restart Vote", "1.0", "ill");

register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("TextMsg", "event_restart", "a", "2&#Game_C", "2&#Game_w")

register_clcmd("say /res", "clcmd_rr")

register_menu("menu_vote", keysmenu, "menu_handler_vote")

pCvarRound = register_cvar("vr_round", "40") // через сколько раундов будет первого голосование
pCvarVoteTime = register_cvar("vr_vote_time", "10") // время (сек) сколько будет длится голосование
pCvarStartTime = register_cvar("vr_start_time", "6") // время (сек) через сколько начнется голосование
pCvarExtRound = register_cvar("vr_ext_round", "10") // кол-во раундов на продление
pCvarMinPlayers = register_cvar("vr_rr_minplayers", "2") // мин кол-во игроков при котором доступно /rr
pCvarRatio = register_cvar("vr_rr_ratio", "50") // процент игроков для досрочного голосования

g_iSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
g_SyncMsg = CreateHudSyncObj()
g_msgScrenFade = get_user_msgid("ScreenFade")
}

public clcmd_rr(id)
{
if(g_voterr_full)
{
ChatColor(id, "^4[VOTE] ^1Набраны все голоса. Голосование начнется в новом раунде")
return PLUGIN_HANDLED
}

if(fnGetPlaying() < get_pcvar_num(pCvarMinPlayers))
{
ChatColor(id, "^4[VOTE] ^1На сервере должно быть не менее^3 %d ^1человек", get_pcvar_num(pCvarMinPlayers))
return PLUGIN_HANDLED
}

if(g_voterr_id[id])
{
ChatColor(id, "^4[VOTE] ^1Вы уже проголосвали")
return PLUGIN_HANDLED
}

new name[32]; get_user_name(id, name, charsmax(name))

g_voterr_id[id] = true
ChatColor(0, "^4[VOTE]^3 %s ^1проголосовал за досрочное голосование. Поддержи -^4 /rr", name)


new players[32], num, voted
get_players(players, num, "ch")

for(new i = 0; i < num; ++i)
if(g_voterr_id[players[i]])
voted++

if(num && (floatround(get_pcvar_float(pCvarRatio) * 100.0 ) > (voted * 100 / num)))
{
ChatColor(0, "^4[VOTE]^3 %d ^1игроков из^3 %d ^1необходимых проголосовало за досрочное голосование", voted, floatround(get_pcvar_float(pCvarRatio) * num + 0.49))

return PLUGIN_CONTINUE
}

g_voterr_full = true
ChatColor(0, "^4[VOTE] ^1Набраны все голоса. Голосование начнется в новом раунде")

return PLUGIN_CONTINUE
}

public client_connect(id)
{
g_Voted[id] = false
g_voterr_id[id] = false
}

public client_disconnect(id)
{
g_Voted[id] = false
g_voterr_id[id] = false
}

public event_restart()
{
g_Round = 0
g_MapExt = false
g_voterr_full = false
}

public event_round_start()
{
g_Round++

if(g_voterr_full || g_Round == get_pcvar_num(pCvarRound) || (g_MapExt && g_Round == get_pcvar_num(pCvarExtRound)))
{
g_Time = get_pcvar_num(pCvarStartTime)

new fade[2]
fade[0] = 2; set_task ( 1.0, "cmd_screen_fade", 0, fade, 2 )
fade[0] = 1; set_task ( 2.0, "cmd_screen_fade", 0, fade, 2 )

VoteTimer()
}
}

public VoteTimer()
{
if(g_Time <= 0)
{
client_cmd(0, "spk Gman/Gman_Choose%d", random_num(1, 2))
StartVote()
return
}

set_hudmessage(200, 100, 0, -1.0, 0.1, 0, 1.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(0, g_SyncMsg, "Голосование за рестарт через %d сек", g_Time)

if(g_Time <= 5)
{
new speak[5][] = { "one", "two", "three", "four", "five" }
client_cmd(0 ,"spk ^"fvox/%s^"", speak[g_Time - 1])
}

g_Time--

set_task(1.0, "VoteTimer")
}

public StartVote()
{
new votetime = get_pcvar_num(pCvarVoteTime)
set_task(float(votetime+1), "chack_result")

for (new id = 1; id <= g_maxplayers; id++)
{
if(!is_user_connected(id))
continue

g_iTimer[id] = votetime
set_task(1.0, "show_menu_vote", id, _, _, "a", g_iTimer[id] + 1)
set_task(1.0, "show_hud_result", id+777, _, _, "a", votetime)
}
}

public show_hud_result(taskid)
{
new id = taskid - 777

if(!is_user_connected(id))
return

if(!g_Voted[id])
return

set_hudmessage(255, 255, 255, -1.0, 0.1, 0, 1.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(id, g_SyncMsg, "Голосование за рестарт:^n^nЗа [%d]^nПротив [%d]", g_total_vote[0], g_total_vote[1])
}

public show_menu_vote(id)
{
if(!is_user_connected(id))
return

static menu[512], iLen
new keys = MENU_KEY_1|MENU_KEY_2
iLen = 0

g_iTimer[id]--

iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yСделать рестарт?^n^n")

iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wДа^n")
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wНет, продлить на %d раундов^n", get_pcvar_num(pCvarExtRound))

iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\wУ вас есть \r%d \wсек чтобы подумать", g_iTimer[id])

if(g_iTimer[id] <= 0)
clear_menu(id)
else
show_menu(id, keys, menu, -1, "menu_vote")
}


public menu_handler_vote(id, key)
{
if(!is_user_connected(id))
return

g_Voted[id] = true
clear_menu(id)
g_total_vote[key]++
new name[32]
get_user_name(id, name, charsmax(name))
switch(key)
{
case 0: ChatColor(0, "^4[VOTE] ^1Игрок ^4%s ^1проголосовал^3 ЗА ^1рестарт", name)
case 1: ChatColor(0, "^4[VOTE] ^1Игрок ^4%s ^1проголосовал^3 ПРОТИВ ^1рестарта", name)
}
}

public chack_result()
{
new fade[2]
fade[0] = 0; set_task ( 1.0, "cmd_screen_fade", 0, fade, 2 )

if(!g_total_vote[0] && !g_total_vote[1])
{
ChatColor(0, "^4[VOTE] ^1Голосование не состоялось!")
return
}

if(g_total_vote[0] > g_total_vote[1])
{
ChatColor(0, "^4[VOTE] ^1Голосование завершено. ^4Рестарт!")
server_cmd("restart")
}
else
{
ChatColor(0, "^4[VOTE] ^1Голосование завершено. ^4Игра продолжается!")
g_Round = 0
g_MapExt = true
g_voterr_full = false
}

g_total_vote[0] = 0
g_total_vote[1] = 0

for (new id = 1; id <= g_maxplayers; id++)
{
g_Voted[id] = false
g_voterr_id[id] = false
}
}

clear_menu(id)
{
show_menu(id, 0, "^n", 1)
remove_task(id)
}

fnGetPlaying()
{
static iPlaying, id
iPlaying = 0

for (id = 1; id <= g_maxplayers; id++)
{
if (is_user_connected(id))
{
if (cs_get_user_team(id) == CS_TEAM_CT || cs_get_user_team(id) == CS_TEAM_T)
iPlaying++
}
}

return iPlaying;
}

public cmd_screen_fade ( fade[] )
{
new time, hold, flags

switch (fade[0])
{
case 1:
{
time = 1
hold = 1
flags = 4
}

case 2:
{
time = 4096
hold = 1024
flags = 1

for (new id = 1; id <= g_maxplayers; id++)
if(is_user_connected(id))
set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
}

default:
{
time = 4096
hold = 1024
flags = 2

for (new id = 1; id <= g_maxplayers; id++)
if(is_user_connected(id))
if(pev(id, pev_flags) & FL_FROZEN)
set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
}
}

message_begin ( MSG_ALL, g_msgScrenFade, {0,0,0}, 0 )
write_short ( time )
write_short ( hold )
write_short ( flags )
write_byte ( 0 )
write_byte ( 0 )
write_byte ( 0 )
write_byte ( 255 )
message_end()

return PLUGIN_CONTINUE
}

stock ChatColor(const id, const input[], any:...) {
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
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, g_iSayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: