Raised This Month: $51 Target: $400
 12% 

Revive team player after die


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
dkandrei
New Member
Join Date: May 2023
Old 05-22-2023 , 17:36   Revive team player after die
Reply With Quote #1

Hello, please need for server cs 1.6 plugin for revive team player after die. When a player dies and you are alive when you go to him so that you can release the life from the press E for revive team player It is like defuse the bomb.
dkandrei is offline
Siska1
Senior Member
Join Date: Feb 2020
Location: BedRock
Old 05-24-2023 , 09:47   Re: Revive team player after die
Reply With Quote #2

Please use google when looking for plugins before posting a topic. It doesn't take more than three seconds. There are more on the net, just search...
https://www.amxx-bg.info/forum/viewt...p?f=32&p=66293
https://forums.alliedmods.net/showthread.php?t=105241
https://dev-cs.ru/threads/23957/
__________________

Last edited by Siska1; 05-24-2023 at 13:47.
Siska1 is offline
Send a message via Skype™ to Siska1
itsme1
Member
Join Date: Jun 2006
Location: Birmingham UK
Old 03-22-2024 , 18:13   Re: Revive team player after die
Reply With Quote #3

yes looking for the same.

revive over the dead body press E to revive for 3 -5 seconds.

Anyone already have this ?

P.M Siaka

Thanks for you help.

Please use google when looking for plugins before posting a topic. It doesn't take more than three seconds. There are more on the net, just search...

3 seconds please find it then.
itsme1 is offline
tedaimlocks
Member
Join Date: Jan 2024
Old 03-23-2024 , 03:38   Re: Revive team player after die
Reply With Quote #4

PHP Code:
/*
    Поддержать автора:
    2200 0202 2057 0834 - мир
    +79788978612 - киви
*/

#define PLUGIN            "Revive/Mined Die Players"
#define VERSION            "2.3.9"

//#define UNSTUCK            // если у вас люди при воскрешении застряют люди в текстурах (и если у вас есть прохождения сквозь свових) то расскоментируйте это.
#define SKIN            // активируйте если у вас есть субмодели (skin) в моделях

new const CORPSE_CLASSNAME[] = "info_corpse";

#define NOTIFY(%0,%1,%2,%3) \
    
%0(%1, %2, %3); \
    \
    if ((
<< %2) & ((<< print_team_red) | (<< print_center)) && CVAR[SOUND_NOTIFICATION]) \
        
client_cmd(%1"spk ^"buttons/blip2.wav^"");


#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <reapi>
#include <emma_jule>
//#include <aes_v>


enum _:CVARS
{
    
ACCESS[16],
    
MAX_SPAWNS,
    
MAX_REVIVALS,
    
MAX_MINES,
    
DURATION,
    
OBSERVER,
    
NO_FIRE,
    
RENDER,
    
BAR,
    
Float:RADIUS,
    
Float:DAMAGE,
    
Float:SHOCK,
    
SCREENPUNCH,
    
SPAWN_MODE,
#if REAPI_VERSION >= 5200231
    
GIBS,
#endif
    
GUN[256],
    
Float:NEW_HEALTH,
    
Float:BONUS_HEALTH,
    
FRAGS,
    
NO_DEATH,
    
COST,
    
DUEL,
    
BOMB,
    
VIP,
    
ROUND,
    
DOMINATION,
    
Float:TIME_EXPIRED,
    
SOUND_NOTIFICATION,
    
DONT_MOTION,
    
CAN_MINED,
    
NOTIFICATION,
    
REVIVE_SAMPLE[MAX_RESOURCE_PATH_LENGTH],
    
MINED_SAMPLE[MAX_RESOURCE_PATH_LENGTH],
    
EXPLODE_SAMPLE[MAX_RESOURCE_PATH_LENGTH],
    
SIZE[64],
    
};    new 
CVAR[CVARS];


// Дата на каждого игрока
enum _:REVIVE_DATA
{
    
CORPSE,
    
IS_REVIVING,
    
REVIVALS_COUNT,
    
MINES_COUNT,
    
};    new 
eCorpseStruct[MAX_PLAYERS 1][REVIVE_DATA];


new 
g_iAccessFlagsg_iPreventFlags;
new 
g_sModelIndexFireballg_sModelIndexFireball2g_sModelIndexFireball3;
new 
Float:g_vecCorpseMins[3], Float:g_vecCorpseMaxs[3];
new 
Float:flNextCorpseUsingTime[MAX_PLAYERS 1];

public 
plugin_precache()
{
    
register_plugin(PLUGINVERSION"Emma Jule");
    
    @
CreateCvars();
    
    
// def sprites
    
g_sModelIndexFireball precache_model("sprites/zerogxplode.spr");
    
g_sModelIndexFireball2 precache_model("sprites/eexplo.spr");
    
g_sModelIndexFireball3 precache_model("sprites/fexplo.spr");
}

