#include #include #include #include #include #define PLUGIN "Peeking" #define AUTHOR "OT" #define VERSION "1.5" #define MAX_PLAYERS 32 #define MAX_ANGLE 60.0 #define angle_sin(%0,%1) xs_sin(%0 * float(%1) / 100.0, degrees) #define angle_cos(%0,%1) xs_cos(%0 * float(%1) / 100.0, degrees) new gBS_alive new gBS_canpeek new gI_peekPercent[MAX_PLAYERS + 1] new gE_peekEnt[MAX_PLAYERS + 1] new gB_BlockWallhack new gI_MaxPlayers new gI_peekDir[MAX_PLAYERS + 1] = {0, ...} #define IN_PEEKLEFT (1<<0) #define IN_PEEKRIGHT (1<<1) #define add_alive(%1) gBS_alive |= (1<<(%1 - 1)) #define add_dead(%1) gBS_alive &= ~(1<<(%1 - 1)) #define is_alive(%1) (gBS_alive & (1<<(%1 - 1))) #define add_peek(%1) gBS_canpeek |= (1<<(%1 - 1)) #define del_peek(%1) gBS_canpeek &= ~(1<<(%1 - 1)) #define can_peek(%1) (gBS_canpeek & (1<<(%1 - 1))) const gBS_CanAttackWeapons = ((1<<2) | (1< -100) gI_peekPercent[id] -= 4 } default: { if (gI_peekPercent[id] == 0) { if (gE_peekEnt[id]) { remove_entity(gE_peekEnt[id]) AttachView(id, id) gE_peekEnt[id] = 0 } return FMRES_IGNORED } if (0 < gI_peekPercent[id]) gI_peekPercent[id] -= 4 if (gI_peekPercent[id] < 0) gI_peekPercent[id] += 4 } } } else { switch (gI_peekDir[id]) { case IN_PEEKRIGHT: { if (!gE_peekEnt[id]) create_peek(id) if (gI_peekPercent[id] < 100) gI_peekPercent[id] += 4 } case IN_PEEKLEFT: { if (!gE_peekEnt[id]) create_peek(id) if (gI_peekPercent[id] > -100) gI_peekPercent[id] -= 4 } default: { if (gI_peekPercent[id] == 0) { if (gE_peekEnt[id]) { remove_entity(gE_peekEnt[id]) AttachView(id, id) gE_peekEnt[id] = 0 } return FMRES_IGNORED } if (0 < gI_peekPercent[id]) gI_peekPercent[id] -= 4 if (gI_peekPercent[id] < 0) gI_peekPercent[id] += 4 } } } if (gE_peekEnt[id]) { new weapon = get_user_weapon(id) if (weapon == CSW_KNIFE) iButtons &= ~IN_ATTACK2 if ((1< 0.99) entity_set_origin(eEnt, vOffs) else { new peekPercent = floatround((gI_peekPercent[eOwner] * fraction)) fZoff = vOffs2[2] xs_vec_mul_scalar(vAngles2, angle_sin(MAX_ANGLE, peekPercent) * fZoff * 2, vOffs2) fZoff *= angle_cos(MAX_ANGLE, peekPercent) vOffs2[2] = fZoff entity_get_vector(eOwner, EV_VEC_origin, vAngles2) xs_vec_add(vAngles2, vOffs2, vOffs2) entity_set_origin(eEnt, vOffs2) } entity_get_vector(eOwner, EV_VEC_velocity, vOffs) entity_set_vector(eEnt, EV_VEC_velocity, vOffs) entity_get_vector(eOwner, EV_VEC_v_angle, vOffs) entity_set_vector(eEnt, EV_VEC_angles, vOffs) entity_set_float(eEnt, EV_FL_nextthink, get_gametime() + 0.008) return PLUGIN_CONTINUE } stock create_peek(id) { if (gE_peekEnt[id] != 0) return gE_peekEnt[id] new ent, Float:vOrigin[3], Float:vOffs[3] ent = create_entity("info_target") if(!ent) return 0 entity_set_string(ent, EV_SZ_classname, "func_peek") gE_peekEnt[id] = ent entity_set_model(ent, "models/rpgrocket.mdl") entity_set_size(ent, Float:{-6.0,-6.0,-6.0}, Float:{6.0,6.0,6.0}) entity_set_byte(ent, EV_INT_solid, SOLID_TRIGGER) entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLYMISSILE) entity_set_edict(ent, EV_ENT_owner, id) entity_set_int(ent,EV_INT_rendermode, kRenderTransTexture) entity_set_float(ent, EV_FL_renderamt, 0.0) entity_get_vector(id, EV_VEC_origin, vOrigin) entity_get_vector(id, EV_VEC_view_ofs, vOffs) xs_vec_add(vOrigin, vOffs, vOrigin) entity_set_origin(ent, vOrigin) entity_get_vector(id, EV_VEC_v_angle, vOffs) entity_set_vector(ent, EV_VEC_angles, vOffs) AttachView(id,ent) entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.02) return ent } stock AttachView(id, eAttachEnt) { attach_view(id, eAttachEnt) if (gB_BlockWallhack) { callfunc_begin("fw_setview", (gB_BlockWallhack == 10000) ? "trblock.amxx" : "block_wallhack.amxx") callfunc_push_int(id) callfunc_push_int(eAttachEnt) callfunc_end() } return 1 } stock Float:traceCamHull(ent, Float:start[3], Float:end[3]) { new ptr = create_tr2() engfunc(EngFunc_TraceHull, start, end, IGNORE_MONSTERS | IGNORE_MISSILE, HULL_HEAD, ent, ptr) new Float:fraction get_tr2(ptr, TR_flFraction, fraction) free_tr2(ptr) return fraction }