Kod:
#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <zombieplague>
#if AMXX_VERSION_NUM < 183
#define client_disconnected client_disconnect
#endif
#define DISTANCE 27 // do not modify
//#define TASK_CREATE 30103103
#define TASK_REMOVE_SPRITE 301031
#define isTeam(%1) (1 <= get_user_team(%1) <= 2)
new g_iPlayerEnt[33], g_iStopFrame[33], g_roundend
new const g_win[] = "sprites/winh.spr"
new const g_lost[] = "sprites/winz.spr"
public plugin_init()
{
register_plugin("PUBNite: Win Sprite", "1.0", "Devil259/EFFx")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_forward(FM_AddToFullPack , "fwAddToFullPack", 1)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
g_roundend = 0
}
public plugin_precache()
{
precache_model(g_win)
precache_model(g_lost)
}
public zp_round_ended(winteam)
{
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
//set_task(0.6, "createSprite", i + TASK_CREATE)
if(winteam == WIN_HUMANS)
displaySprite(i, g_win)
else
displaySprite(i, g_lost)
//set_player_light(i, "a")
//set_pev(i, pev_maxspeed, 0.1)
set_pev(i, pev_viewmodel2, "")
}
g_roundend = 1
}
}
public Event_CurWeapon(iPlayer)
{
if(!is_user_alive(iPlayer))
return
if(g_roundend)
{
set_pev(iPlayer, pev_viewmodel2, "")
//set_pev(iPlayer, pev_maxspeed, 0.1)
}
}
public fwAddToFullPack(es, e, iEnt, iHost, host_flags, player, p_set)
{
if(!is_user_connected(iHost))
return FMRES_IGNORED
if(iEnt == g_iPlayerEnt[iHost])
{
if(!is_user_alive(iHost))
return FMRES_IGNORED
static Float:flOrigin[3] , Float:flVec[3], Float:flViewOffset[3]
pev(iHost, pev_origin, flOrigin )
pev(iHost, pev_view_ofs, flViewOffset)
xs_vec_add(flOrigin, flViewOffset, flOrigin)
flOrigin[2] += 3.0
velocity_by_aim(iHost , DISTANCE, flVec)
xs_vec_add(flOrigin, flVec, flOrigin)
engfunc(EngFunc_SetOrigin, iEnt, flOrigin)
set_es(es, ES_Origin, flOrigin)
set_es(es, ES_RenderMode, kRenderNormal)
set_es(es, ES_RenderAmt, 9999)
if(!g_iStopFrame[iHost])
return FMRES_IGNORED
if(pev(iEnt, pev_frame) == g_iStopFrame[iHost])
{
set_pev(iEnt, pev_framerate, 0.0)
g_iStopFrame[iHost] = 0
}
}
return FMRES_IGNORED
}
public client_putinserver(id)
{
if(pev_valid(g_iPlayerEnt[id]))
RemoveEntity(id)
}
public client_disconnected(id)
{
if(pev_valid(g_iPlayerEnt[id]))
RemoveEntity(id)
}
public event_round_start()
{
for(new i = 0; i < get_maxplayers(); i++)
{
if(pev_valid(g_iPlayerEnt[i]))
RemoveEntity(i)
}
g_roundend = 0
}
displaySprite(id , const SpriteName[], Float:SpriteSize = 0.05, StopFrame = 0, Float:FrameRate = 0.0)
{
if(!is_user_connected(id) || g_iPlayerEnt[id])
return
g_iPlayerEnt[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite"))
if(!pev_valid(g_iPlayerEnt[id]))
return
set_pev(g_iPlayerEnt[id], pev_takedamage, 0.0)
set_pev(g_iPlayerEnt[id], pev_solid, SOLID_NOT)
set_pev(g_iPlayerEnt[id], pev_movetype, MOVETYPE_FOLLOW)
engfunc(EngFunc_SetModel, g_iPlayerEnt[id], SpriteName)
set_pev(g_iPlayerEnt[id], pev_rendermode, kRenderTransAlpha)
set_pev(g_iPlayerEnt[id], pev_renderamt, 9999 )
set_pev(g_iPlayerEnt[id], pev_scale, SpriteSize)
g_iStopFrame[id] = StopFrame
if(g_iStopFrame[id] && FrameRate > 0.0)
{
set_pev(g_iPlayerEnt[id], pev_animtime, get_gametime())
set_pev(g_iPlayerEnt[id], pev_framerate, FrameRate)
set_pev(g_iPlayerEnt[id], pev_spawnflags, SF_SPRITE_STARTON)
dllfunc(DLLFunc_Spawn, g_iPlayerEnt[id])
}
set_task(6.0, "removeSprite", id + TASK_REMOVE_SPRITE)
}
public removeSprite(id)
{
id -= TASK_REMOVE_SPRITE
if(!is_user_connected(id) || !pev_valid(g_iPlayerEnt[id]))
return
RemoveEntity(id)
}
RemoveEntity(id)
{
engfunc(EngFunc_RemoveEntity, g_iPlayerEnt[id])
g_iPlayerEnt[id] = 0
g_iStopFrame[id] = 0
}
Şöyle bir eklenti ile yapmıştım fakat sunucuda entity oyuncunun önünden biraz geçikmeli geliyor. Oyuncu yürüdü zaman eğilip kalkınca vs. bu gibi işlemlerde entity geri kalıyor.
Yanlış yazmışım yapmadım aldım.