Рестарт с результатом голосования

Сообщения
56
Реакции
3
Как правильно добавить рестарт после голосования, и что-бы после голосования был выполнен результат голосования.
Вот основной плагин.

Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>

#define VOTE_TIME       10      //Сколько по времени длиться голосование

new const PLUGIN_VERSION[] = "0.0.1"

enum _:VoteItem
{
    VI_KNIFE,
    VI_DEFAULT
}

new g_iVoteItem[VoteItem]

new bool:g_bPlayerVoted[MAX_PLAYERS + 1]
new HookChain:g_iHookNewRound
new HookChain:g_iHookHasRestrictItem
new HookChain:g_iHookRoundEnd

new bool:g_bKnife

public plugin_init()
{
    register_plugin("Vote Knife or Default", PLUGIN_VERSION, "brody")

    register_dictionary("vote_knife_or_default.txt")

    g_iHookRoundEnd = RegisterHookChain(RG_RoundEnd, "refwd_RoundEnd_Post", .post = true)
    g_iHookNewRound = RegisterHookChain(RG_CSGameRules_RestartRound, "refwd_NewRound_Post", .post = true)
    g_iHookHasRestrictItem = RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "fwdHasRestrictItemPre", .post = false)
    register_clcmd("drop", "func_PlayerDrop");

    register_menu("func_Menu_Vote_Main", 1023, "func_Menu_Vote_Main_Handler")
}

public refwd_RoundEnd_Post(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
{
    DisableHookChain(g_iHookRoundEnd)
    DisableHookChain(g_iHookHasRestrictItem)

    g_bKnife = false
}

public refwd_NewRound_Post()
{
    DisableHookChain(g_iHookNewRound)

    new iPlayers[MAX_PLAYERS], iPlayerCount
    get_players_ex(iPlayers, iPlayerCount, GetPlayers_ExcludeDead)

    for(new i; i < iPlayerCount; i++)
        func_Menu_Vote_Main(iPlayers[i])

    set_task_ex(float(VOTE_TIME), "func_CheckVote")
}

public fwdHasRestrictItemPre()
{
    SetHookChainReturn(ATYPE_BOOL, true)
    return HC_BREAK
}

public func_PlayerDrop(id)
{
    return g_bKnife ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}

public func_Menu_Vote_Main(id)
{
    SetGlobalTransTarget(id)

    new szMenu[MAX_MENU_LENGTH], iLen, iKeys

    iLen = formatex(szMenu, charsmax(szMenu), "\r%l^n^n", "MENU_MAIN_TITLE")
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w[\r1\w] %l^n", "MENU_MAIN_KNIFE", g_iVoteItem[VI_KNIFE])
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w[\r2\w] %l^n", "MENU_MAIN_DEFAULT", g_iVoteItem[VI_DEFAULT])

    if(g_bPlayerVoted[id])
    {
        formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w[\r0\w] \y%l", "MENU_MAIN_EXIT")
        iKeys |= (MENU_KEY_0)
    }
    else
        iKeys |= (MENU_KEY_1|MENU_KEY_2)

    show_menu(id, iKeys, szMenu, VOTE_TIME, "func_Menu_Vote_Main")
}

public func_Menu_Vote_Main_Handler(id, iKey)
{
    switch(iKey)
    {
        case 0:
        {
            g_iVoteItem[VI_KNIFE]++
            client_print_color(0, print_team_default, "%l", "CHAT_VOTE_KNIFE", "CHAT_VOTE_PREFIX", id)
        }
        case 1:
        {
            g_iVoteItem[VI_DEFAULT]++
            client_print_color(0, print_team_default, "%l", "CHAT_VOTE_DEFAULT", "CHAT_VOTE_PREFIX", id)
        }
    }

    if(iKey != 9)
    {
        g_bPlayerVoted[id] = true
    }
}

public func_CheckVote()
{
    if(g_iVoteItem[VI_KNIFE] > g_iVoteItem[VI_DEFAULT])
    {
        g_bKnife = true
        EnableHookChain(g_iHookHasRestrictItem)
        EnableHookChain(g_iHookRoundEnd)

        new iPlayers[MAX_PLAYERS], iPlayerCount
        get_players_ex(iPlayers, iPlayerCount, GetPlayers_ExcludeDead)

        for(new i, iPlayer; i < iPlayerCount; i++)
        {
            iPlayer = iPlayers[i]
            rg_set_user_armor(iPlayer, 0, ARMOR_KEVLAR)
            rg_add_account(iPlayer, 0, AS_SET)
            set_entvar(iPlayer, var_health, 50.0)
            rg_remove_items_by_slot(iPlayer, PRIMARY_WEAPON_SLOT)
            rg_remove_items_by_slot(iPlayer, PISTOL_SLOT)
            rg_remove_items_by_slot(iPlayer, GRENADE_SLOT)
        }

        client_print_color(0, print_team_default, "%l", "CHAT_VOTE_WIN_KNIFE", "CHAT_VOTE_PREFIX")
    }
    else
        client_print_color(0, print_team_default, "%l", "CHAT_VOTE_WIN_DEFAULT", "CHAT_VOTE_PREFIX")
}
Вот +- какой кусок кода хочу добавить :

Код:
#include <dhudmessage>


public game_commencing()
{
        restart()
        times = 10
}
public restart()
{
        times--
        set_dhudmessage(255, 255, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_dhudmessage(0, "Как начнем игру, решим через %d секунд", times)   
        if(times > 0)
        {
                restart()
        }
        else
        {
                server_cmd("sv_restartround 1")
        }
}
public start()
        client_print(0, print_center, "Ну что, поехали?!")
На как еще сохранить чтобы сохранялся результат голосования, и выполнялись функции по голосованию. Выбрали ножи, значит у всех 50 хп + только нож после рр.
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
etojeban, рестарт раунда не смена карты.

Результаты можно сохранить в переменную и проверить при старте раунда.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу