Esempio n. 1
0
 private void SetMapEnemy(MapEnemy mapEnemy)
 {
     _mapEnemy  = mapEnemy;
     _enemyData = EnemyData.GetEnemy(mapEnemy.GetEnemyID());
     SetSpriteID(_enemyData.SpriteID);
     SetRealPosition();
     SetYFrame((int)_mapEnemy.Direction);
 }
Esempio n. 2
0
 public MapEnemyComponent(Entity entity, MapEnemy mapEnemy)
     : base(entity)
 {
     SetAnimating(false);
     SetXFrames(4);
     SetYFrames(4);
     SetMapEnemy(mapEnemy);
     _spriteTimer    = 0f;
     _spriteTimerMax = 0.3f;
 }
Esempio n. 3
0
        //public void AddMapPlayer()

        public void AddMapEnemy(MapEnemy mapEnemy, bool addToMap = true)
        {
            Entity entity = Entity.CreateInstance(GameState.Instance.EntityManager);

            entity.GetTransform().Parent = this.Parent.GetTransform();
            new MapEnemyComponent(entity, mapEnemy);
            EnemyEntites.Add(entity);
            if (addToMap)
            {
                _mapInstance.AddMapEnemy(mapEnemy);
            }
        }
Esempio n. 4
0
        private void OnAddMapEnemy(MapEnemy mapEnemy, int index)
        {
            ServerCommand serverCommand = new ServerCommand(ServerCommand.CommandType.AddMapEnemy);

            serverCommand.SetParameter("EnemyID", mapEnemy.GetEnemyID());
            serverCommand.SetParameter("MapID", _mapID);
            serverCommand.SetParameter("MapX", mapEnemy.MapX);
            serverCommand.SetParameter("MapY", mapEnemy.MapY);
            serverCommand.SetParameter("OnBridge", mapEnemy.OnBridge);

            for (int i = 0; i < _clients.Count; i++)
            {
                _clients[i].AddServerCommand(serverCommand);
            }
        }
Esempio n. 5
0
    public GameObject createEnemies(int size, bool provideLabel)
    {
        GameObject enemyCrowd = new GameObject(m_Region.m_RegionName + " Enemies (size: " + size + ")");

        //Set enemy info
        MapEnemy mapEnemyScript = enemyCrowd.AddComponent <MapEnemy>();

        mapEnemyScript.m_EnemyManager = this;
        mapEnemyScript.m_CrowdSize    = size;
        mapEnemyScript.m_AliveTime    = (float)Random.Range(15, 25);
        enemyCrowd.transform.SetParent(enemyContainer.transform);
        mapEnemyScript.SetEnemyImage();

        if (provideLabel)
        {
            createLabel(enemyCrowd, "Enemy Spawned!", 2f);
        }

        return(enemyCrowd);
    }
Esempio n. 6
0
        private void OnUpdateMapEnemy(MapEnemy mapEnemy, int index)
        {
            if (mapEnemy.Changed)
            {
                ServerCommand serverCommand = new ServerCommand(ServerCommand.CommandType.UpdateMapEnemy);
                serverCommand.SetParameter("EnemyIndex", index);
                serverCommand.SetParameter("MapID", _mapID);
                serverCommand.SetParameter("HP", mapEnemy.HP);
                serverCommand.SetParameter("MapX", mapEnemy.MapX);
                serverCommand.SetParameter("MapY", mapEnemy.MapY);
                serverCommand.SetParameter("RealX", mapEnemy.RealX);
                serverCommand.SetParameter("RealY", mapEnemy.RealY);
                serverCommand.SetParameter("Direction", (int)mapEnemy.Direction);
                serverCommand.SetParameter("OnBridge", mapEnemy.OnBridge);
                serverCommand.SetParameter("Dead", mapEnemy.Dead);

                for (int i = 0; i < _clients.Count; i++)
                {
                    _clients[i].AddServerCommand(serverCommand);
                }
            }
        }
Esempio n. 7
0
        public static MapPacket FromBytes(byte[] bytes)
        {
            using (MemoryStream stream = new MemoryStream(bytes))
            {
                byte[] tempBytes = new byte[sizeof(int)];
                stream.Read(tempBytes, 0, sizeof(int));
                int mapID = BitConverter.ToInt32(tempBytes, 0);

                stream.Read(tempBytes, 0, sizeof(int));
                int dataSize = BitConverter.ToInt32(tempBytes, 0);

                tempBytes = new byte[dataSize];
                stream.Read(tempBytes, 0, dataSize);

                MapPacket mapPacket = new MapPacket(mapID, MapData.FromBytes(tempBytes));

                //add in the map players here

                tempBytes = new byte[sizeof(int)];
                stream.Read(tempBytes, 0, sizeof(int));
                int enemiesCount = BitConverter.ToInt32(tempBytes, 0);

                for (int i = 0; i < enemiesCount; i++)
                {
                    tempBytes = new byte[sizeof(int)];
                    stream.Read(tempBytes, 0, sizeof(int));
                    int size = BitConverter.ToInt32(tempBytes, 0);

                    tempBytes = new byte[size];
                    stream.Read(tempBytes, 0, size);
                    MapEnemy enemy = MapEnemy.FromBytes(tempBytes);
                    mapPacket.Enemies.Add(enemy);
                }

                tempBytes = new byte[sizeof(int)];
                stream.Read(tempBytes, 0, sizeof(int));
                int projectilesCount = BitConverter.ToInt32(tempBytes, 0);

                for (int i = 0; i < projectilesCount; i++)
                {
                    tempBytes = new byte[sizeof(int)];
                    stream.Read(tempBytes, 0, sizeof(int));
                    int size = BitConverter.ToInt32(tempBytes, 0);

                    tempBytes = new byte[size];
                    stream.Read(tempBytes, 0, size);
                    MapProjectile projectile = MapProjectile.FromBytes(tempBytes);
                    mapPacket.Projectiles.Add(projectile);
                }

                tempBytes = new byte[sizeof(int)];
                stream.Read(tempBytes, 0, sizeof(int));
                int itemsCount = BitConverter.ToInt32(tempBytes, 0);

                for (int i = 0; i < itemsCount; i++)
                {
                    tempBytes = new byte[sizeof(int)];
                    stream.Read(tempBytes, 0, sizeof(int));
                    int size = BitConverter.ToInt32(tempBytes, 0);

                    tempBytes = new byte[size];
                    stream.Read(tempBytes, 0, size);
                    MapItem item = MapItem.FromBytes(tempBytes);
                    mapPacket.Items.Add(item);
                }

                return(mapPacket);
            }
        }
Esempio n. 8
0
        public PlanetPanel(MainForm form, Window owner, Player ship)
        {
            this.form  = form;
            this.ship  = ship;
            this.owner = owner;

            var planetPanel = InitPanelControl();
            var tabs        = InitTabControl();
            var tabsInfo    = InitTabInfoControl();

            planetPanel.Controls.Add(tabs, 0, 0);
            planetPanel.Controls.Add(tabsInfo, 1, 0);

            shop        = InitListBox();
            quests      = InitListBox();
            inventory   = InitListBox();
            upgrades    = InitListBox();
            description = InitDescription();

            tabs.TabPages[0].Controls.Add(shop);
            tabs.TabPages[1].Controls.Add(upgrades);
            tabs.TabPages[2].Controls.Add(quests);
            tabsInfo.TabPages[0].Controls.Add(description);
            tabsInfo.TabPages[1].Controls.Add(inventory);

            Action menuButtonClick = () => { };

            exitButton = InitButton();
            menuButton = InitButton();

            exitButton.Text    = "Exit";
            exitButton.Visible = true;

            planetPanel.Controls.Add(exitButton, 1, 1);
            exitButton.Click += (s, a) => Switch();

            planetPanel.Controls.Add(menuButton, 0, 1);

            menuButton.Click += (s, a) => menuButtonClick();

            tabs.SelectedIndexChanged += (s, a) =>
            {
                currentTab = (Tabs)tabs.SelectedIndex;
            };

            inventory.SelectedIndexChanged += (s, a) =>
            {
                if (!(inventory.SelectedItem is Chip item) || currentTab != Tabs.Upgrades)
                {
                    return;
                }
                if (upgrades.Items.Count > 0 && !((Chip)upgrades.Items[0]).Equals(item))
                {
                    return;
                }
                if (upgrades.Items.Count == 3 || item.CurrentLevel == item.MaxLevel)
                {
                    return;
                }

                menuButton.Text    = "To upgrade";
                menuButton.Visible = true;
                menuButton.Enabled = true;
                menuButtonClick    = () =>
                {
                    ship.Inventory.Remove(item);
                    upgrades.Items.Add(item);

                    if (upgrades.Items.Count == 3)
                    {
                        if (UpgradePrompt.ShowDialog())
                        {
                            var itemCopy = item.Copy();
                            itemCopy.CurrentLevel++;
                            ship.Inventory.Add(itemCopy);
                        }
                        else
                        {
                            foreach (var it in upgrades.Items)
                            {
                                ship.Inventory.Add((Chip)it);
                            }
                        }
                        upgrades.Items.Clear();
                    }


                    Update();
                };
            };

            inventory.MouseDoubleClick += (s, a) =>
            {
                if (inventory.SelectedItem == null)
                {
                    return;
                }
                menuButton.PerformClick();
            };

            upgrades.SelectedIndexChanged += (s, a) =>
            {
                if (!(upgrades.SelectedItem is Chip item))
                {
                    return;
                }

                menuButton.Text    = "To inventory";
                menuButton.Visible = true;
                menuButton.Enabled = true;
                menuButtonClick    = () =>
                {
                    ship.Inventory.Add(item);
                    upgrades.Items.Remove(item);
                    Update();
                };
            };

            upgrades.MouseDoubleClick += (s, a) =>
            {
                if (upgrades.SelectedItem == null)
                {
                    return;
                }
                menuButton.PerformClick();
            };

            shop.SelectedIndexChanged += (s, a) =>
            {
                if (!(shop.SelectedItem is IItem item))
                {
                    return;
                }
                description.Text   = item.GetInfo();
                menuButton.Text    = "Buy";
                menuButton.Visible = true;
                menuButton.Enabled = item.Price <= ship.Inventory.Money;
                menuButtonClick    = () =>
                {
                    ship.Inventory.Money -= item.Price;

                    if (item is ShipBaseData shipData)
                    {
                        ship.Data.SetShip(shipData);
                    }
                    else
                    {
                        ship.Inventory.Add(item);
                    }

                    Update();
                };
            };

            shop.MouseDoubleClick += (s, a) =>
            {
                if (shop.SelectedItem == null)
                {
                    return;
                }
                menuButton.PerformClick();
            };

            quests.SelectedIndexChanged += (s, a) =>
            {
                if (!(quests.SelectedItem is Quest item))
                {
                    return;
                }
                description.Text = item.GetInfo();
                if (item.Status == QuestStatus.NotStarted)
                {
                    menuButton.Text    = "Accept";
                    menuButton.Visible = true;
                    menuButton.Enabled = true;
                    menuButtonClick    = () =>
                    {
                        item.AcceptQuest();
                        Update();
                    };
                }

                if (item.Status != QuestStatus.Сompleted)
                {
                    return;
                }

                menuButton.Text    = "Get reward";
                menuButton.Visible = true;
                menuButton.Enabled = true;
                menuButtonClick    = () =>
                {
                    ship.Inventory.Money += item.Reward;
                    item.Status           = QuestStatus.NotStarted;
                    Update();
                };
            };
            quests.MouseDoubleClick += (s, a) =>
            {
                if (quests.SelectedItem == null)
                {
                    return;
                }
                menuButton.PerformClick();
            };

            var testQuest = new Quest("Noob Challenge", 1000, EnemyCount.Few, EnemyDifficult.Easy, () =>
            {
                var mainForm = form.currentModel as MainGameModel;
                var enemy    = new MapEnemy(ship.Position + new Vector2D(200, 200), ship, 1, EnemyDifficult.Easy);
                mainForm.AddObjectOnMap(enemy);
                return(enemy);
            });

            quests.Items.Add(testQuest);
            window = planetPanel;
        }
Esempio n. 9
0
        private void MapClick()
        {
            if (!GuiSelectable())
            {
                Vector2 mousePos = StateWindow.Instance.GetMousePosition();
                int     tileX    = (int)Math.Floor((mousePos.X - MapEntity.GetTransform().Position.X) / 32);
                int     tileY    = (int)Math.Floor((mousePos.Y - MapEntity.GetTransform().Position.Y) / 32);
                List <MapClickOption> options = new List <MapClickOption>();

                for (int i = 0; i < MapComponent.Instance.MapItemEntities.Count; i++)
                {
                    MapItem item = MapComponent.Instance.MapItemEntities[i].FindComponent <MapItemComponent>().GetMapItem();
                    if (item.PlayerID == -1 || item.PlayerID == MapComponent.Instance.GetLocalPlayerPacket().PlayerID)
                    {
                        if (item.MapX == tileX && item.MapY == tileY)
                        {
                            string         label  = "Pickup: " + ItemData.GetItemData(item.ItemID).Name + "(" + item.Count + ")";
                            MapClickOption option = new MapClickOption(MapClickOption.OptionType.PickupItem, label);
                            option.Parameters["MapItem"]   = item;
                            option.Parameters["ItemIndex"] = i;
                            options.Add(option);
                        }
                    }
                }

                for (int i = 0; i < MapComponent.Instance.PlayerEntities.Count; i++)
                {
                    int playerID = MapComponent.Instance.PlayerEntities.ElementAt(i).Key;
                    if (playerID != MapComponent.Instance.GetLocalPlayerPacket().PlayerID)
                    {
                        PlayerPacket packet = MapComponent.Instance.PlayerEntities[playerID].FindComponent <PlayerComponent>().GetMapPlayer().GetPlayerPacket();
                        if (packet.PositionX == tileX && packet.PositionY == tileY)
                        {
                            string         label  = "Attack Player: " + packet.Username;
                            MapClickOption option = new MapClickOption(MapClickOption.OptionType.AttackPlayer, label);
                            option.Parameters["PlayerID"] = packet.PlayerID;
                            options.Add(option);

                            label  = "Trade Player: " + packet.Username;
                            option = new MapClickOption(MapClickOption.OptionType.Trade, label);
                            option.Parameters["PlayerID"] = packet.PlayerID;
                            options.Add(option);
                        }
                    }
                }

                for (int i = 0; i < MapComponent.Instance.EnemyEntites.Count; i++)
                {
                    MapEnemy mapEnemy = MapComponent.Instance.EnemyEntites[i].FindComponent <MapEnemyComponent>().GetMapEnemy();
                    if (mapEnemy.MapX == tileX && mapEnemy.MapY == tileY)
                    {
                        string         label  = "Attack Enemy: " + mapEnemy.GetEnemyData().Name;
                        MapClickOption option = new MapClickOption(MapClickOption.OptionType.AttackEnemy, label);
                        option.Parameters["EnemyID"] = i;
                        //perhaps we need to add some sort of signature to the map enemies, if the targeted enemy dies during target attack this index might target a differnt enemy
                        options.Add(option);
                    }
                }

                if (options.Count > 0)
                {
                    MapClickOptionsPanel panel = new MapClickOptionsPanel((int)mousePos.X, (int)mousePos.Y, options, this);
                    this.AddControl(panel);
                }
            }
        }
Esempio n. 10
0
 private void OnRemoveMapEnemy(MapEnemy mapEnemy, int index)
 {
 }
