diff --git a/plugins/include/fakemeta_pev.inc b/plugins/include/fakemeta_pev.inc new file mode 100755 index 00000000..5795f560 --- /dev/null +++ b/plugins/include/fakemeta_pev.inc @@ -0,0 +1,383 @@ +/* Fakemeta pev to engine wrapper for backwards compatibility. +* +* by the AMX Mod X Development Team +* +* This file is provided as is (no warranties). +*/ + +#if defined _fakemeta_pev_included + #endinput +#endif +#define _fakemeta_pev_included + +#include + +enum { + pev_string_start = 0, + pev_classname, + pev_globalname, + pev_model, + pev_target, + pev_targetname, + pev_netname, + pev_message, + pev_noise, + pev_noise1, + pev_noise2, + pev_noise3, + pev_string_end, + pev_edict_start, + pev_chain, + pev_dmg_inflictor, + pev_enemy, + pev_aiment, + pev_owner, + pev_groundentity, + pev_euser1, + pev_euser2, + pev_euser3, + pev_euser4, + pev_edict_end, + pev_float_start, + pev_impacttime, + pev_starttime, + pev_idealpitch, + pev_ideal_yaw, + pev_pitch_speed, + pev_yaw_speed, + pev_ltime, + pev_nextthink, + pev_gravity, + pev_friction, + pev_frame, + pev_animtime, + pev_framerate, + pev_scale, + pev_renderamt, + pev_health, + pev_frags, + pev_takedamage, + pev_max_health, + pev_teleport_time, + pev_armortype, + pev_armorvalue, + pev_dmg_take, + pev_dmg_save, + pev_dmg, + pev_dmgtime, + pev_speed, + pev_air_finished, + pev_pain_finished, + pev_radsuit_finished, + pev_maxspeed, + pev_fov, + pev_flFallVelocity, + pev_fuser1, + pev_fuser2, + pev_fuser3, + pev_fuser4, + pev_float_end, + pev_int_start, + pev_fixangle, + pev_modelindex, + pev_viewmodel, + pev_weaponmodel, + pev_movetype, + pev_solid, + pev_skin, + pev_body, + pev_effects, + pev_light_level, + pev_sequence, + pev_gaitsequence, + pev_rendermode, + pev_renderfx, + pev_weapons, + pev_deadflag, + pev_button, + pev_impulse, + pev_spawnflags, + pev_flags, + pev_colormap, + pev_team, + pev_waterlevel, + pev_watertype, + pev_playerclass, + pev_weaponanim, + pev_pushmsec, + pev_bInDuck, + pev_flTimeStepSound, + pev_flSwimTime, + pev_flDuckTime, + pev_iStepLeft, + pev_gamestate, + pev_oldbuttons, + pev_groupinfo, + pev_iuser1, + pev_iuser2, + pev_iuser3, + pev_iuser4, + pev_int_end, + pev_byte_start, + pev_controller_0, + pev_controller_1, + pev_controller_2, + pev_controller_3, + pev_blending_0, + pev_blending_1, + pev_byte_end, + pev_bytearray_start, + pev_controller, + pev_blending, + pev_bytearray_end, + pev_vecarray_start, + pev_origin, + pev_oldorigin, + pev_velocity, + pev_basevelocity, + pev_clbasevelocity, + pev_movedir, + pev_angles, + pev_avelocity, + pev_v_angle, + pev_endpos, + pev_startpos, + pev_absmin, + pev_absmax, + pev_mins, + pev_maxs, + pev_size, + pev_rendercolor, + pev_view_ofs, + pev_vuser1, + pev_vuser2, + pev_vuser3, + pev_vuser4, + pev_punchangle, + pev_vecarray_end +}; + +new const _ENUMWRAPPER[pev_vecarray_end + 1] = { + 0, + EV_SZ_classname, + EV_SZ_globalname, + EV_SZ_model, + EV_SZ_target, + EV_SZ_targetname, + EV_SZ_netname, + EV_SZ_message, + EV_SZ_noise, + EV_SZ_noise1, + EV_SZ_noise2, + EV_SZ_noise3, + 0, + 0, + EV_ENT_chain, + EV_ENT_dmg_inflictor, + EV_ENT_enemy, + EV_ENT_aiment, + EV_ENT_owner, + EV_ENT_groundentity, + EV_ENT_euser1, + EV_ENT_euser2, + EV_ENT_euser3, + EV_ENT_euser4, + 0, + 0, + EV_FL_impacttime, + EV_FL_starttime, + EV_FL_idealpitch, + EV_FL_ideal_yaw, + EV_FL_pitch_speed, + EV_FL_yaw_speed, + EV_FL_ltime, + EV_FL_nextthink, + EV_FL_gravity, + EV_FL_friction, + EV_FL_frame, + EV_FL_animtime, + EV_FL_framerate, + EV_FL_scale, + EV_FL_renderamt, + EV_FL_health, + EV_FL_frags, + EV_FL_takedamage, + EV_FL_max_health, + EV_FL_teleport_time, + EV_FL_armortype, + EV_FL_armorvalue, + EV_FL_dmg_take, + EV_FL_dmg_save, + EV_FL_dmg, + EV_FL_dmgtime, + EV_FL_speed, + EV_FL_air_finished, + EV_FL_pain_finished, + EV_FL_radsuit_finished, + EV_FL_maxspeed, + EV_FL_fov, + EV_FL_flFallVelocity, + EV_FL_fuser1, + EV_FL_fuser2, + EV_FL_fuser3, + EV_FL_fuser4, + 0, + 0, + EV_INT_fixangle, + EV_INT_modelindex, + -1, // pev_viewmodel + -1, // pev_weaponmodel + EV_INT_movetype, + EV_INT_solid, + EV_INT_skin, + EV_INT_body, + EV_INT_effects, + EV_INT_light_level, + EV_INT_sequence, + EV_INT_gaitsequence, + EV_INT_rendermode, + EV_INT_renderfx, + EV_INT_weapons, + EV_INT_deadflag, + EV_INT_button, + EV_INT_impulse, + EV_INT_spawnflags, + EV_INT_flags, + EV_INT_colormap, + EV_INT_team, + EV_INT_waterlevel, + EV_INT_watertype, + EV_INT_playerclass, + EV_INT_weaponanim, + EV_INT_pushmsec, + EV_INT_bInDuck, + EV_INT_flTimeStepSound, + EV_INT_flSwimTime, + EV_INT_flDuckTime, + EV_INT_iStepLeft, + EV_INT_gamestate, + EV_INT_oldbuttons, + EV_INT_groupinfo, + EV_INT_iuser1, + EV_INT_iuser2, + EV_INT_iuser3, + EV_INT_iuser4, + 0, + 0, + EV_BYTE_controller1, + EV_BYTE_controller2, + EV_BYTE_controller3, + EV_BYTE_controller4, + EV_BYTE_blending1, + EV_BYTE_blending2, + 0, + 0, + -1, // bytearray controller + -1, // bytearray blending + 0, + 0, + EV_VEC_origin, + EV_VEC_oldorigin, + EV_VEC_velocity, + EV_VEC_basevelocity, + EV_VEC_clbasevelocity, + EV_VEC_movedir, + EV_VEC_angles, + EV_VEC_avelocity, + EV_VEC_v_angle, + EV_VEC_endpos, + EV_VEC_startpos, + EV_VEC_absmin, + EV_VEC_absmax, + EV_VEC_mins, + EV_VEC_maxs, + EV_VEC_size, + EV_VEC_rendercolor, + EV_VEC_view_ofs, + EV_VEC_vuser1, + EV_VEC_vuser2, + EV_VEC_vuser3, + EV_VEC_vuser4, + EV_VEC_punchangle, + 0, +} +stock pev(_index, _value, {Float, Sql, Result, _}:...) { + if (_value > pev_string_start && _value < pev_string_end) { + const BUFFERSIZE = 511 + new buffer[BUFFERSIZE + 1] + if (!entity_get_string(_index, _ENUMWRAPPER[_value], buffer, getarg(3) < BUFFERSIZE ? getarg(3) : BUFFERSIZE)) + return 0 + + new const STRLEN = strlen(buffer) + new const MAXLEN = getarg(3) + new i + for (i = 0; i < STRLEN && i < MAXLEN && setarg(2, i, buffer[i]); i++) {} + return setarg(2, i, '^0') + } + else if (_value > pev_edict_start && _value < pev_edict_end) { + return entity_get_edict(_index, _ENUMWRAPPER[_value]) + } + else if (_value > pev_float_start && _value < pev_float_end) { + return setarg(2, 0, _:entity_get_float(_index, _ENUMWRAPPER[_value])) + } + else if (_value > pev_int_start && _value < pev_int_end) { + return entity_get_int(_index, _ENUMWRAPPER[_value]) + } + else if (_value > pev_byte_start && _value < pev_byte_end) { + return entity_get_byte(_index, _ENUMWRAPPER[_value]) + } + else if (_value > pev_vecarray_start && _value < pev_vecarray_end) { + new Float:vector[3] + entity_get_vector(_index, _ENUMWRAPPER[_value], vector) + + if (!setarg(2, 0, _:vector[0]) || !setarg(2, 1, _:vector[1]) || !setarg(2, 2, _:vector[2])) + return 0 + + return 1 + } + else if (_value == pev_controller) { + if (!setarg(2, 0, entity_get_byte(_index, EV_BYTE_controller1)) || setarg(2, 1, entity_get_byte(_index, EV_BYTE_controller2)) || setarg(2, 2, entity_get_byte(_index, EV_BYTE_controller3)) || setarg(2, 3, entity_get_byte(_index, EV_BYTE_controller4))) + return 0 + return 1 + } + else if (_value == pev_blending) { + if (!setarg(2, 0, entity_get_byte(_index, EV_BYTE_blending1)) || setarg(2, 1, entity_get_byte(_index, EV_BYTE_blending2))) + return 0 + return 1 + } + + return 0 +} + +stock set_pev(_index, _value, {Float, Sql, Result, _}:...) { + if (_value > pev_string_start && _value < pev_string_end) { + new string[512], i = 0 + do string[i] = getarg(2, i); while (string[i++] != '^0' && i < 512) + return entity_set_string(_index, _ENUMWRAPPER[_value], string) + } + else if (_value > pev_edict_start && _value < pev_edict_end) { + return entity_set_edict(_index, _ENUMWRAPPER[_value], getarg(2)) + } + else if (_value > pev_float_start && _value < pev_float_end) { + return entity_set_float(_index, _ENUMWRAPPER[_value], Float:getarg(2)) + } + else if (_value > pev_int_start && _value < pev_int_end) { + return entity_set_int(_index, _ENUMWRAPPER[_value], getarg(2)) + } + else if (_value > pev_byte_start && _value < pev_byte_end) { + return entity_set_byte(_index, _ENUMWRAPPER[_value], getarg(2)) + } + else if (_value > pev_vecarray_start && _value < pev_vecarray_end) { + new Float:vector[3] + vector[0] = Float:getarg(2, 0); vector[1] = Float:getarg(2, 1); vector[2] = Float:getarg(2, 2); + return entity_set_vector(_index, _ENUMWRAPPER[_value], vector) + } + else if (_value == pev_controller) { + return entity_set_byte(_index, EV_BYTE_controller1, getarg(2, 0)) && entity_set_byte(_index, EV_BYTE_controller2, getarg(2, 1)) && entity_set_byte(_index, EV_BYTE_controller3, getarg(2, 2)) && entity_set_byte(_index, EV_BYTE_controller4, getarg(2, 3)) + } + else if (_value == pev_blending) { + return entity_set_byte(_index, EV_BYTE_blending1, getarg(2, 0)) && entity_set_byte(_index, EV_BYTE_blending2, getarg(2, 1)) + } + + return 0 +}