Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
const m_pPlayer = 41;
const m_pPlayer_osdiff = 4;
new g_oldWaterLevel;
new bool:g_isFiringUnderwater;
public plugin_init() {
register_plugin("Shoot underwater enabler", "1.0", "PRoSToC0der");
static const weaponClassnames[][] = {
"weapon_galil",
"weapon_famas",
"weapon_xm1014",
"weapon_m3"
};
for (new i = 0; i < sizeof(weaponClassnames); ++i) {
RegisterHam(Ham_Weapon_PrimaryAttack, weaponClassnames[i], "WeaponFiring", .Post = false);
RegisterHam(Ham_Weapon_PrimaryAttack, weaponClassnames[i], "WeaponFired", .Post = true);
}
RegisterHam(Ham_Item_PostFrame, "weapon_famas", "WeaponFiring", .Post = false);
RegisterHam(Ham_Item_PostFrame, "weapon_famas", "WeaponFired", .Post = true);
register_forward(FM_PlaybackEvent, "PlaybackingEvent", ._post = false);
}
public PlaybackingEvent(flags, invoker, eventIndex, Float:delay, Float:origin[3], Float:angles[3],
Float:floatParam1, Float:floatParam2, integerParam1, integerParam2, bool:booleanParam1, bool:booleanParam2)
{
if (!g_isFiringUnderwater) {
return FMRES_IGNORED;
}
playback_event(flags & ~FEV_NOTHOST, invoker, eventIndex, delay, origin, angles,
floatParam1, floatParam2, integerParam1, integerParam2, booleanParam1, booleanParam2);
return FMRES_SUPERCEDE;
}
public WeaponFiring(weapon) {
new owner = get_pdata_cbase(weapon, m_pPlayer, m_pPlayer_osdiff);
new waterLevel = pev(owner, pev_waterlevel);
if (waterLevel == 3) {
g_oldWaterLevel = waterLevel;
set_pev(owner, pev_waterlevel, 0);
g_isFiringUnderwater = true;
}
}
public WeaponFired(weapon) {
if (g_isFiringUnderwater) {
g_isFiringUnderwater = false;
new owner = get_pdata_cbase(weapon, m_pPlayer, m_pPlayer_osdiff);
set_pev(owner, pev_waterlevel, g_oldWaterLevel);
}
}