Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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);
                    }
                }
            }
Exemplo n.º 4
0
 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;
         }
     }
 }
Exemplo n.º 5
0
            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);
            }