Footsteps Zombie

Footsteps Zombie 1.1

Нет прав для скачивания
Сообщения
1,618
Реакции
1,651
Сообщения
365
Реакции
9
Помог
5 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Прикольно, вы оба молодцы! Респект!
 
Сообщения
1,086
Реакции
233
Предупреждения
8
Помог
6 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
MayroN чуть темнее бы красный оттенок , а то слишком яркие следы
А так зачёт
 
Сообщения
776
Реакции
294
Помог
11 раз(а)
MayroN, "Follow the Wounded", "0.1", "KRoTaL", чем был плох, зачем доп модель вешать
 
Сообщения
1,618
Реакции
1,651
MayroN чуть темнее бы красный оттенок , а то слишком яркие следы
А так зачёт
Это если включено ночное видение,то оно так ( как на видео )
В противном случаи,если выключить и сама карта в темном,то там нормально все...

Для тех,кто играет постоянно на светлых картах,пускай пишут - отдельно выставлю вариант " по темнее "

MayroN, "Follow the Wounded", "0.1", "KRoTaL", чем был плох, зачем доп модель вешать
Потому,что там при разном направлении игрока декаль не повернуть в сторону игрока
 
Сообщения
33
Реакции
1
Помог
1 раз(а)
Да, было бы неплохо потемнее сделать. Классный плагин.
 
Сообщения
552
Реакции
49
Предупреждения
2
Помог
4 раз(а)
Зачем, если в зп уже встроенно подобное?
 
Сообщения
494
Реакции
344
Помог
11 раз(а)
Artemich, пример покажешь? Реализацию не с декалькой, а моделькой. Тогда с тобой соглашусь.
3 Апр 2023
Как-то не довелось встретить просто.
Может, я тупой, а лыжи едут.
 
Сообщения
552
Реакции
49
Предупреждения
2
Помог
4 раз(а)
bizon, ну я имел ввиду про встроенную систему с декалями, модель только прекеш займет, декаль нет, просто не пойму в чем отличия этого и декали
 
Сообщения
494
Реакции
344
Помог
11 раз(а)
Artemich, отрисовка декали более ограниченная тема, у которой больше лимитов, так что текущая реализация имеет место быть намного больше, чем та, что есть.
 
Сообщения
776
Реакции
294
Помог
11 раз(а)
Artemich, я уже с похожим писал выше, читайте тему, прежде чем повторять тоже самое и ответ на это увидите
 
Сообщения
920
Реакции
158
Помог
26 раз(а)
А как тебе вариант, если у выжившего мало здоровья, что бы он тоже кровавые следы оставлял? Или просто кровь шла от него.
 
Сообщения
317
Реакции
132
Предупреждения
8
Помог
4 раз(а)
Мб кому под biohazard нужно будет
C++:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

native is_user_zombie(id)

#define PLUGIN            "FOOTSTEPS ZOMBIE"
#define VERSION            "1.1"
#define AUTHOR            "fl0wer | MayroN"

#define FOOTSTEPS_DELAY        0.5    // Через сколько секунд Рисовать кровавый след Зомби
#define FOOTSTEPS_DELETE     3.0    // Через сколько секунд Удалять кровавый след Зомби

#define MODEL_FOOTSTEPS        "models/footsteps_zombie/footsteps_zombie.mdl"

const FOOTSTEPS_OBJECT = 1234

new g_alloced_InfoTarget

new Float:g_nextFootstepsTime[MAX_PLAYERS + 1]

public plugin_init()   
{
   register_plugin(PLUGIN, VERSION, AUTHOR);

   register_forward(FM_PlayerPreThink, "Footsteps_Zombie", true)

   RegisterHam(Ham_TakeDamage, "player", "Fall_Zombie", true);
   RegisterHam(Ham_Think, "info_target", "Footsteps_Think_Post", true)

   g_alloced_InfoTarget = engfunc(EngFunc_AllocString, "info_target")
}

public plugin_precache()
{
   precache_model(MODEL_FOOTSTEPS);
}

public Fall_Zombie(pVictim, eInflictor, pAttacker, Float: flDamage, iDamageBits)
{
   if(!is_user_zombie(pVictim))
      return HAM_IGNORED;

   if(~iDamageBits & DMG_FALL)
      return HAM_IGNORED;

   new iUserFlags;
   iUserFlags = pev(pVictim, pev_flags);

   if(!is_user_on_real_ground(pVictim, iUserFlags))
      return HAM_IGNORED;

   new Float:angles[3], Float:origin[3];
   pev(pVictim, pev_origin, origin);
   pev(pVictim, pev_angles, angles);

   angles[0] = 0.0
  
   Create_Footsteps(origin, angles, 0)     

   return HAM_IGNORED;
}

