Иконка ресурса

retake 0.1f

Нет прав для скачивания
Сообщения
69
Реакции
48
Сообщения
447
Реакции
17
Помог
1 раз(а)
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>
#include <rog>
#include <xs>

enum {
    CVARS_FOR_PREPARE = 0,
    CVARS_FOR_BATTLE,
};

new Array:g_aBombs;
new g_iBombSpawnPlace;
new Float:g_vecBombPlace[3];

public plugin_init()
{
    register_plugin("RETAKE", "0.1", "@emmajule");
    
    g_aBombs = ArrayCreate(1, 0);
    
    collectEntites("info_bomb_target");
    collectEntites("func_bomb_target");
    
    if (ArraySize(g_aBombs) <= 0) {
        server_print("[RETAKE] Map without bombplaces. Plugin paused!");
        ArrayDestroy(g_aBombs);
        pause("ad");
        return;
    }
    
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound", false);
    RegisterHookChain(RG_CSGameRules_OnRoundFreezeEnd, "CSGameRules_OnRoundFreezeEnd", true);
    RegisterHookChain(RG_CSGameRules_GetPlayerSpawnSpot, "CSGameRules_GetPlayerSpawnSpot", false);
    
    ROGInitialize(256.0);
}

public plugin_cfg()
{
    set_cvar_float("mp_forcechasecam", 2.0);
    set_cvar_float("mp_c4timer", 40.0);
    set_cvar_float("mp_freezetime", 11.0);
    set_cvar_float("mp_roundtime", 0.67);
    set_cvar_num("mp_give_player_c4", 0);
    set_cvar_num("mp_plant_c4_anywhere", 0);
    set_cvar_float("mp_roundrespawn_time", -1.0);
}

public CSGameRules_RestartRound()
{
    setCvars(CVARS_FOR_PREPARE);
    
    new roundTerroristsWon;
    if (roundTerroristsWon == -1 || get_member_game(m_bCompleteReset)) {
        roundTerroristsWon = 0;
    }
    
    new WinStatus:status = get_member_game(m_iRoundWinStatus);
    if (status == WINSTATUS_TERRORISTS)
    {
        if (++roundTerroristsWon >= 3) {
            rg_swap_all_players();
            roundTerroristsWon = 0;
        }
    }
    else
    {
        roundTerroristsWon = 0;
        if (status == WINSTATUS_CTS)
        {
            rg_swap_all_players();
        }
    }
    
    new pistolRound = !random_num(0, 3);
    for (new i = MaxClients; i > 0; --i)
    {
        if (!is_user_connected(i)) {
            continue;
        }
        
        set_member(i, m_flDisplayHistory, get_member(i, m_flDisplayHistory) & ~CS_HINT_ROUND_STARTED);
        set_member(i, m_bReceivesNoMoneyNextRound, true);
        set_member(i, m_bNotKilled, false);
        
        rg_add_account(i, pistolRound ? 800 : 10000, AS_SET, false);
    }
    
    RetriveChoosenBombplace(g_vecBombPlace);
    ROGShuffleOrigins();
}

public CSGameRules_OnRoundFreezeEnd()
{
    setCvars(CVARS_FOR_BATTLE);
    
    rg_plant_bomb(0, g_vecBombPlace);
    rg_send_audio(0, "%!MRAD_BOMBPL");
    client_printex(0, print_center, "#Bomb_Planted");
    return 0;
}