Esempio n. 11
0
        private void RecieveServerCommand()
        {
            byte[] bytes      = ReadData(sizeof(int), _networkStream);
            int    packetSize = BitConverter.ToInt32(bytes, 0);

            bytes = ReadData(packetSize, _networkStream);
            ServerCommand command = ServerCommand.FromBytes(bytes);

            int             eventID;
            int             enemyID;
            int             enemyIndex;
            int             mapID;
            int             mapX;
            int             mapY;
            float           realX;
            float           realY;
            FacingDirection direction;
            MapData         map;
            int             projectileID;
            int             playerID;
            string          playerName;
            int             itemIndex;
            int             itemID;
            int             count;

            switch (command.GetCommandType())
            {
            case ServerCommand.CommandType.Disconnect:
                this.Disconnect();
                Console.WriteLine("Server Disconnected");
                break;

            case ServerCommand.CommandType.ShowMessage:

                if (_messageBox == null)
                {
                    _messageBox = new MessageBox((string)command.GetParameter("Message"), _gameState, false);
                    _gameState.AddControl(_messageBox);
                }

                break;

            case ServerCommand.CommandType.ShowOptions:

                if (_messageBox == null)
                {
                    string message = (string)command.GetParameter("Message");
                    _messageBox = new MessageBox(message, _gameState, false);
                    string[] options = ((string)command.GetParameter("Options")).Split(',');
                    for (int i = 0; i < options.Length; i++)
                    {
                        _messageBox.AddOption(options[i]);
                    }
                    _messageBox.SetSelectedOption(0);
                    _gameState.AddControl(_messageBox);
                }

                break;

            case ServerCommand.CommandType.AddMapEnemy:

                enemyID = (int)command.GetParameter("EnemyID");
                mapID   = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    mapX = (int)command.GetParameter("MapX");
                    mapY = (int)command.GetParameter("MapY");
                    bool     onBridge = (bool)command.GetParameter("OnBridge");
                    MapEnemy mapEnemy = new MapEnemy(enemyID, mapX, mapY, onBridge);
                    MapComponent.Instance.AddMapEnemy(mapEnemy);
                }

                break;

            case ServerCommand.CommandType.UpdateMapEnemy:

                enemyIndex = (int)command.GetParameter("EnemyIndex");
                mapID      = (int)command.GetParameter("MapID");
                if ((_gameState.MapEntity.FindComponent <MapComponent>()).GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    int HP = (int)command.GetParameter("HP");
                    mapX      = (int)command.GetParameter("MapX");
                    mapY      = (int)command.GetParameter("MapY");
                    realX     = (float)command.GetParameter("RealX");
                    realY     = (float)command.GetParameter("RealY");
                    direction = (FacingDirection)command.GetParameter("Direction");
                    bool onBridge = (bool)command.GetParameter("OnBridge");
                    bool dead     = (bool)command.GetParameter("Dead");
                    MapEnemyComponent enemyComponent = MapComponent.Instance.EnemyEntites[enemyIndex].FindComponent <MapEnemyComponent>();
                    enemyComponent.UpdateMapEnemy(HP, mapX, mapY, realX, realY, direction, onBridge, dead);

                    if (dead)
                    {
                        MapComponent.Instance.EnemyEntites[enemyIndex].Destroy();
                        MapComponent.Instance.EnemyEntites.RemoveAt(enemyIndex);
                        MapComponent.Instance.GetMapInstance().RemoveMapEnemy(enemyIndex);
                    }
                }

                break;

            case ServerCommand.CommandType.UpdateMapEvent:

                eventID = (int)command.GetParameter("EventID");
                mapID   = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    mapX      = (int)command.GetParameter("MapX");
                    mapY      = (int)command.GetParameter("MapY");
                    realX     = (float)command.GetParameter("RealX");
                    realY     = (float)command.GetParameter("RealY");
                    direction = (FacingDirection)command.GetParameter("Direction");
                    bool onBridge = (bool)command.GetParameter("OnBridge");

                    map = _gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapData();
                    if (map != null)
                    {
                        map.GetMapEvent(eventID).MapX           = mapX;
                        map.GetMapEvent(eventID).MapY           = mapY;
                        map.GetMapEvent(eventID).RealX          = realX;
                        map.GetMapEvent(eventID).RealY          = realY;
                        map.GetMapEvent(eventID).EventDirection = direction;
                        map.GetMapEvent(eventID).OnBridge       = onBridge;
                    }
                }

                break;

            case ServerCommand.CommandType.ChangeMapEventDirection:

                eventID = (int)command.GetParameter("EventID");
                mapID   = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    direction = (FacingDirection)command.GetParameter("Direction");

                    map = _gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapData();
                    if (map != null)
                    {
                        map.GetMapEvent(eventID).EventDirection = direction;
                    }
                }

                break;

            case ServerCommand.CommandType.ChangeMapEventSprite:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    eventID = (int)command.GetParameter("EventID");
                    int spriteID = (int)command.GetParameter("SpriteID");
                    _gameState.MapEntity.FindComponent <MapComponent>().ChangeMapEventSprite(eventID, spriteID);
                }

                break;

            case ServerCommand.CommandType.ChangeMapEventRenderPriority:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    eventID = (int)command.GetParameter("EventID");
                    RenderPriority priority = (RenderPriority)command.GetParameter("RenderPriority");
                    _gameState.MapEntity.FindComponent <MapComponent>().ChangeMapEventRenderPriority(eventID, priority);
                }

                break;

            case ServerCommand.CommandType.ChangeMapEventEnabled:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    eventID = (int)command.GetParameter("EventID");
                    bool enabled = (bool)command.GetParameter("Enabled");
                    _gameState.MapEntity.FindComponent <MapComponent>().ChangeMapEventEnabled(eventID, enabled);
                }

                break;

            case ServerCommand.CommandType.AddProjectile:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    {
                        int dataID = (int)command.GetParameter("DataID");
                        realX     = (float)command.GetParameter("RealX");
                        realY     = (float)command.GetParameter("RealY");
                        direction = (FacingDirection)command.GetParameter("Direction");
                        bool onBridge = (bool)command.GetParameter("OnBridge");

                        MapProjectile projectile = new MapProjectile(dataID, CharacterType.Player, -1, new Vector2(realX, realY), direction);
                        projectile.OnBridge = onBridge;
                        MapComponent.Instance.AddMapProjectile(projectile);
                    }
                }

                break;

            case ServerCommand.CommandType.UpdateProjectile:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    projectileID = (int)command.GetParameter("ProjectileID");
                    if (projectileID < MapComponent.Instance.ProjectileEntites.Count)
                    {
                        realX = (float)command.GetParameter("RealX");
                        realY = (float)command.GetParameter("RealY");
                        bool onBridge  = (bool)command.GetParameter("OnBridge");
                        bool destroyed = (bool)command.GetParameter("Destroyed");
                        ProjectileComponent component = MapComponent.Instance.ProjectileEntites[projectileID].FindComponent <ProjectileComponent>();
                        component.SetRealPosition(realX, realY);
                        component.SetOnBridge(onBridge);
                        if (destroyed)
                        {
                            MapComponent.Instance.ProjectileEntites[projectileID].Destroy();
                            MapComponent.Instance.ProjectileEntites.RemoveAt(projectileID);
                            MapComponent.Instance.GetMapInstance().RemoveMapProjectile(projectileID);
                        }
                    }
                }

                break;

            case ServerCommand.CommandType.AddMapItem:

                mapID = (int)command.GetParameter("MapID");
                MapComponent mapComponent = _gameState.MapEntity.FindComponent <MapComponent>();
                if (mapComponent.GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    itemID   = (int)command.GetParameter("ItemID");
                    count    = (int)command.GetParameter("Count");
                    mapX     = (int)command.GetParameter("MapX");
                    mapY     = (int)command.GetParameter("MapY");
                    playerID = (int)command.GetParameter("PlayerID");
                    bool    onBridge = (bool)command.GetParameter("OnBridge");
                    MapItem mapItem  = new MapItem(itemID, count, mapX, mapY, playerID, onBridge);
                    MapComponent.Instance.AddMapItem(mapItem);
                }

                break;

            case ServerCommand.CommandType.RemoveMapItem:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    itemIndex = (int)command.GetParameter("ItemIndex");
                    if (itemIndex < MapComponent.Instance.MapItemEntities.Count)
                    {
                        MapComponent.Instance.MapItemEntities[itemIndex].Destroy();
                        MapComponent.Instance.MapItemEntities.RemoveAt(itemIndex);
                        MapComponent.Instance.GetMapInstance().RemoveMapItem(itemIndex);
                    }
                }

                break;

            case ServerCommand.CommandType.UpdateMapItem:

                mapID = (int)command.GetParameter("MapID");
                if (_gameState.MapEntity.FindComponent <MapComponent>().GetMapInstance().GetMapPacket().MapID == mapID)
                {
                    itemIndex = (int)command.GetParameter("ItemIndex");
                    if (itemIndex < MapComponent.Instance.MapItemEntities.Count)
                    {
                        playerID = (int)command.GetParameter("PlayerID");
                        count    = (int)command.GetParameter("Count");
                        MapComponent.Instance.MapItemEntities[itemIndex].FindComponent <MapItemComponent>().GetMapItem().PlayerID = playerID;
                        MapComponent.Instance.MapItemEntities[itemIndex].FindComponent <MapItemComponent>().GetMapItem().Count    = count;
                    }
                }

                break;

            case ServerCommand.CommandType.ShowShop:

                int      shopID = (int)command.GetParameter("ShopID");
                ShopData data   = ShopData.GetData(shopID);
                if (data != null)
                {
                    if (InventoryPanel.Instance == null)
                    {
                        GameState.Instance.ToggleInventory();
                    }
                    _gameState.AddControl(new GUI.ShopPanel(_gameState, data));
                }
                else
                {
                    AddClientCommand(new ClientCommand(ClientCommand.CommandType.CloseShop));
                }

                break;

            case ServerCommand.CommandType.TradeRequest:
                playerID   = (int)command.GetParameter("PlayerID");
                playerName = (string)command.GetParameter("PlayerName");
                MessagePanel.Instance.AddMessage(playerName + " would like to trade.");

                break;

            case ServerCommand.CommandType.StartTrade:
                playerID   = (int)command.GetParameter("PlayerID");
                playerName = (string)command.GetParameter("PlayerName");

                if (InventoryPanel.Instance == null)
                {
                    GameState.Instance.ToggleInventory();
                }

                _gameState.AddControl(new GUI.TradePanel(_gameState, playerID, playerName));
                break;

            case ServerCommand.CommandType.AcceptTrade:
                if (TradePanel.Instance != null)
                {
                    TradePanel.Instance.TradeRequest.TradeOffer2.Accepted = true;
                }
                break;

            case ServerCommand.CommandType.EndTrade:
                if (TradePanel.Instance != null)
                {
                    TradePanel.Instance.Close();
                }
                break;

            case ServerCommand.CommandType.AddTradeItem:
                itemID = (int)command.GetParameter("ItemID");
                count  = (int)command.GetParameter("Count");

                if (TradePanel.Instance != null)
                {
                    TradePanel.Instance.TradeRequest.TradeOffer2.AddItem(itemID, count);
                    TradePanel.Instance.TradeRequest.TradeOffer1.Accepted = false;
                    TradePanel.Instance.TradeRequest.TradeOffer2.Accepted = false;
                }

                break;

            case ServerCommand.CommandType.RemoveTradeItem:
                itemIndex = (int)command.GetParameter("ItemIndex");
                count     = (int)command.GetParameter("Count");

                if (TradePanel.Instance != null)
                {
                    TradePanel.Instance.TradeRequest.TradeOffer2.RemoveItem(itemIndex, count);
                    TradePanel.Instance.TradeRequest.TradeOffer1.Accepted = false;
                    TradePanel.Instance.TradeRequest.TradeOffer2.Accepted = false;
                }

                break;

            case ServerCommand.CommandType.CantTrade:
                if (TradePanel.Instance != null)
                {
                    TradePanel.Instance.TradeRequest.TradeOffer1.Accepted = false;
                    TradePanel.Instance.TradeRequest.TradeOffer2.Accepted = false;
                }
                break;

            case ServerCommand.CommandType.OpenBank:
                if (InventoryPanel.Instance == null)
                {
                    GameState.Instance.ToggleInventory();
                }

                _gameState.AddControl(new BankPanel(_gameState));

                break;

            case ServerCommand.CommandType.ShowWorkbench:
                int workbenchID = (int)command.GetParameter("WorkbenchID");

                if (InventoryPanel.Instance == null)
                {
                    GameState.Instance.ToggleInventory();
                }

                _gameState.AddControl(new GUI.WorkbenchPanel(_gameState, workbenchID));

                break;
            }
        }
