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); } }
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); }