public static void AddAssignedWeapons(Pawn pawn, AssignedWeaponContainer aw) { if (Settings.EnableAssignWeapons) { AssignedWeapons[pawn] = aw; } }
private static bool TryGetBestWeapon(DamageType dt, Thing equiped, AssignedWeaponContainer c, out ThingWithComps bestWeapon) { bestWeapon = null; DT toUse; if (equiped != null) { toUse = GetWeaponDamage(equiped.def); } else { toUse = new DT(DamageType.Blunt, -1f); } if (toUse.DamageType != dt || toUse.Power == -1f) { toUse.Power = -1f; foreach (var w in c.Weapons) { if (w.def.IsMeleeWeapon) { var p = GetWeaponDamage(w.def); if (p.DamageType == dt && p.Power > toUse.Power) { toUse.Power = p.Power; bestWeapon = w; } } } return(toUse.Power > 0f); } return(false); }
public static void UnequipPrimaryWeapon(Pawn pawn, AssignedWeaponContainer c) { ThingWithComps weapon = pawn?.equipment?.Primary; if (weapon == null) { return; } pawn.equipment.Remove(weapon); if (c != null && c.Contains(weapon)) { c.Add(weapon); return; } if (WorldComp.Add(weapon)) { return; } if (!BuildingUtil.DropSingleThing(weapon, pawn.Position, pawn.Map, false)) { Log.Warning("Failed to drop " + pawn.Name.ToStringShort + "'s primary weapon [" + pawn.equipment.Primary.Label + "]."); } }
public static void EquipWeapon(ThingWithComps weapon, Pawn pawn, AssignedWeaponContainer c) { if (pawn.equipment?.Primary != weapon) { UnequipPrimaryWeapon(pawn, c); pawn.equipment.AddEquipment(weapon); } }
private void StopRepairing() { if (this.beingRepaird != null) { AllWeaponsBeingRepaired.Remove(this.beingRepaird); this.beingRepaird = null; this.container = null; } }
public static bool TryGetAssignedWeapons(Pawn pawn, out AssignedWeaponContainer aw) { if (!Settings.EnableAssignWeapons) { aw = null; return(false); } return(AssignedWeapons.TryGetValue(pawn, out aw)); }
internal static bool EquipRanged(AssignedWeaponContainer c) { foreach (ThingWithComps w in c.Weapons) { if (w.def.IsRangedWeapon) { EquipWeapon(w, c.Pawn, c); return(true); } } return(false); }
private void StartRepairing() { #if AUTO_MENDER Log.Warning("Begin RepairChangeDresser.StartRepairing"); Log.Message(" Currently Being Repaired:"); foreach (Apparel a in AllApparelBeingRepaired) { Log.Message(" " + a.Label); } #endif this.OrderAttachedWeaponStorages(); foreach (AssignedWeaponContainer c in WorldComp.AssignedWeaponContainers) { foreach (ThingWithComps w in c.Weapons) { if (w.HitPoints < w.MaxHitPoints && !AllWeaponsBeingRepaired.Contains(w)) { this.beingRepaird = w; this.container = c; AllWeaponsBeingRepaired.AddLast(w); #if AUTO_MENDER Log.Warning("End RepairChangeDresser.StartRepairing -- " + a.Label); #endif return; } } } for (LinkedListNode <Building_WeaponStorage> n = this.AttachedWeaponStorages.First; n != null; n = n.Next) { Building_WeaponStorage ws = n.Value; foreach (ThingWithComps w in ws.GetWeapons(true)) { if (w.HitPoints < w.MaxHitPoints && !AllWeaponsBeingRepaired.Contains(w)) { this.beingRepaird = w; this.container = null; AllWeaponsBeingRepaired.AddLast(w); #if AUTO_MENDER Log.Warning("End RepairChangeDresser.StartRepairing -- " + a.Label); #endif return; } } } #if AUTO_MENDER Log.Warning("End RepairChangeDresser.StartRepairing -- No new repairs to start"); #endif }
public static bool CreateOrGetAssignedWeapons(Pawn pawn, out AssignedWeaponContainer aw) { if (!Settings.EnableAssignWeapons) { aw = null; return(false); } if (!AssignedWeapons.TryGetValue(pawn, out aw)) { aw = new AssignedWeaponContainer(); AssignedWeapons.Add(pawn, aw); } return(true); }
public static void InitializeAssignedWeapons() { if (Settings.EnableAssignWeapons && AssignedWeapons.Count == 0) { foreach (var p in Util.GetPawns(true)) { AssignedWeaponContainer a = new AssignedWeaponContainer() { Pawn = p.Pawn }; if (p.Pawn.equipment.Primary != null) { a.Add(p.Pawn.equipment.Primary); } AssignedWeapons.Add(p.Pawn, a); } } }