Esempio n. 12
0
        private void TriggerEvent(TriggeringEvent triggeringEvent, float deltaTime)
        {
            MapPlayer mapPlayer = triggeringEvent.GetMapPlayer();
            EventData eventData = triggeringEvent.GetEventData();

            if (triggeringEvent.MessageShowing)
            {
                if (!mapPlayer.MessageShowing || !mapPlayer.Connected)
                {
                    triggeringEvent.MessageShowing = false;
                    mapPlayer.MovementDisabled     = false;
                }

                return;
            }
            else if (triggeringEvent.OptionsShowing)
            {
                if (!mapPlayer.MessageShowing || !mapPlayer.Connected)
                {
                    triggeringEvent.OptionsShowing = false;
                    mapPlayer.MovementDisabled     = false;
                    triggeringEvent.SelectedOption = mapPlayer.SelectedOption;
                    mapPlayer.SelectedOption       = -1;
                }

                return;
            }

            if (triggeringEvent.WaitTimer > 0)
            {
                triggeringEvent.WaitTimer -= deltaTime;
                return;
            }

            if (triggeringEvent.GetParent() != null)
            {
                if (triggeringEvent.GetParent().CommandID <= triggeringEvent.CommandID)
                {
                    return;
                }
            }

            if (triggeringEvent.CommandID < eventData.EventCommands.Count - 1)
            {
                triggeringEvent.CommandID++;

                EventCommand eventCommand = eventData.EventCommands[triggeringEvent.CommandID];

                int               mapID;
                int               eventID;
                int               mapX;
                int               mapY;
                MapEvent          mapEvent;
                FacingDirection   facingDirection;
                MovementDirection movementDirection;
                int               spriteID;
                int               itemID;
                int               itemAmount;
                int               added;
                int               remainder;
                int               variableID;
                VariableType      variableType;
                object            variableValue;
                int               gold;
                int               questID;

                switch (eventCommand.Type)
                {
                case EventCommand.CommandType.WaitTimer:
                    if (mapPlayer != null)
                    {
                        break;
                    }

                    float timer = (float)eventCommand.GetParameter("Time");
                    triggeringEvent.WaitTimer = timer;

                    break;

                case EventCommand.CommandType.TeleportPlayer:

                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    mapID = (int)eventCommand.GetParameter("MapID");
                    mapX  = (int)eventCommand.GetParameter("MapX");
                    mapY  = (int)eventCommand.GetParameter("MapY");
                    mapPlayer.SetMapID(mapID);
                    mapPlayer.SetMapPosition(mapX, mapY);

                    break;

                case EventCommand.CommandType.MovePlayer:

                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    movementDirection = (MovementDirection)eventCommand.GetParameter("Direction");
                    mapPlayer.Move(movementDirection, true);

                    break;

                case EventCommand.CommandType.ChangePlayerDirection:

                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    facingDirection = (FacingDirection)eventCommand.GetParameter("Direction");
                    mapPlayer.ChangeDirection(facingDirection);

                    break;

                case EventCommand.CommandType.ChangeMapEvent:

                    if (mapPlayer != null)
                    {
                        break;
                    }

                    mapID   = (int)eventCommand.GetParameter("MapID");
                    eventID = (int)eventCommand.GetParameter("EventID");

                    if (!Server.Instance.GetServerMap(mapID).GetMapInstance().ChangeMapEvent(eventID, eventCommand))
                    {
                        triggeringEvent.CommandID--;
                    }

                    break;

                case EventCommand.CommandType.ShowMessage:

                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    triggeringEvent.MessageShowing = true;
                    mapPlayer.ShowMessage((string)eventCommand.GetParameter("Message"));

                    break;

                case EventCommand.CommandType.ShowOptions:

                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    List <string> options = (List <string>)eventCommand.GetParameter("Options");
                    mapPlayer.SelectedOption = 0;
                    int OptionsCount = options.Count;

                    string optionStrings = "";
                    for (int i = 0; i < options.Count; i++)
                    {
                        optionStrings += options[i];
                        if (i < options.Count - 1)
                        {
                            optionStrings += ",";
                        }
                    }

                    string message = (string)eventCommand.GetParameter("Message");
                    triggeringEvent.OptionsShowing = true;
                    mapPlayer.ShowMessage(message, optionStrings);

                    break;

                case EventCommand.CommandType.ChangeSystemVariable:
                    if (mapPlayer != null)
                    {
                        break;
                    }

                    variableID    = (int)eventCommand.GetParameter("VariableID");
                    variableType  = (VariableType)eventCommand.GetParameter("VariableType");
                    variableValue = eventCommand.GetParameter("VariableValue");

                    bool randomInt   = (bool)eventCommand.GetParameter("RandomInt");
                    bool randomFloat = (bool)eventCommand.GetParameter("RandomFloat");

                    if (randomInt)
                    {
                        int randomMin   = (int)eventCommand.GetParameter("RandomMin");
                        int randomMax   = (int)eventCommand.GetParameter("RandomMax");
                        int randomValue = new Random().Next(randomMin, randomMax);
                        SystemVariable.GetSystemVariable(variableID).SetVariableType(variableType);
                        SystemVariable.GetSystemVariable(variableID).SetValue(randomValue);
                    }
                    else if (randomFloat)
                    {
                        float randomMin   = (float)eventCommand.GetParameter("RandomMin");
                        float randomMax   = (float)eventCommand.GetParameter("RandomMax");
                        float randomValue = (float)new Random().NextDouble();
                        float difference  = randomMax - randomMin;
                        randomValue = randomMin + (difference * randomValue);
                        SystemVariable.GetSystemVariable(variableID).SetVariableType(variableType);
                        SystemVariable.GetSystemVariable(variableID).SetValue(randomValue);
                    }
                    else
                    {
                        SystemVariable.GetSystemVariable(variableID).SetVariableType(variableType);
                        SystemVariable.GetSystemVariable(variableID).SetValue(variableValue);
                    }

                    break;

                case EventCommand.CommandType.ConditionalBranchStart:

                    ConditionalBranchType type = (ConditionalBranchType)eventCommand.GetParameter("ConditionalBranchType");

                    bool conditionMet = false;
                    bool result       = (bool)eventCommand.GetParameter("Result");

                    switch (type)
                    {
                    case ConditionalBranchType.PlayerPosition:
                        if (mapPlayer == null)
                        {
                            break;
                        }

                        mapID = (int)eventCommand.GetParameter("PlayerMapID");
                        if (mapID == -1)
                        {
                            break;
                        }
                        mapX = (int)eventCommand.GetParameter("PlayerMapX");
                        mapY = (int)eventCommand.GetParameter("PlayerMapY");

                        if (mapPlayer.GetPlayerPacket().MapID == mapID && mapPlayer.GetPlayerPacket().PositionX == mapX &&
                            mapPlayer.GetPlayerPacket().PositionY == mapY)
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.MapEventPosition:
                        mapID   = (int)eventCommand.GetParameter("MapEventMapID");
                        eventID = (int)eventCommand.GetParameter("MapEventID");
                        if (mapID == -1 || eventID == -1)
                        {
                            break;
                        }
                        mapX = (int)eventCommand.GetParameter("MapEventMapX");
                        mapY = (int)eventCommand.GetParameter("MapEventMapY");

                        mapEvent = Server.Instance.GetServerMap(mapID).GetMapInstance().GetMapData().GetMapEvent(eventID);
                        if (mapEvent.MapX == mapX && mapEvent.MapY == mapY)
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.ItemEquipped:
                        if (mapPlayer == null || !mapPlayer.Connected)
                        {
                            break;
                        }

                        itemID = (int)eventCommand.GetParameter("EquippedItemID");
                        if (itemID == -1)
                        {
                            break;
                        }
                        if (mapPlayer.GetPlayerPacket().Data.ItemEquipped(itemID))
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.ItemInInventory:
                        if (mapPlayer == null)
                        {
                            break;
                        }

                        itemID     = (int)eventCommand.GetParameter("InventoryItemID");
                        itemAmount = (int)eventCommand.GetParameter("InventoryItemAmount");
                        if (itemID == -1)
                        {
                            break;
                        }
                        if (mapPlayer.GetPlayerPacket().Data.ItemInInventory(itemID, itemAmount))
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.SystemVariable:

                        variableID = (int)eventCommand.GetParameter("VariableID");
                        if (variableID == -1)
                        {
                            break;
                        }
                        variableType = (VariableType)eventCommand.GetParameter("VariableType");
                        if (SystemVariable.GetSystemVariable(variableID).Type == variableType)
                        {
                            ConditionValueCheck  valueCheck = (ConditionValueCheck)eventCommand.GetParameter("ValueCondition");
                            ConditionalTextCheck textCheck  = (ConditionalTextCheck)eventCommand.GetParameter("TextCondition");

                            switch (variableType)
                            {
                            case VariableType.Integer:
                                variableValue = eventCommand.GetParameter("VariableIntegerValue");
                                int intVal = (int)SystemVariable.GetSystemVariable(variableID).Value;
                                switch (valueCheck)
                                {
                                case ConditionValueCheck.Equal:
                                    if (intVal == (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.Greater:
                                    if (intVal > (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.GreaterOrEqual:
                                    if (intVal >= (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.Lower:
                                    if (intVal < (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.LowerOrEqual:
                                    if (intVal <= (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.NotEqual:
                                    if (intVal != (int)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;
                                }
                                break;

                            case VariableType.Float:
                                variableValue = eventCommand.GetParameter("VariableFloatValue");
                                float floatVal = (float)SystemVariable.GetSystemVariable(variableID).Value;
                                switch (valueCheck)
                                {
                                case ConditionValueCheck.Equal:
                                    if (floatVal == (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.Greater:
                                    if (floatVal > (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.GreaterOrEqual:
                                    if (floatVal >= (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.Lower:
                                    if (floatVal < (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.LowerOrEqual:
                                    if (floatVal <= (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionValueCheck.NotEqual:
                                    if (floatVal != (float)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;
                                }
                                break;

                            case VariableType.Bool:
                                variableValue = eventCommand.GetParameter("VariableBoolValue");
                                bool boolVal = (bool)SystemVariable.GetSystemVariable(variableID).Value;
                                if (boolVal == (bool)variableValue)
                                {
                                    conditionMet = true;
                                }
                                break;

                            case VariableType.Text:
                                variableValue = eventCommand.GetParameter("VariableTextValue");
                                string textVal = (string)SystemVariable.GetSystemVariable(variableID).Value;
                                switch (textCheck)
                                {
                                case ConditionalTextCheck.Equal:
                                    if (textVal == (string)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionalTextCheck.NotEqual:
                                    if (textVal != (string)variableValue)
                                    {
                                        conditionMet = true;
                                    }
                                    break;

                                case ConditionalTextCheck.Includes:
                                    if (textVal.Contains((string)variableValue))
                                    {
                                        conditionMet = true;
                                    }
                                    break;
                                }
                                break;
                            }
                        }

                        break;

                    case ConditionalBranchType.QuestStatus:

                        if (mapPlayer == null || !mapPlayer.Connected)
                        {
                            break;
                        }

                        questID = (int)eventCommand.GetParameter("QuestID");
                        if (questID != -1)
                        {
                            QuestStatusCheck statusCheck = (QuestStatusCheck)eventCommand.GetParameter("QuestStatus");
                            switch (statusCheck)
                            {
                            case QuestStatusCheck.Started:
                                if (mapPlayer.GetPlayerPacket().Data.QuestStarted(questID))
                                {
                                    conditionMet = true;
                                }
                                break;

                            case QuestStatusCheck.Complete:
                                if (mapPlayer.GetPlayerPacket().Data.QuestComplete(questID))
                                {
                                    conditionMet = true;
                                }
                                break;

                            case QuestStatusCheck.Progression:
                                int progression = (int)eventCommand.GetParameter("QuestProgression");
                                if (progression != -1)
                                {
                                    int greaterCondition = (int)eventCommand.GetParameter("QuestProgressionCondition");
                                    if (greaterCondition == 0)
                                    {
                                        if (mapPlayer.GetPlayerPacket().Data.GetQuestProgression(questID) == progression)
                                        {
                                            conditionMet = true;
                                        }
                                    }
                                    else
                                    {
                                        if (mapPlayer.GetPlayerPacket().Data.GetQuestProgression(questID) >= progression)
                                        {
                                            conditionMet = true;
                                        }
                                    }
                                }
                                break;
                            }
                        }
                        // check quest status here

                        break;

                    case ConditionalBranchType.SelectedOption:

                        int option = (int)eventCommand.GetParameter("SelectedOption");
                        if (option == triggeringEvent.SelectedOption)
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.TerrainTag:
                        if (mapPlayer == null || !mapPlayer.Connected)
                        {
                            break;
                        }

                        int tag = (int)eventCommand.GetParameter("TerrainTag");
                        if (mapPlayer.TerrainTagCheck(tag))
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.PlayerDirection:
                        if (mapPlayer == null || !mapPlayer.Connected)
                        {
                            break;
                        }

                        FacingDirection dir = (FacingDirection)eventCommand.GetParameter("PlayerDirection");
                        if (mapPlayer.GetPlayerPacket().Direction == dir)
                        {
                            conditionMet = true;
                        }

                        break;

                    case ConditionalBranchType.PlayerGold:
                        if (mapPlayer == null || !mapPlayer.Connected)
                        {
                            break;
                        }

                        gold = (int)eventCommand.GetParameter("Gold");
                        if (mapPlayer.GetPlayerPacket().Data.Gold >= gold)
                        {
                            conditionMet = true;
                        }

                        break;
                    }

                    if (conditionMet != result)
                    {
                        int conditionDepth = triggeringEvent.ConditionDepth;
                        for (int i = triggeringEvent.CommandID + 1; i < eventData.EventCommands.Count; i++)
                        {
                            triggeringEvent.CommandID++;

                            if (eventData.EventCommands[i].Type == EventCommand.CommandType.ConditionalBranchStart)
                            {
                                conditionDepth++;
                            }

                            if (eventData.EventCommands[i].Type == EventCommand.CommandType.ConditionalBranchElse ||
                                eventData.EventCommands[i].Type == EventCommand.CommandType.ConditionalBranchEnd)
                            {
                                if (conditionDepth > triggeringEvent.ConditionDepth)
                                {
                                    conditionDepth--;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        triggeringEvent.ConditionDepth++;
                    }

                    break;

                case EventCommand.CommandType.ConditionalBranchElse:
                    for (int i = triggeringEvent.CommandID + 1; i < eventData.EventCommands.Count; i++)
                    {
                        triggeringEvent.CommandID++;
                        if (eventData.EventCommands[i].Type == EventCommand.CommandType.ConditionalBranchEnd)
                        {
                            break;
                        }
                    }
                    break;

                case EventCommand.CommandType.ConditionalBranchEnd:
                    if (triggeringEvent.ConditionDepth > 0)
                    {
                        triggeringEvent.ConditionDepth -= 1;
                    }
                    break;

                case EventCommand.CommandType.AddInventoryItem:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    itemID     = (int)eventCommand.GetParameter("ItemID");
                    itemAmount = (int)eventCommand.GetParameter("ItemAmount");
                    added      = mapPlayer.GetPlayerPacket().Data.AddInventoryItem(itemID, itemAmount);
                    remainder  = itemAmount - added;
                    if (remainder > 0)
                    {
                        mapX = mapPlayer.GetPlayerPacket().PositionX;
                        mapY = mapPlayer.GetPlayerPacket().PositionY;
                        MapItem mapItem = new MapItem(itemID, remainder, mapX, mapY, mapPlayer.GetPlayerPacket().PlayerID, mapPlayer.GetPlayerPacket().OnBridge);
                        _serverMap.GetMapInstance().AddMapItem(mapItem);
                    }

                    break;

                case EventCommand.CommandType.RemoveInventoryItem:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    itemID     = (int)eventCommand.GetParameter("ItemID");
                    itemAmount = (int)eventCommand.GetParameter("ItemAmount");
                    mapPlayer.GetPlayerPacket().Data.RemoveInventoryItem(itemID, itemAmount);

                    break;

                case EventCommand.CommandType.ChangePlayerSprite:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    spriteID = (int)eventCommand.GetParameter("SpriteID");
                    mapPlayer.GetPlayerPacket().SpriteID = spriteID;

                    break;

                case EventCommand.CommandType.WaitForMovementCompletion:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    if (mapPlayer.Moving())
                    {
                        triggeringEvent.CommandID--;
                    }

                    break;

                case EventCommand.CommandType.AddGold:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    gold = (int)eventCommand.GetParameter("Gold");
                    mapPlayer.GetPlayerPacket().Data.Gold += gold;

                    break;

                case EventCommand.CommandType.RemoveGold:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    gold = (int)eventCommand.GetParameter("Gold");
                    mapPlayer.GetPlayerPacket().Data.Gold -= gold;
                    if (mapPlayer.GetPlayerPacket().Data.Gold < 0)
                    {
                        mapPlayer.GetPlayerPacket().Data.Gold = 0;
                    }

                    break;

                case EventCommand.CommandType.SpawnEnemy:
                    if (mapPlayer != null)
                    {
                        break;
                    }

                    int enemyID = (int)eventCommand.GetParameter("EnemyID");
                    if (enemyID == -1)
                    {
                        break;
                    }

                    int   enemyCount  = (int)eventCommand.GetParameter("Count");
                    float respawnTime = (float)eventCommand.GetParameter("RespawnTime");
                    int   spawnRadius = (int)eventCommand.GetParameter("SpawnRadius");

                    mapEvent = triggeringEvent.GetMapEvent();

                    Dictionary <MapEnemy, float> enemyTracker = _serverMap.GetMapInstance().GetEnemyTracker(mapEvent);
                    Random r = new Random();
                    while (enemyTracker.Count < enemyCount)
                    {
                        int minX = mapEvent.MapX - spawnRadius;
                        int maxX = mapEvent.MapX + spawnRadius;
                        int minY = mapEvent.MapY - spawnRadius;
                        int maxY = mapEvent.MapY + spawnRadius;

                        while (true)
                        {
                            int  spawnX      = r.Next(minX, maxX);
                            int  spawnY      = r.Next(minY, maxY);
                            bool onBridge    = mapEvent.OnBridge && _serverMap.GetMapInstance().GetBridgeFlag(spawnX, spawnY);
                            bool bridgeEntry = onBridge && _serverMap.GetMapInstance().MapTilesetPassable(spawnX, spawnY);
                            if (_serverMap.GetMapInstance().MapTileCharacterPassable(spawnX, spawnY, false, onBridge, bridgeEntry, MovementDirection.Down))
                            {
                                MapEnemy enemy = new MapEnemy(enemyID, spawnX, spawnY, onBridge);
                                enemyTracker.Add(enemy, respawnTime);
                                _serverMap.GetMapInstance().AddMapEnemy(enemy);
                                break;
                            }
                        }
                    }

                    break;

                case EventCommand.CommandType.ProgressQuest:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    questID = (int)eventCommand.GetParameter("QuestID");
                    if (questID != -1)
                    {
                        if (mapPlayer.GetPlayerPacket().Data.QuestStarted(questID))
                        {
                            int progression = mapPlayer.GetPlayerPacket().Data.GetQuestProgression(questID);
                            if (mapPlayer.GetPlayerPacket().Data.ProgressQuest(questID))
                            {
                                QuestData data = QuestData.GetData(questID);
                                QuestData.QuestObective objective = data.Objectives[progression];
                                for (int i = 0; i < objective.ItemRewards.Count; i++)
                                {
                                    itemID     = objective.ItemRewards[i].Item1;
                                    itemAmount = objective.ItemRewards[i].Item2;
                                    added      = mapPlayer.GetPlayerPacket().Data.AddInventoryItem(itemID, itemAmount);
                                    remainder  = itemAmount - added;
                                    if (remainder > 0)
                                    {
                                        mapX = mapPlayer.GetPlayerPacket().PositionX;
                                        mapY = mapPlayer.GetPlayerPacket().PositionY;
                                        MapItem mapItem = new MapItem(itemID, remainder, mapX, mapY, mapPlayer.GetPlayerPacket().PlayerID, mapPlayer.GetPlayerPacket().OnBridge);
                                        _serverMap.GetMapInstance().AddMapItem(mapItem);
                                    }
                                }
                            }
                        }
                        else
                        {
                            mapPlayer.GetPlayerPacket().Data.StartQuest(questID);
                        }
                    }

                    break;

                case EventCommand.CommandType.ShowShop:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    int shopID = (int)eventCommand.GetParameter("ShopID");
                    mapPlayer.ShowShop(shopID);

                    break;

                case EventCommand.CommandType.StartBanking:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    mapPlayer.StartBanking();

                    break;

                case EventCommand.CommandType.ShowWorkbench:
                    if (mapPlayer == null || !mapPlayer.Connected)
                    {
                        break;
                    }

                    int workbenchID = (int)eventCommand.GetParameter("WorkbenchID");
                    mapPlayer.ShowWorkbench(workbenchID);

                    break;
                }
            }
            else
            {
                triggeringEvent.FinishTriggering();
            }
        }