mirror of
https://github.com/rehlds/reapi.git
synced 2024-12-29 08:05:36 +03:00
Added native rg_transfer_c4
This commit is contained in:
parent
63502fa028
commit
b1a86097ea
@ -357,17 +357,19 @@ native rg_set_user_armor(const index, armorvalue, ArmorType:armortype);
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the client's team without killing the player, and sets the client model.
|
* Sets the client's team without killing the player, and sets the client model.
|
||||||
|
* @note To obtain of TeamName use the following:
|
||||||
|
* new TeamName:team = get_member(id, m_iTeam);
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param team Team id
|
* @param team Team id
|
||||||
* @param model Internal model
|
* @param model Internal model, use MODEL_AUTO for a random appearance or if MODEL_UNASSIGNED not update it.
|
||||||
*
|
*
|
||||||
* @param send_teaminfo If true, a TeamInfo message will be sent
|
* @param send_teaminfo If true, a TeamInfo message will be sent
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rg_set_user_team(const index, {TeamName,_}:team, {ModelName,_}:model = MODEL_UNASSIGNED, bool:send_teaminfo = true);
|
native rg_set_user_team(const index, {TeamName,_}:team, {ModelName,_}:model = MODEL_AUTO, bool:send_teaminfo = true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the client's player model.
|
* Sets the client's player model.
|
||||||
@ -376,7 +378,7 @@ native rg_set_user_team(const index, {TeamName,_}:team, {ModelName,_}:model = MO
|
|||||||
* @param model Model name
|
* @param model Model name
|
||||||
* @param update_index If true, the modelindex is updated as well
|
* @param update_index If true, the modelindex is updated as well
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rg_set_user_model(const index, const model[], bool:update_index = false);
|
native rg_set_user_model(const index, const model[], bool:update_index = false);
|
||||||
@ -386,7 +388,18 @@ native rg_set_user_model(const index, const model[], bool:update_index = false);
|
|||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
native rg_reset_user_model(const index);
|
native rg_reset_user_model(const index);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transfer C4 to player
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param receiver Receiver index, if 0 so will transfer a random to player
|
||||||
|
*
|
||||||
|
* @return 1 if successfully, 0 otherwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
native rg_transfer_c4(const index, const receiver = 0);
|
||||||
|
@ -101,7 +101,8 @@ enum ModelName
|
|||||||
MODEL_T_GUERILLA,
|
MODEL_T_GUERILLA,
|
||||||
MODEL_CT_VIP,
|
MODEL_CT_VIP,
|
||||||
MODEL_T_MILITIA,
|
MODEL_T_MILITIA,
|
||||||
MODEL_CT_SPETSNAZ
|
MODEL_CT_SPETSNAZ,
|
||||||
|
MODEL_AUTO
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -148,7 +148,7 @@ enum RewardType
|
|||||||
RT_VIP_RESCUED_MYSELF
|
RT_VIP_RESCUED_MYSELF
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum
|
enum PLAYER_ANIM
|
||||||
{
|
{
|
||||||
PLAYER_IDLE,
|
PLAYER_IDLE,
|
||||||
PLAYER_WALK,
|
PLAYER_WALK,
|
||||||
@ -161,10 +161,9 @@ typedef enum
|
|||||||
PLAYER_LARGE_FLINCH,
|
PLAYER_LARGE_FLINCH,
|
||||||
PLAYER_RELOAD,
|
PLAYER_RELOAD,
|
||||||
PLAYER_HOLDBOMB
|
PLAYER_HOLDBOMB
|
||||||
|
};
|
||||||
|
|
||||||
} PLAYER_ANIM;
|
enum _Menu
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
{
|
||||||
Menu_OFF,
|
Menu_OFF,
|
||||||
Menu_ChooseTeam,
|
Menu_ChooseTeam,
|
||||||
@ -181,19 +180,17 @@ typedef enum
|
|||||||
Menu_Radio2,
|
Menu_Radio2,
|
||||||
Menu_Radio3,
|
Menu_Radio3,
|
||||||
Menu_ClientBuy
|
Menu_ClientBuy
|
||||||
|
};
|
||||||
|
|
||||||
} _Menu;
|
enum TeamName
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
{
|
||||||
UNASSIGNED,
|
UNASSIGNED,
|
||||||
TERRORIST,
|
TERRORIST,
|
||||||
CT,
|
CT,
|
||||||
SPECTATOR,
|
SPECTATOR,
|
||||||
|
};
|
||||||
|
|
||||||
} TeamName;
|
enum ModelName
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
{
|
||||||
MODEL_UNASSIGNED,
|
MODEL_UNASSIGNED,
|
||||||
MODEL_URBAN,
|
MODEL_URBAN,
|
||||||
@ -206,11 +203,11 @@ typedef enum
|
|||||||
MODEL_GUERILLA,
|
MODEL_GUERILLA,
|
||||||
MODEL_VIP,
|
MODEL_VIP,
|
||||||
MODEL_MILITIA,
|
MODEL_MILITIA,
|
||||||
MODEL_SPETSNAZ
|
MODEL_SPETSNAZ,
|
||||||
|
MODEL_AUTO
|
||||||
|
};
|
||||||
|
|
||||||
} ModelName;
|
enum JoinState
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
{
|
||||||
JOINED,
|
JOINED,
|
||||||
SHOWLTEXT,
|
SHOWLTEXT,
|
||||||
@ -219,9 +216,9 @@ typedef enum
|
|||||||
PICKINGTEAM,
|
PICKINGTEAM,
|
||||||
GETINTOGAME
|
GETINTOGAME
|
||||||
|
|
||||||
} JoinState;
|
};
|
||||||
|
|
||||||
typedef enum
|
enum TrackCommands
|
||||||
{
|
{
|
||||||
CMD_SAY = 0,
|
CMD_SAY = 0,
|
||||||
CMD_SAYTEAM,
|
CMD_SAYTEAM,
|
||||||
@ -233,9 +230,9 @@ typedef enum
|
|||||||
CMD_NIGHTVISION,
|
CMD_NIGHTVISION,
|
||||||
COMMANDS_TO_TRACK,
|
COMMANDS_TO_TRACK,
|
||||||
|
|
||||||
} TrackCommands;
|
};
|
||||||
|
|
||||||
typedef struct
|
struct RebuyStruct
|
||||||
{
|
{
|
||||||
int m_primaryWeapon;
|
int m_primaryWeapon;
|
||||||
int m_primaryAmmo;
|
int m_primaryAmmo;
|
||||||
@ -248,9 +245,9 @@ typedef struct
|
|||||||
int m_nightVision;
|
int m_nightVision;
|
||||||
int m_armor;
|
int m_armor;
|
||||||
|
|
||||||
} RebuyStruct;
|
};
|
||||||
|
|
||||||
typedef enum
|
enum ThrowDirection
|
||||||
{
|
{
|
||||||
THROW_NONE,
|
THROW_NONE,
|
||||||
THROW_FORWARD,
|
THROW_FORWARD,
|
||||||
@ -260,7 +257,7 @@ typedef enum
|
|||||||
THROW_GRENADE,
|
THROW_GRENADE,
|
||||||
THROW_HITVEL_MINUS_AIRVEL
|
THROW_HITVEL_MINUS_AIRVEL
|
||||||
|
|
||||||
} ThrowDirection;
|
};
|
||||||
|
|
||||||
enum sbar_data
|
enum sbar_data
|
||||||
{
|
{
|
||||||
@ -270,13 +267,7 @@ enum sbar_data
|
|||||||
SBAR_END
|
SBAR_END
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum
|
enum MusicState { SILENT, CALM, INTENSE };
|
||||||
{
|
|
||||||
SILENT,
|
|
||||||
CALM,
|
|
||||||
INTENSE
|
|
||||||
|
|
||||||
} MusicState;
|
|
||||||
|
|
||||||
class CCSPlayer;
|
class CCSPlayer;
|
||||||
|
|
||||||
|
@ -928,16 +928,18 @@ cell AMX_NATIVE_CALL rg_set_user_armor(AMX *amx, cell *params)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the client's team without killing the player, and sets the client model.
|
* Sets the client's team without killing the player, and sets the client model.
|
||||||
|
* @note To obtain of TeamName use the following:
|
||||||
|
* new TeamName:team = get_member(id, m_iTeam);
|
||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
* @param team Team id
|
* @param team Team id
|
||||||
* @param model Internal model
|
* @param model Internal model, use MODEL_AUTO for a random appearance or if MODEL_UNASSIGNED not update it.
|
||||||
*
|
*
|
||||||
* @param send_teaminfo If true, a TeamInfo message will be sent
|
* @param send_teaminfo If true, a TeamInfo message will be sent
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
* native rg_set_user_team(const index, {TeamName,_}:team, {ModelName,_}:model = MODEL_UNASSIGNED, bool:send_teaminfo = true);
|
* native rg_set_user_team(const index, {TeamName,_}:team, {ModelName,_}:model = MODEL_AUTO, bool:send_teaminfo = true);
|
||||||
*/
|
*/
|
||||||
cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
@ -973,7 +975,7 @@ cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
|||||||
CSGameRules()->m_iNumTerrorist--;
|
CSGameRules()->m_iNumTerrorist--;
|
||||||
if (pPlayer->m_bHasC4 && !CSGameRules()->m_fTeamCount && CSGameRules()->m_bMapHasBombTarget)
|
if (pPlayer->m_bHasC4 && !CSGameRules()->m_fTeamCount && CSGameRules()->m_bMapHasBombTarget)
|
||||||
{
|
{
|
||||||
if (RemovePlayerItem(pPlayer, "weapon_c4")) {
|
if (CSGameRules()->m_iNumTerrorist > 0 && RemovePlayerItem(pPlayer, "weapon_c4")) {
|
||||||
pPlayer->m_bHasC4 = false;
|
pPlayer->m_bHasC4 = false;
|
||||||
pPlayer->pev->body = 0;
|
pPlayer->pev->body = 0;
|
||||||
|
|
||||||
@ -983,6 +985,8 @@ cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
|||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
|
|
||||||
CSGameRules()->GiveC4();
|
CSGameRules()->GiveC4();
|
||||||
|
} else if (pPlayer->IsAlive()) {// are still alive
|
||||||
|
pPlayer->CSPlayer()->DropPlayerItem("weapon_c4");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1003,11 +1007,15 @@ cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[arg_model] != MODEL_UNASSIGNED) {
|
if (args[arg_model] > MODEL_UNASSIGNED) {
|
||||||
pPlayer->m_iModelName = args[arg_model];
|
if (args[arg_model] != MODEL_AUTO) {
|
||||||
}
|
pPlayer->m_iModelName = args[arg_model];
|
||||||
|
} else {
|
||||||
|
pPlayer->m_iModelName = GetModelAuto(pPlayer->m_iTeam);
|
||||||
|
}
|
||||||
|
|
||||||
pPlayer->CSPlayer()->SetPlayerModel(pPlayer->m_bHasC4);
|
pPlayer->CSPlayer()->SetPlayerModel(pPlayer->m_bHasC4);
|
||||||
|
}
|
||||||
|
|
||||||
if (params[arg_sendinfo] != 0) {
|
if (params[arg_sendinfo] != 0) {
|
||||||
MESSAGE_BEGIN(MSG_ALL, gmsgTeamInfo);
|
MESSAGE_BEGIN(MSG_ALL, gmsgTeamInfo);
|
||||||
@ -1027,7 +1035,7 @@ cell AMX_NATIVE_CALL rg_set_user_team(AMX *amx, cell *params)
|
|||||||
* @param model Model name
|
* @param model Model name
|
||||||
* @param update_index If true, the modelindex is updated as well
|
* @param update_index If true, the modelindex is updated as well
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
* native rg_set_user_model(const index, const model[], bool:update_index = false);
|
* native rg_set_user_model(const index, const model[], bool:update_index = false);
|
||||||
*/
|
*/
|
||||||
@ -1067,7 +1075,7 @@ cell AMX_NATIVE_CALL rg_set_user_model(AMX *amx, cell *params)
|
|||||||
*
|
*
|
||||||
* @param index Client index
|
* @param index Client index
|
||||||
*
|
*
|
||||||
* @noreturn
|
* @return 1 if successfully, 0 otherwise
|
||||||
*
|
*
|
||||||
* native rg_reset_user_model(const index);
|
* native rg_reset_user_model(const index);
|
||||||
*/
|
*/
|
||||||
@ -1085,6 +1093,66 @@ cell AMX_NATIVE_CALL rg_reset_user_model(AMX *amx, cell *params)
|
|||||||
|
|
||||||
pPlayer->CSPlayer()->SetPlayerModelEx("");
|
pPlayer->CSPlayer()->SetPlayerModelEx("");
|
||||||
pPlayer->CSPlayer()->SetPlayerModel(pPlayer->m_bHasC4);
|
pPlayer->CSPlayer()->SetPlayerModel(pPlayer->m_bHasC4);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Transfer C4 to player
|
||||||
|
*
|
||||||
|
* @param index Client index
|
||||||
|
* @param receiver Receiver index, if 0 so will transfer a random to player
|
||||||
|
*
|
||||||
|
* @return 1 if successfully, 0 otherwise
|
||||||
|
*
|
||||||
|
* native rg_transfer_c4(const index, const receiver = 0);
|
||||||
|
*/
|
||||||
|
cell AMX_NATIVE_CALL rg_transfer_c4(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
enum args_e { arg_count, arg_index, arg_receiver };
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pPlayer->m_bHasC4 || !RemovePlayerItem(pPlayer, "weapon_c4"))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
pPlayer->m_bHasC4 = false;
|
||||||
|
pPlayer->pev->body = 0;
|
||||||
|
|
||||||
|
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pPlayer->pev);
|
||||||
|
WRITE_BYTE(STATUSICON_HIDE);
|
||||||
|
WRITE_STRING("c4");
|
||||||
|
MESSAGE_END();
|
||||||
|
|
||||||
|
if (params[arg_receiver] != 0 && params[arg_receiver] <= gpGlobals->maxClients) {
|
||||||
|
CBasePlayer *pReceiver = g_ReGameFuncs->UTIL_PlayerByIndex(params[arg_receiver]);
|
||||||
|
if (pReceiver == nullptr || pReceiver->has_disconnected) {
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_receiver]);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pReceiver->m_bHasC4 = true;
|
||||||
|
pReceiver->pev->body = 1;
|
||||||
|
pReceiver->CSPlayer()->GiveNamedItemEx("weapon_c4");
|
||||||
|
|
||||||
|
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, NULL, pReceiver->pev);
|
||||||
|
WRITE_BYTE(STATUSICON_SHOW);
|
||||||
|
WRITE_STRING("c4");
|
||||||
|
WRITE_BYTE(0);
|
||||||
|
WRITE_BYTE(160);
|
||||||
|
WRITE_BYTE(0);
|
||||||
|
MESSAGE_END();
|
||||||
|
} else {
|
||||||
|
auto flags = pPlayer->pev->flags;
|
||||||
|
pPlayer->pev->flags |= FL_DORMANT;
|
||||||
|
CSGameRules()->GiveC4();
|
||||||
|
pPlayer->pev->flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1131,6 +1199,8 @@ AMX_NATIVE_INFO Misc_Natives_RG[] =
|
|||||||
{ "rg_set_user_model", rg_set_user_model },
|
{ "rg_set_user_model", rg_set_user_model },
|
||||||
{ "rg_reset_user_model", rg_reset_user_model },
|
{ "rg_reset_user_model", rg_reset_user_model },
|
||||||
|
|
||||||
|
{ "rg_transfer_c4", rg_transfer_c4 },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -63,3 +63,34 @@ void SendItemStatus(CBasePlayer *pPlayer)
|
|||||||
WRITE_BYTE(itemStatus);
|
WRITE_BYTE(itemStatus);
|
||||||
MESSAGE_END();
|
MESSAGE_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct {
|
||||||
|
TeamName team;
|
||||||
|
ModelName model;
|
||||||
|
|
||||||
|
} modelStruct[] = {
|
||||||
|
{ TERRORIST, MODEL_TERROR },
|
||||||
|
{ TERRORIST, MODEL_LEET },
|
||||||
|
{ TERRORIST, MODEL_ARCTIC },
|
||||||
|
{ TERRORIST, MODEL_GUERILLA },
|
||||||
|
{ CT, MODEL_URBAN },
|
||||||
|
{ CT, MODEL_GSG9 },
|
||||||
|
{ CT, MODEL_GIGN },
|
||||||
|
{ CT, MODEL_SAS },
|
||||||
|
};
|
||||||
|
|
||||||
|
ModelName GetModelAuto(TeamName team)
|
||||||
|
{
|
||||||
|
int cur = 0;
|
||||||
|
const int numSkin = 4;
|
||||||
|
for (auto& it : modelStruct) {
|
||||||
|
if (it.team != team) {
|
||||||
|
++cur;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return modelStruct[RANDOM_LONG(cur, cur + numSkin - 1)].model;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MODEL_UNASSIGNED;
|
||||||
|
}
|
||||||
|
@ -121,5 +121,6 @@ void Broadcast(const char *sentence);
|
|||||||
void UpdateTeamScores();
|
void UpdateTeamScores();
|
||||||
bool RemovePlayerItem(CBasePlayer *pPlayer, const char* szItemName);
|
bool RemovePlayerItem(CBasePlayer *pPlayer, const char* szItemName);
|
||||||
void SendItemStatus(CBasePlayer *pPlayer);
|
void SendItemStatus(CBasePlayer *pPlayer);
|
||||||
|
ModelName GetModelAuto(TeamName team);
|
||||||
|
|
||||||
extern void __declspec(noreturn) UTIL_SysError(const char *fmt, ...);
|
extern void __declspec(noreturn) UTIL_SysError(const char *fmt, ...);
|
||||||
|
Loading…
Reference in New Issue
Block a user