new Float:g_freeze_origin[33][33][3]
new g_freeze_sequence[33][33]
new g_freeze_frame[33][33]
new g_freeze_framerate[33][33]
new Float:g_freeze_angles[33][33][3]
new g_freeze_gaitsequence[33][33]
new g_freeze_weaponmodel[33][33]
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /dcam", "pfn_cam")
register_think(CLASS, "pfn_camera_think")
register_event("DeathMsg", "pfn_death", "a")
register_forward(FM_AddToFullPack, "AddToFullPack", 1)
register_event("TextMsg", "pfn_unfreeze", "b", "2&#Spec_Mode")
RegisterHam(Ham_Spawn, "player", "OnSpawnPlayer", 1)
register_touch("player", CLASS, "OnTouchCamera")
precache_model(CAMERA_MODEL)
pfn_SpawnCamera(id, target)
if(!is_user_connected(target))
new ent = create_entity("info_target")
client_print(id, print_chat, "Error create entity")
new Float:origin[3], Float:angles[3], Float:o2[3]
entity_get_vector(target, EV_VEC_origin, o2)
entity_get_vector(id, EV_VEC_origin, origin)
//entity_get_vector(id, EV_VEC_v_angle, angles)
//angles[0] = angles[0] * -1.0
entity_set_model(ent, CAMERA_MODEL)
entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP)
entity_set_string(ent, EV_SZ_classname, CLASS)
entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
entity_set_vector(ent, EV_VEC_origin, origin)
entity_set_vector(ent, EV_VEC_angles, angles)
entity_set_edict(ent, EV_ENT_owner, id)
set_speed(ent, calculate_speed(id, target), o2)
entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.001)
set_task(1.5, "pfn_remove_ent", id)
new target_name[MAX_PLAYERS]
get_user_name(target, target_name, charsmax(target_name))
set_dhudmessage(.red = 0, .green = 255, .blue = 0, .x = -1.0, .y = -1.0, .effects = 0,
.fxtime = 1.5, .holdtime = 1.5, .fadeintime = 0.1, .fadeouttime = 0.2)
show_dhudmessage(id, "%s", target_name)
public pfn_remove_ent(id)
new ent = find_ent_by_owner(-1, CLASS, id)
public pfn_camera_think(e)
if(get_entity_distance(e, killer[entity_get_edict(e, EV_ENT_owner)]) < 100)
entity_set_vector(e, EV_VEC_velocity, Float:{0.0,0.0,0.0})
entity_set_float(e, EV_FL_nextthink, halflife_time() + 0.001)
get_players(players, count, "ae", "TERRORIST")
new t = players[random(count)];
ExecuteHam(Ham_TakeDamage, id, t, t, 101.0, DMG_BULLET);
client_print(id, print_chat, "Death camera %sactivated", play[id] ? "":"de")
if(!is_user_connected(k) || v == k)
set_task(0.1, "dead_post", v)
set_pev(id, pev_iuser1, OBS_NONE)
las_obs[id] = pev(id, pev_iuser1);
pfn_SpawnCamera(id, killer[id])
public AddToFullPack(es, e, ent, host, hostflags, player, pSet)
set_es(es, ES_Angles, g_freeze_angles[host][ent])
set_es(es, ES_Origin, g_freeze_origin[host][ent])
set_es(es, ES_Sequence, g_freeze_sequence[host][ent])
set_es(es, ES_Frame, g_freeze_framerate[host][ent])
set_es(es, ES_FrameRate, g_freeze_framerate[host][ent])
set_es(es, ES_GaitSequence, g_freeze_gaitsequence[host][ent])
set_es(es, ES_WeaponModel, g_freeze_weaponmodel[host][ent])
for(new i = 1; i <= get_maxplayers() ; i++)
if(!is_user_connected(i))
entity_get_vector(i, EV_VEC_origin, g_freeze_origin[id][i])
g_freeze_sequence[id][i] = entity_get_int(i, EV_INT_sequence)
g_freeze_frame[id][i] = entity_get_int(id, EV_FL_frame)
g_freeze_framerate[id][i] = entity_get_int(id, EV_FL_framerate)
entity_get_vector(i, EV_VEC_angles, g_freeze_angles[id][i])
g_freeze_gaitsequence[id][i] = entity_get_int(i, EV_INT_gaitsequence)
entity_get_string(i, EV_SZ_weaponmodel, szWM, charsmax(szWM))
g_freeze_weaponmodel[id][i] = engfunc(EngFunc_ModelIndex, szWM);
public client_putinserver(id)
stock Float:calculate_speed(u1, u2)
return (float(get_entity_distance(u1, u2)) / 0.3)
public OnTouchCamera(ted, ter)
new id = pev(ter, pev_owner)
entity_set_vector(ter, EV_VEC_velocity, Float:{0.0,0.0,0.0})
stock entity_set_aim(ent,const Float:origin2[3],bone=0)
static Float:ent_origin[3], Float:angles[3]
engfunc(EngFunc_GetBonePosition,ent,bone,ent_origin,angles)
pev(ent,pev_origin,ent_origin)
origin[0] -= ent_origin[0]
origin[1] -= ent_origin[1]
origin[2] -= ent_origin[2]
v_length = vector_length(origin)
static Float:aim_vector[3]
aim_vector[0] = origin[0] / v_length
aim_vector[1] = origin[1] / v_length
aim_vector[2] = origin[2] / v_length
static Float:new_angles[3]
vector_to_angle(aim_vector,new_angles)
if(new_angles[1]>180.0) new_angles[1] -= 360
if(new_angles[1]<-180.0) new_angles[1] += 360
if(new_angles[1]==180.0 || new_angles[1]==-180.0) new_angles[1]=-179.999999
set_pev(ent,pev_angles,new_angles)
set_pev(ent,pev_fixangle,1)
set_speed(ent, Float:speed, Float:origin[3])
pev(ent,pev_origin,origin1)
new_velo[0] = origin[0] - origin1[0]
new_velo[1] = origin[1] - origin1[1]
new_velo[2] = origin[2] - origin1[2]
y = new_velo[0]*new_velo[0] + new_velo[1]*new_velo[1] + new_velo[2]*new_velo[2]
if(y) x = floatsqroot(speed*speed / y)
set_pev(ent,pev_velocity,new_velo)