コード例 #1
0
 static void Postfix(DollRoom __instance, UnitViewHandsEquipment ___m_AvatarHands, UnitEntityData ___m_Unit)
 {
     try
     {
         if (___m_Unit == null)
         {
             return;
         }
         var characterSettings = Main.settings.GetCharacterSettings(___m_Unit);
         if (characterSettings == null)
         {
             return;
         }
         foreach (var isOffhand in new bool[] { true, false })
         {
             WeaponParticlesSnapMap weaponParticlesSnapMap = ___m_AvatarHands?.GetWeaponModel(isOffhand)?.GetComponent <WeaponParticlesSnapMap>();
             if (weaponParticlesSnapMap)
             {
                 UnityEngine.Object x = weaponParticlesSnapMap;
                 UnityEngine.Object y = isOffhand ?
                                        ___m_Unit?.Body?.SecondaryHand.FxSnapMap :
                                        ___m_Unit?.Body?.PrimaryHand.FxSnapMap;
                 if (x == y)
                 {
                     var weapon = isOffhand ?
                                  ___m_Unit?.Body?.SecondaryHand?.MaybeItem :
                                  ___m_Unit?.Body?.PrimaryHand?.MaybeItem;
                     WeaponEnchantments.TryGetValue(weapon, out List <GameObject> fxObjects);
                     if (fxObjects != null)
                     {
                         foreach (var fxObject in fxObjects)
                         {
                             UnscaleFxTimes(__instance, fxObject);
                         }
                     }
                 }
             }
         }
     } catch (Exception ex)
     {
         Main.DebugError(ex);
     }
 }
コード例 #2
0
        static bool Prefix(Character originalAvatar, string dollName, DollRoom __instance, ref Character __result, Transform ___m_CharacterPlaceholder)
        {
            try
            {
                Character character = new GameObject(string.Format("Doll [{0}]", dollName)).AddComponent <Character>();
                character.transform.localScale = originalAvatar.transform.localScale;
                character.IsInDollRoom         = true;
                character.AnimatorPrefab       = originalAvatar.AnimatorPrefab;
                character.Skeleton             = originalAvatar.Skeleton;
                character.AnimationSet         = originalAvatar.AnimationSet;
                Action <Character> callback = (Character c) => AccessTools.Method(__instance.GetType(), "OnCharacterUpdated").Invoke(__instance, new object[] { c });
                character.OnUpdated += callback;
                //Copy BakedCharacter
                character.BakedCharacter = originalAvatar.BakedCharacter;
                character.CopyEquipmentFrom(originalAvatar);

                var inventory_scale = __instance?.Unit?.Blueprint?.GetComponent <ChangeUnitScaleForInventory>();
                if (inventory_scale != null)
                {
                    character.transform.localScale = originalAvatar.transform.localScale * inventory_scale.scale_factor;
                }
                character.Start();
                character.Animator.gameObject.AddComponent <UnitAnimationCallbackReceiver>();

                character.Animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
                if (character.AnimationManager)
                {
                    character.AnimationManager.PlayableGraph.SetTimeUpdateMode(DirectorUpdateMode.UnscaledGameTime);
                    character.AnimationManager.IsInCombat = true;
                    character.AnimationManager.Tick();
                }
                character.transform.SetParent(___m_CharacterPlaceholder, false);
                character.Mirror = originalAvatar.Mirror;
                character.transform.localRotation = Quaternion.Euler(0f, (float)((!originalAvatar.Mirror) ? -45 : 45), 0f);
                __result = character;
            }
            catch (Exception ex)
            {
                Main.logger.Log(ex.ToString());
            }
            return(false);
        }