public 
plugin_init()
{
    if (
register_dictionary("revive_teammates.txt") == 0) {
        
//createLangFile("revive_teammates.txt");
    
}
    
    
register_event("TeamInfo""Event_TeamInfo""a""1>0");
    
register_message(get_user_msgid("ClCorpse"), "@CorpseSpawn");
    
    
RegisterHookChain(RG_CSGameRules_CleanUpMap"CSGameRules_CleanUpMap"true);
    if (
CVAR[DONT_MOTION])
        
RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed"CBasePlayer_ResetMaxSpeed"true);
    
    
RegisterHam(Ham_ObjectCaps"info_target""fw_ObjectCaps"false);
}

public 
Event_TeamInfo()
{
    @
CorpseRemove(read_data(1));
}

public 
CSGameRules_CleanUpMap()
{
    new 
id rg_find_ent_by_class(NULLENTCORPSE_CLASSNAME);
    
    while (
id 0)
    {
        @
CorpseRemove(get_entvar(idvar_owner));
        
        
id rg_find_ent_by_class(idCORPSE_CLASSNAME);
    }
    
    
arrayset(eCorpseStruct[0][_:0], 0sizeof(eCorpseStruct) * sizeof(eCorpseStruct[]));
}

public 
CBasePlayer_ResetMaxSpeed(id)
{
    if (
eCorpseStruct[id][IS_REVIVING])
    {
        
set_entvar(idvar_maxspeed1.0);
    }
}

public 
fw_ObjectCaps(id)
{
    if (!
FClassnameIs(idCORPSE_CLASSNAME)) {
        return 
HAM_IGNORED;
    }
    
    
SetHamReturnInteger(FCAP_ONOFF_USE);
    return 
HAM_OVERRIDE;
}

