@@ -3375,6 +3375,47 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params)
33753375 return TRUE ;
33763376}
33773377
3378+ /*
3379+ * Adds impulse to the player.
3380+ *
3381+ * @param player Player index.
3382+ * @param attacker Attacker index.
3383+ * @param flKnockbackForce Knockback force.
3384+ * @param flVelModifier Velocity modifier.
3385+ *
3386+ * @noreturn
3387+ */
3388+ cell AMX_NATIVE_CALL rg_player_takedamage_impulse (AMX *amx, cell *params)
3389+ {
3390+ enum args_e { arg_count, arg_index, arg_attacker, arg_knockback_force, arg_vel_modifier };
3391+
3392+ CHECK_ISPLAYER (arg_index);
3393+ CHECK_ISPLAYER (arg_attacker);
3394+
3395+ CBasePlayer *pPlayer = UTIL_PlayerByIndex (params[arg_index]);
3396+ CHECK_CONNECTED (pPlayer, arg_index);
3397+
3398+ if (!pPlayer->IsAlive ())
3399+ {
3400+ AMXX_LogError (amx, AMX_ERR_NATIVE, " %s: player %d not alive" , __FUNCTION__, params[arg_index]);
3401+ return FALSE ;
3402+ }
3403+
3404+ CBasePlayer *pAttacker = UTIL_PlayerByIndex (params[arg_attacker]);
3405+ CHECK_CONNECTED (pAttacker, arg_attacker);
3406+
3407+ if (!pAttacker->IsAlive ())
3408+ {
3409+ AMXX_LogError (amx, AMX_ERR_NATIVE, " %s: attacker %d not alive" , __FUNCTION__, params[arg_attacker]);
3410+ return FALSE ;
3411+ }
3412+
3413+ CAmxArgs args (amx, params);
3414+ pPlayer->CSPlayer ()->TakeDamageImpulse (pAttacker, args[arg_knockback_force], args[arg_vel_modifier]);
3415+
3416+ return TRUE ;
3417+ }
3418+
33783419AMX_NATIVE_INFO Misc_Natives_RG[] =
33793420{
33803421 { " rg_set_animation" , rg_set_animation },
@@ -3490,6 +3531,7 @@ AMX_NATIVE_INFO Misc_Natives_RG[] =
34903531 { " rg_player_relationship" , rg_player_relationship },
34913532
34923533 { " rg_send_death_message" , rg_send_death_message },
3534+ { " rg_player_takedamage_impulse" , rg_player_takedamage_impulse },
34933535
34943536 { nullptr , nullptr }
34953537};
0 commit comments