Esempio n. 1
0
		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);
			}
		}
Esempio n. 2
0
		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);
		}
Esempio n. 3
0
		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);
			}
		}
Esempio n. 4
0
		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;
			}
		}
Esempio n. 5
0
		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);

		}
Esempio n. 6
0
		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();
			}
		}
Esempio n. 7
0
		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);
			
		}
Esempio n. 8
0
		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;
			}
		}
Esempio n. 9
0
		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);
		}
Esempio n. 10
0
		public void onPlayerLeft(Player player) {
			foreach(Player p in room.Players) {
				p.kick("match_forfeited");
			}
		}
Esempio n. 11
0
		public void onPlayerJoined(Player player) {
			player.kick("in_progress");
		}