/// <summary> /// Adds new creature of race as actor. /// </summary> /// <param name="name"></param> /// <param name="creature"></param> public void AddActor(string name, int raceId) { var creature = new NPC(); creature.Race = raceId; creature.LoadDefault(); creature.Name = creature.RaceData.Name; creature.Color1 = creature.RaceData.Color1; creature.Color2 = creature.RaceData.Color2; creature.Color3 = creature.RaceData.Color3; creature.Height = creature.RaceData.Size; this.Actors[name] = creature; }
/// <summary> /// Spawns a creature. /// </summary> /// <param name="raceId"></param> /// <param name="regionId"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="spawnId"></param> /// <returns></returns> public Creature Spawn(int raceId, int regionId, int x, int y, int spawnId, bool active, bool effect) { // Create NPC var creature = new NPC(); creature.Race = raceId; creature.LoadDefault(); creature.SpawnId = spawnId; creature.Name = creature.RaceData.Name; creature.Color1 = creature.RaceData.Color1; creature.Color2 = creature.RaceData.Color2; creature.Color3 = creature.RaceData.Color3; creature.Height = creature.RaceData.Size; creature.Life = creature.LifeMaxBase = creature.RaceData.Life; creature.State = (CreatureStates)creature.RaceData.DefaultState; creature.Direction = (byte)RandomProvider.Get().Next(256); // Set drops creature.Drops.GoldMin = creature.RaceData.GoldMin; creature.Drops.GoldMax = creature.RaceData.GoldMax; creature.Drops.Add(creature.RaceData.Drops); // Give skills foreach (var skill in creature.RaceData.Skills) creature.Skills.Add((SkillId)skill.SkillId, (SkillRank)skill.Rank, creature.Race); // Set AI if (!string.IsNullOrWhiteSpace(creature.RaceData.AI) && creature.RaceData.AI != "none") { creature.AI = this.GetAi(creature.RaceData.AI, creature); if (creature.AI == null) Log.Warning("Spawn: Missing AI '{0}' for '{1}'.", creature.RaceData.AI, raceId); } // Warp to spawn point if (!creature.Warp(regionId, x, y)) { Log.Error("Failed to spawn '{0}'s.", raceId); return null; } // Activate AI at least once if (creature.AI != null && active) creature.AI.Activate(0); // Spawn effect if (effect) Send.SpawnEffect(SpawnEffect.Monster, creature.RegionId, x, y, creature, creature); return creature; }