Sprawdzałeś inne funkcje usuwania broni?
 
//funkcja usuwajaca wszsytkie bronie, wraz z nozem:
stock UsunWszystkieBronie(id){
	static ent
	ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))
	if (!pev_valid(ent)) return;
	
	dllfunc(DLLFunc_Spawn, ent)
	dllfunc(DLLFunc_Use, ent, id)
	engfunc(EngFunc_RemoveEntity, ent)
	return
}
albo znane wszystkim stripweapons?
#include <StripWeapons>
StripWeapons(id, Primary);
StripWeapons(id, Secondary);
StripWeapons(id, Knife);
StripWeapons(id, Grenades);
Nie wszyscy to wiedzą (ja na przykład doszedłem do tego sam w praktyce) ale ta funkcja w przypadku flashbanga zawiedzie, ponieważ zabierze mu broń, ale ammo jakie ma w granacie ( ammo w granacie 
) zostanie na poziomie na przykład 1, więc przy otrzymania granatu nawet w następnej rundzie zamiast jednego będzie mieć dwa (pod warunkiem, że nie umrze w międzyczasie 
), żeby pozbyć się tego buga wystarczy wyzerować ammo flasha przy zabieraniu granatów 
cs_set_user_bpammo(id,CSW_FLASHBANG,0)
i po problemie 
możesz ewentualnie usunąć konkretną broń, ale raczej nie polecam 
stock ham_fm_strip_weapon(id, weapon[]){
	if(!equal(weapon, "weapon_", 7)) 
		return 0;
	new wId = get_weaponid(weapon);
	if(!wId) 
		return 0;
	new wEnt;
	while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname", weapon)) && pev(wEnt, pev_owner) != id) {}
	if(!wEnt) 
		return 0;
	
	if(get_user_weapon(id) == wId) 
		ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt);
	
	if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt)) 
		return 0;
	ExecuteHamB(Ham_Item_Kill, wEnt);
	
	set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId));
	return 1;
}
Sprawdź inny sposób zabierania broni, amx lubi płatać figle 
 Pozdrawiam 
PS Sztuczne odrodzenia gracza są dość dziwne, dlatego sprawdź większe opóźnienie 