HTML Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <engine>
#define PLUGIN "CSO Emotion"
#define VERSION "2.3"
#define AUTHOR "Dias"
#define MAX_EMOTION 6
#define BUTTON_HOLDTIME 0.5
#define USE_TYPE 1 // 1 = J Button (Cheer); 2 = Hold R Button
#define TASK_EMOTION 1962
#define TASK_HOLDTIME 1963
new const p_model[] = "models/cso_emotion2.mdl"
new const v_model[] = "models/v_cso_emotion_v23.mdl"
new Float:Emotion_Time[MAX_EMOTION] =
{
3.0,
7.0,
4.5,
3.8,
6.7,
6.0
}
enum
{
EMO_HI = 0,
EMO_PROVOKE,
EMO_JOY,
EMO_ANGRY,
EMO_DANCE,
EMO_SPECIAL1
}
new g_InDoingEmo[33], g_AnimEnt[33], g_AvtEnt[33]
new g_MaxPlayers, g_HoldingButton[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
register_event("DeathMsg", "Event_DeathMsg", "a")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model)
precache_model( "models/rpgrocket.mdl" );
}
public Event_NewRound()
{
for(new i = 0; i < g_MaxPlayers; i++)
{
if(!is_user_connected(i))
continue
Reset_Var(i)
}
}
public Event_DeathMsg()
{
static Victim; Victim = read_data(2)
Do_Reset_Emotion(Victim)
}
public fw_PlayerSpawn_Post(id)
{
new Flags = pev(id, pev_flags)
set_pev(id, pev_flags, Flags | FL_FROZEN)
set_task(1.0,"hareketyap",id+5555)
}
public hareketyap(id)
{
id = id-5555
if(is_user_connected(id) && is_user_alive(id))
{
set_view( id, CAMERA_3RDPERSON )
new Flags = pev(id, pev_flags)
set_pev(id, pev_flags, Flags | FL_FROZEN)
Set_Emotion_Start(id,0)
}
}
public Reset_Var(id)
{
if(!is_user_connected(id))
return
if(task_exists(id+TASK_EMOTION)) remove_task(id+TASK_EMOTION)
Set_Entity_Invisible(id, 0)
if(pev_valid(g_AnimEnt[id])) engfunc(EngFunc_RemoveEntity, g_AnimEnt[id])
if(pev_valid(g_AvtEnt[id])) engfunc(EngFunc_RemoveEntity, g_AvtEnt[id])
g_InDoingEmo[id] = 0
g_AnimEnt[id] = g_AvtEnt[id] = 0
g_HoldingButton[id] = 0
new Flags = pev(id, pev_flags)
if(Flags & FL_FROZEN)
{
set_pev(id, pev_flags, Flags & ~FL_FROZEN)
set_view( id, CAMERA_NONE );
}
}
public Set_Emotion_Start(id, EmoId)
{
g_InDoingEmo[id] = 1
Set_Entity_Invisible(id, 1)
Create_AvtEnt(id)
Create_AnimEnt(id)
if(!Check_Avalible(id)) return
Do_Set_Emotion(id, EmoId)
}
public Create_AvtEnt(id)
{
if(pev_valid(g_AvtEnt[id]))
return
g_AvtEnt[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(!pev_valid(g_AvtEnt[id]))
return
static ent; ent = g_AvtEnt[id]
set_pev(ent, pev_classname, "avatar")
set_pev(ent, pev_owner, id)
set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
set_pev(ent, pev_solid, SOLID_NOT)
static PlayerModel[64]
fm_cs_get_user_model(id, PlayerModel, sizeof(PlayerModel))
format(PlayerModel, sizeof(PlayerModel), "models/player/%s/%s.mdl", PlayerModel, PlayerModel)
engfunc(EngFunc_SetModel, g_AvtEnt[id], PlayerModel)
set_pev(ent, pev_body, pev(id, pev_body))
set_pev(ent, pev_skin, pev(id, pev_skin))
set_pev(ent, pev_renderamt, pev(id, pev_renderamt))
static Float:Color[3]; pev(id, pev_rendercolor, Color)
set_pev(ent, pev_rendercolor, Color)
set_pev(ent, pev_renderfx, pev(id, pev_renderfx))
set_pev(ent, pev_rendermode, pev(id, pev_rendermode))
Set_Entity_Invisible(ent, 0)
}
public Create_AnimEnt(id)
{
if(pev_valid(g_AnimEnt[id]))
return
g_AnimEnt[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if(!pev_valid(g_AnimEnt[id]))
return
static ent; ent = g_AnimEnt[id]
set_pev(ent, pev_classname, "AnimEnt")
set_pev(ent, pev_owner, id)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
engfunc(EngFunc_SetModel, ent, p_model)
engfunc(EngFunc_SetSize, ent, {-16.0, -16.0, 0.0}, {16.0, 16.0, 72.0})
set_pev(ent, pev_solid, SOLID_BBOX)
engfunc(EngFunc_DropToFloor, ent)
Set_Entity_Invisible(ent, 0)
set_pev(ent, pev_nextthink, get_gametime() + 0.1)
}
public Check_Avalible(id)
{
if(!pev_valid(g_AnimEnt[id]) || !pev_valid(g_AvtEnt[id]))
{
Do_Reset_Emotion(id)
return 0
}
return 1
}
public Do_Set_Emotion(id, EmoId)
{
static Float:Origin[3], Float:Angles[3], Float:Velocity[3]
pev(id, pev_origin, Origin); pev(id, pev_angles, Angles); pev(id, pev_velocity, Velocity)
Origin[2] -= 36.0
set_pev(g_AnimEnt[id], pev_origin, Origin)
Angles[0] = 0.0; Angles[2] = 0.0
set_pev(g_AnimEnt[id], pev_angles, Angles)
set_pev(g_AnimEnt[id], pev_velocity, Velocity)
set_pev(g_AvtEnt[id], pev_aiment, g_AnimEnt[id])
Set_Entity_Anim(g_AnimEnt[id], EmoId, 1)
if(task_exists(id+TASK_EMOTION)) remove_task(id+TASK_EMOTION)
set_task(Emotion_Time[EmoId], "Reset_Emotion", id+TASK_EMOTION)
}
public Reset_Emotion(id)
{
id -= TASK_EMOTION
if(!is_user_connected(id))
return
if(!g_InDoingEmo[id])
return
Do_Reset_Emotion(id)
}
public Do_Reset_Emotion(id)
{
if(!is_user_connected(id))
return
if(!g_InDoingEmo[id])
return
if(task_exists(id+TASK_EMOTION)) remove_task(id+TASK_EMOTION)
Set_Entity_Invisible(id, 0)
if(pev_valid(g_AnimEnt[id])) engfunc(EngFunc_RemoveEntity, g_AnimEnt[id])
if(pev_valid(g_AvtEnt[id])) engfunc(EngFunc_RemoveEntity, g_AvtEnt[id])
g_AnimEnt[id] = g_AvtEnt[id] = 0
if(is_user_alive(id))
{
new Flags = pev(id, pev_flags)
if(Flags & FL_FROZEN)
{
set_pev(id, pev_flags, Flags & ~FL_FROZEN)
}
set_view( id, CAMERA_NONE );
}
g_InDoingEmo[id] = 0
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return
static CurButton; CurButton = get_uc(uc_handle, UC_Buttons)
if((CurButton & IN_ATTACK) || (CurButton & IN_ATTACK2) || (CurButton & IN_DUCK) || (CurButton & IN_JUMP))
{
Do_Reset_Emotion(id)
return
}
static Float:Velocity[3], Float:Vector
pev(id, pev_velocity, Velocity); Vector = vector_length(Velocity)
if(Vector != 0.0)
{
Do_Reset_Emotion(id)
return
}
}
public fw_AddToFullPack_Post(es_handle, e , ent, host, hostflags, player, pSet)
{
if(!is_user_alive(host) && !pev_valid(ent))
return FMRES_IGNORED
if(g_AnimEnt[host] != ent)
return FMRES_IGNORED
set_es(es_handle, ES_Effects, get_es(es_handle, ES_Effects) | EF_NODRAW)
return FMRES_IGNORED
}
public fw_Think(ent)
{
if(!pev_valid(ent))
return
static Classname[64]
pev(ent, pev_classname, Classname, sizeof(Classname))
if(equal(Classname, "AnimEnt"))
{
static id; id = pev(ent, pev_owner)
if(!is_user_alive(id))
return
// Set Player Emotion
static Float:Angles[3], Float:Angles2[3]
pev(id, pev_angles, Angles)
pev(ent, pev_angles, Angles2)
Angles[0] = 0.0; Angles[2] = 0.0
if(Angles[1] != Angles2[1]) set_pev(ent, pev_angles, Angles)
set_pev(ent, pev_nextthink, get_gametime() + 0.05)
if(pev(ent, pev_effects) == (pev(ent, pev_effects) | EF_NODRAW)) Set_Entity_Invisible(ent, 0)
}
}
stock fm_cs_get_user_model(id, Model[], Len)
{
if(!is_user_connected(id))
return
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", Model, Len)
}
stock Set_Entity_Invisible(ent, Invisible = 1)
{
if(!pev_valid(ent))
return
set_pev(ent, pev_effects, Invisible == 0 ? pev(ent, pev_effects) & ~EF_NODRAW : pev(ent, pev_effects) | EF_NODRAW)
}
stock Set_Entity_Anim(ent, Anim, ResetFrame)
{
if(!pev_valid(ent))
return
set_pev(ent, pev_animtime, get_gametime())
set_pev(ent, pev_framerate, 1.0)
set_pev(ent, pev_sequence, Anim)
if(ResetFrame) set_pev(ent, pev_frame, 0)
}
This plugin crash server. Why ?