public Monster(Xml.Creature creature, Xml.Spawn spawn, int map, Loot loot = null) { _actionQueue = new ConcurrentQueue <MobAction>(); _spawn = spawn; var buffed = Rng.Next() > 50; if (buffed) { _variance = (Rng.NextDouble() * _spawn.Variance) + 1; } else { _variance = 1 - (Rng.NextDouble() * _spawn.Variance); } Name = creature.Name; Sprite = creature.Sprite; World = Game.World; Map = Game.World.WorldData.Get <Map>(map); Stats.Level = spawn.Stats.Level; Stats.BaseHp = VariantHp; Stats.Hp = VariantHp; Stats.BaseMp = VariantMp; Stats.Mp = VariantMp; DisplayText = creature.Description; Stats.BaseStr = VariantStr; Stats.BaseInt = VariantInt; Stats.BaseWis = VariantWis; Stats.BaseCon = VariantCon; Stats.BaseDex = VariantDex; _castables = spawn.Castables; Stats.BaseDefensiveElement = spawn.GetDefensiveElement(); Stats.BaseDefensiveElement = spawn.GetOffensiveElement(); _loot = loot; if (spawn.Flags.HasFlag(Xml.SpawnFlags.AiDisabled)) { IsHostile = false; } else { IsHostile = _random.Next(0, 8) < 2; } if (spawn.Flags.HasFlag(Xml.SpawnFlags.MovementDisabled)) { ShouldWander = false; } else { ShouldWander = IsHostile == false; } ThreatInfo = new ThreatInfo(); DeathProcessed = false; }
public Monster(Xml.Creature creature, Xml.Spawn spawn, int map, Loot loot = null) { _spawn = spawn; var buffed = Rng.Next() > 50; if (buffed) { _variance = (Rng.NextDouble() * _spawn.Variance) + 1; } else { _variance = 1 - (Rng.NextDouble() * _spawn.Variance); } Name = creature.Name; Sprite = creature.Sprite; World = Game.World; Map = Game.World.WorldData.Get <Map>(map); Stats.Level = spawn.Stats.Level; Stats.BaseHp = VariantHp; Stats.Hp = VariantHp; Stats.BaseMp = VariantMp; Stats.Mp = VariantMp; DisplayText = creature.Description; Stats.BaseStr = VariantStr; Stats.BaseInt = VariantInt; Stats.BaseWis = VariantWis; Stats.BaseCon = VariantCon; Stats.BaseDex = VariantDex; _castables = spawn.Castables; Stats.BaseDefensiveElement = spawn.GetDefensiveElement(); Stats.BaseDefensiveElement = spawn.GetOffensiveElement(); _loot = loot; //until intents are fixed, this is how this is going to be done. IsHostile = _random.Next(0, 7) < 2; ShouldWander = IsHostile == false; }
public new static ChatCommandResult Run(User user, params string[] args) { if (Game.World.WorldData.TryGetValue(args[0], out Xml.Creature creature)) { var b = int.TryParse(args[1], out int n); if (b) { var rand = new Random(); var map = Game.World.WorldData.Get <Map>(user.Map.Id); for (var i = 0; i < n; i++) { Xml.Spawn spawn = new Xml.Spawn(); spawn.Castables = new List <Xml.SpawnCastable>(); spawn.Stats.Hp = 100; spawn.Stats.Mp = 100; spawn.Stats.Str = 3; spawn.Stats.Int = 3; spawn.Stats.Wis = 3; spawn.Stats.Con = 3; spawn.Stats.Dex = 3; spawn.Loot.Xp = 1; spawn.Loot.Gold = new Xml.LootGold { Min = 1, Max = 1 }; Monster newMob = new Monster(creature, spawn, user.Location.MapId); user.World.Insert(newMob); user.Map.Insert(newMob, (byte)rand.Next(0, map.X), (byte)rand.Next(0, map.Y)); } } return(Success($"{creature.Name} spawned.")); } else { return(Fail("Creature {args[0]} not found")); } }
public new static ChatCommandResult Run(User user, params string[] args) { if (Game.World.WorldData.TryGetValue(args[0], out Xml.Creature creature)) { Xml.Spawn spawn = new Xml.Spawn(); spawn.Castables = new List <Xml.SpawnCastable>(); spawn.Stats.Hp = 100; spawn.Stats.Mp = 100; spawn.Stats.Str = 3; spawn.Stats.Int = 3; spawn.Stats.Wis = 3; spawn.Stats.Con = 3; spawn.Stats.Dex = 3; spawn.Loot.Xp = 1; spawn.Loot.Gold = new Xml.LootGold { Min = 1, Max = 1 }; if (args.Length >= 2) { spawn.Stats.Hp = uint.Parse(args[1]); } if (args.Length >= 3) { spawn.Stats.Mp = uint.Parse(args[2]); } if (args.Length >= 4) { spawn.Stats.Str = byte.Parse(args[3]); } if (args.Length >= 5) { spawn.Stats.Int = byte.Parse(args[4]); } if (args.Length >= 6) { spawn.Stats.Wis = byte.Parse(args[5]); } if (args.Length >= 7) { spawn.Stats.Con = byte.Parse(args[6]); } if (args.Length >= 8) { spawn.Stats.Dex = byte.Parse(args[7]); } if (args.Length >= 9) { spawn.Loot.Xp = UInt32.Parse(args[8]); } if (args.Length >= 10) { spawn.Loot.Gold.Min = UInt32.Parse(args[9]); spawn.Loot.Gold.Max = UInt32.Parse(args[9]); } Monster newMob = new Monster(creature, spawn, user.Location.MapId); user.World.Insert(newMob); user.Map.Insert(newMob, user.X, user.Y); return(Success($"{creature.Name} spawned.")); } else { return(Fail("Creature {args[0]} not found")); } }