Поиск Возрождение тиммейта аналог в КС 1.6

Статус
В этой теме нельзя размещать новые ответы.

ifx

Сообщения
330
Реакции
149
Помог
4 раз(а)
В ксс есть плагин Revival, игрок может оживлять тиммейтов своей команды, находясь рядом с трупом
настройки и примеры тут - https://hlmod.ru/resources/revival.1018/

1587142870540.png

может для кс16 кто-то встречал такое?
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
Да я,еще тут есть тот кто попытается реализовать это.
 
Сообщения
494
Реакции
109
Помог
16 раз(а)
ifx, ничем, я делал заказ,но исходник оказался слишком хорош для меня,в итоге без исходника мне лично плагин не нужен.
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
Хм, точно, можно черепки и написать все это на мете.
 
Сообщения
475
Реакции
249
Помог
6 раз(а)
Интересно, как игроки со сборками от Русского Мясника будут восстанавливать головы погибших))
 

d3m37r4

111111
Сообщения
1,429
Реакции
1,169
Помог
10 раз(а)
Интересно, как игроки со сборками от Русского Мясника будут восстанавливать головы погибших))
А что там? Не шарю просто за "сборки от Русского Мясника".
 
Сообщения
475
Реакции
249
Помог
6 раз(а)
d3m37r4, модели с разлетающейся головой на мелкие кусочки.
 
Сообщения
59
Реакции
27
Помог
1 раз(а)
Набросал кусочек кода, не нашел других вариантов отловить труп, кроме как созданием энтити. Так же не претендую на идеальное создание энтити и работой с координатами. Если у знающих людей есть идеи как все более грамотно реализовать, выслушаю с удовольствием.

И вопрос к тс'у
Игрок возрождается на том же месте где умер?

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


#pragma semicolon 1

new const Title[] = "Revive";
new const Version[] = "0.1a";
new const Author[] = "unrealfart";

public plugin_init()
{
    register_plugin(Title, Version, Author);

    RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Pre");
    RegisterHookChain(RG_CBasePlayer_ObjectCaps, "CBasePlayer_ObjectCaps_Pre");
}

public CBasePlayer_Killed_Pre(iVictim, iAttacker, iGib)
{
    new Float:flOrigin[3];
    get_entvar(iVictim, var_origin, flOrigin);
    
    new iEntity = rg_create_entity("info_target", false);

    if(is_nullent(iEntity))
    {
        return;
    }

    engfunc(EngFunc_SetSize, iEntity, {-50.0, -10.0, -50.0}, {50.0, 10.0, -25.0});
    engfunc(EngFunc_SetOrigin, iEntity, flOrigin);

    set_entvar(iEntity, var_classname, "corpse");
    set_entvar(iEntity, var_movetype, MOVETYPE_NONE);
    set_entvar(iEntity, var_solid, SOLID_NOT);
    set_entvar(iEntity, var_iuser4, iVictim);
}

public CBasePlayer_ObjectCaps_Pre(iPlayer)
{
    if(get_member(iPlayer, m_afButtonPressed) & IN_USE)
    {   
        new iEntity;
        new iOrigin[3];
        get_user_origin(iPlayer, iOrigin, 3);

        new Float:flOrigin[3];

        flOrigin[0] = float(iOrigin[0]);
        flOrigin[1] = float(iOrigin[1]);
        flOrigin[2] = float(iOrigin[2]);

        iEntity = find_ent_in_sphere(1, flOrigin, 0.1);

        if(is_entity(iEntity))
        {
            new szClassName[32];
            entity_get_string(iEntity, EV_SZ_classname, szClassName, charsmax(szClassName));

            if(equal(szClassName, "corpse"))
            {
                new iTarget;
                iTarget = get_entvar(iEntity, var_iuser4);
                rg_round_respawn(iTarget);
                set_entvar(iEntity, var_flags, FL_KILLME);
            }
        }
    }
}
13 Ноя 2020
И еще, если у кого-то есть идеи со всякими свистоплясками по типу звуков, эффектов и все такое, то тоже пишите
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
unreal fart, задебаж как часто вызывается objectCaps и офигеешь, ещё и цикл по всем энтити.
 
Сообщения
59
Реакции
27
Помог
1 раз(а)
fl0wer, примерно 150 раз в секунду) Есть какие-то предложения по избавлению от этой функции?
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
unreal fart, оверрайднуть функцию и поставить FCAP_CONTINUOUS_USE или FCAP_ONOFF_USE, всю логику перенести в SetUse у энтити (естественно без поиска в сфере).
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
Как-то так
Код:
#pragma semicolon 1

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <reapi>

