AfkKill map minigame

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
artem12397, тут есть темка о нём, почитай: http://hlmod.ru/forum/stati-i-manualy/212-stripper-source.html

Если коротко, то это плагин для модификации энтити по фильтру. Всё, что тебе нужно - это найти некий уникальный атрибут или их комбинацию у энтити. Я по большей части использую (targetname) или координаты (origin).

О том как это делается: - звучит сложновато, но на деле крайне легко, нужно сделать хотя бы 1 раз, после чего никаких проблем не будет.
  1. Декомпилируешь карту - http://ata4.info/bspsrc/
  2. Открываешь в Hammer Editor - Если никогда им не пользовался, то посмотри какой-нибудь вводный урок на YouTube, чтобы побыстрее понять что и как делать. Уроков на русском там очень и очень много. Думаю, вводный урок будет не больше 5-10 минут.
  3. Летишь к тому месту, где ты хочешь что-то удалить
  4. Два раза щелкаешь на интересующий тебя объект чтобы открыть его настройки
  5. Если у него есть имя (Name, targetname) то строишь фильтр по имени, если нет, то по координатам (Orgin, origin) - Если нет имени и в одной точке есть несколько одинаковых энтити, то напиши мне в личку. Такое бывает крайне редко, не хочу сразу грузить.
  6. Пишешь конфиг: http://hlmod.ru/forum/stati-i-manualy/212-stripper-source.html и AM можешь посмотреть конфиги.

    Примерный конфиг для удаления чего-либо с карты по имени:
    C-подобный:
    remove:
    {
    	"targetname" "ИМЯ ТРИГГЕРА"
    }
    По координатам:
    C-подобный:
    remove:
    {
    	"origin" "X Y Z"
    }
  7. Закидываешь на сервер
  8. Готово

Для CS:GO нужно использовать снапшоты 1.2: http://www.bailopan.net/stripper/snapshots/1.2/

-----
Сейчас вспомнил, что в CS:S (в самой игре) какой-то командой при sv_cheats 1 можно включить отображение всех триггеров на карте и, возможно, их имени. Но я не уверен на счет имени и не знаю команду, поспрашивай, может кто подскажет.

P.S. [для любителей писать плагины для всего] - Да, можно конечно же сделать плагин, который будет выдать энтити под прицелом, но порой на картах (особенно на MG и ZM) бывает такая мешанина, что легче будет научится пользоваться Хаммером. Также, через плагин, скорее всего, нельзя будет получить инфо о логических энтити, а порой это очень нужно.
 

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
addons/stripper/maps/mg_saw_rfix_64v_csgo.cfg
C-подобный:
remove:
{
	"targetname" "respawnblock"
}

Совет: попробуй составить этот конфиг сам, чтобы понять почему именно так :)
 

DarklSide

Участник
Сообщения
931
Реакции
468
artem12397,

PHP:
#pragma semicolon 1
#include <sourcemod>
#include <entity>
#include <sdktools_entinput>
#include <sdktools_functions>
new Handle:sm_mggo_enable = INVALID_HANDLE,
Handle:sm_mggomaps_enabled = INVALID_HANDLE;
public OnPluginStart()
{
    sm_mggo_enable = CreateConVar("sm_mggo_enable", "1", "Включить плагин");
    sm_mggomaps_enabled= CreateConVar("sm_mggomaps_enabled", "1", "Включить только для mg карт");
    HookEvent("player_spawn", Event_PlayerSpawn);
    RegConsoleCmd("sm_mggomapson", KillHurtt);
}
public Plugin:myinfo =
{
    name        = "MGnoKillAFK",
    author        = "DarklSide",
    description    = "Don't kill AFK in CSGO and CSS when respawn",
    version        = "1.0",
    url            = "www.surf-4fun.com"
};
public OnMapStart()
{
    new maxEntities = GetMaxEntities(), teri, cteri;
    decl String:spawnCTT[128];
    for (new i = MaxClients; i < maxEntities; i++)
    {
        if (IsValidEdict(i) && IsValidEntity(i) && GetEdictClassname(i, spawnCTT, sizeof(spawnCTT)))
        {
            if (StrEqual(spawnCTT, "info_player_terrorist"))
            {
                teri++;
            }
            else if (StrEqual(spawnCTT, "info_player_counterterrorist"))
            {
                cteri++;
            }
        }
    }
    if(GetConVarBool(sm_mggomaps_enabled))
    {
        if (teri==0 || cteri==0)
        {
            SetConVarInt(sm_mggo_enable, 1);
        }
        else
        {
            SetConVarInt(sm_mggo_enable, 0);
        }
    }
}
public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{    
    if(GetConVarBool(sm_mggo_enable))
    {
        new client = GetClientOfUserId (GetEventInt(event, "userid"));
        if (IsPlayerAlive(client))
        {
            ClientCommand(client, "sm_mggomapson");
        }
    }
}
public Action:KillHurtt(client, args)
{
    if (IsPlayerAlive(client) && (GetEntProp(client, Prop_Send, "m_bInBuyZone")))
    {
        new hurt = -1;
        while ((hurt = FindEntityByClassname(hurt, "trigger_hurt")) != INVALID_ENT_REFERENCE)
        {
            if(IsValidEdict(hurt) && (GetEntProp(client, Prop_Send, "m_bInBuyZone")))
            {
                AcceptEntityInput(hurt, "Kill");
                break;
            }
        }
    }
    return Plugin_Handled;
}

