Hello guys, based on some
research from Bacardi I have created a stock which will safely remove clients weapons without crashes, this is better than RemovePlayerItem and from current testing my servers have not crashed once yet.
So instead of doing:
PHP Code:
RemovePlayerItem(iClient, iWeapon);
AcceptEntityInput(iWeapon, "Kill");
You would do this:
PHP Code:
SafeRemoveWeapon(iClient, iWeapon); // True on success.
PHP Code:
stock bool SafeRemoveWeapon(int iClient, int iWeapon)
{
if (!IsValidEntity(iWeapon) || !IsValidEdict(iWeapon)) {
return false;
}
if (!HasEntProp(iWeapon, Prop_Send, "m_hOwnerEntity")) {
return false;
}
int iOwnerEntity = GetEntPropEnt(iWeapon, Prop_Send, "m_hOwnerEntity");
if (iOwnerEntity != iClient) {
SetEntPropEnt(iWeapon, Prop_Send, "m_hOwnerEntity", iClient);
}
CS_DropWeapon(iClient, iWeapon, false);
if (HasEntProp(iWeapon, Prop_Send, "m_hWeaponWorldModel")) {
int iWorldModel = GetEntPropEnt(iWeapon, Prop_Send, "m_hWeaponWorldModel");
if (IsValidEdict(iWorldModel) && IsValidEntity(iWorldModel)) {
if (!AcceptEntityInput(iWorldModel, "Kill")) {
return false;
}
}
}
if (!AcceptEntityInput(iWeapon, "Kill")) {
return false;
}
return true;
}