Beispiel #1
0
            static bool Prefix(CharDollBase __instance, UnitEntityData player)
            {
                var tr = Harmony12.Traverse.Create(__instance);

                tr.Property("CurrentUnit").SetValue(player);
                if (__instance.CurrentUnit == null)
                {
                    return(false);
                }


                foreach (EquipSlotBase slot in tr.Property("SlotList").GetValue <List <EquipSlotBase> >())
                {
                    slot.Clear();
                    slot.SetupInfo(player.Body);
                    if (player.Descriptor.IsPet)
                    {
                        if (!allowed_slots.Contains(slot.Type))
                        {
                            if (!slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Retain();
                            }
                            if (!slot.HasItem)
                            {
                                slot.ItemImage.color = new UnityEngine.Color(1.0f, 1.0f, 1.0f, 0.3f);
                            }
                        }
                        else
                        {
                            if (slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Release();
                            }
                        }
                    }
                }
                if (tr.Property("Room").GetValue() != null)
                {
                    tr.Property("Room").Method("SetupInfo", player).GetValue();
                }
                if (tr.Property("DollWeaponSets").GetValue() == null)
                {
                    return(false);
                }

                if (player.Descriptor.IsPet)
                {//remove additional weapon sets
                    for (int i = 1; i < player.Body.HandsEquipmentSets.Count; i++)
                    {
                        player.Body.HandsEquipmentSets[i] = player.Body.HandsEquipmentSets[0];
                    }
                }

                tr.Field("m_DollWeaponSets").Method("SetupInfo", player.Body).GetValue();

                return(false);
            }
            static bool Prefix(CharDollBase __instance, UnitEntityData player)
            {
                var tr = Harmony12.Traverse.Create(__instance);

                tr.Property("CurrentUnit").SetValue(player);
                if (__instance.CurrentUnit == null)
                {
                    return(false);
                }

                bool is_phantom  = player.Descriptor.Progression.GetClassLevel(Phantom.phantom_class) > 0;
                bool is_eidolon  = player.Descriptor.Progression.GetClassLevel(Eidolon.eidolon_class) > 0;
                bool is_animal   = player.Descriptor.Progression.GetClassLevel(Common.animal_class) > 0 || player.Descriptor.Progression.GetClassLevel(Common.dragon_class) > 0;
                bool is_humanoid = player.Descriptor.Progression.IsArchetype(Archetypes.UndeadLord.corpse_companion_archetype);

                bool is_serpentine = player.Descriptor.Progression.IsArchetype(Eidolon.serpentine_archetype);
                bool is_biped      = (is_eidolon &&
                                      !player.Descriptor.Progression.IsArchetype(Eidolon.quadruped_archetype) &&
                                      !is_serpentine) ||
                                     is_phantom ||
                                     is_humanoid;

                ;
                EquipSlotBase.SlotType[] allowed_slots = new EquipSlotBase.SlotType[0];

                bool no_slot_limitation = false;

                if (is_humanoid)
                {
                    no_slot_limitation = true;
                }
                else if (is_phantom)
                {
                    allowed_slots = allowed_slots_phantom;
                }
                else if (is_serpentine)
                {
                    allowed_slots = allowed_slots_serpentine;
                }
                else if (is_animal)
                {
                    allowed_slots = allowed_slots_animal;
                }
                else if (!is_biped)
                {
                    allowed_slots = allowed_slots_not_biped_eidolon;
                }
                else
                {
                    allowed_slots = allowed_slots_eidolon;
                }

                foreach (EquipSlotBase slot in tr.Property("SlotList").GetValue <List <EquipSlotBase> >())
                {
                    slot.Clear();
                    slot.SetupInfo(player.Body);
                    if (player.Descriptor.IsPet && !no_slot_limitation)
                    {
                        if (!allowed_slots.Contains(slot.Type))
                        {
                            if (!slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Retain();
                            }
                            if (!slot.HasItem)
                            {
                                slot.ItemImage.color = new UnityEngine.Color(1.0f, 1.0f, 1.0f, 0.3f);
                            }
                        }
                        else
                        {
                            if (slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Release();
                            }
                        }
                    }
                }
                if (tr.Property("Room").GetValue() != null)
                {
                    tr.Property("Room").Method("SetupInfo", player).GetValue();
                }
                if (tr.Property("DollWeaponSets").GetValue() == null)
                {
                    return(false);
                }

                if (player.Descriptor.IsPet && (!is_biped))
                {//remove additional weapon sets
                    for (int i = 1; i < player.Body.HandsEquipmentSets.Count; i++)
                    {
                        if (player.Body.HandsEquipmentSets[i].PrimaryHand?.MaybeItem != player.Body.HandsEquipmentSets[0].PrimaryHand?.MaybeItem ||
                            player.Body.HandsEquipmentSets[i].SecondaryHand?.MaybeItem != player.Body.HandsEquipmentSets[0].SecondaryHand?.MaybeItem)
                        {
                            player.Body.HandsEquipmentSets[i] = player.Body.HandsEquipmentSets[0].CloneObject();
                        }
                    }
                }

                tr.Field("m_DollWeaponSets").Method("SetupInfo", player.Body).GetValue();

                return(false);
            }
Beispiel #3
0
            static bool Prefix(CharDollBase __instance, UnitEntityData player)
            {
                var tr = Harmony12.Traverse.Create(__instance);

                tr.Property("CurrentUnit").SetValue(player);
                if (__instance.CurrentUnit == null)
                {
                    return(false);
                }

                bool is_serpentine = player.Descriptor.Progression.IsArchetype(Eidolon.serpentine_archetype);
                bool is_biped      = player.Blueprint.GetComponent <Eidolon.EidolonComponent>() != null &&
                                     !player.Descriptor.Progression.IsArchetype(Eidolon.quadruped_archetype) &&
                                     !is_serpentine;

                EquipSlotBase.SlotType[] allowed_slots;
                if (is_serpentine)
                {
                    allowed_slots = allowed_slots_serpentine;
                }
                else if (!is_biped)
                {
                    allowed_slots = allowed_slots_animal;
                }
                else
                {
                    allowed_slots = allowed_slots_eidolon;
                }

                foreach (EquipSlotBase slot in tr.Property("SlotList").GetValue <List <EquipSlotBase> >())
                {
                    slot.Clear();
                    slot.SetupInfo(player.Body);
                    if (player.Descriptor.IsPet)
                    {
                        if (!allowed_slots.Contains(slot.Type))
                        {
                            if (!slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Retain();
                            }
                            if (!slot.HasItem)
                            {
                                slot.ItemImage.color = new UnityEngine.Color(1.0f, 1.0f, 1.0f, 0.3f);
                            }
                        }
                        else
                        {
                            if (slot.Slot.Lock)
                            {
                                slot.Slot.Lock.Release();
                            }
                        }
                    }
                }
                if (tr.Property("Room").GetValue() != null)
                {
                    tr.Property("Room").Method("SetupInfo", player).GetValue();
                }
                if (tr.Property("DollWeaponSets").GetValue() == null)
                {
                    return(false);
                }

                if (player.Descriptor.IsPet && !is_biped)
                {//remove additional weapon sets
                    for (int i = 1; i < player.Body.HandsEquipmentSets.Count; i++)
                    {
                        player.Body.HandsEquipmentSets[i] = player.Body.HandsEquipmentSets[0];
                    }
                }

                tr.Field("m_DollWeaponSets").Method("SetupInfo", player.Body).GetValue();

                return(false);
            }