Exemple #1
0
        private void UpdateFloor()
        {
            bool changeFloor = false;

            switch (EventCount())
            {
            case 40:
                _floorState = ChaosCastles.Ground;
                break;

            case 30:
                _floorState.Inflate(new Size(4, 4));
                changeFloor = true;
                _trapStatus = 8;
                break;

            case 20:
                _floorState.Inflate(new Size(4, 4));
                changeFloor = true;
                _trapStatus = 9;
                break;

            case 10:
                _floorState.Inflate(new Size(4, 4));
                changeFloor = true;
                _trapStatus = 10;
                break;
            }

            if (changeFloor)
            {
                var ground = ChaosCastles.Ground;
                var up     = new Rectangle(ground.X, ground.Y, ground.Width, _floorState.Y - ground.Y);
                var down   = new Rectangle(ground.X, ground.Y + up.Height + _floorState.Height, ground.Width, _floorState.Y - ground.Y);
                var left   = new Rectangle(ground.X, ground.Y, _floorState.X - ground.X, ground.Height);
                var right  = new Rectangle(ground.X + left.Width + _floorState.Width, ground.Y, _floorState.X - ground.X, ground.Height);

                _mapInfo.AddAttribute(MapAttributes.Hide, up).Wait();
                _mapInfo.AddAttribute(MapAttributes.Hide, down).Wait();
                _mapInfo.AddAttribute(MapAttributes.Hide, left).Wait();
                _mapInfo.AddAttribute(MapAttributes.Hide, right).Wait();
                SendSatus(_trapStatus);

                _players
                .Where(x => x.Eventer)
                .Where(x => !_floorState.Contains(x.Player.Character.Position))
                .ToList()
                .ForEach(x => x.Player.Character.Health = 0.0f);
            }
        }
Exemple #2
0
        public override void OnMonsterDead(object sender, EventArgs eventArgs)
        {
            var mob = sender as Monster;

            for (var i = 0; i < _fortressGates.Count; i++)
            {
                if (_fortressGates[i].monster == mob)
                {
                    _ = _map.AddAttribute(MapAttributes.Unknow, _fortressAtt[i]);

                    if (i != 0)
                    {
                        _fortressGates[i + 1].monster.Type = ObjectType.Gate;
                    }

                    return;
                }
            }


            mob.Active = false;
            _activeMobs--;
            _logger.Information("Monster {0} dead, left {1} mobs", mob.Info.Name, _activeMobs);
            if (_activeMobs == 0)
            {
                _fortressGates[1].monster.Type = ObjectType.Gate;
            }
        }
Exemple #3
0
        private async void SetGateState(Monster mob, bool enable)
        {
            if (_map == null)
            {
                return;
            }

            Rectangle rect = new Rectangle(mob.Position.X - 3, mob.Position.Y - 2, 3, 4);

            switch (mob.Direction)
            {
            case 1:
                rect = new Rectangle(mob.Position.X - 2, mob.Position.Y, 4, 3);
                break;

            case 5:
                rect = new Rectangle(mob.Position.X - 2, mob.Position.Y - 3, 4, 3);
                break;

            case 3:
                rect = new Rectangle(mob.Position.X - 3, mob.Position.Y - 2, 3, 4);
                break;

            case 7:
                rect = new Rectangle(mob.Position.X, mob.Position.Y - 2, 3, 4);
                break;
            }
            if (enable)
            {
                await _map.AddAttribute(MapAttributes.Unknow, rect);
            }
            else
            {
                await _map.RemoveAttribute(MapAttributes.Unknow, rect);
            }
        }