Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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"));
            }
        }
Пример #4
0
 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"));
     }
 }