public CSGameRules_GetPlayerSpawnSpot(const id)
{
    new Float:Origin[3], Float:fDist;
    new TeamName:myTeam = get_member(id, m_iTeam);
    new spawnSpots = ROGGetOriginsNum();
    
    for (new i; i < spawnSpots; i++)
    {
        ROGGetOrigin(Origin);
        fDist = xs_vec_distance_2d(Origin, g_vecBombPlace);
        
        switch (myTeam)
        {
        case TEAM_TERRORIST:
        {
            if (fDist > 700) {
                continue;
            }
            if (floatabs(Origin[2] - g_vecBombPlace[2]) > 400) {
                continue;
            }
        }
        case TEAM_CT:
        {
            if (!(2000 < fDist < 2600)) {
                continue;
            }
        }
        }
        
        if (IsHullVacant(Origin, HULL_HUMAN) && !IsWrongPlace(Origin, id))
        {
            break;
        }
    }
    
    set_entvar(id, var_origin, Origin);
    set_entvar(id, var_angles, NULL_VECTOR);
    set_entvar(id, var_velocity, NULL_VECTOR);
    set_entvar(id, var_punchangle, NULL_VECTOR);
    
    SetHookChainReturn(ATYPE_INTEGER, 0);
    return HC_SUPERCEDE;
}

setCvars(const period)
{
    switch (period)
    {
    case CVARS_FOR_PREPARE:
    {
        set_cvar_float("mp_buytime", -1.0);
        set_cvar_num("mp_buy_anywhere", 1);
    }
    case CVARS_FOR_BATTLE:
    {
        set_cvar_float("mp_buytime", 0.0);
        set_cvar_num("mp_buy_anywhere", 0);
    }
    }
}

collectEntites(const classname[])
{
    new id = rg_find_ent_by_class(-1, classname, true);
    while (id > 0)
    {
        ArrayPushCell(g_aBombs, id);
        id = rg_find_ent_by_class(id, classname, true);
    }
}

RetriveChoosenBombplace(Float:origin[3])
{
    new size = ArraySize(g_aBombs);
    if (++g_iBombSpawnPlace < size) {}
    else {
        g_iBombSpawnPlace = 0;
    }
    
    new bombplace = ArrayGetCell(g_aBombs, g_iBombSpawnPlace);
    new Float:mins[3], Float:maxs[3];
    
    get_entvar(bombplace, var_origin, origin);
    get_entvar(bombplace, var_mins, mins);
    get_entvar(bombplace, var_maxs, maxs);
    
    for (new i; i < 3; i++) {
        origin[i] += (mins[i] + maxs[i]) * 0.5;
    }
}

bool:IsWrongPlace(Float:origin[3], const id)
{
    origin[2] += 16.0;
    
    for (new i = MaxClients; i > 0; --i)
    {
        if (i == id) {
            continue;
        }
        if (!is_user_alive(i)) {
            continue;
        }
        if (get_member(i, m_iTeam) == get_member(id, m_iTeam)) {
            continue;
        }
        if (fm_is_visible(i, origin)) {
            return true;
        }
    }
    return false;
}

bool:IsHullVacant(Float:origin[3], hull)
{
    new tracehandle;
    engfunc(EngFunc_TraceHull, origin, origin, DONT_IGNORE_MONSTERS, hull, 0, tracehandle);
    return get_tr2(tracehandle, TR_InOpen) && !(get_tr2(tracehandle, TR_StartSolid) || get_tr2(tracehandle, TR_AllSolid));
}
C++
error 017: undefined symbol "rg_player_relationship"
 
Последнее редактирование:
Сообщения
16
Реакции
0
Код:
AMX Mod X Compiler 1.9.0.5263
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team

retake.sma(108) : error 017: undefined symbol "rg_plant_bomb"
retake.sma(264) : error 017: undefined symbol "rg_player_relationship"

2 Errors.
Could not locate output file retake.amx (compile failed).


ERROR: Your plugin failed to compile, see above.
C++
 
Сообщения
447
Реакции
17
Помог
1 раз(а)
Check the version of FastCup,
 
Сообщения
60
Реакции
79
Emma Jule, привет. А есть ли какой-нибудь сервер, который базируется на данном режиме? Посмотреть охота на реализацию
 
Сообщения
8
Реакции
0
Shaurman, протестил на локалке с ботами, из минусов: бомба ставится, А и Б, чередуется каждый раунд, автоспавн бывает за картой спавнит, или в месте куда сам ты не залезешь, также ТТ спавниться с бомбой,типо срабатывает автоплант и ещё тт может вторую бомбу поставить) это из первого что в глаза бросилось, кт спавнит так далеко бывает, что пока ты добежишь до плента с4 взорвётся уже)
 