public Footsteps_Zombie(id)
{
   if(!is_user_alive(id))
      return HAM_IGNORED;

   if(!is_user_zombie(id))
      return HAM_IGNORED;

   if(!(pev(id, pev_flags) & FL_ONGROUND))
      return HAM_IGNORED;

   static Float:time
   time = get_gametime()

   if(g_nextFootstepsTime[id] > time)
      return HAM_IGNORED;

   static Float:maxSpeed, Float:velocity[3]
   pev(id, pev_maxspeed, maxSpeed)
   pev(id, pev_velocity, velocity)

   if(maxSpeed <= 1.0 || vector_length(velocity) < maxSpeed - 2.0)
      return HAM_IGNORED;

   g_nextFootstepsTime[id] = time + FOOTSTEPS_DELAY

   static Float:fraction, Float:start[3], Float:end[3], Float:angles[3]
   pev(id, pev_origin, start)
   pev(id, pev_angles, angles)

   angles[0] = 0.0
   end = start
   end[2] -= 72.0
   engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, id, 0)
   get_tr2(0, TR_flFraction, fraction)

   if (fraction >= 1.0)
      return HAM_IGNORED;

   get_tr2(0, TR_vecEndPos, end)

   Create_Footsteps(end, angles, 1)

   return HAM_IGNORED;
}

Create_Footsteps(Float:origin[3], Float:angles[3], body = 0)
{
   new footsteps = engfunc(EngFunc_CreateNamedEntity, g_alloced_InfoTarget)

   if(!pev_valid(footsteps))
      return 0

   set_pev(footsteps, pev_body, body);
   set_pev(footsteps, pev_angles, angles);
   set_pev(footsteps, pev_solid, SOLID_NOT);
   set_pev(footsteps, pev_movetype, MOVETYPE_NONE);
   set_pev(footsteps, pev_impulse, FOOTSTEPS_OBJECT);
   set_pev(footsteps, pev_nextthink, get_gametime() + FOOTSTEPS_DELETE);
   set_pev(footsteps, pev_rendermode, kRenderTransAlpha);
   set_pev(footsteps, pev_renderamt, 255.0);

   engfunc(EngFunc_SetModel, footsteps, MODEL_FOOTSTEPS);
   engfunc(EngFunc_SetOrigin, footsteps, origin);

   drop_to_floor(footsteps);

   LieFlat(footsteps);

   return footsteps;
}

public Footsteps_Think_Post(footsteps)
{
   if(pev(footsteps, pev_impulse) != FOOTSTEPS_OBJECT)
      return

   new Float:renderAmount
   pev(footsteps, pev_renderamt, renderAmount)

   if(renderAmount <= 0.0)
   {
      set_pev(footsteps, pev_flags, FL_KILLME)
      return
   }

   set_pev(footsteps, pev_nextthink, get_gametime() + 0.1)
   set_pev(footsteps, pev_renderamt, floatmax(0.0, renderAmount - 5.0))
}

LieFlat(ent)
{
   static Float:origin[3], Float:traceto[3], trace = 0, Float:fraction
   pev(ent, pev_origin, origin);

   xs_vec_sub(origin, Float:{0.0, 0.0, 10.0}, traceto)

   engfunc(EngFunc_TraceLine, origin, traceto, IGNORE_MONSTERS|IGNORE_MISSILE, ent, trace)

   get_tr2(trace, TR_flFraction, fraction)

   if(fraction == 1.0)
         return;

   static Float:original_forward[3], Float:angles[3], Float:angles2[3]
   pev(ent, pev_angles, angles)

   angle_vector(angles, ANGLEVECTOR_FORWARD, original_forward)

   static Float:right[3], Float:up[3], Float:fwd[3]
   get_tr2(trace, TR_vecPlaneNormal, up)

   xs_vec_cross(original_forward, up, right)
   xs_vec_cross(up, right, fwd)

   vector_to_angle(fwd, angles)
   vector_to_angle(right, angles2)

   angles[2] = -1.0 * angles2[0]

   set_pev(ent, pev_angles, angles)
}

bool:is_user_on_real_ground(pPlayer, iUserFlags)
{
   if(~iUserFlags & FL_ONGROUND)
      return false;

   new pHit;

   pHit = pev(pPlayer, pev_groundentity);

   if(is_user_connected(pHit))
      return false;

   else if(!pev_valid(pHit))
      return true;

   return true;
}
 

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

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