public void Modify(GameObject entity, ZDO entityZdo)
    {
        var character = ComponentCache.Get <Character>(entity);

        if (character is null)
        {
            return;
        }

        string aiConfig = "{}";

        if (!string.IsNullOrWhiteSpace(Config))
        {
            aiConfig = Config;
        }

        try
        {
            MobManager.RegisterMob(character, Guid.NewGuid().ToString(), AiName, aiConfig);

            Log.LogTrace($"Set AI '{AiName}' for spawn '{entity.name}'.");
        }
        catch (Exception e)
        {
            Log.LogError($"Failure while attempting to set AI '{AiName}' for spawn '{entity.name}'", e);
        }
    }
示例#2
0
        public Mob(MobManager mobManager, PhysicalBody physicalBody)
        {
            IsDestroyed = false;

            MobManager   = mobManager;
            PhysicalBody = physicalBody;
            if (PhysicalBody != null)
            {
                PositionInWorldByUpdate  = PositionInWorld;
                PositionOnScreenByUpdate = PositionOnScreen;
                UpdateCollisionRectangle();
            }
            SetWorldLayer(3);
            MobManager.RegisterMob(this);

            IsDrawEnabled   = true;
            IsUpdateEnabled = true;
            IsCollidable    = true;

            Direction = Vector2.Zero;

            UseHitBox         = false;
            NearbyMobs        = new List <Mob>();
            StepsUntilRefresh = RefreshOffset++ % 20;
        }
示例#3
0
 // Start is called before the first frame update (setup mob here)
 void Start()
 {
     // Programatically retrieve manager
     manager = GameObject.FindWithTag("MobManager").GetComponent <MobManager>();
     // Set the age to zero
     _age = 0.0;
     // Initialize the rigidBody
     //rigidBody = GameObject.AddComponent<Rigidbody2D>();
     // Register mob in manager
     manager.RegisterMob(this);
     // Call specific start on subclasses
     StartSpecific();
 }
示例#4
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);
                    }
                }
            }
示例#5
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;
         }
     }
 }