You should fix the following problems;
GameObject* checkplayerobj = Commands->Find_Object(number);
if ( IsInsideZone(obj,checkplayerobj))
You passed <number> as a timer parameter, so at this point you don't know that the gameobject referenced by that number still exists. Your code will crash if checkplayerobj is NULL after the call to Find_Object. Change it to
GameObject* checkplayerobj = Commands->Find_Object(number);
if ( NULL != checkplayerobj && IsInsideZone(obj,checkplayerobj))
const char* currentweapon = Get_Current_Weapon(checkplayerobj);
if (strcmp(currentweapon, i) == 0 && Get_Current_Bullets(checkplayerobj) > 0)
NULL is a valid return value from Get_Current_Weapon, again leading to a potential crash. Fix it by checking for NULL before using currentweapon
const char* currentweapon = Get_Current_Weapon(checkplayerobj);
if (NULL != currentweapon && strcmp(currentweapon, i) == 0 && Get_Current_Bullets(checkplayerobj) > 0)
Also fix this in your Remove_Weapon_Safely function (which doesn't appear to be called anywhere?)
Commands->Select_Weapon(checkplayerobj,"");
Commands->Select_Weapon(checkplayerobj,i);
This would appear to be redundant, why call Select_Weapon twice?