Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <dhudmessage>
#include <cstrike>
#define linux_offset_player 5
#define m_iPlayerTeam 114
#define PLUGIN "VoteDD"
#define VERSION "1.4"
#define AUTHOR "BeasT"
#define MAXPLAYERS 32
#define ACCESS_LEVEL ADMIN_RCON
#define VOTEDD "^1[^4Пиздатый ПИЗДЕЦ^1] %L"
new g_PlayersNum
new g_Votes
new g_RestartEventNum
new g_Restarts
new g_Maxplayers
new g_Vote
new g_VoteRes[6]
new minimumwait = 7;
new g_VoteRatio, g_RestartNum, g_RestartEventMax
new bool:g_Connected[MAXPLAYERS + 1]
new bool:g_Voted[MAXPLAYERS + 1]
new bool:g_EventInProgerss
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("votegg.txt")
register_event("HLTV", "event_rr", "a", "1=0", "2=0")
register_clcmd("say /GG", "Vote_Restart")
register_clcmd("say_team /GG", "Vote_Restart")
g_VoteRatio = register_cvar("vr_ratio", "0.55") // Needed votes ratio to restart round
g_RestartNum = register_cvar("vr_restarts", "1") // How much restarts will be (not restart events that plugin do)
g_RestartEventMax = register_cvar("vr_maxgg", "1") // Max available number of restart events | 0 - infinite
g_Maxplayers = get_maxplayers()
}
public client_putinserver(id)
{
if (is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id))
{
g_Connected[id] = true
g_PlayersNum++
}
}
public client_disconnect(id)
{
if (g_Connected[id])
{
g_Connected[id] = false
g_PlayersNum--
}
if (g_RestartEventNum >= get_pcvar_num(g_RestartEventMax))
return PLUGIN_CONTINUE
if (g_Voted[id])
{
g_Voted[id] = false
g_Votes--
new name[32]
new votes_left = get_neededvotes() - g_Votes
get_user_name(id, name, charsmax(name))
for (new i = 1; i <= g_Maxplayers; i++)
{
if (g_Connected[i])
{
ChatColor(i, "^1[^4Пиздатый ПИЗДЕЦ^1] ^3%s ^1ушел. ^4%i ^1голос(а,ов) нужно для голосования за ^4GunGame^1!", name, votes_left)
}
}
}
return PLUGIN_CONTINUE
}
stock get_players_stock()
{
new XEXE;
for (new id = 1; id <= get_maxplayers(); id++)
{
if(get_user_team(id) == 1 || get_user_team(id) == 2)
XEXE++
}
return XEXE;
}
public Vote_Restart(id)
{
new PCVAR_RestartEventMax = get_pcvar_num(g_RestartEventMax)
if (PCVAR_RestartEventMax && g_RestartEventNum >= PCVAR_RestartEventMax)
{
if (g_Connected[id])
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Разрешено только^4 1^1 голосование на одну карту.")
}
return PLUGIN_CONTINUE
}
{
if(cs_get_user_team(id) == CS_TEAM_SPECTATOR)
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы наблюдатель, зайдите в игру, чтобы проголосовать за ^4GunGame^1.")
}
else
{
new Float:currentlimit = get_cvar_float("mp_timelimit");
if ( get_gametime( ) < (float(minimumwait) * 60.0) && (currentlimit != 0) )
{
new timelefts = floatround(float(minimumwait) * 60.0 - get_gametime( ) )
if(timelefts / 60 >= 5)
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы должны подождать ^4%d^1 минут ^4%02d^1 сек. до голосования за ^4GunGame^1!", timelefts / 60, timelefts % 60 )
}
if(timelefts / 60 < 5 && timelefts / 60 != 1 && timelefts / 60 != 0)
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы должны подождать ^4%d^1 минуты ^4%02d^1 сек. до голосования за ^4GunGame^1!", timelefts / 60, timelefts % 60 )
}
if(timelefts / 60 < 2 && timelefts / 60 != 0)
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы должны подождать ^4%d^1 минуту ^4%02d^1 сек. до голосования за ^4GunGame^1!", timelefts / 60, timelefts % 60 )
}
if(timelefts / 60 < 1)
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы должны подождать ^4%02d^1 сек. до голосования за ^4GunGame^1!", timelefts % 60 )
}
return PLUGIN_CONTINUE;
}
else
{
if (get_players_stock() >= 10)
{
{
if (g_Voted[id])
{
if (g_Connected[id])
{
new votes_left = get_neededvotes() - g_Votes
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Вы голосовали за ^4GunGame^1! Нехватает ^4%i ^1голосов.", votes_left)
}
return PLUGIN_CONTINUE
}
g_Votes++
g_Voted[id] = true
if (g_Votes >= get_neededvotes())
{
for (new i = 1; i <= g_Maxplayers; i++)
{
g_Voted[i] = false
if (g_Connected[i])
{
ChatColor(i, "^1[^4Пиздатый ПИЗДЕЦ^1] За ^4GunGame ^1проголосовало достаточно игроков!")
}
}
cmd_Pre_restart(false)
return PLUGIN_CONTINUE
}
new votes_left = get_neededvotes() - g_Votes
for (new i = 1; i <= g_Maxplayers; i++)
{
if (g_Connected[i])
{
ChatColor(i, "^1[^4Пиздатый ПИЗДЕЦ^1] Нехватает ^4%i ^1голос(а,ов) для голосования за ^4GunGame^1!", votes_left)
}
}
}
}
else
{
ChatColor(id, "^1[^4Пиздатый ПИЗДЕЦ^1] Играющих ^4%d^1, нужно минимум^4 10^1.", get_players_stock())
}
}
}
return PLUGIN_CONTINUE
}
}
cmd_Pre_restart(bool:is_admin)
{
g_Votes = 0
g_EventInProgerss = true
if (!is_admin)
g_RestartEventNum++
for (new i = 1; i <= g_Maxplayers; i++)
{
if (g_Connected[i])
{
ChatColor(i, "^1[^4Пиздатый ПИЗДЕЦ^1] Голосование за ^4GunGame ^1начнется через^4 15 ^1сек.")
}
}
cmd_ddust()
}
public cmd_ddust()
{
set_task(5.0, "time_five")
set_task(10.0, "time_tan")
set_task(14.0, "time_for")
remove_task(11273)
set_task(17.0, "chose_map",11273)
}
public time_five()
{
set_dhudmessage(0, 255, 0, -1.0, 0.86, 0, 6.0, 2.0)
show_dhudmessage(0, "Голосование за GunGame начнется через 10 секунд.")
}
public time_tan()
{
set_dhudmessage(0, 255, 0, -1.0, 0.86, 0, 6.0, 2.0)
show_dhudmessage(0, "Голосование за GunGame начнется через 5 секунд.")
}
public time_for()
{
set_dhudmessage(0, 255, 0, -1.0, 0.86, 0, 6.0, 2.0)
show_dhudmessage(0, "Голосование за GunGame началось.")
}
public chose_map(id)
{
g_Restarts++
client_cmd(0, "spk misc/FlashGame/golosovanie");
StartVote(id)
}
public event_rr()
{
if(!g_EventInProgerss)
return PLUGIN_HANDLED
if (g_Restarts < get_pcvar_num(g_RestartNum))
{
cmd_ddust()
return PLUGIN_CONTINUE
}
g_EventInProgerss = false
g_Restarts = 0
for (new i = 1; i <= g_Maxplayers; i++)
{
if (g_Connected[i])
{
ChatColor(i, "^1[^4Пиздатый ПИЗДЕЦ^1] ...:: !gGL !y& !tHF!y ::...")
}
}
return PLUGIN_CONTINUE
}
public StartVote(id)
{
if(g_Vote)
return PLUGIN_CONTINUE
g_Vote = true
new iPlayers[32]
new iNum
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
ShowVoteMenu(iPlayers[i])
}
set_task(25.0, "VoteEnd")
return PLUGIN_CONTINUE
}
public ShowVoteMenu(id)
{
new iMenu = menu_create("\dВыберите карту", "ShowVoteMenu_handler")
menu_additem(iMenu, "\w[\rde_aztec_GG\w]", "1", 0)
menu_additem(iMenu, "\w[\rde_cbble_GG\w]", "2", 0)
menu_additem(iMenu, "\w[\rcs_italy_GG\w]", "3", 0)
menu_additem(iMenu, "\w[\rde_dust_GG\w]", "4", 0)
menu_additem(iMenu, "\w[\r4GG_blueworld_br\w]", "5", 0)
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(iMenu, MPROP_NEXTNAME, "Далее")
menu_setprop(iMenu, MPROP_BACKNAME, "Назад")
menu_setprop(iMenu, MPROP_EXITNAME, "Выход")
menu_display(id, iMenu, 0)
}
public ShowVoteMenu_handler(id, iMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
new szData[6], szName[64], iAccess, iCallback
menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback)
new iKey = str_to_num( szData )
++g_VoteRes[iKey]
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
public VoteEnd()
{
new iWin
new iMap
for(new i = 1; i <= 5; i++)
{
if(g_VoteRes[i] >= iWin)
{
iWin = g_VoteRes[i]
iMap = i
}
}
if(!iWin)
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Ни 1 карта не победила, начните голосование заново.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
g_Vote = false
return PLUGIN_CONTINUE
}
switch( iMap )
{
case 1:
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Карта сменится на ^4de_aztec_GG ^1через^4 5 ^1секунд.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
set_task(5.0, "aztec")
}
case 2:
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Карта сменится на ^4de_cbble_GG ^1через^4 5 ^1секунд.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
set_task(5.0, "cbble")
}
case 3:
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Карта сменится на ^4cs_italy_GG ^1через^4 5 ^1секунд.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
set_task(5.0, "italy")
}
case 4:
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Карта сменится на ^4de_dust_GG ^1через^4 5 ^1секунд.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
set_task(5.0, "dust")
}
case 5:
{
ChatColor(0, "^1[^4Пиздатый ПИЗДЕЦ^1] Карта сменится на ^4GG_blueworld_br ^1через^4 5 ^1секунд.")
client_cmd(0, "spk misc/FlashGame/golosovanie_end");
set_task(5.0, "blueworld")
}
}
return PLUGIN_CONTINUE
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 256, input, 3)
replace_all(msg, 256, "!g", "^4")
replace_all(msg, 256, "!y", "^1")
replace_all(msg, 256, "!team", "^3")
replace_all(msg, 256, "!team2", "^0")
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();
}
}
}
}
public aztec()
{
server_cmd("amx_map de_aztec_GG")
server_exec()
}
public italy()
{
server_cmd("amx_map cs_italy_GG")
server_exec()
}
public cbble()
{
server_cmd("amx_map de_cbble_GG")
server_exec()
}
public dust()
{
server_cmd("amx_map de_dust_GG")
server_exec()
}
public blueworld()
{
server_cmd("amx_map GG_blueworld_br")
server_exec()
}
stock get_neededvotes()
{
if (g_PlayersNum < 10)
return g_PlayersNum
return floatround(get_pcvar_float(g_VoteRatio) * float(get_players_stock()), floatround_ceil)
}