private void SetMapEnemy(MapEnemy mapEnemy) { _mapEnemy = mapEnemy; _enemyData = EnemyData.GetEnemy(mapEnemy.GetEnemyID()); SetSpriteID(_enemyData.SpriteID); SetRealPosition(); SetYFrame((int)_mapEnemy.Direction); }
public MapEnemyComponent(Entity entity, MapEnemy mapEnemy) : base(entity) { SetAnimating(false); SetXFrames(4); SetYFrames(4); SetMapEnemy(mapEnemy); _spriteTimer = 0f; _spriteTimerMax = 0.3f; }
//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); } }
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); } }
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); }
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); } } }
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); } }
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; }
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); } } }
private void OnRemoveMapEnemy(MapEnemy mapEnemy, int index) { }
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; } }
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(); } }