ReHLDS/ReAPI Unreal Spawn Fixer

karaulov

Скриптер
Постоялец
Пользователь
Регистрация
5 Май 2019
Сообщения
799
Симпатии
272
Пол
Мужской
Плагин
Unreal Spawn Fixer

Назначение

Игнорирует количество спавн точек, то есть поставили и забыли про проблемы со спавнами, можно играть даже на карте где 1 спавн точка. (Half life и т.п)

Версия 1.1

1.1

Исправлена опечатка в коде

Требования:
Semiclip (или Resemiclip). Если нет то включается внутренний.

Исходный код:

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

#define USE_OWN_SEMICLIP_IF_NOT_FOUND

#define PLUGIN "Unreal Spawn Fixer"

#define AUTHOR "karaulov"

new maxplayers = 32;

public plugin_init() 
{
    new VERSION[64] = "1.1";
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound_Pre", false);
    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound_Post", true);
    
    if (cvar_exists("resemiclip_version"))
    {
        add(VERSION,charsmax(VERSION),"_resemiclip");
        server_cmd("semiclip_option semiclip 1");
        server_cmd("semiclip_option time 0");
    }
    else if (cvar_exists("team_semiclip_version"))
    {
        add(VERSION,charsmax(VERSION),"_team_semiclip");
        set_cvar_num("semiclip",1);
        set_cvar_num("semiclip_block_team",0);
        set_cvar_num("semiclip_duration",0);
    }
    else 
    {
        add(VERSION,charsmax(VERSION),"_semiclip");
#if defined USE_OWN_SEMICLIP_IF_NOT_FOUND
        register_forward(FM_PlayerPreThink, "preThink");
        register_forward(FM_PlayerPostThink, "postThink");
        register_forward(FM_AddToFullPack, "addToFullPack", 1);
        maxplayers = get_maxplayers();
#endif
    }
    
    register_cvar("unreal_spawn_fixer", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
        
    set_member_game(m_bLevelInitialized,true);
    set_member_game(m_iSpawnPointCount_CT,32);
    set_member_game(m_iSpawnPointCount_Terrorist,32);
    
    set_cvar_float("mp_respawn_immunitytime",1.0);
    set_cvar_num("mp_respawn_immunity_force_unset",0);
    set_cvar_num("mp_kill_filled_spawn",0);
}

public RestartRound_Pre()
{
    if (cvar_exists("resemiclip_version"))
    {
        server_cmd("semiclip_option semiclip 1");
        server_cmd("semiclip_option time 0");
    }
    else if (cvar_exists("team_semiclip_version"))
    {
        set_cvar_num("semiclip",1);
        set_cvar_num("semiclip_block_team",0);
        set_cvar_num("semiclip_duration",0);
    }
    
    set_cvar_float("mp_respawn_immunitytime",1.0);
    set_cvar_num("mp_respawn_immunity_force_unset",0);
    set_cvar_num("mp_kill_filled_spawn",0);
}

public RestartRound_Post()
{
    set_member_game(m_bLevelInitialized,true);
    set_member_game(m_iSpawnPointCount_CT,32);
    set_member_game(m_iSpawnPointCount_Terrorist,32);
}


//AUTHOR "skyjur"
new bool:plrSolid[33]
new bool:plrRestore[33]
new plrTeam[33]

public addToFullPack(es, e, ent, host, hostflags, player, pSet)
{
    if(player)
    {
        if(plrSolid[host] && plrSolid[ent] && plrTeam[host] == plrTeam[ent])
        {
            set_es(es, ES_Solid, SOLID_NOT)
            set_es(es, ES_RenderMode, kRenderTransAlpha)
            set_es(es, ES_RenderAmt, 230)
        }
    }
}

FirstThink()
{
    for(new i = 1; i <= maxplayers; i++)
    {
        if(!is_user_alive(i))
        {
            plrSolid[i] = false
            continue
        }
        
        plrTeam[i] = get_user_team(i)
        plrSolid[i] = get_entvar(i, var_solid) == SOLID_SLIDEBOX ? true : false
    }
}

public preThink(id)
{
    static i, LastThink
    
    if(LastThink > id)
    {
        FirstThink()
    }
    LastThink = id

    
    if(!plrSolid[id]) return
    
    for(i = 1; i <= maxplayers; i++)
    {
        if(!plrSolid[i] || id == i) continue
        
        if(plrTeam[i] == plrTeam[id])
        {
            set_entvar(i, var_solid, SOLID_NOT)
            plrRestore[i] = true
        }
    }
}

public postThink(id)
{
    static i
    
    for(i = 1; i <= maxplayers; i++)
    {
        if(plrRestore[i])
        {
            set_entvar(i, var_solid, SOLID_SLIDEBOX)
            plrRestore[i] = false
        }
    }
}
Pre 1.2
Уменьшил время неуязвимости, отключил прозрачность во встроенном semiclip,время неуязвимости берется стандартное если оно установлено выше 0.2с.
Код:
#include <amxmodx>
#include <reapi>
#include <fakemeta>

#define USE_OWN_SEMICLIP_IF_NOT_FOUND

#define PLUGIN "Unreal Spawn Fixer"

#define AUTHOR "karaulov"

new maxplayers = 32;

public plugin_init() 
{
    new VERSION[64] = "1.2";
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound_Pre", false);
    RegisterHookChain(RG_CSGameRules_RestartRound, "RestartRound_Post", true);
    
    if (cvar_exists("resemiclip_version"))
    {
        add(VERSION,charsmax(VERSION),"_resemiclip");
        server_cmd("semiclip_option semiclip 1");
        server_cmd("semiclip_option time 0");
    }
    else if (cvar_exists("team_semiclip_version"))
    {
        add(VERSION,charsmax(VERSION),"_team_semiclip");
        set_cvar_num("semiclip",1);
        set_cvar_num("semiclip_block_team",0);
        set_cvar_num("semiclip_duration",0);
    }
    else 
    {
        add(VERSION,charsmax(VERSION),"_semiclip");
#if defined USE_OWN_SEMICLIP_IF_NOT_FOUND
        register_forward(FM_PlayerPreThink, "preThink");
        register_forward(FM_PlayerPostThink, "postThink");
        register_forward(FM_AddToFullPack, "addToFullPack", 1);
        maxplayers = get_maxplayers();
#endif
    }
    
    register_cvar("unreal_spawn_fixer", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
        
    set_member_game(m_bLevelInitialized,true);
    set_member_game(m_iSpawnPointCount_CT,32);
    set_member_game(m_iSpawnPointCount_Terrorist,32);
    if (get_cvar_float("mp_respawn_immunitytime") < 0.2)
    set_cvar_float("mp_respawn_immunitytime",0.2);
    set_cvar_num("mp_respawn_immunity_force_unset",0);
    set_cvar_num("mp_kill_filled_spawn",0);
}

public RestartRound_Pre()
{
    if (cvar_exists("resemiclip_version"))
    {
        server_cmd("semiclip_option semiclip 1");
        server_cmd("semiclip_option time 0");
    }
    else if (cvar_exists("team_semiclip_version"))
    {
        set_cvar_num("semiclip",1);
        set_cvar_num("semiclip_block_team",0);
        set_cvar_num("semiclip_duration",0);
    }
    if (get_cvar_float("mp_respawn_immunitytime") < 0.2)
    set_cvar_float("mp_respawn_immunitytime",0.2);
    set_cvar_num("mp_respawn_immunity_force_unset",0);
    set_cvar_num("mp_kill_filled_spawn",0);
}

public RestartRound_Post()
{
    set_member_game(m_bLevelInitialized,true);
    set_member_game(m_iSpawnPointCount_CT,32);
    set_member_game(m_iSpawnPointCount_Terrorist,32);
}


//AUTHOR "skyjur"
new bool:plrSolid[33]
new bool:plrRestore[33]
new plrTeam[33]

public addToFullPack(es, e, ent, host, hostflags, player, pSet)
{
    if(player)
    {
        if(plrSolid[host] && plrSolid[ent] && plrTeam[host] == plrTeam[ent])
        {
            set_es(es, ES_Solid, SOLID_NOT);
        }
    }
}

FirstThink()
{
    for(new i = 1; i <= maxplayers; i++)
    {
        if(!is_user_alive(i))
        {
            plrSolid[i] = false
            continue
        }
        
        plrTeam[i] = get_user_team(i)
        plrSolid[i] = get_entvar(i, var_solid) == SOLID_SLIDEBOX ? true : false
    }
}

public preThink(id)
{
    static i, LastThink
    
    if(LastThink > id)
    {
        FirstThink()
    }
    LastThink = id

    
    if(!plrSolid[id]) return
    
    for(i = 1; i <= maxplayers; i++)
    {
        if(!plrSolid[i] || id == i) continue
        
        if(plrTeam[i] == plrTeam[id])
        {
            set_entvar(i, var_solid, SOLID_NOT)
            plrRestore[i] = true
        }
    }
}

public postThink(id)
{
    static i
    
    for(i = 1; i <= maxplayers; i++)
    {
        if(plrRestore[i])
        {
            set_entvar(i, var_solid, SOLID_SLIDEBOX)
            plrRestore[i] = false
        }
    }
}
 
Последнее редактирование:

victormevsa

Пользователь
Регистрация
5 Янв 2018
Сообщения
126
Симпатии
30
Пол
Мужской
Можно подробнее информацию по плагину?!
 

karaulov

Скриптер
Постоялец
Пользователь
Регистрация
5 Май 2019
Сообщения
799
Симпатии
272
Пол
Мужской
Поставил и не надо ковырять каждую карту что бы сделать 20 спавн точек вручную для каждой стороны.
Актуально для серверов с 32 игроками когда убивает рандомных игроков на респе или не впускает в игру.
 

punisher666

Пользователь
Регистрация
13 Июн 2017
Сообщения
155
Симпатии
93
Пол
Мужской
ВКонтакте
zvuk_off
Telegram
@zvuk_off
Поставил и не надо ковырять каждую карту что бы сделать 20 спавн точек вручную для каждой стороны.
Актуально для серверов с 32 игроками когда убивает рандомных игроков на респе или не впускает в игру.
Удобно, но по сравнению с картами, где есть слоты - это костыль) Есть же огромные базы карт где уже есть слоты и все такое. Нет разве?
Со стороны оптимизации. как по мне лучше потратить 15 минут на поиск карт где 32 слота)
 

karaulov

Скриптер
Постоялец
Пользователь
Регистрация
5 Май 2019
Сообщения
799
Симпатии
272
Пол
Мужской
punisher666, не думаю что есть прям полная база данных , к тому же большинство карт идет с 32 слотам а не с 40, авторы наверное не думали что существует возможность игры 17х15 (когда админ перекидывает себя, баланс срабатывает не сразу или настройки позволяют)
 
Сверху Снизу