#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#define SetPlayerBit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define ResetPlayerBit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
#define GetPlayerBit(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetWeaponId(%1,%2) set_pdata_int(%1, 30, %2, 4)
#define CLASS_TRUNKS 7
enum
{
WEAPON_NONE,
WEAPON_MELEE,
WEAPON_SWORD
};
new Alive;
new InMelee;
new Attacking;
new Trunks;
new Entity[33];
public plugin_init()
{
register_plugin("No Advanced Melee", "1.2", "hleV");
register_event("CurWeapon", "OnCurWeapon", "be", "1=1");
RegisterHam(Ham_Spawn, "player", "OnSpawn", 1);
RegisterHam(Ham_Killed, "player", "OnKilled", 1);
RegisterHam(Ham_Item_AddToPlayer, "weapon_melee", "OnAddToPlayer", 1);
RegisterHam(Ham_Item_Deploy, "weapon_melee", "OnDeploy", 1);
}
public client_PreThink(client)
{
if (!GetPlayerBit(Alive, client) || !GetPlayerBit(InMelee, client))
return;
if (entity_get_int(client, EV_INT_button) & IN_ATTACK2)
{
if (!GetPlayerBit(Attacking, client))
{
SetPlayerBit(Attacking, client);
SetWeaponId(Entity[client], GetPlayerBit(Trunks, client) ? WEAPON_SWORD : WEAPON_MELEE);
}
}
else if (GetPlayerBit(Attacking, client))
{
ResetPlayerBit(Attacking, client);
SetWeaponId(Entity[client], WEAPON_NONE);
}
}
public OnCurWeapon(client)
{
if (read_data(2) > WEAPON_SWORD)
{
ResetPlayerBit(InMelee, client);
return;
}
SetPlayerBit(InMelee, client);
if (entity_get_int(client, EV_INT_button) & IN_ATTACK2)
ResetPlayerBit(Attacking, client);
else
SetPlayerBit(Attacking, client);
}
public OnSpawn(client)
{
if (!is_user_alive(client))
{
ResetPlayerBit(Alive, client);
return;
}
SetPlayerBit(Alive, client);
ResetPlayerBit(InMelee, client);
get_user_team(client) == CLASS_TRUNKS ? SetPlayerBit(Trunks, client) : ResetPlayerBit(Trunks, client);
}
public OnKilled(victim)
if (!is_user_alive(victim))
ResetPlayerBit(Alive, victim);
public OnAddToPlayer(entity, client)
Entity[client] = entity;
public OnDeploy(entity)
SetWeaponId(entity, GetPlayerBit(Trunks, entity_get_edict(entity, EV_ENT_owner)) ? WEAPON_SWORD : WEAPON_MELEE);