private void ReceivedPlayerDisconnectedMsg(NetIncomingMessage msg) { Player disconnected = GetPlayer(msg.ReadInt32()); if (disconnected == null) { return; } players.Remove(disconnected); if (GameWindowState == WindowState.IN_LOBBY) { UpdateLobbyPlayers(); CheckAllPlayersReady(); } else { if (GameType == Gametype.TOURNAMENT_GAME && !disconnected.IsActivePlayer()) { FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_other_left, disconnected.Data.Name), new Vector(SharedDef.VIEW_PORT_SIZE.Width / 2, SharedDef.VIEW_PORT_SIZE.Height / 2 - 50), FloatingTextManager.TIME_LENGTH_5, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM, true); } if (disconnected.IsActivePlayer()) { EndGame(disconnected, GameEnd.LEFT_GAME); } else if (disconnected.Device != null) { disconnected.Device.DoRemoveMe(); } } }
private void ReceivedAllPlayerDataMsg(NetIncomingMessage msg) { int playerCount = msg.ReadInt32(); List <int> newPlrs = new List <int>(playerCount); for (int i = 0; i < playerCount; ++i) { Player plr = GetPlayer(msg.ReadInt32()); // jeste hrace nezname if (plr == null) { plr = CreatePlayer(); players.Add(plr); plr.Data.ReadObject(msg); plr.Statistics.ReadObject(msg); if (plr.Data.PlayerType == PlayerType.BOT) { CreateAndAddBot(plr); } else { FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_joined, plr.Data.Name), new Vector(SharedDef.VIEW_PORT_SIZE.Width / 2, SharedDef.VIEW_PORT_SIZE.Height / 2 - 50), FloatingTextManager.TIME_LENGTH_5, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM, true); } } else { // hrace uz zname, ale mohl se zmenit jeho stav na active a take se mohly zmenit dalsi player data plr.Data.ReadObject(msg); plr.Statistics.ReadObject(msg); } newPlrs.Add(plr.GetId()); } // pokud mame navic nejake stare hrace, tak je odstranime if (playerCount != newPlrs.Count) { for (int i = 0; i < players.Count; ++i) { if (!newPlrs.Contains(players[i].GetId())) { players.RemoveAt(i); } } } if ((GameType != Gametype.TOURNAMENT_GAME || gameRunning) && !currentPlayer.Data.StartReady) { SendStartGameRequest(); } else if (GameWindowState == WindowState.IN_LOBBY) { CheckAllPlayersReady(); UpdateLobbyPlayers(); } }
private void ReceivedSpectatorActionStarted(NetIncomingMessage msg) { Player owner = GetPlayer(msg.ReadInt32()); String name = msg.ReadString(); FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.game_spectator_used, owner.Data.Name, name), owner.Device.Position, FloatingTextManager.TIME_LENGTH_4, FloatingTextType.SYSTEM, FloatingTextManager.SIZE_MEDIUM); }
private void ReceiveObjectsDamage(NetIncomingMessage msg) { Player owner = GetPlayer(msg.ReadInt32()); int count = msg.ReadInt32(); int dmg = msg.ReadInt32(); IDestroyable obj; for (int i = 0; i < count; i++) { obj = GetSceneObject(msg.ReadInt64()) as IDestroyable; if (obj != null) { obj.TakeDamage(dmg, owner.Device); FloatingTextMgr.AddFloatingText(dmg, obj.Position, FloatingTextManager.TIME_LENGTH_3, FloatingTextType.DAMAGE); } } }
private void ReceiveObjectsHeal(NetIncomingMessage msg) { Player owner = GetPlayer(msg.ReadInt32()); int count = msg.ReadInt32(); int dmg = msg.ReadInt32(); IDestroyable obj; for (int i = 0; i < count; i++) { obj = GetSceneObject(msg.ReadInt64()) as IDestroyable; if (obj != null) { obj.TakeDamage(-dmg, owner.Device); FloatingTextMgr.AddFloatingText(String.Format(Strings.Culture, Strings.char_plus_and_val, dmg), obj.Position, FloatingTextManager.TIME_LENGTH_3, FloatingTextType.HEAL); } } }
private void ReceivedFloatingTextMsg(NetIncomingMessage msg) { FloatingTextMgr.AddFloatingText(msg.ReadString(), msg.ReadVector(), msg.ReadFloat(), (FloatingTextType)msg.ReadByte(), msg.ReadFloat(), true, false); }