mirror of
https://github.com/rehlds/reapi.git
synced 2024-12-29 08:05:36 +03:00
Added new natives:
rh_emit_sound2, rg_set_account_rules, rg_get_account_rules, rg_is_bomb_planted, rg_join_team, rg_balance_teams, rg_swap_all_players, rg_switch_team, rg_switch_weapon Update CSSDK for regamedll Refactoring
This commit is contained in:
parent
28dcc802d4
commit
bc6383fce4
@ -876,6 +876,7 @@ enum WinStatus
|
|||||||
// bypass warning: 200 on amxmodx 1.8.2
|
// bypass warning: 200 on amxmodx 1.8.2
|
||||||
#if AMXX_VERSION_NUM < 183
|
#if AMXX_VERSION_NUM < 183
|
||||||
#define ROUND_ESCAPING_TERRORISTS_NEUTRALIZED ROUND_ESCAPING_TERRORISTS_NEUTR
|
#define ROUND_ESCAPING_TERRORISTS_NEUTRALIZED ROUND_ESCAPING_TERRORISTS_NEUTR
|
||||||
|
#define RR_ESCAPING_TERRORISTS_NEUTRALIZED RR_ESCAPING_TERRORISTS_NEUTR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// used for EndRoundMessage() logged messages
|
// used for EndRoundMessage() logged messages
|
||||||
@ -1024,3 +1025,30 @@ enum Bullet
|
|||||||
BULLET_PLAYER_57MM,
|
BULLET_PLAYER_57MM,
|
||||||
BULLET_PLAYER_357SIG,
|
BULLET_PLAYER_357SIG,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum RewardRules
|
||||||
|
{
|
||||||
|
RR_CTS_WIN,
|
||||||
|
RR_TERRORISTS_WIN,
|
||||||
|
RR_TARGET_BOMB,
|
||||||
|
RR_VIP_ESCAPED,
|
||||||
|
RR_VIP_ASSASSINATED,
|
||||||
|
RR_TERRORISTS_ESCAPED,
|
||||||
|
RR_CTS_PREVENT_ESCAPE,
|
||||||
|
RR_ESCAPING_TERRORISTS_NEUTRALIZED,
|
||||||
|
RR_BOMB_DEFUSED,
|
||||||
|
RR_BOMB_PLANTED,
|
||||||
|
RR_BOMB_EXPLODED,
|
||||||
|
RR_ALL_HOSTAGES_RESCUED,
|
||||||
|
RR_TARGET_BOMB_SAVED,
|
||||||
|
RR_HOSTAGE_NOT_RESCUED,
|
||||||
|
RR_VIP_NOT_ESCAPED,
|
||||||
|
RR_LOSER_BONUS_DEFAULT,
|
||||||
|
RR_LOSER_BONUS_MIN,
|
||||||
|
RR_LOSER_BONUS_MAX,
|
||||||
|
RR_LOSER_BONUS_ADD,
|
||||||
|
RR_RESCUED_HOSTAGE,
|
||||||
|
RR_TOOK_HOSTAGE_ACC,
|
||||||
|
RR_TOOK_HOSTAGE,
|
||||||
|
RR_END
|
||||||
|
};
|
||||||
|
@ -13,6 +13,34 @@
|
|||||||
#pragma library reapi
|
#pragma library reapi
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum hooks_tables_e
|
||||||
|
{
|
||||||
|
ht_engine,
|
||||||
|
ht_gamedll,
|
||||||
|
ht_animating,
|
||||||
|
ht_player,
|
||||||
|
ht_gamerules
|
||||||
|
};
|
||||||
|
|
||||||
|
enum members_tables_e
|
||||||
|
{
|
||||||
|
mt_gamerules,
|
||||||
|
mt_base,
|
||||||
|
mt_animating,
|
||||||
|
mt_basemonster,
|
||||||
|
mt_player,
|
||||||
|
mt_entvars,
|
||||||
|
mt_playermove,
|
||||||
|
mt_movevars,
|
||||||
|
mt_usercmd,
|
||||||
|
mt_pmtrace
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_REGION_RANGE 1024
|
||||||
|
|
||||||
|
#define BEGIN_FUNC_REGION(%0) (any:MAX_REGION_RANGE * hooks_tables_e:ht_%0)
|
||||||
|
#define BEGIN_MEMBER_REGION(%0) (any:MAX_REGION_RANGE * members_tables_e:mt_%0)
|
||||||
|
|
||||||
#include <cssdk_const>
|
#include <cssdk_const>
|
||||||
|
|
||||||
#include <reapi_engine> // NOTE: only for ReHLDS
|
#include <reapi_engine> // NOTE: only for ReHLDS
|
||||||
|
@ -60,3 +60,21 @@ native rh_get_mapname(output[], len, MapNameType:type = MNT_SET);
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rh_reset_mapname();
|
native rh_reset_mapname();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Emits a sound from an entity from the engine.
|
||||||
|
*
|
||||||
|
* @param entity Entity index or use 0 to emit from worldspawn at the specified position
|
||||||
|
* @param recipient Recipient index or use 0 to heard for all clients
|
||||||
|
* @param channel Channel to emit from
|
||||||
|
* @param sample Sound file to emit
|
||||||
|
* @param vol Volume in percent
|
||||||
|
* @param attn Sound attenuation
|
||||||
|
* @param flags Emit flags
|
||||||
|
* @param pitch Sound pitch
|
||||||
|
* @param emitFlags Additional Emit2 flags, look at the defines like SND_EMIT2_*
|
||||||
|
|
||||||
|
* @return 1 if successfully sounds are emitted, 0 otherwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rh_emit_sound2(const entity, const recipient, const channel, const sample[], Float:vol = VOL_NORM, Float:attn = ATTN_NORM, const flags = 0, const pitch = PITCH_NORM, emitFlags = 0, const Float:origin[3] = {0.0,0.0,0.0});
|
||||||
|
@ -7,13 +7,17 @@
|
|||||||
// for natives rh_get_mapname
|
// for natives rh_get_mapname
|
||||||
enum MapNameType { MNT_TRUE, MNT_SET };
|
enum MapNameType { MNT_TRUE, MNT_SET };
|
||||||
|
|
||||||
|
// rh_emit_sound2 flags
|
||||||
|
#define SND_EMIT2_NOPAS (1<<0) // never to do check PAS
|
||||||
|
#define SND_EMIT2_INVOKER (1<<1) // do not send to the client invoker
|
||||||
|
|
||||||
enum EngineFunc
|
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 * 1024,
|
RH_SV_StartSound = BEGIN_FUNC_REGION(engine),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -32,9 +36,6 @@ enum EngineFunc
|
|||||||
* Params: (pcvar, const value[])
|
* Params: (pcvar, const value[])
|
||||||
*/
|
*/
|
||||||
RH_Cvar_DirectSet,
|
RH_Cvar_DirectSet,
|
||||||
|
|
||||||
// [...]
|
|
||||||
RH_EngineFunc_End
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EntVars
|
enum EntVars
|
||||||
@ -45,7 +46,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 = 5 * 1024,
|
var_classname = BEGIN_MEMBER_REGION(entvars),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1032,7 +1033,7 @@ enum UCmd
|
|||||||
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
* Get params: get_ucmd(const ucmd, UserCmd:var);
|
||||||
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
* Set params: set_ucmd(const ucmd, UserCmd:var, value);
|
||||||
*/
|
*/
|
||||||
ucmd_lerp_msec = 8 * 1024,
|
ucmd_lerp_msec = BEGIN_MEMBER_REGION(usercmd),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
|
@ -125,10 +125,11 @@ native rg_add_account(const index, amount, AccountSet:typeSet = AS_ADD, bool:bTr
|
|||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param pszName Classname item
|
* @param pszName Classname item
|
||||||
|
* @param type Look at the enum's with name GiveType
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*/
|
*/
|
||||||
native rg_give_item(index, const pszName[], GiveType:type = GT_APPEND);
|
native rg_give_item(const index, const pszName[], GiveType:type = GT_APPEND);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Give the player default items
|
* Give the player default items
|
||||||
@ -318,7 +319,7 @@ native rg_set_weapon_info(const {WeaponIdType,_}:weapon_id, WpnInfo:type, any:..
|
|||||||
* @noreturn
|
* @noreturn
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rg_remove_all_items(const index, bool:bRemoveSuit);
|
native rg_remove_all_items(const index, bool:bRemoveSuit = false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove specifed the player's item by class name
|
* Remove specifed the player's item by class name
|
||||||
@ -444,9 +445,87 @@ native rg_transfer_c4(const index, const receiver = 0);
|
|||||||
* Instant reload weapons
|
* Instant reload weapons
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param weapon Entity weapons, if 0 then all the weapons
|
* @param weapon Weapon entity-index, if 0 then all the weapons
|
||||||
*
|
*
|
||||||
* @return 1 if successfully, 0 otherwise
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rg_instant_reload_weapons(const index, const weapon = 0);
|
native rg_instant_reload_weapons(const index, const weapon = 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets the amount of reward in the game account for all players.
|
||||||
|
*
|
||||||
|
* @param rules_index Look at the enum's with name RewardRules
|
||||||
|
* @param amount The amount money
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_set_account_rules(const RewardRules:rules_index, const amount);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the amount of reward from account
|
||||||
|
*
|
||||||
|
* @param rules_index Look at the enum's with name RewardRules
|
||||||
|
*
|
||||||
|
* @return The amount of reward from account
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_get_account_rules(const RewardRules:rules_index);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the bomb is planted
|
||||||
|
*
|
||||||
|
* @return 1 if successfully, 0 otherwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native bool:rg_is_bomb_planted();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Join team
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param team Team id
|
||||||
|
*
|
||||||
|
* @return 1 if successfully joined the team, 0 otherwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_join_team(const index, const TeamName:team);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instantly balances the team.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_balance_teams();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To swap players, without reset frags/deaths and the amount wins.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_swap_all_players();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instantly switches to the opposite team for one player.
|
||||||
|
* @note Switch from CT to TERRORIST also opposite.
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_switch_team(const index);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Switch to specific weapon
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param weapon Weapon entity-index
|
||||||
|
*
|
||||||
|
* @return 1 if successfully switched, 0 otherwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_switch_weapon(const index, const weapon);
|
||||||
|
@ -138,7 +138,7 @@ enum GamedllFunc
|
|||||||
* Return type: int
|
* Return type: int
|
||||||
* Params: (const pObserver)
|
* Params: (const pObserver)
|
||||||
*/
|
*/
|
||||||
RG_GetForceCamera = 1 * 1024,
|
RG_GetForceCamera = BEGIN_FUNC_REGION(gamedll),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -196,12 +196,9 @@ enum GamedllFunc
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const index, VGUIMenu:menuType, const bitsSlots, szOldMenu[])
|
* Params: (const index, VGUIMenu:menuType, const bitsSlots, szOldMenu[], bool:bForceOldMenu)
|
||||||
*/
|
*/
|
||||||
RG_ShowVGUIMenu,
|
RG_ShowVGUIMenu
|
||||||
|
|
||||||
// [...]
|
|
||||||
RG_End
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GamedllFunc_CBaseAnimating
|
enum GamedllFunc_CBaseAnimating
|
||||||
@ -210,10 +207,7 @@ enum GamedllFunc_CBaseAnimating
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const this)
|
* Params: (const this)
|
||||||
*/
|
*/
|
||||||
RG_CBaseAnimating_ResetSequenceInfo = 2 * 1024,
|
RG_CBaseAnimating_ResetSequenceInfo = BEGIN_FUNC_REGION(animating)
|
||||||
|
|
||||||
// [...]
|
|
||||||
RG_CBaseAnimating_End
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GamedllFunc_CBasePlayer
|
enum GamedllFunc_CBasePlayer
|
||||||
@ -222,7 +216,7 @@ enum GamedllFunc_CBasePlayer
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const this)
|
* Params: (const this)
|
||||||
*/
|
*/
|
||||||
RG_CBasePlayer_Spawn = 3 * 1024,
|
RG_CBasePlayer_Spawn = BEGIN_FUNC_REGION(player),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -402,10 +396,7 @@ enum GamedllFunc_CBasePlayer
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const this, bool:bDeploy)
|
* Params: (const this, bool:bDeploy)
|
||||||
*/
|
*/
|
||||||
RG_CBasePlayer_GiveShield,
|
RG_CBasePlayer_GiveShield
|
||||||
|
|
||||||
// [...]
|
|
||||||
RG_CBasePlayer_End
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GamedllFunc_CSGameRules
|
enum GamedllFunc_CSGameRules
|
||||||
@ -414,7 +405,7 @@ enum GamedllFunc_CSGameRules
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: (const index, const weapon)
|
* Params: (const index, const weapon)
|
||||||
*/
|
*/
|
||||||
RG_CSGameRules_FShouldSwitchWeapon = 4 * 1024,
|
RG_CSGameRules_FShouldSwitchWeapon = BEGIN_FUNC_REGION(gamerules),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -540,10 +531,7 @@ enum GamedllFunc_CSGameRules
|
|||||||
* Description: -
|
* Description: -
|
||||||
* Params: ()
|
* Params: ()
|
||||||
*/
|
*/
|
||||||
RG_CSGameRules_BalanceTeams,
|
RG_CSGameRules_BalanceTeams
|
||||||
|
|
||||||
// [...]
|
|
||||||
RG_CSGameRules_End
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// CSGameRules
|
// CSGameRules
|
||||||
@ -555,7 +543,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 * 1024,
|
m_bFreezePeriod = BEGIN_MEMBER_REGION(gamerules),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -565,6 +553,14 @@ enum CSGameRules_Members
|
|||||||
*/
|
*/
|
||||||
m_bBombDropped,
|
m_bBombDropped,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: -
|
||||||
|
* Member type: char *
|
||||||
|
* Get params: get_member_game(member, dest[], const lenght);
|
||||||
|
* Set params: set_member_game(member, const source[]);
|
||||||
|
*/
|
||||||
|
m_GameDesc,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
* Member type: int
|
* Member type: int
|
||||||
@ -1200,7 +1196,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 = 1 * 1024,
|
currentammo = BEGIN_MEMBER_REGION(base),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1404,7 +1400,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 = 2 * 1024,
|
m_flFrameRate = BEGIN_MEMBER_REGION(animating),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1448,7 +1444,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 = 3 * 1024,
|
m_Activity = BEGIN_MEMBER_REGION(basemonster),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -1580,7 +1576,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 = 4 * 1024,
|
random_seed = BEGIN_MEMBER_REGION(player),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -3079,7 +3075,7 @@ enum PlayerMove
|
|||||||
* Get params: get_pmove(member);
|
* Get params: get_pmove(member);
|
||||||
* Set params: set_pmove(const PlayerMove:var, value);
|
* Set params: set_pmove(const PlayerMove:var, value);
|
||||||
*/
|
*/
|
||||||
pm_player_index = 6 * 1024,
|
pm_player_index = BEGIN_MEMBER_REGION(playermove),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -3562,7 +3558,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 = 7 * 1024,
|
mv_gravity = BEGIN_MEMBER_REGION(movevars),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
@ -3773,7 +3769,7 @@ enum PMTrace
|
|||||||
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
* Get params: get_pmtrace(const tr, const PMTrace:var);
|
||||||
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
* Set params: set_pmtrace(const tr, const PMTrace:var, value);
|
||||||
*/
|
*/
|
||||||
pmt_allsolid = 9 * 1024,
|
pmt_allsolid = BEGIN_MEMBER_REGION(pmtrace),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Description: -
|
* Description: -
|
||||||
|
@ -71,6 +71,9 @@
|
|||||||
#define FL_KILLME (1<<30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time
|
#define FL_KILLME (1<<30) // This entity is marked for death -- This allows the engine to kill ents at the appropriate time
|
||||||
#define FL_DORMANT (1<<31) // Entity is dormant, no updates to client
|
#define FL_DORMANT (1<<31) // Entity is dormant, no updates to client
|
||||||
|
|
||||||
|
// SV_EmitSound2 flags
|
||||||
|
#define SND_EMIT2_NOPAS (1<<0) // never to do check PAS
|
||||||
|
#define SND_EMIT2_INVOKER (1<<1) // do not send to the client invoker
|
||||||
|
|
||||||
// Engine edict->spawnflags
|
// Engine edict->spawnflags
|
||||||
#define SF_NOTINDEATHMATCH 0x0800 // Do not spawn when deathmatch and loading entities from a file
|
#define SF_NOTINDEATHMATCH 0x0800 // Do not spawn when deathmatch and loading entities from a file
|
||||||
|
@ -209,6 +209,8 @@ enum
|
|||||||
class CItem;
|
class CItem;
|
||||||
|
|
||||||
class CGameRules {
|
class CGameRules {
|
||||||
|
protected:
|
||||||
|
virtual ~CGameRules() {};
|
||||||
public:
|
public:
|
||||||
virtual void RefreshSkillData() = 0;
|
virtual void RefreshSkillData() = 0;
|
||||||
virtual void Think() = 0;
|
virtual void Think() = 0;
|
||||||
@ -280,9 +282,14 @@ public:
|
|||||||
public:
|
public:
|
||||||
BOOL m_bFreezePeriod;
|
BOOL m_bFreezePeriod;
|
||||||
BOOL m_bBombDropped;
|
BOOL m_bBombDropped;
|
||||||
|
|
||||||
|
// custom
|
||||||
|
char *m_GameDesc;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CHalfLifeRules: public CGameRules {
|
class CHalfLifeRules: public CGameRules {
|
||||||
|
protected:
|
||||||
|
virtual ~CHalfLifeRules() {};
|
||||||
public:
|
public:
|
||||||
virtual void Think() = 0;
|
virtual void Think() = 0;
|
||||||
virtual BOOL IsAllowedToSpawn(CBaseEntity *pEntity) = 0;
|
virtual BOOL IsAllowedToSpawn(CBaseEntity *pEntity) = 0;
|
||||||
@ -328,6 +335,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class CHalfLifeMultiplay: public CGameRules {
|
class CHalfLifeMultiplay: public CGameRules {
|
||||||
|
protected:
|
||||||
|
virtual ~CHalfLifeMultiplay() {};
|
||||||
public:
|
public:
|
||||||
virtual void RefreshSkillData() = 0;
|
virtual void RefreshSkillData() = 0;
|
||||||
virtual void Think() = 0;
|
virtual void Think() = 0;
|
||||||
@ -407,6 +416,7 @@ public:
|
|||||||
virtual void UpdateTeamScores() = 0;
|
virtual void UpdateTeamScores() = 0;
|
||||||
virtual void EndRoundMessage(const char *sentence, int event) = 0;
|
virtual void EndRoundMessage(const char *sentence, int event) = 0;
|
||||||
virtual void SetAccountRules(RewardRules rules, int amount) = 0;
|
virtual void SetAccountRules(RewardRules rules, int amount) = 0;
|
||||||
|
virtual RewardAccount GetAccountRules(RewardRules rules) const = 0;
|
||||||
|
|
||||||
// BOMB MAP FUNCTIONS
|
// BOMB MAP FUNCTIONS
|
||||||
virtual BOOL IsThereABomber() = 0;
|
virtual BOOL IsThereABomber() = 0;
|
||||||
|
@ -342,6 +342,10 @@ public:
|
|||||||
virtual void Blind(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha) = 0;
|
virtual void Blind(float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha) = 0;
|
||||||
virtual void OnTouchingWeapon(CWeaponBox *pWeapon) = 0;
|
virtual void OnTouchingWeapon(CWeaponBox *pWeapon) = 0;
|
||||||
public:
|
public:
|
||||||
|
static CBasePlayer *Instance(edict_t *pent) { return (CBasePlayer *)GET_PRIVATE(pent ? pent : ENT(0)); }
|
||||||
|
static CBasePlayer *Instance(entvars_t *pev) { return Instance(ENT(pev)); }
|
||||||
|
static CBasePlayer *Instance(int offset) { return Instance(ENT(offset)); }
|
||||||
|
|
||||||
int IsObserver() { return pev->iuser1; }
|
int IsObserver() { return pev->iuser1; }
|
||||||
void SetWeaponAnimType(const char *szExtention) { strcpy(m_szAnimExtention, szExtention); }
|
void SetWeaponAnimType(const char *szExtention) { strcpy(m_szAnimExtention, szExtention); }
|
||||||
bool IsProtectedByShield() { return m_bOwnsShield && m_bShieldDrawn; }
|
bool IsProtectedByShield() { return m_bOwnsShield && m_bShieldDrawn; }
|
||||||
|
@ -210,8 +210,8 @@ typedef IVoidHookChain<class CBasePlayer *, int, int, BOOL, char *> IReGameHook_
|
|||||||
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, BOOL, char *> IReGameHookRegistry_ShowMenu;
|
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, BOOL, char *> IReGameHookRegistry_ShowMenu;
|
||||||
|
|
||||||
// ShowVGUIMenu hook
|
// ShowVGUIMenu hook
|
||||||
typedef IVoidHookChain<class CBasePlayer *, int, int, char *> IReGameHook_ShowVGUIMenu;
|
typedef IVoidHookChain<class CBasePlayer *, int, int, char *, bool> IReGameHook_ShowVGUIMenu;
|
||||||
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, char *> IReGameHookRegistry_ShowVGUIMenu;
|
typedef IVoidHookChainRegistry<class CBasePlayer *, int, int, char *, bool> IReGameHookRegistry_ShowVGUIMenu;
|
||||||
|
|
||||||
// CHalfLifeMultiplay::FShouldSwitchWeapon hook
|
// CHalfLifeMultiplay::FShouldSwitchWeapon hook
|
||||||
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_FShouldSwitchWeapon;
|
typedef IHookChain<BOOL, class CBasePlayer *, class CBasePlayerItem *> IReGameHook_CSGameRules_FShouldSwitchWeapon;
|
||||||
@ -379,20 +379,17 @@ public:
|
|||||||
struct ReGameFuncs_t {
|
struct ReGameFuncs_t {
|
||||||
class CBasePlayer *(*UTIL_PlayerByIndex)(int playerIndex);
|
class CBasePlayer *(*UTIL_PlayerByIndex)(int playerIndex);
|
||||||
struct edict_s *(*CREATE_NAMED_ENTITY2)(string_t iClass);
|
struct edict_s *(*CREATE_NAMED_ENTITY2)(string_t iClass);
|
||||||
|
|
||||||
void (*ChangeString)(char *&dest, const char *source);
|
void (*ChangeString)(char *&dest, const char *source);
|
||||||
|
|
||||||
void (*RadiusDamage)(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType);
|
void (*RadiusDamage)(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, float flRadius, int iClassIgnore, int bitsDamageType);
|
||||||
void (*ClearMultiDamage)();
|
void (*ClearMultiDamage)();
|
||||||
void (*ApplyMultiDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker);
|
void (*ApplyMultiDamage)(entvars_t *pevInflictor, entvars_t *pevAttacker);
|
||||||
void (*AddMultiDamage)(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType);
|
void (*AddMultiDamage)(entvars_t *pevInflictor, CBaseEntity *pEntity, float flDamage, int bitsDamageType);
|
||||||
|
|
||||||
class CBaseEntity *(*UTIL_FindEntityByString)(class CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue);
|
class CBaseEntity *(*UTIL_FindEntityByString)(class CBaseEntity *pStartEntity, const char *szKeyword, const char *szValue);
|
||||||
};
|
};
|
||||||
|
|
||||||
class IReGameApi {
|
class IReGameApi {
|
||||||
public:
|
public:
|
||||||
virtual ~IReGameApi() { }
|
virtual ~IReGameApi() {}
|
||||||
|
|
||||||
virtual int GetMajorVersion() = 0;
|
virtual int GetMajorVersion() = 0;
|
||||||
virtual int GetMinorVersion() = 0;
|
virtual int GetMinorVersion() = 0;
|
||||||
@ -405,7 +402,6 @@ public:
|
|||||||
virtual struct playermove_s* GetPlayerMove() = 0;
|
virtual struct playermove_s* GetPlayerMove() = 0;
|
||||||
virtual struct WeaponSlotInfo* GetWeaponSlot(WeaponIdType weaponID) = 0;
|
virtual struct WeaponSlotInfo* GetWeaponSlot(WeaponIdType weaponID) = 0;
|
||||||
virtual struct WeaponSlotInfo* GetWeaponSlot(const char* weaponName) = 0;
|
virtual struct WeaponSlotInfo* GetWeaponSlot(const char* weaponName) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VRE_GAMEDLL_API_VERSION "VRE_GAMEDLL_API_VERSION001"
|
#define VRE_GAMEDLL_API_VERSION "VRE_GAMEDLL_API_VERSION001"
|
||||||
|
@ -78,7 +78,14 @@ public:
|
|||||||
virtual void SetBombIcon(bool bFlash = false);
|
virtual void SetBombIcon(bool bFlash = false);
|
||||||
virtual void SetScoreAttrib(CBasePlayer *dest);
|
virtual void SetScoreAttrib(CBasePlayer *dest);
|
||||||
virtual void SendItemStatus();
|
virtual void SendItemStatus();
|
||||||
virtual void ReloadWeapons(CBasePlayerItem *pWeapon = nullptr);
|
virtual void ReloadWeapons(CBasePlayerItem *pWeapon = nullptr, bool bForceReload = false, bool bForceRefill = false);
|
||||||
|
virtual void Observer_SetMode(int iMode);
|
||||||
|
virtual bool SelectSpawnSpot(const char *pEntClassName, CBaseEntity* &pSpot);
|
||||||
|
virtual bool SwitchWeapon(CBasePlayerItem *pWeapon);
|
||||||
|
virtual void SwitchTeam();
|
||||||
|
virtual bool JoinTeam(TeamName team);
|
||||||
|
virtual void StartObserver(Vector& vecPosition, Vector& vecViewAngle);
|
||||||
|
virtual void TeamChangeUpdate();
|
||||||
|
|
||||||
CBasePlayer *BasePlayer() const;
|
CBasePlayer *BasePlayer() const;
|
||||||
public:
|
public:
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
class CHalfLifeTraining: public CHalfLifeMultiplay {
|
class CHalfLifeTraining: public CHalfLifeMultiplay {
|
||||||
|
protected:
|
||||||
|
virtual ~CHalfLifeTraining() {};
|
||||||
public:
|
public:
|
||||||
virtual BOOL IsMultiplayer() = 0;
|
virtual BOOL IsMultiplayer() = 0;
|
||||||
virtual BOOL IsDeathmatch() = 0;
|
virtual BOOL IsDeathmatch() = 0;
|
||||||
|
@ -185,6 +185,10 @@ typedef IVoidHookChainRegistry<> IRehldsHookRegistry_SV_Spawn_f;
|
|||||||
typedef IHookChain<int, enum sv_delta_s, IGameClient *, struct packet_entities_s *, struct sizebuf_s *> IRehldsHook_SV_CreatePacketEntities;
|
typedef IHookChain<int, enum sv_delta_s, IGameClient *, struct packet_entities_s *, struct sizebuf_s *> IRehldsHook_SV_CreatePacketEntities;
|
||||||
typedef IHookChainRegistry<int, enum sv_delta_s, IGameClient *, struct packet_entities_s *, struct sizebuf_s *> IRehldsHookRegistry_SV_CreatePacketEntities;
|
typedef IHookChainRegistry<int, enum sv_delta_s, IGameClient *, struct packet_entities_s *, struct sizebuf_s *> IRehldsHookRegistry_SV_CreatePacketEntities;
|
||||||
|
|
||||||
|
//SV_EmitSound2 hook
|
||||||
|
typedef IHookChain<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHook_SV_EmitSound2;
|
||||||
|
typedef IHookChainRegistry<bool, edict_t *, IGameClient *, int, const char*, float, float, int, int, int, const float*> IRehldsHookRegistry_SV_EmitSound2;
|
||||||
|
|
||||||
class IRehldsHookchains {
|
class IRehldsHookchains {
|
||||||
public:
|
public:
|
||||||
virtual ~IRehldsHookchains() { }
|
virtual ~IRehldsHookchains() { }
|
||||||
@ -226,6 +230,7 @@ public:
|
|||||||
virtual IRehldsHookRegistry_SV_EstablishTimeBase* SV_EstablishTimeBase() = 0;
|
virtual IRehldsHookRegistry_SV_EstablishTimeBase* SV_EstablishTimeBase() = 0;
|
||||||
virtual IRehldsHookRegistry_SV_Spawn_f* SV_Spawn_f() = 0;
|
virtual IRehldsHookRegistry_SV_Spawn_f* SV_Spawn_f() = 0;
|
||||||
virtual IRehldsHookRegistry_SV_CreatePacketEntities* SV_CreatePacketEntities() = 0;
|
virtual IRehldsHookRegistry_SV_CreatePacketEntities* SV_CreatePacketEntities() = 0;
|
||||||
|
virtual IRehldsHookRegistry_SV_EmitSound2* SV_EmitSound2() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RehldsFuncs_t {
|
struct RehldsFuncs_t {
|
||||||
@ -273,6 +278,8 @@ struct RehldsFuncs_t {
|
|||||||
qboolean(*SV_FileInConsistencyList)(const char *filename, struct consistency_s **ppconsist);
|
qboolean(*SV_FileInConsistencyList)(const char *filename, struct consistency_s **ppconsist);
|
||||||
qboolean(*Steam_NotifyClientConnect)(IGameClient *cl, const void *pvSteam2Key, unsigned int ucbSteam2Key);
|
qboolean(*Steam_NotifyClientConnect)(IGameClient *cl, const void *pvSteam2Key, unsigned int ucbSteam2Key);
|
||||||
void(*Steam_NotifyClientDisconnect)(IGameClient* cl);
|
void(*Steam_NotifyClientDisconnect)(IGameClient* cl);
|
||||||
|
void(*SV_StartSound)(int recipients, edict_t *entity, int channel, const char *sample, int volume, float attenuation, int flags, int pitch);
|
||||||
|
bool(*SV_EmitSound2)(edict_t *entity, IGameClient *receiver, int channel, const char *sample, float volume, float attenuation, int flags, int pitch, int emitFlags, const float *pOrigin);
|
||||||
};
|
};
|
||||||
|
|
||||||
class IRehldsApi {
|
class IRehldsApi {
|
||||||
|
@ -39,6 +39,7 @@ public:
|
|||||||
|
|
||||||
// invoked when killed
|
// invoked when killed
|
||||||
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
virtual void Killed(entvars_t *pevAttacker, int iGib) = 0;
|
||||||
|
virtual BOOL IsNetClient() = 0;
|
||||||
virtual void Think() = 0;
|
virtual void Think() = 0;
|
||||||
virtual BOOL IsBot() = 0;
|
virtual BOOL IsBot() = 0;
|
||||||
virtual Vector GetAutoaimVector(float flDelta) = 0;
|
virtual Vector GetAutoaimVector(float flDelta) = 0;
|
||||||
|
@ -263,6 +263,7 @@
|
|||||||
<ResourceCompile Include="reapi.rc" />
|
<ResourceCompile Include="reapi.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="..\extra\amxmodx\scripting\include\cssdk_const.inc" />
|
||||||
<None Include="..\extra\amxmodx\scripting\include\reapi.inc" />
|
<None Include="..\extra\amxmodx\scripting\include\reapi.inc" />
|
||||||
<None Include="..\extra\amxmodx\scripting\include\reapi_engine.inc" />
|
<None Include="..\extra\amxmodx\scripting\include\reapi_engine.inc" />
|
||||||
<None Include="..\extra\amxmodx\scripting\include\reapi_engine_const.inc" />
|
<None Include="..\extra\amxmodx\scripting\include\reapi_engine_const.inc" />
|
||||||
|
@ -764,6 +764,9 @@
|
|||||||
<None Include="..\src\reapi_version.inc">
|
<None Include="..\src\reapi_version.inc">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="..\extra\amxmodx\scripting\include\cssdk_const.inc">
|
||||||
|
<Filter>amxmodx\scripting\include</Filter>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="reapi.rc" />
|
<ResourceCompile Include="reapi.rc" />
|
||||||
|
@ -684,14 +684,14 @@ void ShowMenu(IReGameHook_ShowMenu *chain, CBasePlayer *pPlayer, int bitsValidSl
|
|||||||
callVoidForward(RG_ShowMenu, original, indexOfEdict(pPlayer->pev), bitsValidSlots, nDisplayTime, fNeedMore, pszText);
|
callVoidForward(RG_ShowMenu, original, indexOfEdict(pPlayer->pev), bitsValidSlots, nDisplayTime, fNeedMore, pszText);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowVGUIMenu(IReGameHook_ShowVGUIMenu *chain, CBasePlayer *pPlayer, int MenuType, int BitMask, char *szOldMenu)
|
void ShowVGUIMenu(IReGameHook_ShowVGUIMenu *chain, CBasePlayer *pPlayer, int MenuType, int BitMask, char *szOldMenu, bool bForceOldMenu)
|
||||||
{
|
{
|
||||||
auto original = [chain](int _pPlayer, int _MenuType, int _BitMask, char *_szOldMenu)
|
auto original = [chain](int _pPlayer, int _MenuType, int _BitMask, char *_szOldMenu, bool _bForceOldMenu)
|
||||||
{
|
{
|
||||||
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), _MenuType, _BitMask, _szOldMenu);
|
chain->callNext(getPrivate<CBasePlayer>(_pPlayer), _MenuType, _BitMask, _szOldMenu, _bForceOldMenu);
|
||||||
};
|
};
|
||||||
|
|
||||||
callVoidForward(RG_ShowVGUIMenu, original, indexOfEdict(pPlayer->pev), MenuType, BitMask, szOldMenu);
|
callVoidForward(RG_ShowVGUIMenu, original, indexOfEdict(pPlayer->pev), MenuType, BitMask, szOldMenu, bForceOldMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
int g_iClientStartSpeak, g_iClientStopSpeak;
|
int g_iClientStartSpeak, g_iClientStopSpeak;
|
||||||
|
@ -306,7 +306,7 @@ void CBasePlayer_SetClientUserInfoName(IReGameHook_CBasePlayer_SetClientUserInfo
|
|||||||
void HandleMenu_ChooseAppearance(IReGameHook_HandleMenu_ChooseAppearance *chain, CBasePlayer *pPlayer, int slot);
|
void HandleMenu_ChooseAppearance(IReGameHook_HandleMenu_ChooseAppearance *chain, CBasePlayer *pPlayer, int slot);
|
||||||
BOOL HandleMenu_ChooseTeam(IReGameHook_HandleMenu_ChooseTeam *chain, CBasePlayer *pPlayer, int slot);
|
BOOL HandleMenu_ChooseTeam(IReGameHook_HandleMenu_ChooseTeam *chain, CBasePlayer *pPlayer, int slot);
|
||||||
void ShowMenu(IReGameHook_ShowMenu *chain, CBasePlayer *pPlayer, int bitsValidSlots, int nDisplayTime, BOOL fNeedMore, char *pszText);
|
void ShowMenu(IReGameHook_ShowMenu *chain, CBasePlayer *pPlayer, int bitsValidSlots, int nDisplayTime, BOOL fNeedMore, char *pszText);
|
||||||
void ShowVGUIMenu(IReGameHook_ShowVGUIMenu *chain, CBasePlayer *pPlayer, int MenuType, int BitMask, char *szOldMenu);
|
void ShowVGUIMenu(IReGameHook_ShowVGUIMenu *chain, CBasePlayer *pPlayer, int MenuType, int BitMask, char *szOldMenu, bool bForceOldMenu);
|
||||||
|
|
||||||
extern int g_iClientStartSpeak;
|
extern int g_iClientStartSpeak;
|
||||||
extern int g_iClientStopSpeak;
|
extern int g_iClientStopSpeak;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
edict_t* g_pEdicts;
|
edict_t* g_pEdicts;
|
||||||
playermove_t* g_pMove;
|
playermove_t* g_pMove;
|
||||||
char g_szMapName[32];
|
char g_szMapName[32];
|
||||||
int gmsgSendAudio, gmsgTeamScore, gmsgStatusIcon, gmsgArmorType, gmsgTeamInfo, gmsgItemStatus;
|
int gmsgSendAudio, gmsgStatusIcon, gmsgArmorType, gmsgTeamInfo, gmsgItemStatus;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -11,7 +11,6 @@ struct
|
|||||||
int& id;
|
int& id;
|
||||||
} g_RegUserMsg[] = {
|
} g_RegUserMsg[] = {
|
||||||
{ "SendAudio", gmsgSendAudio },
|
{ "SendAudio", gmsgSendAudio },
|
||||||
{ "TeamScore", gmsgTeamScore },
|
|
||||||
{ "StatusIcon", gmsgStatusIcon },
|
{ "StatusIcon", gmsgStatusIcon },
|
||||||
{ "ArmorType", gmsgArmorType },
|
{ "ArmorType", gmsgArmorType },
|
||||||
{ "TeamInfo", gmsgTeamInfo },
|
{ "TeamInfo", gmsgTeamInfo },
|
||||||
|
@ -4,7 +4,6 @@ extern char g_szMapName[32];
|
|||||||
extern edict_t* g_pEdicts;
|
extern edict_t* g_pEdicts;
|
||||||
extern playermove_t* g_pMove;
|
extern playermove_t* g_pMove;
|
||||||
extern int gmsgSendAudio;
|
extern int gmsgSendAudio;
|
||||||
extern int gmsgTeamScore;
|
|
||||||
extern int gmsgStatusIcon;
|
extern int gmsgStatusIcon;
|
||||||
extern int gmsgArmorType;
|
extern int gmsgArmorType;
|
||||||
extern int gmsgTeamInfo;
|
extern int gmsgTeamInfo;
|
||||||
|
@ -86,6 +86,7 @@ int regmember::current_cell = 1;
|
|||||||
member_t memberlist_gamerules[] = {
|
member_t memberlist_gamerules[] = {
|
||||||
GM_MEMBERS(m_bFreezePeriod),
|
GM_MEMBERS(m_bFreezePeriod),
|
||||||
GM_MEMBERS(m_bBombDropped),
|
GM_MEMBERS(m_bBombDropped),
|
||||||
|
GM_MEMBERS(m_GameDesc),
|
||||||
// m_VoiceGameMgr ->
|
// m_VoiceGameMgr ->
|
||||||
GM_VOICE_MEMBERS(m_msgPlayerVoiceMask),
|
GM_VOICE_MEMBERS(m_msgPlayerVoiceMask),
|
||||||
GM_VOICE_MEMBERS(m_msgRequestState),
|
GM_VOICE_MEMBERS(m_msgRequestState),
|
||||||
@ -663,7 +664,7 @@ memberlist_t memberlist;
|
|||||||
|
|
||||||
member_t *memberlist_t::operator[](size_t members) const
|
member_t *memberlist_t::operator[](size_t members) const
|
||||||
{
|
{
|
||||||
#define CASE(h) case ht_##h: if (index < arraysize(memberlist_##h)) return &memberlist_##h[index]; else break;
|
#define CASE(h) case mt_##h: if (index < arraysize(memberlist_##h)) return &memberlist_##h[index]; else break;
|
||||||
|
|
||||||
const auto table = members_tables_e(members / MAX_REGION_RANGE);
|
const auto table = members_tables_e(members / MAX_REGION_RANGE);
|
||||||
const auto index = members & (MAX_REGION_RANGE - 1);
|
const auto index = members & (MAX_REGION_RANGE - 1);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define BEGIN_MEMBER_REGION(x) (MAX_REGION_RANGE * memberlist_t::members_tables_e::ht_##x)
|
#define BEGIN_MEMBER_REGION(x) (MAX_REGION_RANGE * memberlist_t::members_tables_e::mt_##x)
|
||||||
|
|
||||||
// member types
|
// member types
|
||||||
enum MType
|
enum MType
|
||||||
@ -40,16 +40,16 @@ struct memberlist_t
|
|||||||
|
|
||||||
enum members_tables_e
|
enum members_tables_e
|
||||||
{
|
{
|
||||||
ht_gamerules,
|
mt_gamerules,
|
||||||
ht_base,
|
mt_base,
|
||||||
ht_animating,
|
mt_animating,
|
||||||
ht_basemonster,
|
mt_basemonster,
|
||||||
ht_player,
|
mt_player,
|
||||||
ht_entvars,
|
mt_entvars,
|
||||||
ht_playermove,
|
mt_playermove,
|
||||||
ht_movevars,
|
mt_movevars,
|
||||||
ht_usercmd,
|
mt_usercmd,
|
||||||
ht_pmtrace
|
mt_pmtrace
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,6 +60,7 @@ enum CSGameRules_Members
|
|||||||
{
|
{
|
||||||
m_bFreezePeriod = BEGIN_MEMBER_REGION(gamerules),
|
m_bFreezePeriod = BEGIN_MEMBER_REGION(gamerules),
|
||||||
m_bBombDropped,
|
m_bBombDropped,
|
||||||
|
m_GameDesc,
|
||||||
|
|
||||||
// m_VoiceGameMgr -> CVoiceGameMgr
|
// m_VoiceGameMgr -> CVoiceGameMgr
|
||||||
m_msgPlayerVoiceMask,
|
m_msgPlayerVoiceMask,
|
||||||
|
@ -8,24 +8,16 @@ CGameRules *g_pGameRules = nullptr;
|
|||||||
bool RegamedllApi_Init()
|
bool RegamedllApi_Init()
|
||||||
{
|
{
|
||||||
const char *szGameDLLModule = GET_GAME_INFO(PLID, GINFO_REALDLL_FULLPATH);
|
const char *szGameDLLModule = GET_GAME_INFO(PLID, GINFO_REALDLL_FULLPATH);
|
||||||
|
if (!szGameDLLModule)
|
||||||
if (szGameDLLModule == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
CSysModule *gameModule = Sys_LoadModule(szGameDLLModule);
|
CSysModule *gameModule = Sys_LoadModule(szGameDLLModule);
|
||||||
|
|
||||||
if (!gameModule)
|
if (!gameModule)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
CreateInterfaceFn ifaceFactory = Sys_GetFactory(gameModule);
|
CreateInterfaceFn ifaceFactory = Sys_GetFactory(gameModule);
|
||||||
if (!ifaceFactory)
|
if (!ifaceFactory)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
int retCode = 0;
|
int retCode = 0;
|
||||||
g_ReGameApi = (IReGameApi *)ifaceFactory(VRE_GAMEDLL_API_VERSION, &retCode);
|
g_ReGameApi = (IReGameApi *)ifaceFactory(VRE_GAMEDLL_API_VERSION, &retCode);
|
||||||
@ -40,13 +32,13 @@ bool RegamedllApi_Init()
|
|||||||
|
|
||||||
if (majorVersion != REGAMEDLL_API_VERSION_MAJOR)
|
if (majorVersion != REGAMEDLL_API_VERSION_MAJOR)
|
||||||
{
|
{
|
||||||
UTIL_LogPrintf("[%s]: ReGameDLL Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REGAMEDLL_API_VERSION_MAJOR, majorVersion);
|
UTIL_ServerPrint("[%s]: ReGameDLL Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REGAMEDLL_API_VERSION_MAJOR, majorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minorVersion < REGAMEDLL_API_VERSION_MINOR)
|
if (minorVersion < REGAMEDLL_API_VERSION_MINOR)
|
||||||
{
|
{
|
||||||
UTIL_LogPrintf("[%s]: ReGameDLL Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REGAMEDLL_API_VERSION_MINOR, minorVersion);
|
UTIL_ServerPrint("[%s]: ReGameDLL Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REGAMEDLL_API_VERSION_MINOR, minorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,36 +15,30 @@ bool RehldsApi_Init()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!engineModule)
|
if (!engineModule)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
CreateInterfaceFn ifaceFactory = Sys_GetFactory(engineModule);
|
CreateInterfaceFn ifaceFactory = Sys_GetFactory(engineModule);
|
||||||
if (!ifaceFactory)
|
if (!ifaceFactory)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
int retCode = 0;
|
int retCode = 0;
|
||||||
g_RehldsApi = (IRehldsApi*)ifaceFactory(VREHLDS_HLDS_API_VERSION, &retCode);
|
g_RehldsApi = (IRehldsApi*)ifaceFactory(VREHLDS_HLDS_API_VERSION, &retCode);
|
||||||
|
|
||||||
if (!g_RehldsApi)
|
if (!g_RehldsApi)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
int majorVersion = g_RehldsApi->GetMajorVersion();
|
int majorVersion = g_RehldsApi->GetMajorVersion();
|
||||||
int minorVersion = g_RehldsApi->GetMinorVersion();
|
int minorVersion = g_RehldsApi->GetMinorVersion();
|
||||||
|
|
||||||
if (majorVersion != REHLDS_API_VERSION_MAJOR)
|
if (majorVersion != REHLDS_API_VERSION_MAJOR)
|
||||||
{
|
{
|
||||||
UTIL_LogPrintf("[%s]: ReHLDS Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REHLDS_API_VERSION_MAJOR, majorVersion);
|
UTIL_ServerPrint("[%s]: ReHLDS Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REHLDS_API_VERSION_MAJOR, majorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minorVersion < REHLDS_API_VERSION_MINOR)
|
if (minorVersion < REHLDS_API_VERSION_MINOR)
|
||||||
{
|
{
|
||||||
UTIL_LogPrintf("[%s]: ReHLDS Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REHLDS_API_VERSION_MINOR, minorVersion);
|
UTIL_ServerPrint("[%s]: ReHLDS Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REHLDS_API_VERSION_MINOR, minorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,22 +4,21 @@ IReunionApi* g_ReunionApi;
|
|||||||
|
|
||||||
bool ReunionApi_Init()
|
bool ReunionApi_Init()
|
||||||
{
|
{
|
||||||
if (g_RehldsApi == nullptr)
|
if (!g_RehldsApi)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
g_ReunionApi = (IReunionApi *)g_RehldsApi->GetFuncs()->GetPluginApi("reunion");
|
g_ReunionApi = (IReunionApi *)g_RehldsApi->GetFuncs()->GetPluginApi("reunion");
|
||||||
|
|
||||||
if (g_ReunionApi == nullptr) {
|
if (!g_ReunionApi)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
if (g_ReunionApi->version_major != REUNION_API_VERSION_MAJOR) {
|
if (g_ReunionApi->version_major != REUNION_API_VERSION_MAJOR) {
|
||||||
UTIL_LogPrintf("[%s]: Reunion Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REUNION_API_VERSION_MAJOR, g_ReunionApi->version_major);
|
UTIL_ServerPrint("[%s]: Reunion Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, REUNION_API_VERSION_MAJOR, g_ReunionApi->version_major);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_ReunionApi->version_minor < REUNION_API_VERSION_MINOR) {
|
if (g_ReunionApi->version_minor < REUNION_API_VERSION_MINOR) {
|
||||||
UTIL_LogPrintf("[%s]: Reunion Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REUNION_API_VERSION_MINOR, g_ReunionApi->version_minor);
|
UTIL_ServerPrint("[%s]: Reunion Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, REUNION_API_VERSION_MINOR, g_ReunionApi->version_minor);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,25 +4,24 @@ IVoiceTranscoderAPI *g_pVoiceTranscoderApi;
|
|||||||
|
|
||||||
bool VTC_Api_Init()
|
bool VTC_Api_Init()
|
||||||
{
|
{
|
||||||
if (g_RehldsApi == nullptr)
|
if (!g_RehldsApi)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
g_pVoiceTranscoderApi = (IVoiceTranscoderAPI *)g_RehldsApi->GetFuncs()->GetPluginApi("VoiceTranscoder");
|
g_pVoiceTranscoderApi = (IVoiceTranscoderAPI *)g_RehldsApi->GetFuncs()->GetPluginApi("VoiceTranscoder");
|
||||||
|
|
||||||
if (g_pVoiceTranscoderApi == nullptr) {
|
if (!g_pVoiceTranscoderApi)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
int majorVersion = g_pVoiceTranscoderApi->GetMajorVersion();
|
int majorVersion = g_pVoiceTranscoderApi->GetMajorVersion();
|
||||||
int minorVersion = g_pVoiceTranscoderApi->GetMinorVersion();
|
int minorVersion = g_pVoiceTranscoderApi->GetMinorVersion();
|
||||||
|
|
||||||
if (majorVersion != VOICETRANSCODER_API_VERSION_MAJOR) {
|
if (majorVersion != VOICETRANSCODER_API_VERSION_MAJOR) {
|
||||||
UTIL_LogPrintf("[%s]: VTC Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, VOICETRANSCODER_API_VERSION_MAJOR, majorVersion);
|
UTIL_ServerPrint("[%s]: VTC Api major version mismatch; expected %d, real %d\n", Plugin_info.logtag, VOICETRANSCODER_API_VERSION_MAJOR, majorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (minorVersion < VOICETRANSCODER_API_VERSION_MINOR) {
|
if (minorVersion < VOICETRANSCODER_API_VERSION_MINOR) {
|
||||||
UTIL_LogPrintf("[%s]: VTC Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, VOICETRANSCODER_API_VERSION_MINOR, minorVersion);
|
UTIL_ServerPrint("[%s]: VTC Api minor version mismatch; expected at least %d, real %d\n", Plugin_info.logtag, VOICETRANSCODER_API_VERSION_MINOR, minorVersion);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ public:
|
|||||||
CAmxArg(AMX* amx, cell value) : m_amx(amx), m_value(value) {}
|
CAmxArg(AMX* amx, cell value) : m_amx(amx), m_value(value) {}
|
||||||
operator float() const
|
operator float() const
|
||||||
{
|
{
|
||||||
return *(float *)m_value;
|
return *(float *)&m_value;
|
||||||
}
|
}
|
||||||
operator Vector&() const
|
operator Vector&() const
|
||||||
{
|
{
|
||||||
@ -44,9 +44,32 @@ public:
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
return g_ReGameFuncs->UTIL_PlayerByIndex(m_value);
|
return g_ReGameFuncs->UTIL_PlayerByIndex(m_value);
|
||||||
}
|
}
|
||||||
operator TeamName() const { return static_cast<TeamName>(m_value); }
|
operator IGameClient *() const
|
||||||
operator ModelName() const { return static_cast<ModelName>(m_value); }
|
{
|
||||||
operator PLAYER_ANIM() const { return static_cast<PLAYER_ANIM>(m_value); }
|
if (m_value <= 0)
|
||||||
|
return nullptr;
|
||||||
|
return g_RehldsSvs->GetClient(m_value - 1); // id: 0 - 31
|
||||||
|
}
|
||||||
|
operator edict_t *() const
|
||||||
|
{
|
||||||
|
return edictByIndexAmx(m_value);
|
||||||
|
}
|
||||||
|
operator const float *() const
|
||||||
|
{
|
||||||
|
return (float *)getAmxAddr(m_amx, m_value);
|
||||||
|
}
|
||||||
|
operator TeamName() const
|
||||||
|
{
|
||||||
|
return static_cast<TeamName>(m_value);
|
||||||
|
}
|
||||||
|
operator ModelName() const
|
||||||
|
{
|
||||||
|
return static_cast<ModelName>(m_value);
|
||||||
|
}
|
||||||
|
operator PLAYER_ANIM() const
|
||||||
|
{
|
||||||
|
return static_cast<PLAYER_ANIM>(m_value);
|
||||||
|
}
|
||||||
Vector& vector() const
|
Vector& vector() const
|
||||||
{
|
{
|
||||||
return operator Vector&();
|
return operator Vector&();
|
||||||
|
@ -66,8 +66,9 @@ enum GiveType { GT_APPEND, GT_REPLACE, GT_DROP_AND_REPLACE };
|
|||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param pszName Classname item
|
* @param pszName Classname item
|
||||||
|
* @param type Look at the enum's with name GiveType
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
* native rg_give_item(index, const pszName[], GiveType:type = GT_APPEND);
|
* native rg_give_item(index, const pszName[], GiveType:type = GT_APPEND);
|
||||||
*/
|
*/
|
||||||
@ -443,7 +444,7 @@ cell AMX_NATIVE_CALL rg_update_teamscores(AMX *amx, cell *params)
|
|||||||
|
|
||||||
CSGameRules()->m_iNumCTWins = ((params[arg_add] != 0) ? CSGameRules()->m_iNumCTWins : 0) + params[arg_cts];
|
CSGameRules()->m_iNumCTWins = ((params[arg_add] != 0) ? CSGameRules()->m_iNumCTWins : 0) + params[arg_cts];
|
||||||
CSGameRules()->m_iNumTerroristWins = ((params[arg_add] != 0) ? CSGameRules()->m_iNumTerroristWins : 0) + params[arg_ts];
|
CSGameRules()->m_iNumTerroristWins = ((params[arg_add] != 0) ? CSGameRules()->m_iNumTerroristWins : 0) + params[arg_ts];
|
||||||
UpdateTeamScores();
|
CSGameRules()->UpdateTeamScores();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1147,13 +1148,197 @@ cell AMX_NATIVE_CALL rg_transfer_c4(AMX *amx, cell *params)
|
|||||||
* Instant reload weapons
|
* Instant reload weapons
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param weapon Entity weapons, if 0 then all the weapons
|
* @param weapon Weapon entity-index, if 0 then all the weapons
|
||||||
*
|
*
|
||||||
* @return 1 if successfully, 0 otherwise
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
* native rg_instant_reload_weapons(const index, const weapon = 0);
|
* native rg_instant_reload_weapons(const index, const weapon = 0);
|
||||||
*/
|
*/
|
||||||
cell AMX_NATIVE_CALL rg_instant_reload_weapons(AMX *amx, cell *params)
|
cell AMX_NATIVE_CALL rg_instant_reload_weapons(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_index, arg_weapon, arg_force_reload, arg_force_refill };
|
||||||
|
|
||||||
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
|
||||||
|
CBasePlayer *pPlayer = g_ReGameFuncs->UTIL_PlayerByIndex(params[arg_index]);
|
||||||
|
if (pPlayer == nullptr || pPlayer->has_disconnected) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CBasePlayerWeapon *pWeapon = nullptr;
|
||||||
|
if (params[arg_weapon] != 0)
|
||||||
|
{
|
||||||
|
pWeapon = getPrivate<CBasePlayerWeapon>(params[arg_weapon]);
|
||||||
|
if (pWeapon == nullptr || !pWeapon->IsWeapon()) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pPlayer->CSPlayer()->ReloadWeapons(pWeapon, true, true);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets the amount of reward in the game account for all players.
|
||||||
|
*
|
||||||
|
* @param rules_index Look at the enum's with name RewardRules
|
||||||
|
* @param amount The amount money
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
* native rg_set_account_rules(const RewardRules:rules_index, const amount);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_set_account_rules(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_rules_index, arg_amount };
|
||||||
|
|
||||||
|
if (g_pGameRules == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSGameRules()->SetAccountRules(static_cast<RewardRules>(params[arg_rules_index]), params[arg_amount]);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the amount of reward from account
|
||||||
|
*
|
||||||
|
* @param rules_index Look at the enum's with name RewardRules
|
||||||
|
*
|
||||||
|
* @return The amount of reward from account
|
||||||
|
*
|
||||||
|
* native rg_get_account_rules(const RewardRules:rules_index);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_get_account_rules(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_rules_index };
|
||||||
|
|
||||||
|
if (g_pGameRules == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (cell)CSGameRules()->GetAccountRules(static_cast<RewardRules>(params[arg_rules_index]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the bomb is planted
|
||||||
|
*
|
||||||
|
* @return 1 if successfully, 0 otherwise
|
||||||
|
*
|
||||||
|
* native bool:rg_is_bomb_planted();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_is_bomb_planted(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
if (g_pGameRules == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (cell)CSGameRules()->IsBombPlanted();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Join team
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param team Team id
|
||||||
|
*
|
||||||
|
* @return 1 if successfully joined the team, 0 otherwise
|
||||||
|
*
|
||||||
|
* native rg_join_team(const index, const TeamName:team);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_join_team(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_index, arg_team };
|
||||||
|
|
||||||
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
|
||||||
|
CBasePlayer *pPlayer = g_ReGameFuncs->UTIL_PlayerByIndex(params[arg_index]);
|
||||||
|
if (pPlayer == nullptr || pPlayer->has_disconnected) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (cell)pPlayer->CSPlayer()->JoinTeam(static_cast<TeamName>(params[arg_team]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instantly balances the team.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
* native rg_balance_teams();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_balance_teams(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
if (g_pGameRules == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSGameRules()->BalanceTeams();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To swap players, without reset frags/deaths and the amount wins.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
* native rg_swap_all_players();
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_swap_all_players(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
if (g_pGameRules == nullptr) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSGameRules()->SwapAllPlayers();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instantly switches to the opposite team for one player.
|
||||||
|
* @note Switch from CT to TERRORIST also opposite.
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*
|
||||||
|
* native rg_switch_team(const index);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_switch_team(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_index };
|
||||||
|
|
||||||
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
|
||||||
|
CBasePlayer *pPlayer = g_ReGameFuncs->UTIL_PlayerByIndex(params[arg_index]);
|
||||||
|
if (pPlayer == nullptr || pPlayer->has_disconnected) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pPlayer->CSPlayer()->SwitchTeam();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Switch to specific weapon
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param weapon Weapon entity-index
|
||||||
|
*
|
||||||
|
* @return 1 if successfully switched, 0 otherwise
|
||||||
|
*
|
||||||
|
* native rg_switch_weapon(const index, const weapon);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_switch_weapon(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
enum args_e { arg_count, arg_index, arg_weapon };
|
enum args_e { arg_count, arg_index, arg_weapon };
|
||||||
|
|
||||||
@ -1166,13 +1351,12 @@ cell AMX_NATIVE_CALL rg_instant_reload_weapons(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto pWeapon = getPrivate<CBasePlayerWeapon>(params[arg_weapon]);
|
auto pWeapon = getPrivate<CBasePlayerWeapon>(params[arg_weapon]);
|
||||||
if (params[arg_weapon] != 0 && pWeapon == nullptr) {
|
if (pWeapon == nullptr || !pWeapon->IsWeapon()) {
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
pPlayer->CSPlayer()->ReloadWeapons(pWeapon);
|
return (cell)pPlayer->CSPlayer()->SwitchWeapon(pWeapon);
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO Misc_Natives_RG[] =
|
AMX_NATIVE_INFO Misc_Natives_RG[] =
|
||||||
@ -1220,6 +1404,16 @@ AMX_NATIVE_INFO Misc_Natives_RG[] =
|
|||||||
{ "rg_transfer_c4", rg_transfer_c4 },
|
{ "rg_transfer_c4", rg_transfer_c4 },
|
||||||
{ "rg_instant_reload_weapons", rg_instant_reload_weapons },
|
{ "rg_instant_reload_weapons", rg_instant_reload_weapons },
|
||||||
|
|
||||||
|
{ "rg_set_account_rules", rg_set_account_rules },
|
||||||
|
{ "rg_get_account_rules", rg_get_account_rules },
|
||||||
|
|
||||||
|
{ "rg_is_bomb_planted", rg_is_bomb_planted },
|
||||||
|
{ "rg_join_team", rg_join_team },
|
||||||
|
{ "rg_balance_teams", rg_balance_teams },
|
||||||
|
{ "rg_swap_all_players", rg_swap_all_players },
|
||||||
|
{ "rg_switch_team", rg_switch_team },
|
||||||
|
{ "rg_switch_weapon", rg_switch_weapon },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1290,11 +1484,62 @@ cell AMX_NATIVE_CALL rh_reset_mapname(AMX *amx, cell *params)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Emits a sound from an entity from the engine.
|
||||||
|
*
|
||||||
|
* @param entity Entity index or use 0 to emit from worldspawn at the specified position
|
||||||
|
* @param recipients Recipient index or use 0 to heard for all clients
|
||||||
|
* @param channel Channel to emit from
|
||||||
|
* @param sample Sound file to emit
|
||||||
|
* @param vol Volume in percent
|
||||||
|
* @param attn Sound attenuation
|
||||||
|
* @param flags Emit flags
|
||||||
|
* @param pitch Sound pitch
|
||||||
|
* @param emitFlags Additional Emit2 flags, look at the defines like SND_EMIT2_*
|
||||||
|
|
||||||
|
* @return 1 if successfully sounds are emitted, 0 otherwise
|
||||||
|
*
|
||||||
|
* native rh_emit_sound2(const entity, const recipient, const channel, const sample[], Float:vol = VOL_NORM, Float:attn = ATTN_NORM, const flags = 0, const pitch = PITCH_NORM, emitFlags = 0, const Float:origin[3] = {0.0,0.0,0.0});
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rh_emit_sound2(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_entity, arg_recipient, arg_channel, arg_sample, arg_vol, arg_attn, arg_flags, arg_pitch, arg_emitFlags, arg_origin };
|
||||||
|
|
||||||
|
CBasePlayer *pRecipient = getPrivate<CBasePlayer>(params[arg_recipient]);
|
||||||
|
if (pRecipient != nullptr && pRecipient->has_disconnected) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_recipient]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore bots
|
||||||
|
if ((pRecipient != nullptr && pRecipient->IsBot()) || !pRecipient->IsNetClient()) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CAmxArgs args(amx, params);
|
||||||
|
const char *sample = getAmxString(amx, params[arg_sample]);
|
||||||
|
|
||||||
|
return g_RehldsFuncs->SV_EmitSound2
|
||||||
|
(
|
||||||
|
args[arg_entity], // entity
|
||||||
|
args[arg_recipient], // recipient
|
||||||
|
args[arg_channel], // channel
|
||||||
|
sample, // sample
|
||||||
|
args[arg_vol], // volume
|
||||||
|
args[arg_attn], // attn
|
||||||
|
args[arg_flags], // flags
|
||||||
|
args[arg_pitch], // pitch
|
||||||
|
args[arg_emitFlags], // emitFlags
|
||||||
|
args[arg_origin] // pOrigin
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO Misc_Natives_RH[] =
|
AMX_NATIVE_INFO Misc_Natives_RH[] =
|
||||||
{
|
{
|
||||||
{ "rh_set_mapname", rh_set_mapname },
|
{ "rh_set_mapname", rh_set_mapname },
|
||||||
{ "rh_get_mapname", rh_get_mapname },
|
{ "rh_get_mapname", rh_get_mapname },
|
||||||
{ "rh_reset_mapname", rh_reset_mapname },
|
{ "rh_reset_mapname", rh_reset_mapname },
|
||||||
|
{ "rh_emit_sound2", rh_emit_sound2 },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
@ -1363,4 +1608,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);}
|
g_amxxapi.AddNatives(Misc_Natives_Checks);
|
||||||
|
}
|
||||||
|
@ -12,19 +12,6 @@ void Broadcast(const char *sentence)
|
|||||||
g_pengfuncsTable->pfnMessageEnd();
|
g_pengfuncsTable->pfnMessageEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateTeamScores()
|
|
||||||
{
|
|
||||||
g_pengfuncsTable->pfnMessageBegin(MSG_ALL, gmsgTeamScore, NULL, NULL);
|
|
||||||
g_pengfuncsTable->pfnWriteString("CT");
|
|
||||||
g_pengfuncsTable->pfnWriteShort(CSGameRules()->m_iNumCTWins);
|
|
||||||
g_pengfuncsTable->pfnMessageEnd();
|
|
||||||
|
|
||||||
g_pengfuncsTable->pfnMessageBegin(MSG_ALL, gmsgTeamScore, NULL, NULL);
|
|
||||||
g_pengfuncsTable->pfnWriteString("TERRORIST");
|
|
||||||
g_pengfuncsTable->pfnWriteShort(CSGameRules()->m_iNumTerroristWins);
|
|
||||||
g_pengfuncsTable->pfnMessageEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
TeamName team;
|
TeamName team;
|
||||||
ModelName model;
|
ModelName model;
|
||||||
|
@ -120,5 +120,6 @@ inline const char *GetTeamName(TeamName team)
|
|||||||
void Broadcast(const char *sentence);
|
void Broadcast(const char *sentence);
|
||||||
void UpdateTeamScores();
|
void UpdateTeamScores();
|
||||||
ModelName GetModelAuto(TeamName team);
|
ModelName GetModelAuto(TeamName team);
|
||||||
|
void UTIL_ServerPrint(const char *fmt, ...);
|
||||||
|
|
||||||
extern void __declspec(noreturn) UTIL_SysError(const char *fmt, ...);
|
extern void __declspec(noreturn) UTIL_SysError(const char *fmt, ...);
|
||||||
|
@ -4,5 +4,5 @@
|
|||||||
#define _reapi_version_included
|
#define _reapi_version_included
|
||||||
|
|
||||||
// reapi version
|
// reapi version
|
||||||
#define REAPI_VERSION_MAJOR 2
|
#define REAPI_VERSION_MAJOR 3
|
||||||
#define REAPI_VERSION_MINOR 0
|
#define REAPI_VERSION_MINOR 0
|
||||||
|
@ -40,3 +40,15 @@ void UTIL_LogPrintf(const char *fmt, ...)
|
|||||||
|
|
||||||
ALERT(at_logged, "%s", string);
|
ALERT(at_logged, "%s", string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UTIL_ServerPrint(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list argptr;
|
||||||
|
char string[1024];
|
||||||
|
|
||||||
|
va_start(argptr, fmt);
|
||||||
|
vsprintf(string, fmt, argptr);
|
||||||
|
va_end(argptr);
|
||||||
|
|
||||||
|
SERVER_PRINT(string);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user