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