Выдача ботам бомбы

Сообщения
315
Реакции
104
Помог
2 раз(а)
Всем доброго времени суток.
Заинтересовался недавно возможность невыдачи ботам бомбы и столкнулся с парой вопросов.
То что есть квар (ниже), это я знаю, но он работает не совсем так ожидал (судя по описанию) и поэтому его изначально не трогал. Но по порядку.
Во всех тестах плагинов, изначально стояло значение квара bot_defer_to_human "0"
Спасибо d3m37r4 за подсказку по коду, попробовал кучу версий по блоку бомбы ботам, ни 1 не работала. 1 из примеров ниже
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    register_plugin("Bot_no_bomb", "1.0.0", "SNauPeR");
    RegisterHookChain(RG_CBasePlayer_MakeBomber, "CBasePlayer_MakeBomber", .post = false);
}

public CBasePlayer_MakeBomber(const this) {
    if(!is_user_bot(this))
        SetHookChainReturn(ATYPE_BOOL, HC_SUPERCEDE);
    
    return HC_CONTINUE;
Вопрос почему? Мне кажется, что не работает вызов хука (https://github.com/s1lentq/reapi/bl...63d181669f2a/reapi/src/hook_callback.cpp#L536). Ну если есть у кого догадки - напишите
Не затрагивая квар к которому я приступил позже всего, сделал что-то типа "костыля", ниже
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

public plugin_init() {
    register_plugin("Bot_no_bomb", "1.0.1", "SNauPeR");

    if (!engfunc(EngFunc_FindEntityByString, -1, "classname", "func_bomb_target"))
        pause("d");

    RegisterHookChain(RG_CSGameRules_GiveC4, "CSGameRules_GiveC4", .post = false);
}

public CSGameRules_GiveC4() {
    new players[32], countPlayers;
    get_players(players, countPlayers, "aceh", "TERRORIST");
    if(countPlayers)
        rg_give_item(players[random_num(0, countPlayers - 1)], "weapon_c4", GT_REPLACE);

    return HC_SUPERCEDE;
}
Полностью убрать выдачу бомбу и потом выдать рандомно живому и работает при bot_defer_to_human "0"

Ну и далее есть вопрос на счет квара к знающим людям)
// 0 - Боты будут выполнять цели карты (закладка бомбы и т. д.).
// 1 - Боты не будут выполнять цели карты
bot_defer_to_human "0"
При значении этого квара, тестами выяснил, что 0 - бомба выдается ботам (как правило) и боты ставят бомбу (выполняют цели карты), 1 - не выдается и боты все равно выполняют цели карты (проверено, отдав боту бомбу)
Почему боты выполняют при значении "1"? И какие ещё цели карт могут выполнять, кроме закладки бомб? На что ещё влияет квар?
Инфы на счёт этого я никакой не нашёл, кроме того, что квар отвечает за выдачу бомбы :dntknw:
Собственно из-за того, что я думал, что квар цепляет ещё что-то, помимо выдачи бомбы - установку бомбы и прочее, я решил начать с плагина
Чистый сервер, z-bot, последние версии всех Мета и Amx плагинов, ReHLDS, ReGameDll и тд
 
Сообщения
702
Реакции
54
SNauPeR, дак зачем тебе делать полностью удаление бомбы, если ты можешь после старта раунда и спавна бомбы, передать её нормальному игроку, как раз в reapi есть удобная передача бомбы rg_transfer_c4
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
ThePhoenix, ну смысл то не поменяется же
Просто в вашем случае нужно будет проверить у кого бомба (бот или не бот)
Меня больше интересует почему не сработал 1ый плагин и работа квара, часы мучений же)
 
Сообщения
335
Реакции
93
Помог
2 раз(а)
Блокировка так выглядит. Чтоб было.
Код:
public CBasePlayer_MakeBomber(const iPlayer)
{
    if (is_user_bot(iPlayer))
--       SetHookChainReturn(ATYPE_BOOL, HC_SUPERCEDE);
++  {
++      SetHookChainReturn(ATYPE_BOOL, false);
++      return HC_SUPERCEDE;
++  }
  
    return HC_CONTINUE;
}
 
