gmscripts.cpp: Inside MDB_SSGM_Player::Created: Commands->Attach_Script(obj,"IRAN_Fix_Pistol_Ammo",""); Outside of all scopes: void IRAN_Fix_Pistol_Ammo::Created(GameObject *obj) { Commands->Start_Timer(obj,this,0.1f,33); //this is needed to workaround shit not working inside ::Created } void IRAN_Fix_Pistol_Ammo::Timer_Expired(GameObject *obj, int number) { if ( number == 33) { Set_Max_Inventory_Bullets(obj,"Weapon_Pistol_Player",999); //appears to be needed Set_Bullets(obj,"Weapon_Pistol_Player",12); //this appears to need to be this amount Commands->Start_Timer(obj,this,1.0f,35); //fix refills, will run every one sec } if ( number == 35) { Set_Bullets(obj,"Weapon_Pistol_Player",-1); Commands->Start_Timer(obj,this,1.0f,35); //fix refills, will loop every one sec } } ScriptRegistrant IRAN_Fix_Pistol_Ammo_Registrant("IRAN_Fix_Pistol_Ammo",""); gmscripts.h: class IRAN_Fix_Pistol_Ammo : public ScriptImpClass { void Created(GameObject *obj); void Timer_Expired(GameObject *obj, int number); }; engine_weap.h: void Set_Max_Inventory_Bullets(GameObject *obj,const char *weapon,int bullets); //aded by iran engine_weap.cpp: void Set_Max_Inventory_Bullets(GameObject *obj,const char *weapon,int bullets) { if (!Commands->Get_ID(obj) || !obj) { return; } PhysicalGameObj *o2 = ((ScriptableGameObj *)obj)->As_PhysicalGameObj(); if (!o2) { return; } ArmedGameObj *o3 = o2->As_ArmedGameObj(); if (!o3) { return; } WeaponBagClass *w = o3->WeaponBag; int x = w->Vector.Count(); for (int i = 0;i < x;i++) { if (w->Vector[i]) { if (!_stricmp(w->Vector[i]->WeaponDef->Get_Name(),weapon)) { w->Vector[i]->WeaponDef->MaxInventoryRounds.Set(bullets); } } } }