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

nikita89

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

nikita89

Пользователь
Регистрация
5 Дек 2017
Сообщения
40
Симпатии
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();
}
[DOUBLEPOST=1570770685][/DOUBLEPOST]в плагине который у меня имеется есть несколько багов. первый это когда игрок умирает и сразу заходит в спектры а другой начинает его воскрешать и в итоге тот воскрешает да еще и невидимый и плюс к тому еще и на базе противника. второй баг это когда игрок умирает но его никто не воскрешал и в следующем раунде данный игрок прибегает к тому месту где его убили в прошлом раунде и начинает сам себя воскрешать тем самым телепортируется на свою базу.
 

Vaqtincha

aggressive
Разработчик
Регистрация
28 Янв 2018
Сообщения
772
Симпатии
478
Пол
Мужской
бюджет какой
 

Vaqtincha

aggressive
Разработчик
Регистрация
28 Янв 2018
Сообщения
772
Симпатии
478
Пол
Мужской
Последнее редактирование:

nikita89

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

nikita89

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

Vaqtincha

aggressive
Разработчик
Регистрация
28 Янв 2018
Сообщения
772
Симпатии
478
Пол
Мужской
nikita89, Идея нормальная. я пробую реализовать.
 
Сверху Снизу