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

Сообщения
486
Реакции
89
Помог
5 раз(а)
shadow, можно поподробнее про квар, впервые про него слышу
14 Май 2020
Если не ошибаюсь, то он из CS:GO
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
WILL_BE,
1589484501411.png
14 Май 2020
Появился в regamedll еще в версии 5.13.0.430
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Так, swap в начале нового раунда выглядит не очень, да и так не понимаю, в какой момент срабатывает GiveDefaultItems.
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
GiveDefaultItems <- OnSpawnEquip <- PlayerSpawn (multiplay_gamerules) <- Spawn (player). Короче говоря, GiveDefaultItems происходит в момент спавна игрока. GiveDefaultItems - Выдача стандартной экипировки (нож, глок/юсп), даже имя функции говорит само за себя
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
В данном случае никакой разницы нет, что проще хукать. Ничего удалять из инвентаря игрока не нужно будет, потому что оригинальная функция GiveDefaultItems не срабатывает: WILL_BE в своем GiveDefaultItems выдает то, что ему нужно и суперсидит оригинальную функцию
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Сервер ругается:
Код:
public RestartRound_Post()
{
    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);
        }
    }
}
Run time error 10: native error (native "get_member")
14 Май 2020
Разве GiveDefaultItems не забирает всё?
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Я так понимаю, проще в RestartRound strip'ать всё что есть и выдавать то, что нужно
14 Май 2020
Nordic Warrior, предполагаю, что можно is_user_alive(i) сделать, в той функции кроме как FrozenCT, ничего и нет
 
Последнее редактирование:
Сообщения
486
Реакции
89
Помог
5 раз(а)
На данный момент, так:
Код:
#include <amxmodx>
#include <hamsandwich>
#include <reapi>
#define TASK_ID 67582
public plugin_init()
{
    register_plugin("Hide'N'Seek Mode", "1.0b", "CG");
    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound_Post", .post = true);
    RegisterHookChain(RG_PlayerBlind, "PlayerBlind", .post = false);
    RegisterHookChain(RG_RoundEnd, "RoundEnd", .post = false);
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "PrimaryAttack");
}
public plugin_cfg()
{
    set_cvar_num("sv_airaccelerate", 100);
    set_cvar_num("mp_buytime", 0);
    set_cvar_num("mp_give_player_c4", 0);
}
public RestartRound_Post()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(!is_user_connected(i))
            return;
        rg_remove_all_items(i);
        if(get_member(i, m_iTeam) == TEAM_CT)
        {
            rg_give_item(i, "weapon_knife");
            set_entvar(i, var_flags, get_entvar(i, var_flags) | FL_FROZEN);
            set_task(5.0, "UnFrozenCT", id + TASK_ID);
        }
        else
        {
            rg_give_item(i, "weapon_smokegrenade");
            rg_give_item(i, "weapon_flashbang");
            rg_set_user_bpammo(i, WEAPON_FLASHBANG, 2);
            rg_set_user_footsteps(i, true);
        }
    }
}
public UnFrozenCT(const player)
    set_entvar(player, var_flags, get_entvar(player, var_flags) & ~FL_FROZEN);
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 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;
}
14 Май 2020
1. При заходе на сервер, пока игроки коннектятся, имеется оружие на руках
2. При swap'е в конце раунда остается нож до начала нового раунда
14 Май 2020
Таском на постоянную проверку грузить не хочется
 
Последнее редактирование:
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
В данном случае никакой разницы нет, что проще хукать. Ничего удалять из инвентаря игрока не нужно будет, потому что оригинальная функция GiveDefaultItems не срабатывает: @WILL_BE в своем GiveDefaultItems выдает то, что ему нужно и суперсидит оригинальную функцию
А если игрок не умер и команды свапнуло, то что?)))
15 Май 2020
WILL_BE, id тасков поправь, а то будешь ловить совпадения с другими тасками.
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Minni, ух, благодарю
15 Май 2020
Про 2. - Подумываю над вашим предложение swap'ать в RestartRound_Pre
15 Май 2020
Но и ищу другие варианты..
 

Garey

ninjaCow
Сообщения
422
Реакции
1,056
Помог
10 раз(а)
WILL_BE, лучше в спавне выдавать забирать, выдавать оружие и т.д. -- например игрок подключится через 1 сек после старта карты -- и уже с глоком в руках
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Garey, учту, благодарю.
15 Май 2020
Что-то при
Код:
set_entvar(i, var_flags, get_entvar(i, var_flags) | FL_FROZEN);
set_task(5.0, "UnFrozenCT", i + 312612);
не выполняется task UnFrozenCT
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
WILL_BE, в теле таска есть отнятие от айди игрока, айди таска?
 
Сообщения
271
Реакции
348
Помог
15 раз(а)
не надо создавать таски для каждого игрока

вообще для этого есть mp_freezetime, но придется хукать resetmaxspeed, чтобы тт могли ходить во время фризтайма
 
Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
Denzer, достаточно просто им maxspeed задать в начале раунда
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Чем плох вариант с FL_FROZEN
15 Май 2020
Вполне легкая и понятная функция
15 Май 2020
Nordic Warrior, немного не понял про таск
 

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

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