mirror of
https://github.com/rehlds/reapi.git
synced 2025-01-01 09:35:47 +03:00
Merge pull request #10 from s1lentq/checkmeplz
Fixed context data for nested hookchain forwards, added member natives
This commit is contained in:
commit
848bb10907
@ -107,6 +107,38 @@ native any:GetHookChainReturn(any:...);
|
|||||||
*/
|
*/
|
||||||
native SetHookChainArg(number, AType:type, any:...);
|
native SetHookChainArg(number, AType:type, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the rehlds is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native bool:is_rehlds();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the regamedll is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native bool:is_regamedll();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the reunion is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native bool:has_reunion();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the vtc is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native bool:has_vtc();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the callback from the module that gives major/minor versions for verifying compatibility reapi API versions
|
* This is the callback from the module that gives major/minor versions for verifying compatibility reapi API versions
|
||||||
* If will be amxx plugin a failure, then you do need to upgrade to the latest version of the module reapi or do update files included for amxx plugins
|
* If will be amxx plugin a failure, then you do need to upgrade to the latest version of the module reapi or do update files included for amxx plugins
|
||||||
|
@ -18,6 +18,18 @@ native set_entvar(const index, const EntVars:var, any:...);
|
|||||||
*/
|
*/
|
||||||
native any:get_entvar(const index, const EntVars:var, any:...);
|
native any:get_entvar(const index, const EntVars:var, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets usercmd data.
|
||||||
|
* Use the ucmd_* UCmd enum
|
||||||
|
*/
|
||||||
|
native set_ucmd(const ucmd, const UCmd:var, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns entvar data from an entity.
|
||||||
|
* Use the ucmd_* UCmd enum
|
||||||
|
*/
|
||||||
|
native any:get_ucmd(const ucmd, const UCmd:var, any:...);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set name of the map
|
* Set name of the map
|
||||||
*
|
*
|
||||||
|
@ -13,7 +13,7 @@ enum EngineFunc
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const recipients, const entity, const channel, const sample[], const volume, Float:attenuation, const fFlags, const pitch)
|
* Params: (const recipients, const entity, const channel, const sample[], const volume, Float:attenuation, const fFlags, const pitch)
|
||||||
*/
|
*/
|
||||||
RH_SV_StartSound = 0,
|
RH_SV_StartSound = 0 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -45,7 +45,7 @@ enum EntVars
|
|||||||
* Get params: get_entvar(index, EntVars:var, dest[], const lenght);
|
* Get params: get_entvar(index, EntVars:var, dest[], const lenght);
|
||||||
* Set params: set_entvar(index, EntVars:var, const source[]);
|
* Set params: set_entvar(index, EntVars:var, const source[]);
|
||||||
*/
|
*/
|
||||||
var_classname = 5120,
|
var_classname = 5 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1024,4 +1024,101 @@ enum EntVars
|
|||||||
var_euser4
|
var_euser4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum UCmd
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: short
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_lerp_msec = 8 * 1024,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: byte
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_msec,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var, Float:output[3]);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
ucmd_viewangles,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, Float:value);
|
||||||
|
*/
|
||||||
|
ucmd_forwardmove,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, Float:value);
|
||||||
|
*/
|
||||||
|
ucmd_sidemove,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, Float:value);
|
||||||
|
*/
|
||||||
|
ucmd_upmove,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: byte
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_lightlevel,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: unsigned short
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_buttons,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: byte
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_impulse,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: byte
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_weaponselect,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
|
*/
|
||||||
|
ucmd_impact_index,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_ucmd(const ucmd, UserCmd:var, Float:output[3]);
|
||||||
|
* Set params: set_ucmd(const ucmd, UserCmd:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
ucmd_impact_position
|
||||||
|
};
|
||||||
|
@ -45,6 +45,24 @@ native set_member(const index, any:member, any:...);
|
|||||||
*/
|
*/
|
||||||
native any:get_member(const index, any:member, any:...);
|
native any:get_member(const index, any:member, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets a playermove vars
|
||||||
|
*
|
||||||
|
* @param var The specified playermove, look at the enum's PlayerMove
|
||||||
|
*
|
||||||
|
* @return 1 on success.
|
||||||
|
*/
|
||||||
|
native set_pmove(const PlayerMove:var, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a playermove vars
|
||||||
|
*
|
||||||
|
* @param var The specified playermove var, look at the enum's PlayerMove
|
||||||
|
*
|
||||||
|
* @return If an integer or boolean or one byte, array or everything else is passed via 3rd argument and more, look at argument list for specified mvar
|
||||||
|
*/
|
||||||
|
native any:get_pmove(const PlayerMove:var, any:...);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets a movevars value to an playermove
|
* Sets a movevars value to an playermove
|
||||||
*
|
*
|
||||||
@ -63,6 +81,24 @@ native set_movevar(const MoveVars:var, any:...);
|
|||||||
*/
|
*/
|
||||||
native any:get_movevar(const MoveVars:var, any:...);
|
native any:get_movevar(const MoveVars:var, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets a pmtrace vars
|
||||||
|
*
|
||||||
|
* @param var The specified mvar, look at the enum's PMTrace
|
||||||
|
*
|
||||||
|
* @return 1 on success.
|
||||||
|
*/
|
||||||
|
native set_pmtrace(const PMTrace:var, any:...);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a pmtrace vars
|
||||||
|
*
|
||||||
|
* @param var The specified mvar, look at the enum's PMTrace
|
||||||
|
*
|
||||||
|
* @return If an integer or boolean or one byte, array or everything else is passed via 3rd argument and more, look at argument list for specified mvar
|
||||||
|
*/
|
||||||
|
native any:get_pmtrace(const PMTrace:var, any:...);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assign the number of the player animations.
|
* Assign the number of the player animations.
|
||||||
*
|
*
|
||||||
|
@ -138,7 +138,7 @@ enum GamedllFunc
|
|||||||
* Return type: int
|
* Return type: int
|
||||||
* Params: (const pObserver)
|
* Params: (const pObserver)
|
||||||
*/
|
*/
|
||||||
RG_GetForceCamera = 1024,
|
RG_GetForceCamera = 1 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -210,7 +210,7 @@ enum GamedllFunc_CBaseAnimating
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const this)
|
* Params: (const this)
|
||||||
*/
|
*/
|
||||||
RG_CBaseAnimating_ResetSequenceInfo = 2048,
|
RG_CBaseAnimating_ResetSequenceInfo = 2 * 1024,
|
||||||
|
|
||||||
// [...]
|
// [...]
|
||||||
RG_CBaseAnimating_End
|
RG_CBaseAnimating_End
|
||||||
@ -222,7 +222,7 @@ enum GamedllFunc_CBasePlayer
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const this)
|
* Params: (const this)
|
||||||
*/
|
*/
|
||||||
RG_CBasePlayer_Spawn = 3072,
|
RG_CBasePlayer_Spawn = 3 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -414,7 +414,7 @@ enum GamedllFunc_CSGameRules
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const index, const weapon)
|
* Params: (const index, const weapon)
|
||||||
*/
|
*/
|
||||||
RG_CSGameRules_FShouldSwitchWeapon = 4096,
|
RG_CSGameRules_FShouldSwitchWeapon = 4 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -555,7 +555,7 @@ enum CSGameRules_Members
|
|||||||
* Get params: get_member_game(member);
|
* Get params: get_member_game(member);
|
||||||
* Set params: set_member_game(member, value);
|
* Set params: set_member_game(member, value);
|
||||||
*/
|
*/
|
||||||
m_bFreezePeriod = 0,
|
m_bFreezePeriod = 0 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1200,7 +1200,7 @@ enum CBaseEntity_Members
|
|||||||
* Get params: Float:get_member(index, member);
|
* Get params: Float:get_member(index, member);
|
||||||
* Set params: set_member(index, member, Float:value);
|
* Set params: set_member(index, member, Float:value);
|
||||||
*/
|
*/
|
||||||
currentammo = 1024,
|
currentammo = 1 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1404,7 +1404,7 @@ enum CBaseAnimating_Members
|
|||||||
* Get params: Float:get_member(index, member);
|
* Get params: Float:get_member(index, member);
|
||||||
* Set params: set_member(index, member, Float:value);
|
* Set params: set_member(index, member, Float:value);
|
||||||
*/
|
*/
|
||||||
m_flFrameRate = 2048,
|
m_flFrameRate = 2 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1448,7 +1448,7 @@ enum CBaseMonster_Members
|
|||||||
* Get params: get_member(index, member);
|
* Get params: get_member(index, member);
|
||||||
* Set params: set_member(index, member, value);
|
* Set params: set_member(index, member, value);
|
||||||
*/
|
*/
|
||||||
m_Activity = 3072,
|
m_Activity = 3 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1580,7 +1580,7 @@ enum CBasePlayer_Members
|
|||||||
* Get params: get_member(index, member);
|
* Get params: get_member(index, member);
|
||||||
* Set params: set_member(index, member, value);
|
* Set params: set_member(index, member, value);
|
||||||
*/
|
*/
|
||||||
random_seed = 4096,
|
random_seed = 4 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -3071,6 +3071,489 @@ enum CBasePlayer_Members
|
|||||||
m_flLastCommandTime
|
m_flLastCommandTime
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum PlayerMove
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_player_index = 6 * 1024,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_server,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_multiplayer,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(const MoveVars:var);
|
||||||
|
* Set params: set_pmove(const MoveVars:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_time,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(const MoveVars:var);
|
||||||
|
* Set params: set_pmove(const MoveVars:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_frametime,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_forward,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_right,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_up,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_origin,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_angles,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_oldangles,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_velocity,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_movedir,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_basevelocity,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_view_ofs,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_flDuckTime,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_bInDuck,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: bool
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_flTimeStepSound,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: bool
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_iStepLeft,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_flFallVelocity,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_punchangle,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_flSwimTime,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_flNextPrimaryAttack,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_effects,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_flags,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_usehull,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_gravity,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_friction,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_oldbuttons,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_waterjumptime,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_dead,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_deadflag,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_spectator,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_movetype,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_onground,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_waterlevel,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_watertype,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_oldwaterlevel,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: char [256]
|
||||||
|
* Get params: get_member(const PlayerMove:var, dest[], const lenght);
|
||||||
|
* Set params: set_member(const PlayerMove:var, const source[]);
|
||||||
|
*/
|
||||||
|
pm_sztexturename,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: char
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_chtexturetype,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_maxspeed,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_clientmaxspeed,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_iuser1,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_iuser2,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_iuser3,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_iuser4,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_fuser1,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_fuser2,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_fuser3,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:value);
|
||||||
|
*/
|
||||||
|
pm_fuser4,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_vuser1,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_vuser2,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_vuser3,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3]);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pm_vuser4,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_numphysent,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: struct usercmd_s *
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_cmd,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmove(member);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
|
*/
|
||||||
|
pm_numtouch,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: char [256]
|
||||||
|
* Get params: get_member(const PlayerMove:var, dest[], const lenght);
|
||||||
|
* Set params: set_member(const PlayerMove:var, const source[]);
|
||||||
|
*/
|
||||||
|
pm_physinfo,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t [4]
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3], index);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3], index);
|
||||||
|
*/
|
||||||
|
pm_player_mins,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t [4]
|
||||||
|
* Get params: get_pmove(const PlayerMove:var, Float:output[3], index);
|
||||||
|
* Set params: set_pmove(const PlayerMove:var, Float:dest[3], index);
|
||||||
|
*/
|
||||||
|
pm_player_maxs
|
||||||
|
};
|
||||||
|
|
||||||
enum MoveVars
|
enum MoveVars
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -3079,7 +3562,7 @@ enum MoveVars
|
|||||||
* Get params: Float:get_mvar(const MoveVars:var);
|
* Get params: Float:get_mvar(const MoveVars:var);
|
||||||
* Set params: set_mvar(const MoveVars:var, Float:value);
|
* Set params: set_mvar(const MoveVars:var, Float:value);
|
||||||
*/
|
*/
|
||||||
mv_gravity = 6144,
|
mv_gravity = 7 * 1024,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -3281,3 +3764,78 @@ enum MoveVars
|
|||||||
*/
|
*/
|
||||||
mv_skyvec_z
|
mv_skyvec_z
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum PMTrace
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_allsolid = 9 * 1024,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_startsolid,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_inopen,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: qboolean
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_inwater,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: float
|
||||||
|
* Get params: Float:get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, Float:value);
|
||||||
|
*/
|
||||||
|
pmt_fraction,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var, Float:output[3]);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pmt_endpos,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_ent,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: vec3_t
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var, Float:output[3]);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, Float:dest[3]);
|
||||||
|
*/
|
||||||
|
pmt_deltavelocity,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: int
|
||||||
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
|
*/
|
||||||
|
pmt_hitgroup
|
||||||
|
};
|
||||||
|
@ -203,3 +203,103 @@ struct com_entvars
|
|||||||
edict_t *euser3;
|
edict_t *euser3;
|
||||||
edict_t *euser4;
|
edict_t *euser4;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct com_playermove
|
||||||
|
{
|
||||||
|
int player_index; // So we don't try to run the PM_CheckStuck nudging too quickly.
|
||||||
|
qboolean server; // For debugging, are we running physics code on server side?
|
||||||
|
qboolean multiplayer; // 1 == multiplayer server
|
||||||
|
float time; // realtime on host, for reckoning duck timing
|
||||||
|
float frametime; // Duration of this frame
|
||||||
|
vec3_t forward, right, up; // Vectors for angles
|
||||||
|
vec3_t origin; // Movement origin.
|
||||||
|
vec3_t angles; // Movement view angles.
|
||||||
|
vec3_t oldangles; // Angles before movement view angles were looked at.
|
||||||
|
vec3_t velocity; // Current movement direction.
|
||||||
|
vec3_t movedir; // For waterjumping, a forced forward velocity so we can fly over lip of ledge.
|
||||||
|
vec3_t basevelocity; // Velocity of the conveyor we are standing, e.g.
|
||||||
|
vec3_t view_ofs; // For ducking/dead
|
||||||
|
// Our eye position.
|
||||||
|
float flDuckTime; // Time we started duck
|
||||||
|
qboolean bInDuck; // In process of ducking or ducked already?
|
||||||
|
int flTimeStepSound; // For walking/falling
|
||||||
|
// Next time we can play a step sound
|
||||||
|
int iStepLeft;
|
||||||
|
float flFallVelocity;
|
||||||
|
vec3_t punchangle;
|
||||||
|
float flSwimTime;
|
||||||
|
float flNextPrimaryAttack;
|
||||||
|
int effects; // MUZZLE FLASH, e.g.
|
||||||
|
int flags; // FL_ONGROUND, FL_DUCKING, etc.
|
||||||
|
int usehull; // 0 = regular player hull, 1 = ducked player hull, 2 = point hull
|
||||||
|
float gravity; // Our current gravity and friction.
|
||||||
|
float friction;
|
||||||
|
int oldbuttons; // Buttons last usercmd
|
||||||
|
float waterjumptime; // Amount of time left in jumping out of water cycle.
|
||||||
|
qboolean dead; // Are we a dead player?
|
||||||
|
int deadflag;
|
||||||
|
int spectator; // Should we use spectator physics model?
|
||||||
|
int movetype; // Our movement type, NOCLIP, WALK, FLY
|
||||||
|
int onground; // -1 = in air, else pmove entity number
|
||||||
|
int waterlevel;
|
||||||
|
int watertype;
|
||||||
|
int oldwaterlevel;
|
||||||
|
char sztexturename[256];
|
||||||
|
char chtexturetype;
|
||||||
|
float maxspeed;
|
||||||
|
float clientmaxspeed;
|
||||||
|
int iuser1;
|
||||||
|
int iuser2;
|
||||||
|
int iuser3;
|
||||||
|
int iuser4;
|
||||||
|
float fuser1;
|
||||||
|
float fuser2;
|
||||||
|
float fuser3;
|
||||||
|
float fuser4;
|
||||||
|
vec3_t vuser1;
|
||||||
|
vec3_t vuser2;
|
||||||
|
vec3_t vuser3;
|
||||||
|
vec3_t vuser4;
|
||||||
|
int numphysent; // world state
|
||||||
|
// Number of entities to clip against.
|
||||||
|
physent_t physents[MAX_PHYSENTS];
|
||||||
|
int nummoveent; // Number of momvement entities (ladders)
|
||||||
|
physent_t moveents[MAX_MOVEENTS]; // just a list of ladders
|
||||||
|
int numvisent; // All things being rendered, for tracing against things you don't actually collide with
|
||||||
|
physent_t visents[MAX_PHYSENTS];
|
||||||
|
usercmd_t cmd; // input to run through physics.
|
||||||
|
int numtouch; // Trace results for objects we collided with.
|
||||||
|
pmtrace_t touchindex[MAX_PHYSENTS];
|
||||||
|
char physinfo[MAX_PHYSINFO_STRING]; // Physics info string
|
||||||
|
struct movevars_s *movevars;
|
||||||
|
Vector player_mins[4];
|
||||||
|
Vector player_maxs[4];
|
||||||
|
|
||||||
|
const char *(*PM_Info_ValueForKey)(const char *s, const char *key);
|
||||||
|
void(*PM_Particle)(float *origin, int color, float life, int zpos, int zvel);
|
||||||
|
int(*PM_TestPlayerPosition)(float *pos, pmtrace_t *ptrace);
|
||||||
|
void(*Con_NPrintf)(int idx, char *fmt, ...);
|
||||||
|
void(*Con_DPrintf)(char *fmt, ...);
|
||||||
|
void(*Con_Printf)(char *fmt, ...);
|
||||||
|
double(*Sys_FloatTime)();
|
||||||
|
void(*PM_StuckTouch)(int hitent, pmtrace_t *ptraceresult);
|
||||||
|
int(*PM_PointContents)(float *p, int *truecontents);
|
||||||
|
int(*PM_TruePointContents)(float *p);
|
||||||
|
int(*PM_HullPointContents)(struct hull_s *hull, int num, float *p);
|
||||||
|
pmtrace_t(*PM_PlayerTrace)(float *start, float *end, int traceFlags, int ignore_pe);
|
||||||
|
struct pmtrace_s *(*PM_TraceLine)(float *start, float *end, int flags, int usehulll, int ignore_pe);
|
||||||
|
int32(*RandomLong)(int32 lLow, int32 lHigh);
|
||||||
|
float(*RandomFloat)(float flLow, float flHigh);
|
||||||
|
int(*PM_GetModelType)(struct model_s *mod);
|
||||||
|
void(*PM_GetModelBounds)(struct model_s *mod, float *mins, float *maxs);
|
||||||
|
void *(*PM_HullForBsp)(physent_t *pe, float *offset);
|
||||||
|
float(*PM_TraceModel)(physent_t *pEnt, float *start, float *end, trace_t *trace);
|
||||||
|
int(*COM_FileSize)(char *filename);
|
||||||
|
byte *(*COM_LoadFile)(char *path, int usehunk, int *pLength);
|
||||||
|
void(*COM_FreeFile)(void *buffer);
|
||||||
|
char *(*memfgets)(byte *pMemFile, int fileSize, int *pFilePos, char *pBuffer, int bufferSize);
|
||||||
|
qboolean runfuncs;
|
||||||
|
void(*PM_PlaySound)(int channel, const char *sample, float volume, float attenuation, int fFlags, int pitch);
|
||||||
|
const char *(*PM_TraceTexture)(int ground, float *vstart, float *vend);
|
||||||
|
void(*PM_PlaybackEventFull)(int flags, int clientindex, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2);
|
||||||
|
};
|
||||||
|
@ -274,10 +274,10 @@ CBasePlayer *CBasePlayer_Observer_IsValidTarget(IReGameHook_CBasePlayer_Observer
|
|||||||
{
|
{
|
||||||
auto original = [chain](int _pthis, int _iPlayerIndex, bool _bSameTeam)
|
auto original = [chain](int _pthis, int _iPlayerIndex, bool _bSameTeam)
|
||||||
{
|
{
|
||||||
return chain->callNext(_iPlayerIndex, _bSameTeam);
|
return indexOfEdict(chain->callNext(_iPlayerIndex, _bSameTeam)->pev);
|
||||||
};
|
};
|
||||||
|
|
||||||
return callForward<CBasePlayer *>(RG_CBasePlayer_Observer_IsValidTarget, original, indexOfEdict(pthis->pev), iPlayerIndex, bSameTeam);
|
return getPrivate<CBasePlayer>(callForward<size_t>(RG_CBasePlayer_Observer_IsValidTarget, original, indexOfEdict(pthis->pev), iPlayerIndex, bSameTeam));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBasePlayer *pthis, PLAYER_ANIM playerAnim)
|
void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBasePlayer *pthis, PLAYER_ANIM playerAnim)
|
||||||
@ -478,17 +478,17 @@ edict_t *CSGameRules_GetPlayerSpawnSpot(IReGameHook_CSGameRules_GetPlayerSpawnSp
|
|||||||
{
|
{
|
||||||
auto original = [chain](int _pPlayer)
|
auto original = [chain](int _pPlayer)
|
||||||
{
|
{
|
||||||
return chain->callNext(getPrivate<CBasePlayer>(_pPlayer));
|
return indexOfEdict(chain->callNext(getPrivate<CBasePlayer>(_pPlayer)));
|
||||||
};
|
};
|
||||||
|
|
||||||
return callForward<edict_t *>(RG_CSGameRules_GetPlayerSpawnSpot, original, indexOfEdict(pPlayer->pev));
|
return edictByIndexAmx(callForward<size_t>(RG_CSGameRules_GetPlayerSpawnSpot, original, indexOfEdict(pPlayer->pev)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSGameRules_ClientUserInfoChanged(IReGameHook_CSGameRules_ClientUserInfoChanged *chain, CBasePlayer *pPlayer, char *infobuffer)
|
void CSGameRules_ClientUserInfoChanged(IReGameHook_CSGameRules_ClientUserInfoChanged *chain, CBasePlayer *pPlayer, char *infobuffer)
|
||||||
{
|
{
|
||||||
auto original = [chain](int _pPlayer, char *infobuffer)
|
auto original = [chain](int _pPlayer, char *_infobuffer)
|
||||||
{
|
{
|
||||||
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), infobuffer);
|
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), _infobuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
callVoidForward(RG_CSGameRules_ClientUserInfoChanged, original, indexOfEdict(pPlayer->pev), infobuffer);
|
callVoidForward(RG_CSGameRules_ClientUserInfoChanged, original, indexOfEdict(pPlayer->pev), infobuffer);
|
||||||
|
@ -29,7 +29,7 @@ struct retval_t
|
|||||||
{
|
{
|
||||||
char* _string;
|
char* _string;
|
||||||
float _float;
|
float _float;
|
||||||
int _interger;
|
int _integer;
|
||||||
CBaseEntity* _classptr;
|
CBaseEntity* _classptr;
|
||||||
edict_t* _edict;
|
edict_t* _edict;
|
||||||
entvars_t* _pev;
|
entvars_t* _pev;
|
||||||
@ -48,27 +48,53 @@ inline AType getApiType(entvars_t *) { return ATYPE_EVARS; }
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
inline AType getApiType(T *) { return ATYPE_INTEGER; }
|
inline AType getApiType(T *) { return ATYPE_INTEGER; }
|
||||||
|
|
||||||
#define MAX_ARGS 12u
|
#define MAX_HOOKCHAIN_ARGS 12u
|
||||||
|
|
||||||
template<size_t current = 0>
|
template<size_t current = 0, typename T1, typename T2, typename T3, typename T4, typename ...t_args>
|
||||||
void setupArgTypes(AType args_type[MAX_ARGS])
|
void setupArgTypes(AType args_type[], T1, T2, T3, T4, t_args... args)
|
||||||
{
|
{
|
||||||
|
if (current + 4 <= MAX_HOOKCHAIN_ARGS)
|
||||||
|
*(uint32 *)&args_type[current] = getApiType(T1()) | (getApiType(T2()) << 8) | (getApiType(T3()) << 16) | (getApiType(T4()) << 24);
|
||||||
|
if (sizeof...(args) && current + 4 < MAX_HOOKCHAIN_ARGS)
|
||||||
|
setupArgTypes<current + 4>(args_type, args...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<size_t current = 0, typename T, typename ...t_args>
|
template<size_t current = 0, typename T1, typename T2, typename T3>
|
||||||
void setupArgTypes(AType args_type[MAX_ARGS], T, t_args... args)
|
void setupArgTypes(AType args_type[], T1, T2, T3)
|
||||||
{
|
{
|
||||||
|
if (current + 3 <= MAX_HOOKCHAIN_ARGS)
|
||||||
|
*(uint32 *)&args_type[current] = getApiType(T1()) | (getApiType(T2()) << 8) | (getApiType(T3()) << 16);
|
||||||
|
else
|
||||||
|
setupArgTypes(args_type, T1(), T2());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<size_t current = 0, typename T1, typename T2>
|
||||||
|
void setupArgTypes(AType args_type[], T1, T2)
|
||||||
|
{
|
||||||
|
if (current + 2 <= MAX_HOOKCHAIN_ARGS)
|
||||||
|
*(uint16 *)&args_type[current] = getApiType(T1()) | (getApiType(T2()) << 8);
|
||||||
|
else
|
||||||
|
setupArgTypes(args_type, T1());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<size_t current = 0, typename T>
|
||||||
|
void setupArgTypes(AType args_type[], T)
|
||||||
|
{
|
||||||
|
if (current + 1 <= MAX_HOOKCHAIN_ARGS)
|
||||||
args_type[current] = getApiType(T());
|
args_type[current] = getApiType(T());
|
||||||
if (sizeof...(args) && current + 1 < MAX_ARGS)
|
}
|
||||||
setupArgTypes<current + 1>(args_type, args...);
|
|
||||||
|
template<size_t current = 0>
|
||||||
|
void setupArgTypes(AType args_type[])
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
struct hookctx_t
|
struct hookctx_t
|
||||||
{
|
{
|
||||||
template<typename ...t_args>
|
template<typename ...t_args>
|
||||||
hookctx_t(size_t arg_count, t_args... args) : args_ptr()
|
hookctx_t(size_t arg_count, t_args... args)
|
||||||
{
|
{
|
||||||
args_count = min(arg_count, MAX_ARGS);
|
args_count = min(arg_count, MAX_HOOKCHAIN_ARGS);
|
||||||
setupArgTypes(args_type, args...);
|
setupArgTypes(args_type, args...);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +108,7 @@ struct hookctx_t
|
|||||||
retval_t retVal;
|
retval_t retVal;
|
||||||
size_t args_count;
|
size_t args_count;
|
||||||
size_t args_ptr;
|
size_t args_ptr;
|
||||||
AType args_type[MAX_ARGS];
|
AType args_type[MAX_HOOKCHAIN_ARGS];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern hookctx_t* g_hookCtx;
|
extern hookctx_t* g_hookCtx;
|
||||||
@ -90,10 +116,11 @@ extern hookctx_t* g_hookCtx;
|
|||||||
template <typename original_t, typename ...f_args>
|
template <typename original_t, typename ...f_args>
|
||||||
NOINLINE void DLLEXPORT _callVoidForward(const hook_t* hook, original_t original, volatile f_args... args)
|
NOINLINE void DLLEXPORT _callVoidForward(const hook_t* hook, original_t original, volatile f_args... args)
|
||||||
{
|
{
|
||||||
g_hookCtx->reset(size_t(&original) + sizeof(original));
|
auto hookCtx = g_hookCtx;
|
||||||
|
hookCtx->reset(size_t(&original) + sizeof(original));
|
||||||
int hc_state = HC_CONTINUE;
|
int hc_state = HC_CONTINUE;
|
||||||
|
|
||||||
for (auto& fwd : hook->pre)
|
for (auto fwd : hook->pre)
|
||||||
{
|
{
|
||||||
if (fwd->GetState() == FSTATE_ENABLED)
|
if (fwd->GetState() == FSTATE_ENABLED)
|
||||||
{
|
{
|
||||||
@ -108,10 +135,13 @@ NOINLINE void DLLEXPORT _callVoidForward(const hook_t* hook, original_t original
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hc_state != HC_SUPERCEDE)
|
if (hc_state != HC_SUPERCEDE) {
|
||||||
|
g_hookCtx = nullptr;
|
||||||
original(args...);
|
original(args...);
|
||||||
|
g_hookCtx = hookCtx;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& fwd : hook->post) {
|
for (auto fwd : hook->post) {
|
||||||
if (fwd->GetState() == FSTATE_ENABLED) {
|
if (fwd->GetState() == FSTATE_ENABLED) {
|
||||||
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
||||||
|
|
||||||
@ -124,9 +154,6 @@ NOINLINE void DLLEXPORT _callVoidForward(const hook_t* hook, original_t original
|
|||||||
template <typename original_t, typename ...f_args>
|
template <typename original_t, typename ...f_args>
|
||||||
void callVoidForward(size_t func, original_t original, f_args... args)
|
void callVoidForward(size_t func, original_t original, f_args... args)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
hookctx_t hookCtx(sizeof...(args), args...);
|
hookctx_t hookCtx(sizeof...(args), args...);
|
||||||
|
|
||||||
g_hookCtx = &hookCtx;
|
g_hookCtx = &hookCtx;
|
||||||
@ -137,26 +164,27 @@ void callVoidForward(size_t func, original_t original, f_args... args)
|
|||||||
template <typename R, typename original_t, typename ...f_args>
|
template <typename R, typename original_t, typename ...f_args>
|
||||||
NOINLINE R DLLEXPORT _callForward(const hook_t* hook, original_t original, volatile f_args... args)
|
NOINLINE R DLLEXPORT _callForward(const hook_t* hook, original_t original, volatile f_args... args)
|
||||||
{
|
{
|
||||||
auto& hookCtx = *g_hookCtx;
|
auto hookCtx = g_hookCtx;
|
||||||
hookCtx.reset(size_t(&original) + sizeof(original), getApiType(R()));
|
hookCtx->reset(size_t(&original) + sizeof(original), getApiType(R()));
|
||||||
int hc_state = HC_CONTINUE;
|
int hc_state = HC_CONTINUE;
|
||||||
|
|
||||||
for (auto& fwd : hook->pre)
|
for (auto fwd : hook->pre)
|
||||||
{
|
{
|
||||||
if (fwd->GetState() == FSTATE_ENABLED)
|
if (fwd->GetState() == FSTATE_ENABLED)
|
||||||
{
|
{
|
||||||
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
||||||
|
|
||||||
if (ret == HC_CONTINUE)
|
if (ret == HC_CONTINUE) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!hookCtx.retVal.set) {
|
if (!hookCtx->retVal.set) {
|
||||||
g_amxxapi.LogError(fwd->GetAmx(), AMX_ERR_CALLBACK, "%s", "can't suppress original function call without new return value set");
|
g_amxxapi.LogError(fwd->GetAmx(), AMX_ERR_CALLBACK, "%s", "can't suppress original function call without new return value set");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == HC_BREAK) {
|
if (ret == HC_BREAK) {
|
||||||
return *(R *)&hookCtx.retVal._interger;
|
return *(R *)&hookCtx->retVal._integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret > hc_state)
|
if (ret > hc_state)
|
||||||
@ -166,12 +194,17 @@ NOINLINE R DLLEXPORT _callForward(const hook_t* hook, original_t original, volat
|
|||||||
|
|
||||||
if (hc_state != HC_SUPERCEDE)
|
if (hc_state != HC_SUPERCEDE)
|
||||||
{
|
{
|
||||||
|
g_hookCtx = nullptr;
|
||||||
auto retVal = original(args...);
|
auto retVal = original(args...);
|
||||||
|
g_hookCtx = hookCtx;
|
||||||
|
|
||||||
if (hc_state != HC_OVERRIDE)
|
if (hc_state != HC_OVERRIDE)
|
||||||
hookCtx.retVal._interger = *(int *)&retVal;
|
hookCtx->retVal._integer = *(int *)&retVal;
|
||||||
|
|
||||||
|
hookCtx->retVal.set = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& fwd : hook->post) {
|
for (auto fwd : hook->post) {
|
||||||
if (fwd->GetState() == FSTATE_ENABLED) {
|
if (fwd->GetState() == FSTATE_ENABLED) {
|
||||||
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
auto ret = g_amxxapi.ExecuteForward(fwd->GetIndex(), args...);
|
||||||
|
|
||||||
@ -180,15 +213,12 @@ NOINLINE R DLLEXPORT _callForward(const hook_t* hook, original_t original, volat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return *(R *)&hookCtx.retVal._interger;
|
return *(R *)&hookCtx->retVal._integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename R, typename original_t, typename ...f_args>
|
template <typename R, typename original_t, typename ...f_args>
|
||||||
R callForward(size_t func, original_t original, f_args... args)
|
R callForward(size_t func, original_t original, f_args... args)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
|
||||||
static
|
|
||||||
#endif
|
|
||||||
hookctx_t hookCtx(sizeof...(args), args...);
|
hookctx_t hookCtx(sizeof...(args), args...);
|
||||||
|
|
||||||
g_hookCtx = &hookCtx;
|
g_hookCtx = &hookCtx;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
edict_t* g_pEdicts;
|
edict_t* g_pEdicts;
|
||||||
|
playermove_t* g_pMove;
|
||||||
char g_szMapName[32];
|
char g_szMapName[32];
|
||||||
int gmsgSendAudio, gmsgTeamScore, gmsgStatusIcon, gmsgArmorType, gmsgTeamInfo, gmsgItemStatus;
|
int gmsgSendAudio, gmsgTeamScore, gmsgStatusIcon, gmsgArmorType, gmsgTeamInfo, gmsgItemStatus;
|
||||||
|
|
||||||
@ -73,6 +74,7 @@ int DispatchSpawn(edict_t* pEntity)
|
|||||||
g_szMapName[sizeof(g_szMapName) - 1] = '\0';
|
g_szMapName[sizeof(g_szMapName) - 1] = '\0';
|
||||||
|
|
||||||
g_pEdicts = g_engfuncs.pfnPEntityOfEntIndex(0);
|
g_pEdicts = g_engfuncs.pfnPEntityOfEntIndex(0);
|
||||||
|
g_pMove = g_ReGameApi->GetPlayerMove();
|
||||||
g_pFunctionTable->pfnSpawn = nullptr;
|
g_pFunctionTable->pfnSpawn = nullptr;
|
||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
extern char g_szMapName[32];
|
extern char g_szMapName[32];
|
||||||
extern edict_t* g_pEdicts;
|
extern edict_t* g_pEdicts;
|
||||||
|
extern playermove_t* g_pMove;
|
||||||
extern int gmsgSendAudio;
|
extern int gmsgSendAudio;
|
||||||
extern int gmsgTeamScore;
|
extern int gmsgTeamScore;
|
||||||
extern int gmsgStatusIcon;
|
extern int gmsgStatusIcon;
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
|
|
||||||
#define CLASS_MEMBERS(cx, enmx, mx) ((!(enmx & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (enmx & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember([](member_t* ptr){ decltype(##cx::##mx) f = {};ptr->size = getTypeSize(f);ptr->max_size = sizeof(f);ptr->offset = offsetof(##cx, ##mx);ptr->type = getMemberType(f);}) : regmember(#enmx)
|
#define CLASS_MEMBERS(cx, mx, pref) ((!(pref##mx & (MAX_REGION_RANGE - 1)) ? regmember::current_cell = 1, true : false) || (pref##mx & (MAX_REGION_RANGE - 1)) == regmember::current_cell++) ? regmember([](member_t* ptr){ decltype(##cx::##mx) f = {};ptr->size = getTypeSize(f);ptr->max_size = sizeof(f);ptr->offset = offsetof(##cx, ##mx);ptr->type = getMemberType(f);}) : regmember(#mx)
|
||||||
#define CLASS_MEMBERS_DEF(cx, mx) CLASS_MEMBERS(cx, mx, mx)
|
|
||||||
|
|
||||||
#define GM_MEMBERS(mx) CLASS_MEMBERS_DEF(CHalfLifeMultiplay, mx)
|
#define GM_MEMBERS(mx) CLASS_MEMBERS(CHalfLifeMultiplay, mx,)
|
||||||
#define GM_VOICE_MEMBERS(mx) CLASS_MEMBERS_DEF(CVoiceGameMgr, mx)
|
#define GM_VOICE_MEMBERS(mx) CLASS_MEMBERS(CVoiceGameMgr, mx,)
|
||||||
#define BASE_MEMBERS(mx) CLASS_MEMBERS_DEF(CBaseEntity, mx)
|
#define BASE_MEMBERS(mx) CLASS_MEMBERS(CBaseEntity, mx,)
|
||||||
#define ANIM_MEMBERS(mx) CLASS_MEMBERS_DEF(CBaseAnimating, mx)
|
#define ANIM_MEMBERS(mx) CLASS_MEMBERS(CBaseAnimating, mx,)
|
||||||
#define MONST_MEMBERS(mx) CLASS_MEMBERS_DEF(CBaseMonster, mx)
|
#define MONST_MEMBERS(mx) CLASS_MEMBERS(CBaseMonster, mx,)
|
||||||
#define PL_MEMBERS(mx) CLASS_MEMBERS_DEF(CBasePlayer, mx)
|
#define PL_MEMBERS(mx) CLASS_MEMBERS(CBasePlayer, mx,)
|
||||||
#define EVAR_MEMBERS(mx) CLASS_MEMBERS_DEF(com_entvars, mx)
|
#define EVAR_MEMBERS(mx) CLASS_MEMBERS(com_entvars, mx, var_)
|
||||||
#define MOVEVAR_MEMBERS(mx) CLASS_MEMBERS(movevars_t, MoveVars::##mx, mx)
|
#define PMOVE_MEMBERS(mx) CLASS_MEMBERS(com_playermove, mx, pm_)
|
||||||
|
#define MOVEVAR_MEMBERS(mx) CLASS_MEMBERS(movevars_t, mx, mv_)
|
||||||
|
#define UCMD_MEMBERS(mx) CLASS_MEMBERS(usercmd_s, mx, ucmd_)
|
||||||
|
#define PMTRACE_MEMBERS(mx) CLASS_MEMBERS(pmtrace_s, mx, pmt_)
|
||||||
|
|
||||||
inline MType getMemberType(float*) { return MEMBER_FLOAT; }
|
inline MType getMemberType(float*) { return MEMBER_FLOAT; }
|
||||||
inline MType getMemberType(float) { return MEMBER_FLOAT; }
|
inline MType getMemberType(float) { return MEMBER_FLOAT; }
|
||||||
@ -55,6 +57,9 @@ inline MType getMemberType(bool) { return MEMBER_BOOL; }
|
|||||||
inline MType getMemberType(CUnifiedSignals) { return MEMBER_SIGNALS; }
|
inline MType getMemberType(CUnifiedSignals) { return MEMBER_SIGNALS; }
|
||||||
inline MType getMemberType(RebuyStruct) { return MEBMER_REBUYSTRUCT; }
|
inline MType getMemberType(RebuyStruct) { return MEBMER_REBUYSTRUCT; }
|
||||||
|
|
||||||
|
inline MType getMemberType(pmtrace_t) { return MEMBER_PMTRACE; }
|
||||||
|
inline MType getMemberType(usercmd_s) { return MEBMER_USERCMD; }
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline MType getMemberType(T) { static_assert(false, "Not implemented overload"); }
|
inline MType getMemberType(T) { static_assert(false, "Not implemented overload"); }
|
||||||
|
|
||||||
@ -534,6 +539,69 @@ member_t memberlist_entvars[] = {
|
|||||||
EVAR_MEMBERS(euser4)
|
EVAR_MEMBERS(euser4)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
member_t memberlist_playermove[] = {
|
||||||
|
PMOVE_MEMBERS(player_index),
|
||||||
|
PMOVE_MEMBERS(server),
|
||||||
|
PMOVE_MEMBERS(multiplayer),
|
||||||
|
PMOVE_MEMBERS(time),
|
||||||
|
PMOVE_MEMBERS(frametime),
|
||||||
|
PMOVE_MEMBERS(forward),
|
||||||
|
PMOVE_MEMBERS(right),
|
||||||
|
PMOVE_MEMBERS(up),
|
||||||
|
PMOVE_MEMBERS(origin),
|
||||||
|
PMOVE_MEMBERS(angles),
|
||||||
|
PMOVE_MEMBERS(oldangles),
|
||||||
|
PMOVE_MEMBERS(velocity),
|
||||||
|
PMOVE_MEMBERS(movedir),
|
||||||
|
PMOVE_MEMBERS(basevelocity),
|
||||||
|
PMOVE_MEMBERS(view_ofs),
|
||||||
|
PMOVE_MEMBERS(flDuckTime),
|
||||||
|
PMOVE_MEMBERS(bInDuck),
|
||||||
|
PMOVE_MEMBERS(flTimeStepSound),
|
||||||
|
PMOVE_MEMBERS(iStepLeft),
|
||||||
|
PMOVE_MEMBERS(flFallVelocity),
|
||||||
|
PMOVE_MEMBERS(punchangle),
|
||||||
|
PMOVE_MEMBERS(flSwimTime),
|
||||||
|
PMOVE_MEMBERS(flNextPrimaryAttack),
|
||||||
|
PMOVE_MEMBERS(effects),
|
||||||
|
PMOVE_MEMBERS(flags),
|
||||||
|
PMOVE_MEMBERS(usehull),
|
||||||
|
PMOVE_MEMBERS(gravity),
|
||||||
|
PMOVE_MEMBERS(friction),
|
||||||
|
PMOVE_MEMBERS(oldbuttons),
|
||||||
|
PMOVE_MEMBERS(waterjumptime),
|
||||||
|
PMOVE_MEMBERS(dead),
|
||||||
|
PMOVE_MEMBERS(deadflag),
|
||||||
|
PMOVE_MEMBERS(spectator),
|
||||||
|
PMOVE_MEMBERS(movetype),
|
||||||
|
PMOVE_MEMBERS(onground),
|
||||||
|
PMOVE_MEMBERS(waterlevel),
|
||||||
|
PMOVE_MEMBERS(watertype),
|
||||||
|
PMOVE_MEMBERS(oldwaterlevel),
|
||||||
|
PMOVE_MEMBERS(sztexturename),
|
||||||
|
PMOVE_MEMBERS(chtexturetype),
|
||||||
|
PMOVE_MEMBERS(maxspeed),
|
||||||
|
PMOVE_MEMBERS(clientmaxspeed),
|
||||||
|
PMOVE_MEMBERS(iuser1),
|
||||||
|
PMOVE_MEMBERS(iuser2),
|
||||||
|
PMOVE_MEMBERS(iuser3),
|
||||||
|
PMOVE_MEMBERS(iuser4),
|
||||||
|
PMOVE_MEMBERS(fuser1),
|
||||||
|
PMOVE_MEMBERS(fuser2),
|
||||||
|
PMOVE_MEMBERS(fuser3),
|
||||||
|
PMOVE_MEMBERS(fuser4),
|
||||||
|
PMOVE_MEMBERS(vuser1),
|
||||||
|
PMOVE_MEMBERS(vuser2),
|
||||||
|
PMOVE_MEMBERS(vuser3),
|
||||||
|
PMOVE_MEMBERS(vuser4),
|
||||||
|
PMOVE_MEMBERS(numphysent),
|
||||||
|
PMOVE_MEMBERS(cmd),
|
||||||
|
PMOVE_MEMBERS(numtouch),
|
||||||
|
PMOVE_MEMBERS(physinfo),
|
||||||
|
PMOVE_MEMBERS(player_mins),
|
||||||
|
PMOVE_MEMBERS(player_maxs),
|
||||||
|
};
|
||||||
|
|
||||||
member_t memberlist_movevars[] = {
|
member_t memberlist_movevars[] = {
|
||||||
MOVEVAR_MEMBERS(gravity),
|
MOVEVAR_MEMBERS(gravity),
|
||||||
MOVEVAR_MEMBERS(stopspeed),
|
MOVEVAR_MEMBERS(stopspeed),
|
||||||
@ -563,6 +631,34 @@ member_t memberlist_movevars[] = {
|
|||||||
MOVEVAR_MEMBERS(skyvec_z),
|
MOVEVAR_MEMBERS(skyvec_z),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
member_t memberlist_usercmd[] = {
|
||||||
|
UCMD_MEMBERS(lerp_msec),
|
||||||
|
UCMD_MEMBERS(msec),
|
||||||
|
UCMD_MEMBERS(viewangles),
|
||||||
|
UCMD_MEMBERS(forwardmove),
|
||||||
|
UCMD_MEMBERS(sidemove),
|
||||||
|
UCMD_MEMBERS(upmove),
|
||||||
|
UCMD_MEMBERS(lightlevel),
|
||||||
|
UCMD_MEMBERS(buttons),
|
||||||
|
UCMD_MEMBERS(impulse),
|
||||||
|
UCMD_MEMBERS(weaponselect),
|
||||||
|
UCMD_MEMBERS(impact_index),
|
||||||
|
UCMD_MEMBERS(impact_position)
|
||||||
|
};
|
||||||
|
|
||||||
|
member_t memberlist_pmtrace[] = {
|
||||||
|
PMTRACE_MEMBERS(allsolid),
|
||||||
|
PMTRACE_MEMBERS(startsolid),
|
||||||
|
PMTRACE_MEMBERS(inopen),
|
||||||
|
PMTRACE_MEMBERS(inwater),
|
||||||
|
PMTRACE_MEMBERS(fraction),
|
||||||
|
PMTRACE_MEMBERS(endpos),
|
||||||
|
PMTRACE_MEMBERS(ent),
|
||||||
|
PMTRACE_MEMBERS(deltavelocity),
|
||||||
|
PMTRACE_MEMBERS(hitgroup)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
memberlist_t memberlist;
|
memberlist_t memberlist;
|
||||||
|
|
||||||
member_t *memberlist_t::operator[](size_t members) const
|
member_t *memberlist_t::operator[](size_t members) const
|
||||||
@ -579,7 +675,10 @@ member_t *memberlist_t::operator[](size_t members) const
|
|||||||
CASE(basemonster)
|
CASE(basemonster)
|
||||||
CASE(player)
|
CASE(player)
|
||||||
CASE(entvars)
|
CASE(entvars)
|
||||||
|
CASE(playermove)
|
||||||
CASE(movevars)
|
CASE(movevars)
|
||||||
|
CASE(usercmd)
|
||||||
|
CASE(pmtrace)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -22,6 +22,8 @@ enum MType
|
|||||||
MEMBER_BOOL, // a bool
|
MEMBER_BOOL, // a bool
|
||||||
MEMBER_SIGNALS, // class CUnifiedSignals
|
MEMBER_SIGNALS, // class CUnifiedSignals
|
||||||
MEBMER_REBUYSTRUCT, // struct RebuyStruct
|
MEBMER_REBUYSTRUCT, // struct RebuyStruct
|
||||||
|
MEMBER_PMTRACE, // struct pmtrace_t
|
||||||
|
MEBMER_USERCMD, // struct usercmd_s
|
||||||
};
|
};
|
||||||
|
|
||||||
struct member_t
|
struct member_t
|
||||||
@ -44,7 +46,10 @@ struct memberlist_t
|
|||||||
ht_basemonster,
|
ht_basemonster,
|
||||||
ht_player,
|
ht_player,
|
||||||
ht_entvars,
|
ht_entvars,
|
||||||
ht_movevars
|
ht_playermove,
|
||||||
|
ht_movevars,
|
||||||
|
ht_usercmd,
|
||||||
|
ht_pmtrace
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -396,160 +401,259 @@ enum CBasePlayer_Members
|
|||||||
// entvars
|
// entvars
|
||||||
enum EntVars
|
enum EntVars
|
||||||
{
|
{
|
||||||
classname = BEGIN_MEMBER_REGION(entvars),
|
var_classname = BEGIN_MEMBER_REGION(entvars),
|
||||||
globalname,
|
var_globalname,
|
||||||
origin,
|
var_origin,
|
||||||
oldorigin,
|
var_oldorigin,
|
||||||
velocity,
|
var_velocity,
|
||||||
basevelocity,
|
var_basevelocity,
|
||||||
clbasevelocity,
|
var_clbasevelocity,
|
||||||
movedir,
|
var_movedir,
|
||||||
angles,
|
var_angles,
|
||||||
avelocity,
|
var_avelocity,
|
||||||
punchangle,
|
var_punchangle,
|
||||||
v_angle,
|
var_v_angle,
|
||||||
endpos,
|
var_endpos,
|
||||||
startpos,
|
var_startpos,
|
||||||
impacttime,
|
var_impacttime,
|
||||||
starttime,
|
var_starttime,
|
||||||
fixangle,
|
var_fixangle,
|
||||||
idealpitch,
|
var_idealpitch,
|
||||||
pitch_speed,
|
var_pitch_speed,
|
||||||
ideal_yaw,
|
var_ideal_yaw,
|
||||||
yaw_speed,
|
var_yaw_speed,
|
||||||
modelindex,
|
var_modelindex,
|
||||||
model,
|
var_model,
|
||||||
viewmodel,
|
var_viewmodel,
|
||||||
weaponmodel,
|
var_weaponmodel,
|
||||||
absmin,
|
var_absmin,
|
||||||
absmax,
|
var_absmax,
|
||||||
mins,
|
var_mins,
|
||||||
maxs,
|
var_maxs,
|
||||||
size,
|
var_size,
|
||||||
ltime,
|
var_ltime,
|
||||||
nextthink,
|
var_nextthink,
|
||||||
movetype,
|
var_movetype,
|
||||||
solid,
|
var_solid,
|
||||||
skin,
|
var_skin,
|
||||||
body,
|
var_body,
|
||||||
effects,
|
var_effects,
|
||||||
gravity,
|
var_gravity,
|
||||||
friction,
|
var_friction,
|
||||||
light_level,
|
var_light_level,
|
||||||
sequence,
|
var_sequence,
|
||||||
gaitsequence,
|
var_gaitsequence,
|
||||||
frame,
|
var_frame,
|
||||||
animtime,
|
var_animtime,
|
||||||
framerate,
|
var_framerate,
|
||||||
controller,
|
var_controller,
|
||||||
blending,
|
var_blending,
|
||||||
scale,
|
var_scale,
|
||||||
rendermode,
|
var_rendermode,
|
||||||
renderamt,
|
var_renderamt,
|
||||||
rendercolor,
|
var_rendercolor,
|
||||||
renderfx,
|
var_renderfx,
|
||||||
health,
|
var_health,
|
||||||
frags,
|
var_frags,
|
||||||
weapons,
|
var_weapons,
|
||||||
takedamage,
|
var_takedamage,
|
||||||
deadflag,
|
var_deadflag,
|
||||||
view_ofs,
|
var_view_ofs,
|
||||||
button,
|
var_button,
|
||||||
impulse,
|
var_impulse,
|
||||||
chain,
|
var_chain,
|
||||||
dmg_inflictor,
|
var_dmg_inflictor,
|
||||||
enemy,
|
var_enemy,
|
||||||
aiment,
|
var_aiment,
|
||||||
owner,
|
var_owner,
|
||||||
groundentity,
|
var_groundentity,
|
||||||
spawnflags,
|
var_spawnflags,
|
||||||
flags,
|
var_flags,
|
||||||
colormap,
|
var_colormap,
|
||||||
team,
|
var_team,
|
||||||
max_health,
|
var_max_health,
|
||||||
teleport_time,
|
var_teleport_time,
|
||||||
armortype,
|
var_armortype,
|
||||||
armorvalue,
|
var_armorvalue,
|
||||||
waterlevel,
|
var_waterlevel,
|
||||||
watertype,
|
var_watertype,
|
||||||
target,
|
var_target,
|
||||||
targetname,
|
var_targetname,
|
||||||
netname,
|
var_netname,
|
||||||
message,
|
var_message,
|
||||||
dmg_take,
|
var_dmg_take,
|
||||||
dmg_save,
|
var_dmg_save,
|
||||||
dmg,
|
var_dmg,
|
||||||
dmgtime,
|
var_dmgtime,
|
||||||
noise,
|
var_noise,
|
||||||
noise1,
|
var_noise1,
|
||||||
noise2,
|
var_noise2,
|
||||||
noise3,
|
var_noise3,
|
||||||
speed,
|
var_speed,
|
||||||
air_finished,
|
var_air_finished,
|
||||||
pain_finished,
|
var_pain_finished,
|
||||||
radsuit_finished,
|
var_radsuit_finished,
|
||||||
pContainingEntity,
|
var_pContainingEntity,
|
||||||
playerclass,
|
var_playerclass,
|
||||||
maxspeed,
|
var_maxspeed,
|
||||||
fov,
|
var_fov,
|
||||||
weaponanim,
|
var_weaponanim,
|
||||||
pushmsec,
|
var_pushmsec,
|
||||||
bInDuck,
|
var_bInDuck,
|
||||||
flTimeStepSound,
|
var_flTimeStepSound,
|
||||||
flSwimTime,
|
var_flSwimTime,
|
||||||
flDuckTime,
|
var_flDuckTime,
|
||||||
iStepLeft,
|
var_iStepLeft,
|
||||||
flFallVelocity,
|
var_flFallVelocity,
|
||||||
gamestate,
|
var_gamestate,
|
||||||
oldbuttons,
|
var_oldbuttons,
|
||||||
groupinfo,
|
var_groupinfo,
|
||||||
iuser1,
|
var_iuser1,
|
||||||
iuser2,
|
var_iuser2,
|
||||||
iuser3,
|
var_iuser3,
|
||||||
iuser4,
|
var_iuser4,
|
||||||
fuser1,
|
var_fuser1,
|
||||||
fuser2,
|
var_fuser2,
|
||||||
fuser3,
|
var_fuser3,
|
||||||
fuser4,
|
var_fuser4,
|
||||||
vuser1,
|
var_vuser1,
|
||||||
vuser2,
|
var_vuser2,
|
||||||
vuser3,
|
var_vuser3,
|
||||||
vuser4,
|
var_vuser4,
|
||||||
euser1,
|
var_euser1,
|
||||||
euser2,
|
var_euser2,
|
||||||
euser3,
|
var_euser3,
|
||||||
euser4
|
var_euser4
|
||||||
|
};
|
||||||
|
|
||||||
|
enum PlayerMove
|
||||||
|
{
|
||||||
|
pm_player_index = BEGIN_MEMBER_REGION(playermove),
|
||||||
|
pm_server,
|
||||||
|
pm_multiplayer,
|
||||||
|
pm_time,
|
||||||
|
pm_frametime,
|
||||||
|
pm_forward,
|
||||||
|
pm_right,
|
||||||
|
pm_up,
|
||||||
|
pm_origin,
|
||||||
|
pm_angles,
|
||||||
|
pm_oldangles,
|
||||||
|
pm_velocity,
|
||||||
|
pm_movedir,
|
||||||
|
pm_basevelocity,
|
||||||
|
pm_view_ofs,
|
||||||
|
pm_flDuckTime,
|
||||||
|
pm_bInDuck,
|
||||||
|
pm_flTimeStepSound,
|
||||||
|
pm_iStepLeft,
|
||||||
|
pm_flFallVelocity,
|
||||||
|
pm_punchangle,
|
||||||
|
pm_flSwimTime,
|
||||||
|
pm_flNextPrimaryAttack,
|
||||||
|
pm_effects,
|
||||||
|
pm_flags,
|
||||||
|
pm_usehull,
|
||||||
|
pm_gravity,
|
||||||
|
pm_friction,
|
||||||
|
pm_oldbuttons,
|
||||||
|
pm_waterjumptime,
|
||||||
|
pm_dead,
|
||||||
|
pm_deadflag,
|
||||||
|
pm_spectator,
|
||||||
|
pm_movetype,
|
||||||
|
pm_onground,
|
||||||
|
pm_waterlevel,
|
||||||
|
pm_watertype,
|
||||||
|
pm_oldwaterlevel,
|
||||||
|
pm_sztexturename,
|
||||||
|
pm_chtexturetype,
|
||||||
|
pm_maxspeed,
|
||||||
|
pm_clientmaxspeed,
|
||||||
|
pm_iuser1,
|
||||||
|
pm_iuser2,
|
||||||
|
pm_iuser3,
|
||||||
|
pm_iuser4,
|
||||||
|
pm_fuser1,
|
||||||
|
pm_fuser2,
|
||||||
|
pm_fuser3,
|
||||||
|
pm_fuser4,
|
||||||
|
pm_vuser1,
|
||||||
|
pm_vuser2,
|
||||||
|
pm_vuser3,
|
||||||
|
pm_vuser4,
|
||||||
|
pm_numphysent,
|
||||||
|
|
||||||
|
/* physent_t physents[MAX_PHYSENTS];
|
||||||
|
pm_nummoveent; // Number of momvement entities (ladders)
|
||||||
|
physent_t moveents[MAX_MOVEENTS]; // just a list of ladders
|
||||||
|
pm_numvisent; // All things being rendered, for tracing against things you don't actually collide with
|
||||||
|
physent_t visents[MAX_PHYSENTS];*/
|
||||||
|
|
||||||
|
pm_cmd,
|
||||||
|
pm_numtouch,
|
||||||
|
//pm_touchindex,
|
||||||
|
pm_physinfo,
|
||||||
|
//pm_movevars,
|
||||||
|
pm_player_mins,
|
||||||
|
pm_player_maxs
|
||||||
};
|
};
|
||||||
|
|
||||||
// in order to avoid problems with redefinition enumerator
|
|
||||||
namespace MoveVars {
|
|
||||||
enum MoveVars
|
enum MoveVars
|
||||||
{
|
{
|
||||||
gravity = BEGIN_MEMBER_REGION(movevars),
|
mv_gravity = BEGIN_MEMBER_REGION(movevars),
|
||||||
stopspeed,
|
mv_stopspeed,
|
||||||
maxspeed,
|
mv_maxspeed,
|
||||||
spectatormaxspeed,
|
mv_spectatormaxspeed,
|
||||||
accelerate,
|
mv_accelerate,
|
||||||
airaccelerate,
|
mv_airaccelerate,
|
||||||
wateraccelerate,
|
mv_wateraccelerate,
|
||||||
friction,
|
mv_friction,
|
||||||
edgefriction,
|
mv_edgefriction,
|
||||||
waterfriction,
|
mv_waterfriction,
|
||||||
entgravity,
|
mv_entgravity,
|
||||||
bounce,
|
mv_bounce,
|
||||||
stepsize,
|
mv_stepsize,
|
||||||
maxvelocity,
|
mv_maxvelocity,
|
||||||
zmax,
|
mv_zmax,
|
||||||
waveHeight,
|
mv_waveHeight,
|
||||||
footsteps,
|
mv_footsteps,
|
||||||
skyName,
|
mv_skyName,
|
||||||
rollangle,
|
mv_rollangle,
|
||||||
rollspeed,
|
mv_rollspeed,
|
||||||
skycolor_r,
|
mv_skycolor_r,
|
||||||
skycolor_g,
|
mv_skycolor_g,
|
||||||
skycolor_b,
|
mv_skycolor_b,
|
||||||
skyvec_x,
|
mv_skyvec_x,
|
||||||
skyvec_y,
|
mv_skyvec_y,
|
||||||
skyvec_z,
|
mv_skyvec_z
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum UserCmd
|
||||||
|
{
|
||||||
|
ucmd_lerp_msec = BEGIN_MEMBER_REGION(usercmd),
|
||||||
|
ucmd_msec,
|
||||||
|
ucmd_viewangles,
|
||||||
|
ucmd_forwardmove,
|
||||||
|
ucmd_sidemove,
|
||||||
|
ucmd_upmove,
|
||||||
|
ucmd_lightlevel,
|
||||||
|
ucmd_buttons,
|
||||||
|
ucmd_impulse,
|
||||||
|
ucmd_weaponselect,
|
||||||
|
ucmd_impact_index,
|
||||||
|
ucmd_impact_position
|
||||||
|
};
|
||||||
|
|
||||||
|
enum PMTrace
|
||||||
|
{
|
||||||
|
pmt_allsolid = BEGIN_MEMBER_REGION(pmtrace),
|
||||||
|
pmt_startsolid,
|
||||||
|
pmt_inopen,
|
||||||
|
pmt_inwater,
|
||||||
|
pmt_fraction,
|
||||||
|
pmt_endpos,
|
||||||
|
pmt_ent,
|
||||||
|
pmt_deltavelocity,
|
||||||
|
pmt_hitgroup
|
||||||
};
|
};
|
||||||
|
@ -27,7 +27,7 @@ cell AMX_NATIVE_CALL RegisterHookChain(AMX *amx, cell *params)
|
|||||||
|
|
||||||
if (!hook->checkRequirements())
|
if (!hook->checkRequirements())
|
||||||
{
|
{
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "%s: function (%s) is not available, %s required", __FUNCTION__, hook->func_name, hook->depend_name);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: function (%s) is not available, %s required.", __FUNCTION__, hook->func_name, hook->depend_name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
case ATYPE_INTEGER:
|
case ATYPE_INTEGER:
|
||||||
case ATYPE_FLOAT:
|
case ATYPE_FLOAT:
|
||||||
retVal._interger = *srcAddr;
|
retVal._integer = *srcAddr;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ATYPE_STRING:
|
case ATYPE_STRING:
|
||||||
@ -178,15 +178,21 @@ cell AMX_NATIVE_CALL GetHookChainReturn(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum args_e { arg_count, arg_value, arg_maxlen };
|
enum args_e { arg_count, arg_value, arg_maxlen };
|
||||||
|
|
||||||
auto& retVal = g_hookCtx->retVal;
|
auto& retVal = g_hookCtx->retVal;
|
||||||
|
|
||||||
|
if (!retVal.set)
|
||||||
|
{
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: return value isn't set.", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
cell* dstAddr = getAmxAddr(amx, params[arg_value]);
|
cell* dstAddr = getAmxAddr(amx, params[arg_value]);
|
||||||
|
|
||||||
switch (retVal.type)
|
switch (retVal.type)
|
||||||
{
|
{
|
||||||
case ATYPE_INTEGER:
|
case ATYPE_INTEGER:
|
||||||
case ATYPE_FLOAT:
|
case ATYPE_FLOAT:
|
||||||
return retVal._interger;
|
return retVal._integer;
|
||||||
case ATYPE_STRING:
|
case ATYPE_STRING:
|
||||||
{
|
{
|
||||||
if (PARAMS_COUNT != 2)
|
if (PARAMS_COUNT != 2)
|
||||||
@ -244,7 +250,7 @@ cell AMX_NATIVE_CALL SetHookChainArg(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char temp_strings[MAX_ARGS][1024];
|
static char temp_strings[MAX_HOOKCHAIN_ARGS][1024];
|
||||||
|
|
||||||
cell* srcAddr = getAmxAddr(amx, params[arg_value]);
|
cell* srcAddr = getAmxAddr(amx, params[arg_value]);
|
||||||
size_t destAddr = g_hookCtx->args_ptr + number * sizeof(int);
|
size_t destAddr = g_hookCtx->args_ptr + number * sizeof(int);
|
||||||
|
@ -210,6 +210,49 @@ cell AMX_NATIVE_CALL get_entvar(AMX *amx, cell *params)
|
|||||||
return get_member(&pEdict->v, member, element, dest);
|
return get_member(&pEdict->v, member, element, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// native set_pmove(const PlayerMove:pmove, any:...);
|
||||||
|
cell AMX_NATIVE_CALL set_pmove(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_var, arg_value, arg_elem };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
|
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
||||||
|
|
||||||
|
return set_member(g_pMove, member, element, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// native any:get_pmove(const PlayerMove:pmove, any:...);
|
||||||
|
cell AMX_NATIVE_CALL get_pmove(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_var, arg_2, arg_3 };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* dest;
|
||||||
|
size_t element;
|
||||||
|
|
||||||
|
if (PARAMS_COUNT == 3) {
|
||||||
|
dest = getAmxAddr(amx, params[arg_2]);
|
||||||
|
element = *getAmxAddr(amx, params[arg_3]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dest = nullptr;
|
||||||
|
element = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_member(g_pMove, member, element, dest);
|
||||||
|
}
|
||||||
|
|
||||||
// native set_movevar(const MoveVars:var, any:...);
|
// native set_movevar(const MoveVars:var, any:...);
|
||||||
cell AMX_NATIVE_CALL set_movevar(AMX *amx, cell *params)
|
cell AMX_NATIVE_CALL set_movevar(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
@ -221,14 +264,8 @@ cell AMX_NATIVE_CALL set_movevar(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& movevars = g_ReGameApi->GetPlayerMove()->movevars;
|
|
||||||
if (movevars == nullptr) {
|
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "%s: movevars not initialized", __FUNCTION__);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
return set_member(movevars, member, 0, value);
|
return set_member(g_pMove->movevars, member, 0, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// native any:get_movevar(const MoveVars:var, any:...);
|
// native any:get_movevar(const MoveVars:var, any:...);
|
||||||
@ -245,33 +282,116 @@ cell AMX_NATIVE_CALL get_movevar(AMX *amx, cell *params)
|
|||||||
cell* dest;
|
cell* dest;
|
||||||
size_t element;
|
size_t element;
|
||||||
|
|
||||||
auto& movevars = g_ReGameApi->GetPlayerMove()->movevars;
|
|
||||||
if (movevars == nullptr) {
|
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "%s: movevars not initialized", __FUNCTION__);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PARAMS_COUNT == 3) {
|
if (PARAMS_COUNT == 3) {
|
||||||
dest = getAmxAddr(amx, params[arg_2]);
|
dest = getAmxAddr(amx, params[arg_2]);
|
||||||
element = *getAmxAddr(amx, params[arg_3]);
|
element = *getAmxAddr(amx, params[arg_3]);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
dest = nullptr;
|
||||||
|
element = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_member(g_pMove->movevars, member, element, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
// native set_ucmd(const cmd, const UserCmd:var, any:...);
|
||||||
|
cell AMX_NATIVE_CALL set_ucmd(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_cmd, arg_var, arg_value };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* cmd = (cell *)params[arg_cmd];
|
||||||
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
|
return set_member(cmd, member, 0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// native any:get_ucmd(const cmd, const UserCmd:var, any:...);
|
||||||
|
cell AMX_NATIVE_CALL get_ucmd(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_cmd, arg_var, arg_3, arg_4 };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* dest;
|
||||||
|
size_t element;
|
||||||
|
|
||||||
|
if (PARAMS_COUNT == 3) {
|
||||||
|
dest = getAmxAddr(amx, params[arg_3]);
|
||||||
|
element = *getAmxAddr(amx, params[arg_4]);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
dest = (member->type != MEMBER_FLOAT) ? nullptr : getAmxAddr(amx, params[arg_3]);
|
dest = (member->type != MEMBER_FLOAT) ? nullptr : getAmxAddr(amx, params[arg_3]);
|
||||||
element = 0;
|
element = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(movevars, member, element, dest);
|
cell* cmd = (cell *)params[arg_cmd];
|
||||||
|
return get_member(cmd, member, element, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO EntVars_Natives[] =
|
// native set_pmtrace(const tr, const PMTrace:var, any:...);
|
||||||
|
cell AMX_NATIVE_CALL set_pmtrace(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_tr, arg_var, arg_value };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* tr = (cell *)params[arg_tr];
|
||||||
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
|
return set_member(tr, member, 0, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// native any:get_pmtrace(const tr, const PMTrace:var, any:...);
|
||||||
|
cell AMX_NATIVE_CALL get_pmtrace(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_tr, arg_var, arg_3, arg_4 };
|
||||||
|
member_t *member = memberlist[params[arg_var]];
|
||||||
|
|
||||||
|
if (member == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* dest;
|
||||||
|
size_t element;
|
||||||
|
|
||||||
|
if (PARAMS_COUNT == 3) {
|
||||||
|
dest = getAmxAddr(amx, params[arg_3]);
|
||||||
|
element = *getAmxAddr(amx, params[arg_4]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dest = nullptr;
|
||||||
|
element = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cell* tr = (cell *)params[arg_tr];
|
||||||
|
return get_member(tr, member, element, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
AMX_NATIVE_INFO EngineVars_Natives[] =
|
||||||
{
|
{
|
||||||
{ "set_entvar", set_entvar },
|
{ "set_entvar", set_entvar },
|
||||||
{ "get_entvar", get_entvar },
|
{ "get_entvar", get_entvar },
|
||||||
|
|
||||||
|
{ "set_ucmd", set_ucmd },
|
||||||
|
{ "get_ucmd", get_ucmd },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
AMX_NATIVE_INFO Member_Natives[] =
|
AMX_NATIVE_INFO ReGameVars_Natives[] =
|
||||||
{
|
{
|
||||||
{ "set_member", set_member },
|
{ "set_member", set_member },
|
||||||
{ "get_member", get_member },
|
{ "get_member", get_member },
|
||||||
@ -279,18 +399,24 @@ AMX_NATIVE_INFO Member_Natives[] =
|
|||||||
{ "set_member_game", set_member_game },
|
{ "set_member_game", set_member_game },
|
||||||
{ "get_member_game", get_member_game },
|
{ "get_member_game", get_member_game },
|
||||||
|
|
||||||
|
{ "set_pmove", set_pmove },
|
||||||
|
{ "get_pmove", get_pmove },
|
||||||
|
|
||||||
{ "set_movevar", set_movevar },
|
{ "set_movevar", set_movevar },
|
||||||
{ "get_movevar", get_movevar },
|
{ "get_movevar", get_movevar },
|
||||||
|
|
||||||
|
{ "set_pmtrace", set_pmtrace },
|
||||||
|
{ "get_pmtrace", get_pmtrace },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
void RegisterNatives_Members()
|
void RegisterNatives_Members()
|
||||||
{
|
{
|
||||||
if (api_cfg.hasReGameDLL())
|
if (api_cfg.hasReGameDLL())
|
||||||
g_amxxapi.AddNatives(Member_Natives);
|
g_amxxapi.AddNatives(ReGameVars_Natives);
|
||||||
|
|
||||||
g_amxxapi.AddNatives(EntVars_Natives);
|
g_amxxapi.AddNatives(EngineVars_Natives);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL set_member(void* pdata, const member_t *member, size_t element, cell* value)
|
BOOL set_member(void* pdata, const member_t *member, size_t element, cell* value)
|
||||||
@ -321,8 +447,8 @@ BOOL set_member(void* pdata, const member_t *member, size_t element, cell* value
|
|||||||
case MEMBER_VECTOR:
|
case MEMBER_VECTOR:
|
||||||
{
|
{
|
||||||
// native set_member(_index, any:_member, Float:_value[3], _elem);
|
// native set_member(_index, any:_member, Float:_value[3], _elem);
|
||||||
Vector *pSource = (Vector *)value;
|
Vector& pSource = *(Vector *)value;
|
||||||
set_member<Vector>(pdata, member->offset, *pSource, element);
|
set_member<Vector>(pdata, member->offset, pSource, element);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case MEMBER_STRING:
|
case MEMBER_STRING:
|
||||||
@ -349,7 +475,6 @@ BOOL set_member(void* pdata, const member_t *member, size_t element, cell* value
|
|||||||
char *source = getAmxString(value);
|
char *source = getAmxString(value);
|
||||||
string_t newstr = ALLOC_STRING(source);
|
string_t newstr = ALLOC_STRING(source);
|
||||||
set_member<string_t>(pdata, member->offset, newstr, element);
|
set_member<string_t>(pdata, member->offset, newstr, element);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case MEMBER_FLOAT:
|
case MEMBER_FLOAT:
|
||||||
@ -394,7 +519,11 @@ BOOL set_member(void* pdata, const member_t *member, size_t element, cell* value
|
|||||||
case MEMBER_ENTITY:
|
case MEMBER_ENTITY:
|
||||||
case MEMBER_EVARS:
|
case MEMBER_EVARS:
|
||||||
case MEBMER_REBUYSTRUCT:
|
case MEBMER_REBUYSTRUCT:
|
||||||
|
case MEMBER_PMTRACE:
|
||||||
|
case MEBMER_USERCMD:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -433,7 +562,7 @@ cell get_member(void* pdata, const member_t *member, size_t element, cell* dest)
|
|||||||
if (!dest)
|
if (!dest)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
*((Vector *)dest) = *(Vector *)get_member_direct<Vector>(pdata, member->offset, element);
|
*(Vector *)dest = get_member<Vector>(pdata, member->offset, element);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
case MEMBER_STRING:
|
case MEMBER_STRING:
|
||||||
@ -513,6 +642,15 @@ cell get_member(void* pdata, const member_t *member, size_t element, cell* dest)
|
|||||||
case MEMBER_EVARS:
|
case MEMBER_EVARS:
|
||||||
case MEBMER_REBUYSTRUCT:
|
case MEBMER_REBUYSTRUCT:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case MEMBER_PMTRACE:
|
||||||
|
// native any:get_member(_index, any:_member, element);
|
||||||
|
return (cell)get_member_direct<pmtrace_s>(pdata, member->offset, element);
|
||||||
|
case MEBMER_USERCMD:
|
||||||
|
// native any:get_member(_index, any:_member, element);
|
||||||
|
return (cell)get_member_direct<usercmd_s>(pdata, member->offset, element);
|
||||||
|
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -530,6 +668,9 @@ bool isTypeReturnable(MType type)
|
|||||||
case MEMBER_SHORT:
|
case MEMBER_SHORT:
|
||||||
case MEMBER_BYTE:
|
case MEMBER_BYTE:
|
||||||
case MEMBER_BOOL:
|
case MEMBER_BOOL:
|
||||||
|
case MEMBER_EVARS:
|
||||||
|
case MEMBER_PMTRACE:
|
||||||
|
case MEBMER_USERCMD:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1299,6 +1299,62 @@ AMX_NATIVE_INFO Misc_Natives_RH[] =
|
|||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the rehlds is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
* native is_rehlds();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL is_rehlds(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return (cell)api_cfg.hasReHLDS();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the regamedll is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
* native is_regamedll();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL is_regamedll(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return (cell)api_cfg.hasReGameDLL();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the reunion is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
* native is_has_reunion();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL has_reunion(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return (cell)api_cfg.hasReunion();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the vtc is available
|
||||||
|
*
|
||||||
|
* @return 1/0
|
||||||
|
*
|
||||||
|
* native is_has_vtc();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL has_vtc(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
return (cell)api_cfg.hasVTC();
|
||||||
|
}
|
||||||
|
|
||||||
|
AMX_NATIVE_INFO Misc_Natives_Checks[] =
|
||||||
|
{
|
||||||
|
{ "is_rehlds", is_rehlds },
|
||||||
|
{ "is_regamedll", is_regamedll },
|
||||||
|
{ "has_reunion", has_reunion },
|
||||||
|
{ "has_vtc", has_vtc }
|
||||||
|
};
|
||||||
|
|
||||||
void RegisterNatives_Misc()
|
void RegisterNatives_Misc()
|
||||||
{
|
{
|
||||||
if (api_cfg.hasReGameDLL())
|
if (api_cfg.hasReGameDLL())
|
||||||
@ -1306,4 +1362,5 @@ void RegisterNatives_Misc()
|
|||||||
|
|
||||||
if (api_cfg.hasReHLDS())
|
if (api_cfg.hasReHLDS())
|
||||||
g_amxxapi.AddNatives(Misc_Natives_RH);
|
g_amxxapi.AddNatives(Misc_Natives_RH);
|
||||||
}
|
|
||||||
|
g_amxxapi.AddNatives(Misc_Natives_Checks);}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include <extdll.h>
|
#include <extdll.h>
|
||||||
#include <cbase.h>
|
#include <cbase.h>
|
||||||
|
#include <pm_defs.h>
|
||||||
#include "com_progdefs.h"
|
#include "com_progdefs.h"
|
||||||
|
|
||||||
#include "osdep.h" // win32 vsnprintf, etc
|
#include "osdep.h" // win32 vsnprintf, etc
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
void __declspec(noreturn) UTIL_SysError(const char *fmt, ...)
|
void __declspec(noreturn) UTIL_SysError(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[8192];
|
char string[8192];
|
||||||
|
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
vsnprintf(string, sizeof(string), fmt, argptr);
|
vsnprintf(string, sizeof(string), fmt, argptr);
|
||||||
@ -32,7 +32,7 @@ char *UTIL_VarArgs(char *format, ...)
|
|||||||
void UTIL_LogPrintf(const char *fmt, ...)
|
void UTIL_LogPrintf(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[1024];
|
char string[1024];
|
||||||
|
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
vsprintf(string, fmt, argptr);
|
vsprintf(string, fmt, argptr);
|
||||||
|
Loading…
Reference in New Issue
Block a user