Помощь и направление в Pawn | WILL BE

Сообщения
490
Реакции
89
Помог
5 раз(а)
Приветствую всех, пообщавшись с wopox1337 решил создать тему для досконального изучения Pawn + правки меня в этом деле. Решил попробовать написать старый и не всем известный мод Hide'N'Seek с бОльшим участием ReAPI. Собрал примерный функционал в голове, как и что должно работать, так же знаком, что Kaido Ren делает именно этот же мод, но пока жду, решил попробовать и сам. И + ко всему, дабы не создавать кучу отдельных тем, буду интересоваться именно тут, ожидая отзывчивости и терпеливости к моим попыткам :blush2:
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Эра переписывания модов началась.
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
fl0wer, мне это нужно, в целях личного познания, т. к. сервера я не держу, мне это мало интересно :ok:
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Сложно всё это будет. Учитывая что мод от KaidoRen и так с использованием ReAPI, да и наверное самый нормальный по API.
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
w0w, я с ним вел переписку, он сказал, что мод пока не пригоден для использования (предполагаю баги и т.д.). Вот и интересна стала задумка
5 Май 2020
Буду стараться как-то на его примере
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
WILL_BE, стоило бы тогда поддерживать как раз его мод, но учитывая что там реализовано, то не каждый и поймет, поэтому в некотором роде проще своё написать, но по API будет тогда хуже, ну посмотрим.
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
Код:
#include <amxmodx>
#include <hamsandwich>
#include <reapi>

public plugin_init()
{
    register_plugin("Hide'N'Seek Mode", "1.0", "CG");

    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound", .post = true);
    RegisterHookChain(RG_CBasePlayer_GiveDefaultItems, "GiveDefaultItems", .post = false);
    RegisterHookChain(RG_PlayerBlind, "PlayerBlind", .post = false);
    RegisterHookChain(RG_RoundEnd, "RoundEnd", .post = false);
    RegisterHookChain(RG_CSGameRules_GiveC4, "GiveC4", .post = false);

    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "PrimaryAttack");
}

public plugin_cfg()
{
    set_cvar_num("sv_airaccelerate", 100);
    set_cvar_num("mp_buytime", 0);
}

public RestartRound()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(get_member(i, m_iTeam) == TEAM_CT)
        {
            set_entvar(i, var_flags, get_entvar(i, var_flags) | FL_FROZEN);
            set_task(5.0, "UnFrozenCT", i);
        }
    }
}

public UnFrozenCT(const player)
    set_entvar(player, var_flags, get_entvar(player, var_flags) & ~FL_FROZEN);

public GiveDefaultItems(const player)
{
    if(get_member(player, m_iTeam) == TEAM_CT)
        rg_give_item(player, "weapon_knife");

    if(get_member(player, m_iTeam) == TEAM_TERRORIST)
    {
        rg_give_item(player, "weapon_smokegrenade");
        rg_give_item(player, "weapon_flashbang");
        rg_set_user_bpammo(player, WEAPON_FLASHBANG, 2);
    }

    return HC_SUPERCEDE;
}

public PlayerBlind(const index, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3])
{
    if(index == attacker || (get_member(index, m_iTeam) == get_member(attacker, m_iTeam)))
    {
        set_member(index, m_blindAlpha, 0);

        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}

public RoundEnd(WinStatus: iStatus, ScenarioEventEndRound: iEvent, Float: flDelay)
{
    if(iStatus != WINSTATUS_CTS && iStatus != WINSTATUS_TERRORISTS)
        return;

    if(iStatus == WINSTATUS_CTS)
        rg_swap_all_players()
}

public GiveC4()
    return HC_SUPERCEDE;

public PrimaryAttack(this)
{
    new player = get_member(this, m_pPlayer);

    if(get_member(player, m_iTeam) == TEAM_CT)
        ExecuteHamB(Ham_Weapon_SecondaryAttack, this);

    return HAM_SUPERCEDE;
}
13 Май 2020
Приложу код.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
игроков можно и в пре рестарта поменять.
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
WILL_BE,
Код:
public GiveDefaultItems(const player)
{
    if(get_member(player, m_iTeam) == TEAM_CT)
        rg_give_item(player, "weapon_knife");

    if(get_member(player, m_iTeam) == TEAM_TERRORIST)
    {
        rg_give_item(player, "weapon_smokegrenade");
        rg_give_item(player, "weapon_flashbang");
        rg_set_user_bpammo(player, WEAPON_FLASHBANG, 2);
    }
    return HC_SUPERCEDE;
}
->
Код:
public GiveDefaultItems(const player)
{
    if(get_member(player, m_iTeam) == TEAM_CT)
    {
        rg_give_item(player, "weapon_knife");
    }
    else
    {
        rg_give_item(player, "weapon_smokegrenade");
        rg_give_item(player, "weapon_flashbang");
        rg_set_user_bpammo(player, WEAPON_FLASHBANG, 2);
    }
    return HC_SUPERCEDE;
}
Нет необходимости дважды проверять команду игроков, GiveDefaultItems для спектров не вызовется
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
shadow, благодарю, учёл.
14 Май 2020
fl0wer, так нужно же отловить событие победы CT и swap'нуть их
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
WILL_BE, и что тебе мешает в пре получить это?
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
fl0wer, немного не понимаю, как отловить и получить итог прошлого раунда
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
EnableHookChain -> RG_CSGameRules_RestartRound -> swap -> DisableHookChain
14 Май 2020
Или просто m_iRoundWinStatus.
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
WILL_BE, чё? Каким образом-то?!)))
14 Май 2020
WILL_BE, у тебя есть хук RG_CSGameRules_RestartRound, который в пост. Я написал схему для пре хука, в котором будет свапать тиму или чё ты там хочешь.
 
Сообщения
490
Реакции
89
Помог
5 раз(а)
Minni, прошу прощения, проснулся только, подумал именно про Рестарт :blush2:
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
WILL_BE, как насчет присвоения квару mp_give_player_c4 нулевого значения вместо хука GiveC4?
 

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

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