public 
Corpse_Use(idactivatorcallerUSE_TYPE:useTypeFloat:value)
{
    if (
value == 0.0)
        return;
    
    if (
activator != caller)
        return;
    
    if (!
ExecuteHam(Ham_IsPlayeractivator))
        return;
    
    
// static Float:flCurTime;
    
new Float:flCurTime get_gametime();
    
    
// static Float:flNextCorpseUsingTime[MAX_PLAYERS + 1];
    
if (flNextCorpseUsingTime[activator] > flCurTime)
        return;
    
    
flNextCorpseUsingTime[activator] = flCurTime 0.1;
    
    
// if (~get_entvar(activator, var_flags) & FL_ONGROUND)
        // return;
    
    
if (rg_get_current_round() < CVAR[ROUND])
    {
        
NOTIFY(client_print_coloractivatorprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_ROUND"CVAR[ROUND])
        return;
    }
    
    if (!
rg_is_time_expired(CVAR[TIME_EXPIRED]))
    {
        
NOTIFY(client_print_coloractivatorprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_TIME_RESTRICTIONS"CVAR[TIME_EXPIRED])
        return;
    }
    
    new 
TeamName:team get_member(activatorm_iTeam);
    if (
CVAR[DOMINATION] > && rg_get_team_wins_row(CVAR[DOMINATION]) == team)
    {
        
NOTIFY(client_print_coloractivatorprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_DOMINATION")
        return;
    }
    
    if (
CVAR[VIP] && get_member(activatorm_bIsVIP))
    {
        
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_VIP_PERSON")
        return;
    }
    
    if ((
caller get_entvar(idvar_euser1)) > 0)
    {
        
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_ALREADY_USING_BY"caller)
        return;
    }
    
    if (
UTIL_IsRestricted(idactivator))
        return;
    
    
// Получаем владельца трупа
    
caller get_entvar(idvar_owner);
    
    
// ВОСКРЕШЕНИЕ
    
if (team == get_entvar(idvar_team))
    {
        if (
get_member(callerm_iNumSpawns) > CVAR[MAX_SPAWNS])
        {
            
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_MAX_SPAWNS")
            return;
        }
        
        if (
eCorpseStruct[activator][REVIVALS_COUNT] >= CVAR[MAX_REVIVALS])
        {
            
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_MAX_REVIVALS"CVAR[MAX_REVIVALS])
            return;
        }
        
        
set_dhudmessage(016030, -1.00.7623.02.00.030.4);
        
show_dhudmessage(caller"%L"LANG_PLAYER"RT_REVIVED"activator);
        
        
set_dhudmessage(016030, -1.00.7623.02.00.030.4);
        
show_dhudmessage(activator"%L"LANG_PLAYER"RT_REVIVING"callerCVAR[DURATION]);
        
        if (
CVAR[OBSERVER])
        {
            
// set_entvar(caller, var_iuser2, OBS_IN_EYE);
            
rg_internal_cmd(caller"specmode""4");
            
set_entvar(callervar_iuser2activator);
            
            
set_member(callerm_hObserverTargetactivator);
            
set_member(callerm_flNextObserverInputflCurTime 1.6);
        }
    }
    
// МИНИРОВАНИЕ
    
else
    {
        if (!
CVAR[CAN_MINED])
        {
            
// NOTIFY(client_print, activator, print_center, "%L", LANG_PLAYER, "RT_NO_MINED_MODE")
            
return;
        }
        
        if (
get_entvar(idvar_euser2) > 0)
        {
            
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_ALREADY_MINED")
            return;
        }
        
        if (
eCorpseStruct[activator][MINES_COUNT] >= CVAR[MAX_MINES])
        {
            
NOTIFY(client_printactivatorprint_center"%L"LANG_PLAYER"RT_MAX_MINES"CVAR[MAX_MINES])
            return;
        }
        
        
set_dhudmessage(160030, -1.00.7623.02.00.030.4);
        
show_dhudmessage(activator"%L"LANG_PLAYER"RT_MINING"caller);
    }
    
    
// Присваеваем булевую которую можно проверять в других функциях
    
eCorpseStruct[activator][IS_REVIVING] = true;
    
    
// Ограничиваем движение игрока согласно флагам
    
set_entvar(activatorvar_iuser3get_entvar(activatorvar_iuser3) | g_iPreventFlags);
    
    if (
CVAR[NO_FIRE]) {
        
set_member(activatorm_bIsDefusingtrue);
    }
    
    if (
CVAR[BAR]) {
        
rg_send_bartime(activatorCVAR[DURATION]);
    }
    
    if (
CVAR[DONT_MOTION])
    {
        
rg_reset_maxspeed(activator);
        
set_entvar(activatorvar_velocityNULL_VECTOR);
    }
    
    
set_entvar(idvar_euser1activator);
    
set_entvar(idvar_fuser1flCurTime float(CVAR[DURATION]));
    
set_entvar(idvar_nextthinkflCurTime 0.1);
    
    if (
CVAR[RENDER])
    {
        
UTIL_Render(id,
            .
mode kRenderTransAlpha,
            .
flColor Float:{ 200.0200.0200.0 },
            .
fAmount 200.0
        
);
    }
}

public 
Corpse_Think(id)
{
    
// Get Activator
    
new pActivator get_entvar(idvar_euser1);
    
    if (!
VALID_PLAYER(pActivator)) {
        
// return;
    
}
    
    if (!
is_user_alive(pActivator) || ~get_entvar(pActivatorvar_button) & IN_USE || UTIL_IsRestricted(idpActivator))
    {
        
ResetRestrictions(id, !is_user_connected(pActivator) ? pActivator);
        return;
    }
    
    new 
Float:flTimeLeft;
    
get_entvar(idvar_fuser1flTimeLeft);
    if ((
flTimeLeft != 0.0 && get_gametime() >= flTimeLeft))
    {
        new 
Float:vecSrc[3];
        
get_entvar(idvar_originvecSrc);
        
        if (
get_member(pActivatorm_iTeam) != get_entvar(idvar_team))
        {
            if (
CVAR[MINED_SAMPLE][0]) {
                
rh_emit_sound2(id0CHAN_BODYCVAR[MINED_SAMPLE]);
            }
            
            
NOTIFY(client_print_colorpActivatorprint_team_blue"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_MINED_SUCCESS")
            
            
rg_add_account(pActivator, -CVAR[COST]);
            
eCorpseStruct[pActivator][MINES_COUNT]++;
            
ResetRestrictions(idpActivator);
            
            
// Set pMinedOwner
            
set_entvar(idvar_euser2pActivator);
        }
        else
        {
            new 
pOwner get_entvar(idvar_owner), pMiner get_entvar(idvar_euser2);
            new 
TeamName:iTeam get_entvar(idvar_team);
            
            if (
pMiner 0)
            {
                new 
Float:vecSrc[3];
                
get_entvar(idvar_originvecSrc);
                
            
#if REAPI_VERSION >= 5200231
                
if (CVAR[GIBS])
                    
rg_spawn_random_gibs(id5);
            
#endif
                
                // Делаем взрыв
                
UTIL_MakeExplosionEffects(vecSrc);
                
                
// player not connected fix
                
if (!is_user_connected(pMiner) || (<< _:get_member(pMinerm_iTeam) & ((<< _:TEAM_UNASSIGNED) | (<< _:TEAM_SPECTATOR) | (<< _:iTeam))))
                {
                    
pMiner 0;
                }
                
                for (new 
1Float:fReduceDamageFloat:vecEnd[3]; <= MaxClientsi++)
                {
                    if (!
is_user_alive(i))
                        continue;
                    
                    if (
get_member(im_iTeam) != iTeam)
                        continue;
                    
                    
get_entvar(ivar_originvecEnd);
                    if ((
fReduceDamage = (CVAR[DAMAGE] - vector_distance(vecSrcvecEnd) * (CVAR[DAMAGE] / CVAR[RADIUS]))) < 1.0)
                        continue;
                    
                    
set_member(im_LastHitGroupHITGROUP_GENERIC);
                    if (
ExecuteHamB(Ham_TakeDamageiidpMinerfReduceDamageDMG_GRENADE DMG_ALWAYSGIB))
                    {
                        
set_member(im_flVelocityModifierCVAR[SHOCK]);
                        
                        if (
CVAR[SCREENPUNCH])
                            
set_entvar(ivar_punchangleFloat: { 42.219.064.4 });
                    }
                }
                
                @
CorpseRemove(pOwner);
                
                
//if (CVAR[MINED_EXPLOSION_SAMPLE][0]) {
                    //rh_emit_sound2(id, 0, CHAN_ITEM, CVAR[MINED_EXPLOSION_SAMPLE]);
                //}
                
                
NOTIFY(client_print_color0print_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_WAS_MINED"pActivator)
            }
            else
            {
                
// ::GiveDefaultItems() игнорирование при SpawnEquip
                
set_member(pOwnerm_bNotKilledtrue);
                
                
// no ScoreInfo 
                
if (CVAR[NO_DEATH]) {
                    
set_member(pOwnerm_iDeathsmax(get_member(pOwnerm_iDeaths) - 10/* -1 fix */ );
                }
                
                
rg_round_respawn(pOwner);
                
                if (
CVAR[SPAWN_MODE])
                {
                
#if defined UNSTUCK
                    // :SpawnSpot()
                    
get_entvar(pActivatorvar_originvecSrc);
                
#endif
                    
engfunc(EngFunc_SetOriginpOwnervecSrc);
                    
set_entvar(pOwnervar_flagsget_entvar(pOwnervar_flags) | FL_DUCKING);
                    
// set_entvar(pOwner, var_button, get_entvar(pOwner, var_button) | IN_DUCK);
                    
set_entvar(pOwnervar_view_ofsFloat:{ 0.00.012.0 });
                }
                
                if (
CVAR[NEW_HEALTH])
                {
                    
set_entvar(pOwnervar_max_healthCVAR[NEW_HEALTH]);
                    
set_entvar(pOwnervar_healthCVAR[NEW_HEALTH]);
                }
                
                if (
CVAR[GUN][0])
                    
rg_give_items(pOwnerCVAR[GUN]);
                else
                    
rg_give_default_items(pOwner);
                
                if (
CVAR[FRAGS]) {
                    
ExecuteHamB(Ham_AddPointspActivatorCVAR[FRAGS], false);
                }
                
                if (
CVAR[BONUS_HEALTH]) {
                    
rg_add_user_health(pActivatorCVAR[BONUS_HEALTH], .obey_limit true);
                    
// ExecuteHamB(Ham_TakeHealth, pActivator, CVAR[BONUS_HEALTH], DMG_GENERIC);
                
}
                
                
// aes_add_player_exp_f(pActivator, 1);
                // client_print_color(pActivator, print_team_default, "%L вы получили^4 1 XP", LANG_PLAYER, "RT_PREFIX");
                
                // Уведомления включены
                
if (CVAR[NOTIFICATION] < 2)
                {
                    if (
CVAR[NOTIFICATION])
                    {
                        
// Всем
                        
NOTIFY(client_print_color0pActivator"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_NOTIFICATION"pActivatorpOwner)
                    }
                    else
                    {
                        
// Только игроку кто воскрешал и тому кого воскресили
                        
NOTIFY(client_print_colorpOwnerpActivator"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_NOTIFICATION"pActivatorpOwner)
                        
NOTIFY(client_print_colorpActivatorprint_team_default"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_NOTIFICATION"pActivatorpOwner)
                    }
                }
                
                if (
CVAR[REVIVE_SAMPLE][0]) {
                    
rh_emit_sound2(id0CHAN_BODYCVAR[REVIVE_SAMPLE]);
                }
                
                
rg_add_account(pActivator, -CVAR[COST]);
                
                
eCorpseStruct[pActivator][REVIVALS_COUNT]++;
            }
        }
    }
    
    
set_entvar(idvar_nextthinkget_gametime() + 0.1);
}

ResetRestrictions(id 0pActivator)
{
    if (
pActivator 0)
    {
        
eCorpseStruct[pActivator][IS_REVIVING] = false;
        
        
set_entvar(pActivatorvar_iuser3get_entvar(pActivatorvar_iuser3) & ~g_iPreventFlags);
        
        if (
CVAR[NO_FIRE]) {
            
set_member(pActivatorm_bIsDefusingfalse);
        }
        
        if (
CVAR[BAR]) {
            
// 3rd party
            
rg_send_bartime(pActivator0);
        }
        
        
rg_reset_maxspeed(pActivator);
    }
    
    if (
id 0)
    {
        
set_entvar(idvar_euser10);
        
set_entvar(idvar_fuser10.0);
        
set_entvar(idvar_nextthink0.0);
        
        if (
CVAR[RENDER])
            
UTIL_Render(id);
    }
}

UTIL_IsRestricted(pCorpsepPlayer)
{
    
// Раунд окончен
    
if (get_member_game(m_bRoundTerminating))
    {
        return 
true;
    }
    
    
// Нельзя использовать труп в повышенном движении
    
if (UTIL_GetPlayerSpeed(pPlayer) > 240.0)
    {
        return 
true;
    }
    
    
// На лестнице
    
if (get_entvar(pPlayervar_movetype) == MOVETYPE_FLY)
    {
        
NOTIFY(client_printpPlayerprint_center"%L"LANG_PLAYER"RT_ON_LADDER")
        return 
true;
    }
    
    
// По уши в воде
    
if (get_entvar(pPlayervar_waterlevel) > 2)
    {
        
NOTIFY(client_printpPlayerprint_center"%L"LANG_PLAYER"RT_IN_WATER")
        return 
true;
    }
    
    
// Нет доступа
    
if (!access(pPlayerg_iAccessFlags))
    {
        
NOTIFY(client_print_colorpPlayerprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_ACCESS")
        return 
true;
    }
    
    
// Бомба установленна
    
if (CVAR[BOMB] && rg_is_bomb_planted())
    {
        
NOTIFY(client_print_colorpPlayerprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_BOMB")
        return 
true;
    }
    
    
// Остались 1 на 1
    
if (CVAR[DUEL] && rg_is_1v1())
    {
        
NOTIFY(client_print_colorpPlayerprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_1V1")
        return 
true;
    }
    
    
// Нет денег
    
if (get_member(pPlayerm_iAccount) < CVAR[COST])
    {
        
NOTIFY(client_printexpPlayerprint_center"#Not_Enough_Money")
        return 
true;
    }
    
    
// Нарушена допустимая дистанция
    
static Float:vecCorpseOrigin[3], Float:vecPlayerOrigin[3];
    
    
get_entvar(pCorpsevar_originvecCorpseOrigin);
    
get_entvar(pPlayervar_originvecPlayerOrigin);
    
    if (
vector_distance(vecCorpseOriginvecPlayerOrigin) > 150.0)
    {
        
NOTIFY(client_print_colorpPlayerprint_team_red"%L %L"LANG_PLAYER"RT_PREFIX"LANG_PLAYER"RT_DISTANCE")
        return 
true;
    }
    
    
// Все по правилам, даю добро
    
return false;
}

// Создание трупа
@CorpseSpawn()
{
/*
    if (GET_CURRENT_ROUND() < CVAR[ROUND]) {
        return PLUGIN_CONTINUE;
    }
*/
    
new id
        
rg_create_entity("info_target");
    
    if (
is_nullent(id)) {
        return 
PLUGIN_HANDLED;
    }
    
    new 
Float:vecOrigin[3], Float:vecAngles[3];
    for (new 
i3i++)
    {
        
vecOrigin[i] = float(get_msg_arg_int(i)) / 128.0;
        
vecAngles[i] = get_msg_arg_float(i);
    }
    
    new 
szModel[32];
    new 
pPlayer get_msg_arg_int(12);
    
get_msg_arg_string(1szModelcharsmax(szModel));
    
    
set_entvar(idvar_classnameCORPSE_CLASSNAME);
    
//set_entvar(id, var_movetype, MOVETYPE_TOSS);
    
set_entvar(idvar_solidSOLID_TRIGGER);
    
set_entvar(idvar_anglesvecAngles);
    
set_entvar(idvar_bodyget_msg_arg_int(10));
#if defined SKIN
    
set_entvar(idvar_skinget_entvar(pPlayervar_skin));
#endif
    
set_entvar(idvar_framerate1.0);
    
set_entvar(idvar_animtime0.0);
    
set_entvar(idvar_sequenceget_msg_arg_int(9));
    
set_entvar(idvar_euser10); // pData activator
    
set_entvar(idvar_fuser10.0); // pData timing
    
set_entvar(idvar_euser20); // pData mined
    
set_entvar(idvar_ownerpPlayer);
    
set_entvar(idvar_teamget_msg_arg_int(11));
    
    
engfunc(EngFunc_SetModelidfmt("models/player/%s/%s.mdl"szModelszModel));
    
engfunc(EngFunc_SetSizeidg_vecCorpseMinsg_vecCorpseMaxs);
    
engfunc(EngFunc_SetOriginidvecOrigin);
    
    
SetUse(id"Corpse_Use");
    
SetThink(id"Corpse_Think");
    
    
eCorpseStruct[pPlayer][CORPSE] = id;
    
    
// hook original corpse
    
return PLUGIN_HANDLED;
}

// Удаление трупа
@CorpseRemove(pOwner)
{
    new 
id eCorpseStruct[pOwner][CORPSE];
    
    
eCorpseStruct[pOwner][CORPSE] = 0;
    
    if (
is_nullent(id)) {
        return;
    }
    
    
ResetRestrictions(.pActivator get_entvar(idvar_euser1));
    
    
SetUse(idNULL_STRING);
    
SetThink(idNULL_STRING);
    
    
set_entvar(idvar_flagsFL_KILLME);
    
set_entvar(idvar_nextthinkget_gametime());
}

// Регистрация кваров
@CreateCvars()
{
    
bind_pcvar_string(create_cvar("rt_access""", .description "Флаг(и) доступа для воскрешений/минирований игроков"), CVAR[ACCESS], charsmax(CVAR[ACCESS]));
    
bind_pcvar_num(create_cvar("rt_max_spawns""3", .description "Сколько максимально может воскреснуть игрок за раунд", .has_max true, .max_val 10.0), CVAR[MAX_SPAWNS]);
    
bind_pcvar_num(create_cvar("rt_max_revivals""2", .description "Сколько максимально может воскресить союзников игрок за раунд"), CVAR[MAX_REVIVALS]);
    
bind_pcvar_num(create_cvar("rt_max_mines""2", .description "Сколько максимально может заминировать врагов игрок за раунд"), CVAR[MAX_MINES]);
    
bind_pcvar_num(create_cvar("rt_duration""5", .description "Длительность возрождения", .has_min true, .min_val 1.0, .has_max true, .max_val 30.0), CVAR[DURATION]);
    
bind_pcvar_num(create_cvar("rt_observer""1", .description "Автоматически переключать мою камеру на того кто меня воскрешает"), CVAR[OBSERVER]);
    
bind_pcvar_num(create_cvar("rt_hook_attack""1", .description "Заблокировать стрельбу во время возрождения/минирования?"), CVAR[NO_FIRE]);
    
bind_pcvar_num(create_cvar("rt_render""1", .description "Подсвечивать труп когда его минируют/возрождают?"), CVAR[RENDER]);
    
bind_pcvar_num(create_cvar("rt_progress_bar""1", .description "Полоска прогресса во время возрождения/минирования?"), CVAR[BAR]);
    
bind_pcvar_float(create_cvar("rt_radius""350.0", .description "Максимальный допустимый радиус поражения", .has_min true, .min_val 64.0, .has_max true, .max_val 500.0), CVAR[RADIUS]);
    
bind_pcvar_float(create_cvar("rt_damage""250.0", .description "Максимальный урон от взрыва (урон наносится в зависимости от радиуса)", .has_min true, .min_val 64.0), CVAR[DAMAGE]);
    
bind_pcvar_float(create_cvar("rt_painshock""0.15", .description "Болевой шок после удара (сила замедления диапазон: от 0 до 1)", .has_min true, .has_max true, .max_val 1.0), CVAR[SHOCK]);
    
bind_pcvar_num(create_cvar("rt_screen_punch""1", .description "Трясти экран от полученного урона (взрывной волны)"), CVAR[SCREENPUNCH]);
    
bind_pcvar_num(create_cvar("rt_spawn_place""1", .description "Спавнить воскрешенного игрока на месте смерти (в противном случае будет на базе)"), CVAR[SPAWN_MODE]);
#if REAPI_VERSION >= 5200231
    
bind_pcvar_num(create_cvar("rt_gibs""1", .description "Спавнить ошметки после взрыва заминированного трупа?"), CVAR[GIBS]);
#endif
    
bind_pcvar_string(create_cvar("rt_weapons""knife deagle", .description "Оружия вновь воскрешенного игрока (пустое значение будет использовать оружия из game.cfg)"), CVAR[GUN], charsmax(CVAR[GUN]));
    
bind_pcvar_float(create_cvar("rt_health""0.0", .description "Здоровье воскрешенного игрока (0 - будет как обычно)", .has_max true, .max_val 255.0), CVAR[NEW_HEALTH]);
    
bind_pcvar_float(create_cvar("rt_bonus_health""10.0", .description "Сколько добавить здоровья игроку за воскрешение", .has_max true, .max_val 100.0), CVAR[BONUS_HEALTH]);
    
bind_pcvar_num(create_cvar("rt_frags""1", .description "Сколько давать фрагов за возрождение?"), CVAR[FRAGS]);
    
bind_pcvar_num(create_cvar("rt_restore_death""1", .description "Обнулить очко смерти игроку которое он получил при смерти"), CVAR[NO_DEATH]);
    
bind_pcvar_num(create_cvar("rt_cost""0", .description "Стоимость услуги (используйте отрицательное значение и тогда будет в + как награда)"), CVAR[COST]);
    
bind_pcvar_num(create_cvar("rt_bomb""0", .description "Нельзя воскрешать когда бомба установленна"), CVAR[BOMB]);
    
bind_pcvar_num(create_cvar("rt_1v1""0", .description "Нельзя воскрешать когда 1 на 1"), CVAR[DUEL]);
    
bind_pcvar_num(create_cvar("rt_vip""0", .description "Может ли VIP игрок воскрешать (as_* карты)"), CVAR[VIP]);
    
bind_pcvar_num(create_cvar("rt_round""0", .description "С какого раунда доступно возрождение"), CVAR[ROUND]);
    
bind_pcvar_num(create_cvar("rt_domination""0", .description "Если команда доминирует над другой (побед подряд) запретить ей воскрешать/минировать?"), CVAR[DOMINATION]);
    
bind_pcvar_float(create_cvar("rt_time_expired""10.0", .description "Возможность воскрешать/минировать только после Х сек. от начала раунда", .has_max true, .max_val 60.0), CVAR[TIME_EXPIRED]);
    
bind_pcvar_num(create_cvar("rt_sound_notification""1", .description "Проигрывать звук к запрещаюшим уведомлениям"), CVAR[SOUND_NOTIFICATION]);
    
bind_pcvar_num(create_cvar("rt_dont_motion""1", .description "Заблокировать движение во время воскрешения/минирования"), CVAR[DONT_MOTION]);
    
bind_pcvar_num(create_cvar("rt_can_mined""1", .description "Возможно ли минировать врагов [1 - да, 0 - только воскрешение тиммейтов]"), CVAR[CAN_MINED]);
    
bind_pcvar_num(create_cvar("rt_notification""1", .description "Метод уведомлений при воскрешении^n2 - отключить^n1 - всем^n0 - только тому кто поднимал и тому кто поднял", .has_min true), CVAR[NOTIFICATION]);    
    
bind_pcvar_string(create_cvar("rt_revive_sample""", .description "Звук воскрешения трупа (опционально)"), CVAR[REVIVE_SAMPLE], charsmax(CVAR[REVIVE_SAMPLE]));
    
bind_pcvar_string(create_cvar("rt_mined_sample""weapons/c4_disarm.wav", .description "Звук когда труп заминировали (опционально)"), CVAR[MINED_SAMPLE], charsmax(CVAR[MINED_SAMPLE]));
    
bind_pcvar_string(create_cvar("rt_explode_sample""", .description "Звук взрыва от заминированного трупа (опционально)"), CVAR[EXPLODE_SAMPLE], charsmax(CVAR[EXPLODE_SAMPLE]));
    
bind_pcvar_string(create_cvar("rt_size""-24.0 -24.0 -24.0 24.0 24.0 24.0", .description "Минимальный и максимальный размер объекта"), CVAR[SIZE], charsmax(CVAR[SIZE]));
    
    if (
CVAR[REVIVE_SAMPLE][0]) {
        
precache_sound(CVAR[REVIVE_SAMPLE]);
    }
    
    if (
CVAR[MINED_SAMPLE][0]) {
        
precache_sound(CVAR[MINED_SAMPLE]);
    }
    
    if (
CVAR[EXPLODE_SAMPLE][0]) {
        
precache_sound(CVAR[EXPLODE_SAMPLE]);
    }
    
    
// OnConfigsExecuted() broken
    
new szSize[6][8];
    if (
parse(CVAR[SIZE], szSize[0], 7szSize[1], 7szSize[2], 7szSize[3], 7szSize[4], 7szSize[5], 7) != 6)
    {
        
// Установим размеры по умолчанию
        
@defsize:
        
g_vecCorpseMins[0] = g_vecCorpseMins[1] = g_vecCorpseMins[2] = -24.0;
        
g_vecCorpseMaxs[0] = g_vecCorpseMaxs[1] = g_vecCorpseMaxs[2] = 24.0;
        
        
// server_print("[%s] Установленны размеры трупа по умолчанию", PLUGIN);
    
}
    else
    {
        
// Установим размеры согласно квару
        
for (new i3i++)
        {
            if ((
g_vecCorpseMins[i] = str_to_float(szSize[i])) > 0.0
            
|| (g_vecCorpseMaxs[i] = str_to_float(szSize[i])) < 0.0)
                goto @
defsize
        
}
    }
    
    
// Флаги доступа
    
g_iAccessFlags read_flags(CVAR[ACCESS]);
    
    
// Флаги движения
    
g_iPreventFlags = (<< 5); // def
    
if (CVAR[DONT_MOTION])
        
g_iPreventFlags |= (<< 6);
    
    
// configs/plugins/ReviveTeammates.cfg
    
AutoExecConfig(.name "ReviveTeammates");
}

// Взрыв
stock UTIL_MakeExplosionEffects(const Float:vecOrigin[3])
{
    new 
bIsCustomExplosive CVAR[EXPLODE_SAMPLE][0] != EOS;
    
    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_EXPLOSION); // This makes a dynamic light and the explosion sprites/sound
    
write_coord_f(vecOrigin[0]); // Send to PAS because of the sound
    
write_coord_f(vecOrigin[1]);
    
write_coord_f(vecOrigin[2] + 20.0);
    
write_short(g_sModelIndexFireball3);
    
write_byte(25); // scale * 10
    
write_byte(30); // framerate
    
write_byte(bIsCustomExplosive TE_EXPLFLAG_NOSOUND TE_EXPLFLAG_NONE); // flags
    
message_end();

    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_EXPLOSION); // This makes a dynamic light and the explosion sprites/sound
    
write_coord_f(vecOrigin[0] + random_float(-64.064.0)); // Send to PAS because of the sound
    
write_coord_f(vecOrigin[1] + random_float(-64.064.0));
    
write_coord_f(vecOrigin[2] + random_float(30.035.0));
    
write_short(g_sModelIndexFireball2);
    
write_byte(30); // scale * 10
    
write_byte(30); // framerate
    
write_byte(bIsCustomExplosive TE_EXPLFLAG_NOSOUND TE_EXPLFLAG_NONE); // flags
    
message_end();

    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_SPRITE);
    
write_coord_f(vecOrigin[0] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[1] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[2] + random_float(-10.010.0));
    
write_short(g_sModelIndexFireball2);
    
write_byte(30);
    
write_byte(150);
    
message_end();
    
    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_SPRITE);
    
write_coord_f(vecOrigin[0] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[1] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[2] + random_float(-10.010.0));
    
write_short(g_sModelIndexFireball2);
    
write_byte(30);
    
write_byte(150);
    
message_end();

    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_SPRITE);
    
write_coord_f(vecOrigin[0] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[1] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[2] + random_float(-10.010.0));
    
write_short(g_sModelIndexFireball3);
    
write_byte(30);
    
write_byte(150);
    
message_end();

    
message_begin_f(MSG_PASSVC_TEMPENTITYvecOrigin);
    
write_byte(TE_SPRITE);
    
write_coord_f(vecOrigin[0] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[1] + random_float(-256.0256.0));
    
write_coord_f(vecOrigin[2] + random_float(-10.010.0));
    
write_short(g_sModelIndexFireball);
    
write_byte(30);
    
write_byte(17);
    
message_end();
    
    if (
bIsCustomExplosive)
    {
        
// xs_vec_mul_scalar(vecOrigin, 2.0, vecOrigin);
        
rh_emit_sound2(00CHAN_AUTOCVAR[EXPLODE_SAMPLE], .origin vecOrigin);
    }
}

// VEN
stock bool:UTIL_IsHullVacant(const Float:vecOrigin[3], iHullpSkip 0
{
    
engfunc(EngFunc_TraceHullvecOriginvecOriginDONT_IGNORE_MONSTERSiHullpSkip0);

    return 
bool:(!get_tr2(0TR_StartSolid) && !get_tr2(0TR_AllSolid) && get_tr2(0TR_InOpen));
}

stock Float:UTIL_GetPlayerSpeed(const id)
{
    new 
Float:vecVelocity[3];
    
get_entvar(idvar_velocityvecVelocity);
    
// vecVelocity[2] *= 0.5;
    
    
return vector_length(vecVelocity);
}

stock UTIL_Render(const id, const fx kRenderFxNone, const mode kRenderNormal, const Float:flColor[] = NULL_VECTOR, const Float:fAmount 0.0)
{
    
set_entvar(idvar_renderfxfx);
    
set_entvar(idvar_rendermodemode);
    
set_entvar(idvar_rendercolorflColor);
    
set_entvar(idvar_renderamtfAmount);

https://www.mediafire.com/file/krvlg...mates.rar/file
tedaimlocks is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 18:11.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode