ReHLDS Написать плагин Воскрешений игроков.

nikita89

Пользователь
Регистрация
5 Дек 2017
Сообщения
23
Симпатии
1
#1
Возможность воскрешать Товарища на месте убийства. Тоесть например подходит игрок к убитому нажимает кнопку Е и идет загрузка примерно как при разминировании бомбы и игрок воскрешает. Чтоб могли так делать все независимо админ не админ. Каждый может воскресить например до двух трёх человек. Как то так. На самом деле у меня есть такой плагин но он не доделан нормально, тоесть могу скинуть плагин для тех кто не хочет писать с нуля.
 

nikita89

Пользователь
Регистрация
5 Дек 2017
Сообщения
23
Симпатии
1
#2
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <colorchat>

#define CLASSNAME "PlayerEntity"

//#define SHOW_HUD //сообщение на экране при косании трупа

new g_iRespawner[33];
new g_infoTarget;

#if defined SHOW_HUD
new g_iLastUse[33];
#endif

public plugin_init()
{
register_plugin( "Revive Players" , "0.3 beta" , "bristol");

RegisterHam(Ham_Killed, "player", "OnPlayerKilled")

g_infoTarget = engfunc(EngFunc_AllocString, "info_target")
}

public OnPlayerKilled(iVictim)
{
new iVictimLoc[3]
new Float:fVictimLoc[3]

get_user_origin(iVictim, iVictimLoc)
IVecFVec(iVictimLoc, fVictimLoc)

CreateEntity(iVictim, fVictimLoc)

return HAM_IGNORED;
}

public CreateEntity(id, const Float: fOrigin[3])
{
new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
if(!pev_valid(ent)) return

RegisterHamFromEntity(Ham_Touch, ent, "fw_TouchPlayer")

set_pev(ent, pev_origin, fOrigin)
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_movetype, MOVETYPE_NOCLIP)
set_pev(ent, pev_classname, CLASSNAME)
set_pev(ent, pev_owner, id);
engfunc(EngFunc_DropToFloor, ent)
engfunc(EngFunc_SetSize, ent, Float:{-16.0, -16.0, 0.0}, Float:{16.0, 16.0, 16.0})

set_task(35.0, "RemoveEntity", ent);
}

public fw_TouchPlayer(ent, id)
{
if(!is_user_alive(id) || !pev_valid(ent))
return

static className[32]
pev(ent, pev_classname, className, 31)
if(!equal(className, CLASSNAME))
return

new dead_player = pev(ent, pev_owner)

if(get_user_team(id) != get_user_team(dead_player)) return;

new button = pev(id, pev_button), oldbuttons = pev(id, pev_oldbuttons);
new szNamePlayer[32], szNameDeadPlayer[32];
get_user_name(id, szNamePlayer, charsmax(szNamePlayer));
get_user_name(dead_player, szNameDeadPlayer, charsmax(szNameDeadPlayer));

#if defined SHOW_HUD
new iSysTime = get_systime();
if(g_iLastUse[id] + 1 > iSysTime)
{
return
}
else
{
set_hudmessage(0, 255, 30, -1.0, 0.15, 0, 0.0, 0.3, 0.2, 0.4);
show_hudmessage(id, "Жмите [E] что бы воскресить тиммейта!");
}
#endif

if(button & IN_USE || oldbuttons & IN_USE)
{
g_iRespawner[dead_player] = id
ColorChat(0, TEAM, "^1[^4Revive^1] ^3%s ^1Начал воскрешение игрока ^3%s^4...", szNamePlayer, szNameDeadPlayer)
if(get_user_flags(id) & ADMIN_BAN)
{
bar_time(id, 3, 1);
set_task (3.0, "RespawnPlayer", dead_player)
}
else
{
bar_time(id, 4, 1);
set_task (4.0, "RespawnPlayer", dead_player)
}
engfunc(EngFunc_RemoveEntity, ent)
}
}

public RespawnPlayer(dead_player)
{
new szNameDeadPlayer[32]
get_user_name(dead_player, szNameDeadPlayer, charsmax(szNameDeadPlayer));

new pid = g_iRespawner[dead_player];

if(is_user_alive(pid))
{
ExecuteHam(Ham_CS_RoundRespawn, dead_player);
ColorChat(0, TEAM, "^1[^4Revive^1] Игрок ^3%s ^1был ^4воскрешен!", szNameDeadPlayer)
}
else ColorChat(0, TEAM, "^1[^4Revive^1] Игрока ^3%s ^1не успели ^4воскресить...", szNameDeadPlayer)
}

public RemoveEntity(ent)
{
if(!pev_valid(ent))
return

static className[32]
pev(ent, pev_classname, className, 31)
if(!equal(className, CLASSNAME))
return

engfunc(EngFunc_RemoveEntity, ent)
}

public bar_time(id, Duration , iStartPercent)
{
message_begin( MSG_ONE, get_user_msgid("BarTime2"), _, id );

write_short( Duration );

write_short( iStartPercent );

message_end();
}
11 Окт 2019
в плагине который у меня имеется есть несколько багов. первый это когда игрок умирает и сразу заходит в спектры а другой начинает его воскрешать и в итоге тот воскрешает да еще и невидимый и плюс к тому еще и на базе противника. второй баг это когда игрок умирает но его никто не воскрешал и в следующем раунде данный игрок прибегает к тому месту где его убили в прошлом раунде и начинает сам себя воскрешать тем самым телепортируется на свою базу.
 

nikita89

Пользователь
Регистрация
5 Дек 2017
Сообщения
23
Симпатии
1
#6

nikita89

Пользователь
Регистрация
5 Дек 2017
Сообщения
23
Симпатии
1
#7
Смысл такой. Каждый игрок может воскресить своего товарища в течении 30 секунд, время воскрешения 3 секунды (загрузка) для игроков и 2 секунды для админов. хорошо было бы если игрок воскрешал на том же месте но я так понимаю это сложнее.. в чат должно писать сообщение о том что можно воскресить товарища подойдя к месту смерти. можно было бы еще добавить небольшой звук типо благодарности за воскрешение. ну мечтать не вредно) мне хотябы чтобы воскрешались и багов описаных выше небыло.