public static bool Prefix(VisEquipment __instance, int itemHash, int variant, Transform joint, ref GameObject __result, ref SkinnedMeshRenderer ___m_bodyModel, bool enableEquipEffects = true) { if (!MobConfigManager.IsControllableMob(__instance.name)) { return(true); } GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); if (itemPrefab == null) { __result = null; return(false); } if (itemPrefab.transform.childCount == 0) { __result = null; return(false); } Transform child = null; for (int i = 0; i < itemPrefab.transform.childCount; i++) { child = itemPrefab.transform.GetChild(i); if (child.gameObject.name == "attach" || child.gameObject.name == "attach_skin") { break; } } if (null == child) { child = itemPrefab.transform.GetChild(0); } var gameObject = child.gameObject; if (gameObject == null) { __result = null; return(false); } GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject); gameObject2.SetActive(value: true); Collider[] componentsInChildren = gameObject2.GetComponentsInChildren <Collider>(); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].enabled = false; } gameObject2.transform.SetParent(joint); gameObject2.transform.localPosition = Vector3.zero; gameObject2.transform.localRotation = Quaternion.identity; __result = gameObject2; return(false); }
static bool Prefix(Tameable __instance, ref bool __result, Humanoid user, bool hold, ZNetView ___m_nview, ref Character ___m_character, ref float ___m_lastPetTime) { if (!MobConfigManager.IsControllableMob(__instance.name)) { return(true); } if (!___m_nview.IsValid()) { __result = false; return(true); } string hoverName = ___m_character.GetHoverName(); if (___m_character.IsTamed()) { if (hold) { TextInput.instance.RequestText(new MyTextReceiver(___m_character), "Name", 15); __result = false; return(false); } if (Time.time - ___m_lastPetTime > 1f) { ___m_lastPetTime = Time.time; __instance.m_petEffect.Create(___m_character.GetCenterPoint(), Quaternion.identity); if (__instance.m_commandable) { typeof(Tameable).GetMethod("Command", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { user }); } else { user.Message(MessageHud.MessageType.Center, hoverName + " $hud_tamelove"); } __result = true; return(false); } __result = false; return(false); } __result = false; return(false); }
static void Postfix(Character __instance, ref ZNetView ___m_nview) { if (MobConfigManager.IsControllableMob(__instance.name)) { string uniqueId = GetOrCreateUniqueId(___m_nview); var mobInfo = MobConfigManager.GetMobConfig(__instance.name); Tameable tameable = GetOrAddTameable(__instance); tameable.m_tamingTime = mobInfo.TamingTime; tameable.m_commandable = true; AddVisualEquipmentCapability(__instance); ___m_nview.Register <string, string>(Constants.Z_UpdateCharacterHUD, RPC_UpdateCharacterName); var ai = __instance.GetBaseAI() as MonsterAI; if (__instance.IsTamed()) { try { MobManager.RegisterMob(__instance, uniqueId, mobInfo.AIType, mobInfo.AIConfig); } catch (ArgumentException e) { Debug.LogError($"Failed to register Mob AI ({mobInfo.AIType}). {e.Message}"); return; } __instance.m_faction = Character.Faction.Players; ai.m_consumeItems.Clear(); ai.m_consumeItems.AddRange(mobInfo.PostTameConsumables); ai.m_consumeSearchRange = mobInfo.AIConfig.Awareness * 5; ai.m_randomMoveRange = mobInfo.AIConfig.Mobility * 2; ai.m_randomMoveInterval = 15 - mobInfo.AIConfig.Mobility; string givenName = ___m_nview?.GetZDO()?.GetString(Constants.Z_GivenName); if (!string.IsNullOrEmpty(givenName)) { __instance.m_name = givenName; } } else { tameable.m_fedDuration = mobInfo.PreTameFeedDuration; ai.m_consumeItems.Clear(); ai.m_consumeItems.AddRange(mobInfo.PreTameConsumables); } } }
static void Postfix(MonsterAI __instance, ZNetView ___m_nview, Character ___m_character) { if (MobConfigManager.IsControllableMob(__instance.name)) { var mobInfo = MobConfigManager.GetMobConfig(__instance.name); __instance.m_consumeItems.Clear(); __instance.m_consumeItems.AddRange(mobInfo.PostTameConsumables); __instance.m_consumeSearchRange = 50; ___m_character.m_faction = Character.Faction.Players; try { var uniqueId = ___m_nview.GetZDO().GetString(Constants.Z_CharacterId); MobManager.RegisterMob(___m_character, uniqueId, mobInfo.AIType, mobInfo.AIConfig); } catch (ArgumentException e) { Debug.LogError($"Failed to register Mob AI ({mobInfo.AIType}). {e.Message}"); return; } } }
static bool Prefix(Tameable __instance, ref string __result, ZNetView ___m_nview, Character ___m_character) { if (!MobConfigManager.IsControllableMob(__instance.name)) { return(true); } if (!___m_character.IsTamed()) { return(true); } if (!___m_nview.IsValid()) { __result = string.Empty; return(true); } string aiStatus = ___m_nview.GetZDO().GetString(Constants.Z_AiStatus) ?? Traverse.Create(__instance).Method("GetStatusString").GetValue() as string; string str = Localization.instance.Localize(___m_character.GetHoverName()); str += Localization.instance.Localize(" ( $hud_tame, " + aiStatus + " )"); __result = str + Localization.instance.Localize("\n[<color=yellow><b>$KEY_Use</b></color>] $hud_pet" + "\n[<color=yellow>Hold E</color>] to change name"); return(false); }