Сообщения
702
Реакции
54
SNauPeR, это как предложение временного решения, а не решение проблемы ;)
А за блокировку сказал человечек выше.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Noob_with_cheats, самое интересно, что это тоже не работает. Я же написал выше, что 1 из примеров )
7 Июн 2022
ThePhoenix,
да честно говоря, с учетом квара - это в принципе НЕ проблема 😆
7 Июн 2022
Noob_with_cheats, ниже ещё привёл то, что не пашет
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    register_plugin("Bot_no_bomb", "1.0.0", "SNauPeR");
    RegisterHookChain(RG_CBasePlayer_MakeBomber, "CBasePlayer_MakeBomber", false);
}

public CBasePlayer_MakeBomber(const this) {
    if(!is_user_bot(this))
        return HC_CONTINUE;
    
    SetHookChainReturn(ATYPE_BOOL, 0);
    return HC_SUPERCEDE;
}
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    register_plugin("Bot_no_bomb", "1.0.0", "SNauPeR");
    RegisterHookChain(RG_CBasePlayer_MakeBomber, "CBasePlayer_MakeBomber", false);
}

public CBasePlayer_MakeBomber(const this) {
    SetHookChainReturn(ATYPE_BOOL, 0);
    return HC_SUPERCEDE;
}
 
Сообщения
335
Реакции
93
Помог
2 раз(а)
SNauPeR, то, что кинул — блокирует. Он блокирует при выдаче в начале раунда. Если выдавать c4 через rg_give_item, то пропустит. Используй true/false для bool
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Noob_with_cheats, мой косяк, не совсем так выразился. Блокирует получением ботами бомбы в начале раунда, но бомба не выдавалась живому игроку*
7 Июн 2022
MayroN, цели карты я знаю, у меня вопрос на счет квара )
Я уже привёл пример, что при "1", боты каким-то чудом ставят бомбу и выполняют задание карты, хотя вроде как не должны. Соответственно вопрос, есть ли ещё "сюрпризы"
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Блокирует получением ботами бомбы в начале раунда, но бомба не выдавалась живому игроку*
То есть ты думал, что если суперсиднешь выдачу бомбы, то она автоматически выдастся другому (ещё и игроку)? Это так не работает. Ты просто-напросто заблокировал выдачу бомбы. Нужно вручную выдать её игроку. А выше даже функцию кинули для трансфера бомбы.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
bizon,
как будто я профи :dntknw:
Видел функцию, ну сделал подобный по сути костыль
Остался вопрос на счет работы значений квара
 
Сообщения
702
Реакции
54
SNauPeR, по поводу квара, это насколько помню просто блокировка выполнения цели карты и никак не влияет на владение бомбой
 
Сообщения
1,560
Реакции
1,572
Помог
2 раз(а)
При значении этого квара, тестами выяснил, что 0 - бомба выдается ботам (как правило) и боты ставят бомбу (выполняют цели карты), 1 - не выдается и боты все равно выполняют цели карты (проверено, отдав боту бомбу)
Да, - здесь всё правильно
А ещё я знаю,что ситуация к примеру такая-же "под настроение" из розминированием бомбы.
Если ты живой,то Боты дают тебе только возможность дефузить + - ,если же умер и нет реал игроков - дефузят сами

А что нужно то тебе ? )
Что-бы он после поднятия бомбы не выполнял цель ?
Или же + и запретить поднятие?
Всёравно же он будет получать бомбу из земли и решать уже ,что с ей делать
 

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    register_plugin("Real Bomber", "0.1", "");
    RegisterHookChain(RG_CBasePlayer_MakeBomber, "CBasePlayer_MakeBomber_Pre", false);
}

public CBasePlayer_MakeBomber_Pre(const id) {
    is_user_bot(id) && SetHookChainArg(1, ATYPE_INTEGER, getRealPlayer());
}

getRealPlayer() {
    new data[MAX_PLAYERS], players;
    get_players(data, players, "aceh", "TERRORIST");
    return data[random(players)];
}
P.S. В данном варианте ничего не блокируем, просто переназначаем индекс игрока, который будет носить бомбу.
P.S.(1) Проверку is_user_bot(id) в хукчейне можно не делать.
 

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

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