Сообщения
8
Реакции
0
Emma Jule, спавн игроков не совсем корректно работает, может заспавнить в таких позициях куда нельзя впринципе попасть и откуда нельзя выбраться, например за картой
 
Сообщения
69
Реакции
48
Wastey зачастую это проблема самих карт, когда при их создании остается место площади, и таких карт много, почти все мне кажется, даже взять стандартные (особенно de_inferno), можно попробовать сделать расстоновку спавнов вручную либо попытатся закрыть эти места плагином ограничивающие движение на определенных зонах карты, но лучше всего редактировать саму карту
 
Сообщения
8
Реакции
0
Emma Jule,да, я понял что именно в картах проблема, я пробовал подправить логику спавна добавлял разные проверки через трассировку по x и y, но это не увенчалось успехом:) наверное реально либо через конфиги задавать спавны для каждого из плентов вручную, либо сами карты править(
 
Сообщения
8
Реакции
0
@Shaurman,а как через bspguy исправлять карту в случае чего?
 
Сообщения
60
Реакции
79
Wastey, можно сохранить энтити в .ent файл и закинуть в cstrike/maps
24 Апр 2025
Могу пример на de_mirage показать
24 Апр 2025
Только это полезно будет, если это отдельный сервер. Но можно и подхалтурить и добавить приписку retake к карте
 
Сообщения
8
Реакции
0
@Shaurman,а, ты имеешь в виду на самой карте спавны расставить нужные?) так это не вариант, плента-то у тебя два) там в любом случае надо через конфиги спавны брать для каждого плента - свой конфиг, по итогу на карту по 2 конфига надо со спавнами и в зависимости от места установки бомбы подтягивать нужный конфиг со спавнами, или наоборот брать конфиг со спавнами и в зависимости от спавнов выбирать где будет бомба ставиться( я думал можно через bsp guy например посоздавать solid объекты в местах чтобы за картой не спавнило и автоспавн в плагине по идее не должен будет за картой спавнить в таком случае) можно было бы сделать реально просто пак универсальных карт retake_ где за картой будут заблочены места где можно ходить
25 Апр 2025
@Shaurman,или проще взять walls creator и через плагин позакрывать все проблемные места?
 
Сообщения
60
Реакции
79
Wastey, не за чем 2 конфига. Одного достаточно будет. Просто айди им приписать. Сторон+сценариев
25 Апр 2025
Что-то типо такого

Плент А(1) Т(1) Координаты спавна
Плент А(1) Т(1) Координаты спавна
Плент А(1) Т(1) Координаты спавна
Плент А(1) Т(1) Координаты спавна
Плент А(1) Т(1) Координаты спавна

Плент А(1) КТ(2) Координаты спавна
Плент А(1) КТ(2) Координаты спавна
Плент А(1) КТ(2) Координаты спавна
Плент А(1) КТ(2) Координаты спавна
Плент А(1) КТ(2) Координаты спавна
25 Апр 2025
С Плентом Б(2) дальше понятно что будет
 
Сообщения
8
Реакции
0
Emma Jule,при включенном плагине на карте de_mirage и de_cpl_strike виснет кс намертво. Тестил на listenserver, last regame, last reapi, amx 1.9.0. в чём может быть причина? кс виснет при заходе на эти карты или после захода на карту сразу же виснет
 
Сообщения
8
Реакции
0
Shaurman, wallscreator плагин очень выручил, просто поставил в проблемные места кубы заграждений, гранаты через них пролетают, а игроков там не спавнит, то что нужно вобщем, быстро и просто) единственный момент, на mirage и cpl_strike с плагином ретейка кс намертво виснет, если есть возможность можешь у себя тоже проверить?
 
Сообщения
60
Реакции
79
Wastey, я хз, я не серверовнер. Максимум ставил ХЛДС на винду
 

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

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