コード例 #1
0
 public static void AddAssignedWeapons(Pawn pawn, AssignedWeaponContainer aw)
 {
     if (Settings.EnableAssignWeapons)
     {
         AssignedWeapons[pawn] = aw;
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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 + "].");
            }
        }
コード例 #4
0
 public static void EquipWeapon(ThingWithComps weapon, Pawn pawn, AssignedWeaponContainer c)
 {
     if (pawn.equipment?.Primary != weapon)
     {
         UnequipPrimaryWeapon(pawn, c);
         pawn.equipment.AddEquipment(weapon);
     }
 }
コード例 #5
0
 private void StopRepairing()
 {
     if (this.beingRepaird != null)
     {
         AllWeaponsBeingRepaired.Remove(this.beingRepaird);
         this.beingRepaird = null;
         this.container    = null;
     }
 }
コード例 #6
0
 public static bool TryGetAssignedWeapons(Pawn pawn, out AssignedWeaponContainer aw)
 {
     if (!Settings.EnableAssignWeapons)
     {
         aw = null;
         return(false);
     }
     return(AssignedWeapons.TryGetValue(pawn, out aw));
 }
コード例 #7
0
 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);
 }
コード例 #8
0
        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
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 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);
         }
     }
 }