new const CORPSE_CLASSNAME[] = "ent_corpse";

new const Float:CORPSE_MINS[3] = { -24.0, -24.0, 0.0 };
new const Float:CORPSE_MAXS[3] = { 24.0, 24.0, 24.0 };

new g_iCorpse[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("Revive Player", "1.0.0", "fl0wer");

    register_message(get_user_msgid("ClCorpse"), "@MSG_ClCorpse");

    RegisterHam(Ham_ObjectCaps, "info_target", "@CInfoTarget_ObjectCaps_Pre", false);

    RegisterHookChain(RG_CBasePlayer_Spawn, "@CBasePlayer_Spawn_Post", true);
}

public client_disconnected(id)
{
    Corpse_Remove(id);
}

@CBasePlayer_Spawn_Post(id)
{
    Corpse_Remove(id);
}

@MSG_ClCorpse(id, dest, player)
{
    new model[PLATFORM_MAX_PATH];
    new Float:vecOrigin[3];
    new Float:vecAngles[3];

    get_msg_arg_string(1, model, charsmax(model));
    format(model, charsmax(model), "models/player/%s/%s.mdl", model, model);

    for (new i = 0; i < 3; i++)
    {
        vecOrigin[i] = float(get_msg_arg_int(2 + i)) / 128.0;
        vecAngles[i] = get_msg_arg_float(5 + i);
    }

    new sequence = get_msg_arg_int(9);
    new team = get_msg_arg_int(11);
    new playerId = get_msg_arg_int(12);

    Corpse_Create(model, vecOrigin, vecAngles, sequence, team, playerId);
    return PLUGIN_HANDLED;
}

@CInfoTarget_ObjectCaps_Pre(id)
{
    if (!FClassnameIs(id, CORPSE_CLASSNAME))
        return HAM_IGNORED;

    SetHamReturnInteger(FCAP_ONOFF_USE);
    return HAM_OVERRIDE;
}

Corpse_Create(model[], Float:vecOrigin[3], Float:vecAngles[3], sequence, team, owner)
{
    new id = rg_create_entity("info_target");

    if (is_nullent(id))
        return;

    g_iCorpse[owner] = id;

    engfunc(EngFunc_SetModel, id, model);
    engfunc(EngFunc_SetSize, id, CORPSE_MINS, CORPSE_MAXS);
    engfunc(EngFunc_SetOrigin, id, vecOrigin);

    set_entvar(id, var_classname, CORPSE_CLASSNAME);
    set_entvar(id, var_angles, vecAngles);
    set_entvar(id, var_team, team);
    set_entvar(id, var_owner, owner);

    set_entvar(id, var_sequence, sequence);
    set_entvar(id, var_framerate, 1.0);
    set_entvar(id, var_animtime, 0.0);

    SetUse(id, "@Corpse_Use");
}

Corpse_Remove(id)
{
    new corpse = g_iCorpse[id];

    g_iCorpse[id] = 0;

    if (is_nullent(corpse))
        return;

    set_entvar(corpse, var_flags, FL_KILLME);
}

@Corpse_Use(id, activator, caller, USE_TYPE:useType, Float:value)
{
    if (activator != caller)
        return;

    if (!ExecuteHam(Ham_IsPlayer, activator))
        return;

    if (get_member(activator, m_iTeam) != get_entvar(id, var_team))
        return;

    new owner = get_entvar(id, var_owner);

    Corpse_Remove(owner);
    rg_round_respawn(owner);
}
 

Вложения

iPlague

♿️
Сообщения
230
Реакции
129
Помог
2 раз(а)
У меня так получилось

 

d3m37r4

111111
Сообщения
1,429
Реакции
1,169
Помог
10 раз(а)
iPlague, statustext приляпай еще, при наведении на труп, чтобы понимать что за союзник)
 
  • Нравится
Реакции: Ayk

iPlague

♿️
Сообщения
230
Реакции
129
Помог
2 раз(а)
d3m37r4, как вариант просто ник в чате писать
 

d3m37r4

111111
Сообщения
1,429
Реакции
1,169
Помог
10 раз(а)
iPlague, слишком просто и банально.
 
Сообщения
37
Реакции
9
А есть вариант, сделать...
  • Что бы возрождение происходило на том месте, где поднимаешь ?
  • Сделать СтатусБар при возрождении, на подобие когда разминируешь бомбу, полосочку ?
Допустим полосочка со временем в 3 - 4 сек и потом возрождало на этом же месте, а не на респауне.
Спасибо.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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