Либо в public OnMapStart(): найти координаты entity (которая убивает игрока) и координаты закупки (либо всех респавна1 и респавна2), и если они пересекаються, то кильнуть entit.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
DarklSide, интересное решение задачи, только есть неточности и ошибочки) Оффтоп В логах со временем проявится.
И может стоит тему плагина сразу создать?
 

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
DarklSide, на мг картах со спавн киллером далеко не всегда есть зона закупки.

Добавлено через 57 минут
Ты уверен, что удаление успеет отработать перед смертью игрока?

Возможно у тебя здесь косяк:
PHP:
        while ((hurt = FindEntityByClassname(hurt, "trigger_hurt")) != INVALID_ENT_REFERENCE)
        {
            if(IsValidEdict(hurt) && (GetEntProp(client, Prop_Send, "m_bInBuyZone")))
GetEntProp(hurt, Prop_Send, "m_bInBuyZone")

Если плясать от детекта во время игры, то я бы сделал прехук спавна с последующей проверкой на пересечение координат игрока и всех trigger_hurt.

В принципе, можно дополнить твой плагин хуком OnTakeDamage, но могут возникнуть проблемы...
 
Последнее редактирование:

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
Работал но не на всех картах
Для каждой карты нужен свой конфиг.

P.S. - На составление конфига для mg_saw_rfix_64v_csgo у меня ушло порядка 5 минут и как минимум 3 из них я потратил на скачку CSGO SDK.
 
L

L1GHT

Хитрый_Ёжик, щас попробую сделать. А как вообще его вытащить?Я в этом не соображаю.
 

DarklSide

Участник
Сообщения
931
Реакции
468
L

L1GHT

DarklSide,Я уже забил на этот респуан килл, не умею я с картами работать)
 

DarklSide

Участник
Сообщения
931
Реакции
468
Я и не предлагаю работать со Stripper'ом. Спросил название тех карт, которые подходят к названию темы. Так как сам перехожу на csgo, хотелось бы знать разные косяки, даже самую малость. Фактически карта предложенная выше, не может распознать afk игрок или нет, она просто килльнёт всех, один раз, кто находиться на респе через 10 сек., от начала раунда.
 
L

L1GHT

mg_simpsons_course_v3
mg_minecraft_course_jb_b4
mg_metal_course_level
mg_mars_course_fix
mg_mario_course_v1_1
mg_kegs_course_v3_fixed3_csgo
mg_draw_course_v1_final

Таких карт 95% которые киллят.Я скинул карты которые у меня были.

Добавлено через 50 минут
Я и не предлагаю работать со Stripper'ом. Спросил название тех карт, которые подходят к названию темы. Так как сам перехожу на csgo, хотелось бы знать разные косяки, даже самую малость. Фактически карта предложенная выше, не может распознать afk игрок или нет, она просто килльнёт всех, один раз, кто находиться на респе через 10 сек., от начала раунда.

Поможешь с картами?
 
Последнее редактирование модератором:

DarklSide

Участник
Сообщения
931
Реакции
468
Последнее редактирование:
Сверху Снизу