- Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#pragma semicolon 1
// Шансы и количества
#define HK_FULL_CHANCE 10 // Процент вероятности выпадение полной аптечки (0 - никогда, 100 - всегда)
#define HK_FULL_HEALTH 100 // Сколько восстанавливает полная аптечка? (Лимит не привышаем)
#define HK_HEADSHOT_CHANCE 100 // Процент вероятности выпадения аптечки при убийстве в голову (0 - никогда, 100 - всегда)
#define HK_HEADSHOT_HEALTH 30 // Сколько восстанавливает аптечка при убийстве в голову? (Лимит не привышаем)
#define HK_NORMAL_CHANCE 100 // Процент вероятности выпадения простой аптечки 0 - никогда, 100 - всегда)
#define HK_NORMAL_HEALTH 15 // Сколько восстанавливает простая аптечка? (Лимит не привышаем)
#define HK_LIMIT_HEALTH 100 // Сколько максимум HP может быть у игроков?
// Эффекты
#define HK_HEALTHKIT_GLOW 1 // Подсвечивать аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_FADE 1 // Затемнять игроку экран при поднятии аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_HUD 1 // Показывать игроку HUD сообщение при поднятии аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_SOUND 1 // Проигрывать звук при поднятии аптечки? (0 - нет, 1 - да)
#define HK_HEALTHKIT_EFFECT 1 // Включить эффект плавного исчезания аптечки? (0 - нет, 1 - да)
// Другое
#define HK_TOGGLE 1 // Разрешать игрокам отключать и включать поднятие аптечек командой /hk? (0 - нет, 1 - да)
#define HK_ROUND_REMOVE 1 // Убирать аптечки в начале раунда? (0 - нет, 1 - да)
#define HK_LIFE_TIME 60 // Сколько секунд может лежать аптечка? (0 - бесконечно)
#define HK_OWNER_ONLY 0 // Только убийца может подобрать аптечку? (0 - нет, 1 - да, но после смерти или выхода могут все, 2 - да, но после смерти или выхода убрать аптечки, 3 - всегда, но после выхода могут все, 4 - всегда, но после выхода убрать аптечки) [Не советовал бы ставить 1 или 2]
// Дальше трогаем только если есть хоть чутка мозгов
#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)
new msg_pickup, bool:ham_registred;
#if HK_PLAYER_FADE == 1
new msg_fade;
#endif
#if HK_TOGGLE == 1
new toggle;
#define is_bit(%1) (toggle & (1 << (%1 - 1)))
#define add_bit(%1) (toggle |= (1 << (%1 - 1)))
#define remove_bit(%1) (toggle &= ~(1 << (%1 - 1)))
#endif
public plugin_init()
{
register_plugin("Healthkit", "3.3.1", "Tuty ft. Sho0ter");
#if HK_ROUND_REMOVE == 1
register_event("HLTV", "ev_start", "a", "1=0", "2=0");
#endif
register_event("DeathMsg", "ev_death", "a", "1>0");
#if HK_PLAYER_FADE == 1
msg_fade = get_user_msgid("ScreenFade");
#endif
msg_pickup = get_user_msgid("ItemPickup");
#if HK_TOGGLE == 1
register_clcmd("say /hk", "cmd_toggle");
register_clcmd("say_team /hk", "cmd_toggle");
#endif
return PLUGIN_CONTINUE;
}
#if HK_TOGGLE == 1
public client_putinserver(client_id)
{
if(!is_bit(client_id))
{
add_bit(client_id);
}
return PLUGIN_CONTINUE;
}
public cmd_toggle(client_id)
{
if(!is_bit(client_id))
{
add_bit(client_id);
client_cmd(client_id, "spk activated");
}
else
{
remove_bit(client_id);
client_cmd(client_id, "spk deactivated");
}
return PLUGIN_HANDLED;
}
#endif
public plugin_precache()
{
#if HK_PLAYER_SOUND == 1
precache_sound("items/smallmedkit1.wav");
#endif
return precache_model("models/w_medkit.mdl");
}
public ev_death()
{
#if HK_OWNER_ONLY > 0
new killer_id = read_data(1);
#if HK_TOGGLE == 1
if(!is_bit(killed_id))
{
killed_id = 0;
else
{
#endif
if(!is_user_connected(killer_id))
{
killer_id = 0;
}
#if HK_TOGGLE == 1
}
#endif
#endif
new type, victim_id = read_data(2), chance = random_num(1, 100);
#if HK_OWNER_ONLY == 1 || HK_OWNER_ONLY == 2
remove_owner(victim_id);
#endif
if(chance <= HK_FULL_CHANCE)
{
type = 1;
}
else if(read_data(3))
{
if(chance <= HK_HEADSHOT_CHANCE)
{
type = 2;
}
else
{
return PLUGIN_CONTINUE;
}
}
else if(chance <= HK_NORMAL_CHANCE)
{
type = 3;
}
else
{
return PLUGIN_CONTINUE;
}
new entity;
if(!pev_valid((entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
{
return PLUGIN_CONTINUE;
}
set_pev(entity, pev_classname, "healthkit_entity");
#if HK_OWNER_ONLY > 0
set_pev(entity, pev_owner, killer_id);
#endif
set_pev(entity, pev_iuser1, 0);
engfunc(EngFunc_SetSize, entity, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
set_pev(entity, pev_solid, SOLID_TRIGGER);
set_pev(entity, pev_movetype, MOVETYPE_TOSS);
new Float:angles[3] = {0.0, 0.0, 0.0};
angles[1] = float(random_num(0, 180));
set_pev(entity, pev_angles, angles);
new Float:origin[3];
pev(victim_id, pev_origin, origin);
engfunc(EngFunc_SetOrigin, entity, origin);
engfunc(EngFunc_SetModel, entity, "models/w_medkit.mdl");
#if HK_HEALTHKIT_GLOW == 1
set_pev(entity, pev_renderfx, kRenderFxGlowShell);
set_pev(entity, pev_rendercolor, type == 1 ? (Float:{255.0, 0.0, 0.0}) : (type == 2 ? (Float:{0.0, 255.0, 0.0}) : (Float:{0.0, 0.0, 255.0})));
set_pev(entity, pev_rendermode, kRenderFxNone);
set_pev(entity, pev_renderamt, 25.0);
#endif
set_pev(entity, pev_health, type == 1 ? float(HK_FULL_HEALTH) : (type == 2 ? float(HK_HEADSHOT_HEALTH) : float(HK_NORMAL_HEALTH)));
#if HK_LIFE_TIME > 0
set_pev(entity, pev_nextthink, get_gametime() + float(HK_LIFE_TIME));
#endif
if(!ham_registred)
{
#if HK_LIFE_TIME > 0
RegisterHamFromEntity(Ham_Think, entity, "ham_think", 1);
#endif
RegisterHamFromEntity(Ham_Touch, entity, "ham_touch", 1);
ham_registred = true;
}
return PLUGIN_CONTINUE;
}
public ham_touch(entity, touch_id)
{
#if HK_TOGGLE == 1
if(!is_bit(touch_id))
{
return HAM_IGNORED;
}
#endif
if(!pev_valid(entity) || !is_user_connected(touch_id))
{
return HAM_IGNORED;
}
#if HK_OWNER_ONLY > 0
new owner = pev(entity, pev_owner);
if(owner && owner != touch_id)
{
return HAM_IGNORED;
}
#endif
new current_hp = pev(touch_id, pev_health);
if(current_hp >= HK_LIMIT_HEALTH)
{
return HAM_IGNORED;
}
new healthkit_value = pev(entity, pev_health);
#if HK_HEALTHKIT_EFFECT == 1
if(!healthkit_value)
{
return HAM_IGNORED;
}
#endif
#if HK_PLAYER_HUD == 1
switch(healthkit_value)
{
case HK_FULL_HEALTH: set_hudmessage(255, 0, 0, -1.0, 0.80, 0, 1.0, 1.0, 1.0, 1.0);
case HK_HEADSHOT_HEALTH: set_hudmessage(0, 255, 0, -1.0, 0.80, 0, 1.0, 1.0, 1.0, 1.0);
case HK_NORMAL_HEALTH: set_hudmessage(0, 0, 255, -1.0, 0.80, 0, 1.0, 1.0, 1.0, 1.0);
}
show_hudmessage(touch_id, "+ %d HP", healthkit_value);
#endif
set_pev(touch_id, pev_health, float(min_ex(current_hp + healthkit_value, HK_LIMIT_HEALTH)));
#if HK_PLAYER_SOUND == 1
emit_sound(touch_id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
#endif
message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, touch_id);
write_string("item_healthkit");
message_end();
#if HK_PLAYER_FADE == 1
message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, touch_id);
write_short(1 << 10);
write_short(1 << 10);
write_short(0x0000);
write_byte(healthkit_value == HK_FULL_HEALTH ? 255 : 0);
write_byte(healthkit_value == HK_HEADSHOT_HEALTH ? 255 : 0);
write_byte(healthkit_value == HK_NORMAL_HEALTH ? 255 : 0);
write_byte(100);
message_end();
#endif
#if HK_HEALTHKIT_EFFECT == 1
return ham_think(entity);
#else
return remove_entity(entity);
#endif
}
public ham_think(entity)
{
if(!pev_valid(entity))
{
return HAM_IGNORED;
}
#if HK_HEALTHKIT_EFFECT == 1
if(pev(entity, pev_rendermode) != kRenderTransAlpha)
{
set_pev(entity, pev_solid, SOLID_NOT);
set_pev(entity, pev_health, 0.0);
set_pev(entity, pev_rendercolor, Float:{0.0, 0.0, 0.0});
set_pev(entity, pev_rendermode, kRenderTransAlpha);
set_pev(entity, pev_renderamt, 250.0);
}
else
{
new amount = pev(entity, pev_renderamt);
if(amount <= 10)
{
return engfunc(EngFunc_RemoveEntity, entity);
}
set_pev(entity, pev_renderamt, float(amount - 10));
}
return set_pev(entity, pev_nextthink, get_gametime() + 0.1);
#else
return engfunc(EngFunc_RemoveEntity, entity);
#endif
}
#if HK_ROUND_REMOVE == 1
public ev_start()
{
new entity;
while((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "healthkit_entity")))
{
engfunc(EngFunc_RemoveEntity, entity);
}
return PLUGIN_CONTINUE;
}
#endif
#if HK_OWNER_ONLY > 0
public client_disconnect(client_id)
{
return remove_owner(client_id);
}
stock remove_owner(client_id)
{
new entity;
while((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "healthkit_entity")))
{
if(pev(entity, pev_owner) == client_id)
{
#if HK_OWNER_ONLY == 1 || HK_OWNER_ONLY == 3
set_pev(entity, pev_owner, 0);
#else
#if HK_HEALTHKIT_EFFECT == 1
ham_think(entity);
#else
engfunc(EngFunc_RemoveEntity, entity);
#endif
#endif
}
}
return PLUGIN_CONTINUE;
}
#endif
В нём имееться код плавного исчезания Модели, а также через сколько удалять обьект
#define HK_LIFE_TIME 60 // Сколько секунд может лежать аптечка? (0 - бесконечно)
#define HK_HEALTHKIT_EFFECT 1 // Включить эффект плавного исчезания аптечки? (0 - нет, 1 - да)
Пожалуйста,сделайте исчезание и плавное удаление модели в етом плагине ( или роскажите что чем заменить )
А я уже пойду дальше и подстрою на остальные плагины из взаимодействием моделей
- Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#define Medkit_1 "models/medkit_wc/medkit_wc_1.mdl"
#define Medkit_2 "models/medkit_wc/medkit_wc_2.mdl"
new const gMedKitClassname[]="kit_ent"
new gToggleKitEnable,gToggleGlowShow,gGMsgFade,gToggleFadeEnable
new gToggleDelRespawn,gKitPickMode,gKitHPCvar,gLimitHPCvar,gGMsgItemPickup
public plugin_init()
{
register_plugin("Death Medkit Drop","4.2","tuty; 731; Midnight Kid")
register_event("DeathMsg","dropkit","a")
register_logevent("logevent",2,"1=Round_Start")
register_touch("kit_ent","player","forward_FM_Touch")
gToggleKitEnable=register_cvar("kit_enable","1")
gToggleGlowShow=register_cvar("kit_glow","0")
gToggleFadeEnable=register_cvar("kit_fade","1")
gToggleDelRespawn=register_cvar("kit_del","1")
gKitPickMode=register_cvar("kit_pick","0")
gKitHPCvar=register_cvar("kit_hp","15")
gLimitHPCvar=register_cvar("kit_limit_hp","200")
gGMsgFade=get_user_msgid("ScreenFade")
}
public plugin_precache()
{
precache_model(Medkit_1)
precache_model(Medkit_2)
}
public dropkit()
{
if(!get_pcvar_num(gToggleKitEnable))
return PLUGIN_HANDLED
new num = random_num(0,5)
if(num > 1 || num < 0)
return PLUGIN_HANDLED
new gVic = read_data(2), Float:flOrigin[3]
pev(gVic, pev_origin, flOrigin)
new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
engfunc(EngFunc_SetOrigin,ent,flOrigin)
switch(random_num(0,1))
{
case 0: engfunc(EngFunc_SetModel, ent, Medkit_1)
case 1: engfunc(EngFunc_SetModel, ent, Medkit_2)
}
set_pev(ent,pev_classname,gMedKitClassname)
set_pev(ent, pev_sequence, 0)
set_pev(ent, pev_framerate, 1.0)
dllfunc(DLLFunc_Spawn,ent)
set_pev(ent,pev_solid,SOLID_TRIGGER)
set_pev(ent,pev_movetype,MOVETYPE_PUSHSTEP)
engfunc(EngFunc_SetSize,ent,Float:{-23.160000,-13.660000,-0.050000},Float:{11.470000,12.780000,6.720000})
new KitPick=get_pcvar_num(gKitPickMode)
new Vic=get_user_team(gVic)
if(get_pcvar_num(gToggleGlowShow))
{
switch(KitPick)
{
case 0: fm_set_rendering(ent,kRenderFxGlowShell,255,255,255,kRenderFxNone,27)
case 1:
{
switch(Vic)
{
case 1:
{
fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
entity_set_int(ent,EV_INT_team,1)
}
case 2:
{
fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
entity_set_int(ent,EV_INT_team,2)
}
}
}
case 2:
{
switch(Vic)
{
case 1:
{
fm_set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderFxNone,27)
entity_set_int(ent,EV_INT_team,1)
}
case 2:
{
fm_set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderFxNone,27)
entity_set_int(ent,EV_INT_team,2)
}
}
}
}
}
new Float:velocity[3]
velocity[0] = random_float(50.0, 100.0)
velocity[1] = random_float(50.0, 100.0)
velocity[2] = random_float(200.0, 250.0)
set_pev(ent, pev_velocity, velocity)
return PLUGIN_HANDLED
}
public forward_FM_Touch(ent,id)
{
if(!pev_valid(ent)||!get_pcvar_num(gToggleKitEnable))
{
return FMRES_IGNORED
}
new KitPick=get_pcvar_num(gKitPickMode)
new own_team=get_user_team(id)
new find_team=entity_get_int(ent,EV_INT_team)
switch(KitPick)
{
case 1:
{
if(find_team==own_team)
{
return FMRES_IGNORED
}
}
case 2:
{
if(find_team!=own_team)
{
return FMRES_IGNORED
}
}
}
new szClassname[32]
pev(ent,pev_classname,szClassname,charsmax(szClassname))
if(!equal(szClassname,gMedKitClassname))
{
return FMRES_IGNORED
}
new userHP=get_user_health(id)
new cvarHP=get_pcvar_num(gKitHPCvar)
new maxHP=get_pcvar_num(gLimitHPCvar)
if(userHP>=maxHP)
{
return FMRES_IGNORED
}
if(maxHP-userHP<cvarHP&&maxHP-userHP>0)
{
fm_set_user_health(id,maxHP)
}
else
{
fm_set_user_health(id,userHP+cvarHP)
}
client_cmd(id, "spk sound/items/smallmedkit1.wav")
if(get_pcvar_num(gToggleFadeEnable))
{
if(KitPick==0)
{
message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(200)
write_byte(150)
write_byte(0)
write_byte(75)
message_end()
}
if(KitPick==1||KitPick==2)
{
switch(own_team)
{
case 1:
{
message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(255)
write_byte(150)
write_byte(0)
write_byte(75)
message_end()
}
case 2:
{
message_begin(MSG_ONE_UNRELIABLE,gGMsgFade,_,id)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(255)
write_byte(150)
write_byte(0)
write_byte(75)
message_end()
}
}
}
}
engfunc(EngFunc_RemoveEntity,ent)
if(KitPick==0)
{
return PLUGIN_CONTINUE
}
return FMRES_IGNORED
}
public logevent()
{
if(get_pcvar_num(gToggleDelRespawn))
{
new entity=FM_NULLENT
while((entity=fm_find_ent_by_class(entity,gMedKitClassname)))
{
engfunc(EngFunc_RemoveEntity,entity)
}
}
}
stock UTIL_Send_PickMess(const id,const szItemName[])
{
message_begin(MSG_ONE_UNRELIABLE,gGMsgItemPickup,_,id)
write_string(szItemName)
message_end()
}
Да Большое спасибо за помощь