public void onPlayerJoined(Player player) { Console.WriteLine("[lobby] Player joined: " + player.Id); if(room.numPlayers >= RoomInstance.MAX_PLAYERS) { Console.WriteLine("[lobby] Player cap reached, kicking... (current=" + room.numPlayers + ", max=" + RoomInstance.MAX_PLAYERS + ")"); player.kick("max_players"); return; } player.nickname = player.JoinData["nickname"]; if(player.nickname.ToUpper() == "SYSTEM") { Console.WriteLine("[lobby] Player uses restricted nickname, kicking... "); player.kick("nickname_not_allowed"); return; } room.numPlayers++; Console.WriteLine("Player joined: " + player.nickname); room.Broadcast(MessageTypes.SV_PLAYER_JOINED, player.Id, player.nickname); foreach(Player p in room.Players) { if(p.Id != player.Id) { // send to everyone but joining player his own data Console.WriteLine("[lobby] Sending " + p + " data about " + player); p.Send(MessageTypes.SV_PLAYER_REGISTER, p.Id, p.nickname, false, p.isHost); } // send him everyone's data (including his own) Console.WriteLine("[lobby] Sending " + player + " data about " + p); player.Send(MessageTypes.SV_PLAYER_REGISTER, p.Id, p.nickname, (player.Id == p.Id), p.isHost); } }
public void onPlayerLeft(Player player) { Console.WriteLine("Player left: " + player.nickname); if(player.isReady) readyPlayers--; room.numPlayers--; room.Broadcast(MessageTypes.SV_PLAYER_LEFT, player.Id, player.nickname); room.Broadcast(MessageTypes.SV_PLAYER_UNREGISTER, player.Id); }
public void onPlayerReady(Player player, Message message) { numReady++; Console.WriteLine(player + " is ready to receive, count=" + numReady); if(numReady >= 2) { // this is to ensure all clients are ready to begin receiving messages Console.WriteLine("-- BEGIN SIMULATION --"); room.Broadcast(MessageTypes.SV_GAME_BEGIN); } }
public void handleMessage(Player player, Message message) { Console.WriteLine("[lobby] [IN] " + player + ": " + message); switch(message.Type) { case MessageTypes.CL_CHAT_MESSAGE: onChatMessage(player, message); break; case MessageTypes.CL_LOBBY_READY: onLobbyReady(player); break; } }
public void onUnitCreate(Player player, Message message) { int entityID = ++entityIndex; int ownerID = player.Id; String type = message.GetString(0); double x = message.GetDouble(1); double y = message.GetDouble(2); Console.WriteLine("[ENGINE] " + player + ": create Unit - id=" + entityID + ", owner=" + ownerID + ", type=" + type + ", pos=" + x + "," + y); room.Broadcast(MessageTypes.SV_UNIT_CREATE, entityID, ownerID, type, x, y); }
public void onLobbyReady(Player player) { player.isReady = true; readyPlayers++; Console.WriteLine("Player is ready: " + player.nickname); room.Broadcast(MessageTypes.SV_LOBBY_READY, player.Id, player.nickname); if(readyPlayers == RoomInstance.MIN_PLAYERS) { Console.WriteLine("All players ready, starting game..."); room.startGame(); } }
public void onStructureCreate(Player player, Message message) { int entityID = ++entityIndex; int ownerID = player.Id; String type = message.GetString(0); double x = message.GetDouble(1); double y = message.GetDouble(2); switch(type) { case "structure_town_center": // Gives ownership of this town center to the first player without one foreach(Player p in room.Players) { if(p.townCenterID == 0) { Console.WriteLine("[GAMEPLAY] Giving TOWN CENTER eid=" + entityID + " to " + player); p.townCenterID = entityID; ownerID = p.Id; break; } } break; case "structure_altar": // Gives ownership of this altar to the first player without one foreach(Player p in room.Players) { if(p.altarID == 0) { Console.WriteLine("[GAMEPLAY] Giving ALTAR eid=" + entityID + " to " + player); p.altarID = entityID; ownerID = p.Id; break; } } break; } Console.WriteLine("[ENGINE] " + player + ": create Structure - id=" + entityID + ", owner=" + ownerID + ", type=" + type + ", pos=" + x + "," + y); room.Broadcast(MessageTypes.SV_STRUCTURE_CREATE, entityID, ownerID, type, x, y); }
public void handleMessage(Player player, Message message) { switch(message.Type) { case MessageTypes.CL_READY: onPlayerReady(player, message); break; case MessageTypes.CL_CHAT_MESSAGE: onChatMessage(player, message); break; case MessageTypes.CL_UNIT_CREATE: onUnitCreate(player, message); break; case MessageTypes.CL_STRUCTURE_CREATE: onStructureCreate(player, message); break; default: Console.WriteLine("[<< : " + message.Type + "] <" + player.nickname + "> " + message.ToString()); room.Broadcast(message); break; } }
public void onChatMessage(Player player, Message message) { Console.WriteLine("[CHAT] " + player + ": " + message.GetString(0)); Message m = Message.Create(MessageTypes.SV_CHAT_MESSAGE, "", player.nickname, message.GetString(0)); room.Broadcast(m); }
public void onPlayerLeft(Player player) { foreach(Player p in room.Players) { p.kick("match_forfeited"); } }
public void onPlayerJoined(Player player) { player.kick("in_progress"); }