BotFeatures

BotFeatures 0.0.3fix2

Нет прав для скачивания
Сообщения
461
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Пользователь Vaqtincha разместил новый ресурс:

BotFeatures - Управление ботами

Это переписанный с нуля плагин Bot Features, в котором учтены прошлые ошибки и задействован функционал reapi

Данный функционал используется в cs go.
Позволяет взять управление ботом игроку, который уже умер и желает продолжить игру и помочь команде победить
При взятии бота игроком, игрок получает:
  • Позицию бота
  • Позицию прицела бота
  • Положение в присяде бота (Duck)
  • Оружие бота
  • Деньги бота
  • Экипировку бота
  • Жизни и броню бота...
Узнать больше об этом ресурсе...
 
Сообщения
461
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Сообщения
96
Реакции
120
Помог
1 раз(а)
Vaqtincha, где-то есть стаття по добавлению ботов на сервер? Чет найти не могу
 
Сообщения
342
Реакции
65
Помог
6 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
h1k3, на гитхабе
 
  • Нравится
Реакции: h1k3
Сообщения
96
Реакции
120
Помог
1 раз(а)
ops244, Vaqtincha, спасибо
19 Июн 2017
register_clcmd("nightvision", "ClCmd_ControlBot")
Как правильно будет указать управление на клавишу E?
+use?
 
Сообщения
30
Реакции
48
Помог
2 раз(а)
Здравствуйте. Помогите рялизовать управление ботом на клавишу T.
Если использовать модуль engine то можно так

PHP:
register_impulse(201, "ClCmd_ControlBot")


но мне хотелось бы на reapi. Я так понимаю нужно использовать RG_CBasePlayer_ImpulseCommands
 

d3m37r4

111111
Сообщения
1,420
Реакции
1,162
Помог
10 раз(а)
faKe, что-то типа этого
Код:
RegisterHookChain(RG_CBasePlayer_ImpulseCommands, "CBasePlayer_ImpulseCommands", false);

public CBasePlayer_ImpulseCommands(const id)
{
if(get_entvar(id, var_impulse) == 201)
{
тут что-то должно быть
}
}
 
Сообщения
461
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Пользователь Vaqtincha обновил ресурс BotFeatures новой записью:

BACK_ITEMS_ON_RESTARTROUND

Добавлено опции:

Код:
#define BACK_ITEMS_ON_RESTARTROUND // Вернуть боту оружия и предметов при новом раунде

Включено по умолчанию
Узнать больше об этом обновлении...
20 Июн 2017
d3m37r4, Плохой пример...
 
Сообщения
461
Реакции
430
Предупреждения
8
Помог
7 раз(а)
d3m37r4, логируй функцию
 
