// Container for utility functions used by ACS and FraggleScript. class ScriptUtil play { //========================================================================== // // // //========================================================================== static int SetWeapon(Actor activator, class cls) { if(activator != NULL && activator.player != NULL && cls != null) { let item = Weapon(activator.FindInventory(cls)); if(item != NULL) { if(activator.player.ReadyWeapon == item) { // The weapon is already selected, so setweapon succeeds by default, // but make sure the player isn't switching away from it. activator.player.PendingWeapon = WP_NOCHANGE; return 1; } else { if(item.CheckAmmo(Weapon.EitherFire, false)) { // There's enough ammo, so switch to it. activator.player.PendingWeapon = item; return 1; } } } } return 0; } //========================================================================== // // // //========================================================================== static void SetMarineWeapon(Actor activator, int tid, int marineweapontype) { if (tid != 0) { let it = ActorIterator.Create(tid, 'ScriptedMarine'); ScriptedMarine marine; while ((marine = ScriptedMarine(it.Next())) != NULL) { marine.SetWeapon(marineweapontype); } } else { let marine = ScriptedMarine(activator); if (marine != null) { marine.SetWeapon(marineweapontype); } } } //========================================================================== // // // //========================================================================== static void SetMarineSprite(Actor activator, int tid, class type) { if (type != NULL) { if (tid != 0) { let it = ActorIterator.Create(tid, 'ScriptedMarine'); ScriptedMarine marine; while ((marine = ScriptedMarine(it.Next())) != NULL) { marine.SetSprite(type); } } else { let marine = ScriptedMarine(activator); if (marine != null) { marine.SetSprite(type); } } } else { Console.Printf ("Unknown actor type: %s\n", type.GetClassName()); } } //========================================================================== // // // //========================================================================== static int PlayerMaxAmmo(Actor activator, class type, int newmaxamount = int.min, int newbpmaxamount = int.min) { if (activator == null) return 0; let ammotype = (class)(type); if (ammotype == null) return 0; if (newmaxamount != int.min) { let iammo = Ammo(activator.FindInventory(ammotype)); if(newmaxamount < 0) newmaxamount = 0; if (!iammo) { activator.GiveAmmo(ammotype, 1); iammo = Ammo(activator.FindInventory(ammotype)); if (iammo) iammo.Amount = 0; } for (Inventory item = activator.Inv; item != NULL; item = item.Inv) { if (item is 'BackpackItem') { if (newbpmaxamount == int.min) newbpmaxamount = newmaxamount * 2; break; } } if (iammo) { iammo.MaxAmount = newmaxamount; iammo.BackpackMaxAmount = newbpmaxamount; } } let rammo = activator.FindInventory(ammotype); if (rammo) return rammo.maxamount; else return GetDefaultByType(ammotype).MaxAmount; } }