Сообщения
461
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Сообщения
315
Реакции
104
Помог
2 раз(а)
Что делать, если не функционирует плагин? 0.0.3 версия стоит.
ХУД сообщение видно, но на кнопку "N" и ни на какую другую (зажать\1 раз нажать) - не выбирается бот((( Естественно не в спектрах сидя.
 

ssx

Сообщения
272
Реакции
71
1. ХУД текст только на своих но можно выбрать с любой команды. Баг или фича?
2. Не удобно ждать несколько сек после того как тебя убили чтобы выбрать бота. Нужно сделать возможность сразу вызвать менюшку и выбрать бота, это выгодней ибо игра очень быстрая и нужно быстро соображать. Минус только в том что не знаешь позицию бота. В этом же плагине удобно что видишь где бот.
Пришла идея: нужен выбор с менюшки и с режима наблюдения . + в меню можно было бы дописывать локацию (брать из плагина локации). Или в менюшке сортировать по расстоянию от той точки где тебя убили или наблюдаешь. Чтобы сразу как убили - жмешь кнопку - вылазит меню и там первый в списке тот что само ближе к тебе находится.
3. Фразы в чат от ботов и смена ника - лишняя и не нужная хрень. Можно просто "игрок %s начал играть вместо бота %s"

П.С. долго не мог понять почему не работает плагин. Оказалось что из-за:
Код:
	if(!cvar_exists("bot_zombie"))
	{
		pause("ad")
		return 
	}
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Конечно, я понимаю, что поддержка плагина отсутствует, но хочу предложить вариант с передачей скорости бота игроку, поскольку игроки на многоуровневых картах, например, Vertigo, часть пользуются таким багом:
  1. скидывают бомбу вниз за пределы игровой зоны
  2. умирают
  3. боты бегут за бомбой и падают вниз
  4. в последний момент подбирают бота
  5. получают мизерный урон от падения, поскольку скорость падения была прервана
  6. играют за пределами карты
Знаю, что в таких манипуляциях толку 0, да и можно было просто за пределами игровой зоны накинуть ентити, которая дамажит, но не всем такой вариант подойдет.

Код:
public CSGameRules_GetPlayerSpawnSpot(const pPlayer)
{
    DisableHookChain(g_hGetPlayerSpawnSpot)

    new pBot = g_aPlayerData[pPlayer][pBotIndex]
    if(pBot > 0 && !is_nullent(pBot))
    {
--        new Float:vecOrigin[coord_e], Float:vecVAngles[coord_e], Float:vecMins[coord_e], Float:vecMaxs[coord_e]
++        new Float:vecOrigin[coord_e], Float:vecVAngles[coord_e], Float:vecMins[coord_e], Float:vecMaxs[coord_e], Float:vecVelocity[coord_e]

        get_entvar(pBot, var_origin, vecOrigin)
++        get_entvar(pBot, var_velocity, vecVelocity)
        get_entvar(pBot, var_v_angle, vecVAngles)    // note: v_angle
        get_entvar(pBot, var_mins, vecMins)
        get_entvar(pBot, var_maxs, vecMaxs)

        TransferItems(pBot, pPlayer)
        KillBot(pBot, vecOrigin)

--        if(SetPlayerPosition(pPlayer, vecOrigin, vecVAngles, vecMins, vecMaxs, (get_entvar(pBot, var_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN))
++        if(SetPlayerPosition(pPlayer, vecOrigin, vecVAngles, vecMins, vecMaxs, vecVelocity, (get_entvar(pBot, var_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN))
        {
            SetHookChainReturn(ATYPE_INTEGER, pPlayer)
            return HC_SUPERCEDE
        }
    }

    return HC_CONTINUE
}

--bool:SetPlayerPosition(const pPlayer, Float:vecOrigin[coord_e], Float:vecAngles[coord_e], Float:vecMins[coord_e], Float:vecMaxs[coord_e], const iHullNumber)
++bool:SetPlayerPosition(const pPlayer, Float:vecOrigin[coord_e], Float:vecAngles[coord_e], Float:vecMins[coord_e], Float:vecMaxs[coord_e], Float:vecVelocity[coord_e], const iHullNumber)
{
    static const Float:vecMove[][coord_e] = { { 1.0, 1.0, 0.0 }, { 1.0, -1.0, 0.0 }, { -1.0, -1.0, 0.0 }, { -1.0, 1.0, 0.0 } }
    new i

    do
    {
        if(IsFreeSpace(vecOrigin, iHullNumber))
        {
            if(iHullNumber == HULL_HEAD)
            {
                set_entvar(pPlayer, var_flags, get_entvar(pPlayer, var_flags) | FL_DUCKING)
                set_entvar(pPlayer, var_button, get_entvar(pPlayer, var_button) | IN_DUCK)
            }
  
            SET_SIZE(pPlayer, vecMins, vecMaxs)
            SET_ORIGIN(pPlayer, vecOrigin)
--            set_entvar(pPlayer, var_velocity, VECTOR_ZERO)
++            set_entvar(pPlayer, var_velocity, vecVelocity)
            // set_entvar(pPlayer, var_basevelocity, VECTOR_ZERO)
            set_entvar(pPlayer, var_v_angle, VECTOR_ZERO)
            set_entvar(pPlayer, var_angles, vecAngles)
            set_entvar(pPlayer, var_punchangle, VECTOR_ZERO)
            set_entvar(pPlayer, var_fixangle, 1)     // const FORCE_VIEW_ANGLES = 1

            return true
        }
        else
        {
            vecOrigin[X] = (vecOrigin[X] - vecMins[X] * vecMove[X])
            vecOrigin[Y] = (vecOrigin[Y] - vecMins[Y] * vecMove[Y])
            i++
        }

        // server_print("Attemps: %i", i)
    } while (i < sizeof(vecMove))

    return false
}
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Это... Если взять бота и тебе прилетит в голову, то не будет отображаться значок HS в киллфиде. Как можно поправить?
 
Сообщения
2,144
Реакции
1,223
Помог
44 раз(а)
Отвечу на свой же вопрос. В общем, можно так сделать:
Код:
public CSGameRules_PlayerKilled(const pVictim, const pevKiller, const pevInflictor)
{
    new pKillerBot, pVictimBot
    if((pVictimBot = g_aPlayerData[pVictim][pBotIndex]) > 0)
    {
        set_user_info(pVictim, "*bot", "0")
        SetBotName(pVictimBot, g_aPlayerData[pVictimBot][szBotName])
        
++        if(get_member(pVictim, m_bHeadshotKilled)) {
++            set_member(pVictimBot, m_bHeadshotKilled, true);
++        }
        
        g_aPlayerData[pVictim][pBotIndex] = 0
    }

    if(pVictim == pevKiller)
        return HC_CONTINUE

    if(pVictimBot > 0) {
        SetHookChainArg(1, ATYPE_INTEGER, pVictimBot)
    }

    if(IsPlayer(pevKiller) && (pKillerBot = g_aPlayerData[pevKiller][pBotIndex]) > 0)
    {
        SetHookChainArg(2, ATYPE_INTEGER, pKillerBot)
      
        if(pevKiller == pevInflictor) {
            SetHookChainArg(3, ATYPE_INTEGER, get_member(pevKiller, m_pActiveItem))
        }
#if defined KILL_REWARD
        rg_add_account(pevKiller, KILL_REWARD)
#endif
#if defined KILL_FRAGS
        ExecuteHam(Ham_AddPoints, pevKiller, KILL_FRAGS, false)
#endif
    }

    return HC_CONTINUE
}
 

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

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