void OnConnectedClient(NetworkMessage msg) { // Checking if there are free playerIds on server if (freePlayerIds.Count == 0) { Logger.Instance.Log("[Connection error]: server is full (4 clients)"); msg.conn.Disconnect(); return; } // Finding playerId and connectionId for new client int newConnectionId = msg.conn.connectionId; int newPlayerId = freePlayerIds [0]; // Sending to new client message with his new playerId for him to spawn himself PlayerSpawnMessage playerSpawnMessage = new PlayerSpawnMessage(); playerSpawnMessage.playerId = newPlayerId; NetworkServer.SendToClient(newConnectionId, SpawnPlayerMessageId, playerSpawnMessage); // Sending to new client lamp state LampStateMessage lampStateMessage = new LampStateMessage(); lampStateMessage._on = lampIsOn; NetworkServer.SendToClient(newConnectionId, LampStateMessageId, lampStateMessage); // Sending to new client messages with playerId of active clients for him to spawn them PLayerConnectMessage pLayerConnectionMessage = new PLayerConnectMessage(); foreach (int playerId in connectionIdPalyerIdDict.Values) { pLayerConnectionMessage.playerId = playerId; NetworkServer.SendToClient(newConnectionId, PLayerConnectMessageId, pLayerConnectionMessage); } // Sending to active clients playerId of new client for them to spawn him pLayerConnectionMessage.playerId = newPlayerId; foreach (int connectionId in connectionIdPalyerIdDict.Keys) { NetworkServer.SendToClient(connectionId, PLayerConnectMessageId, pLayerConnectionMessage); } // Adding new client to dictionary of 'connetionId - playerId' and deleting his playerId from list of free Ids connectionIdPalyerIdDict.Add(newConnectionId, newPlayerId); freePlayerIds.Remove(newPlayerId); Logger.Instance.Log("Connected client playerId: " + newPlayerId + ", connectionId: " + newConnectionId); }
public void SetPluginVariable(string variable, string value) { if (variable.Equals("IGNORE")) return; ConsoleDebug(variable + " = " + value); if (variable.Contains("Debug")) debug = bool.Parse(value); else if (variable.Contains("Add a message")) { if (value.Equals("Choose...")) return; Message message = null; switch ((MessageTrigger)Enum.Parse(typeof(MessageTrigger), value)) { case MessageTrigger.PLAYER_JOIN: message = new PlayerJoinMessage(this, "Player Join Message #" + messages.Count, MessageType.SAY, MessageDestination.ALL, ""); break; case MessageTrigger.PLAYER_SPAWN: message = new PlayerSpawnMessage(this, "Player Spawn Message #" + messages.Count, MessageType.SAY, MessageDestination.ALL, ""); break; case MessageTrigger.TICKET_COUNT: message = new TicketCountMessage(this, "Ticket Count Message #" + messages.Count, MessageType.SAY, "", 0); break; case MessageTrigger.TIMED_COUNTER: message = new TimedCounterMessage(this, "Timed Counter Message #" + messages.Count, MessageType.SAY, "", 0); break; } messages.Add(message); message.enable(); } else if (variable.Contains("trigger")) { string name = variable.Substring(0, variable.IndexOf(" - ")).Trim(); if (name.Contains("|")) name = name.Substring(0, name.IndexOf("|")).Trim(); if (value.Equals("Remove")) { Message toRemove = messages.Find((m) => m.name.Equals(name)); toRemove.disable(); messages.Remove(toRemove); } else { int toChangeLoc = -1; for (int a = 0; a < messages.Count; a++) if (messages[a].name.Equals(name)) { toChangeLoc = a; break; } if (toChangeLoc == -1) { //looks like an un-added message, must be loading settings Message message = null; switch ((MessageTrigger)Enum.Parse(typeof(MessageTrigger), value)) { case MessageTrigger.PLAYER_JOIN: message = new PlayerJoinMessage(this, name, MessageType.SAY, MessageDestination.ALL, ""); break; case MessageTrigger.PLAYER_SPAWN: message = new PlayerSpawnMessage(this, name, MessageType.SAY, MessageDestination.ALL, ""); break; case MessageTrigger.TICKET_COUNT: message = new TicketCountMessage(this, name, MessageType.SAY, "", 0); break; case MessageTrigger.TIMED_COUNTER: message = new TimedCounterMessage(this, name, MessageType.SAY, "", 0); break; } messages.Add(message); message.enable(); } else { messages[toChangeLoc].disable(); switch ((MessageTrigger)Enum.Parse(typeof(MessageTrigger), value)) { case MessageTrigger.PLAYER_JOIN: if (messages[toChangeLoc].GetType() == typeof(PlayerJoinMessage)) break; messages[toChangeLoc] = new PlayerJoinMessage(messages[toChangeLoc]); break; case MessageTrigger.PLAYER_SPAWN: if (messages[toChangeLoc].GetType() == typeof(PlayerSpawnMessage)) break; messages[toChangeLoc] = new PlayerSpawnMessage(messages[toChangeLoc]); break; case MessageTrigger.TICKET_COUNT: if (messages[toChangeLoc].GetType() == typeof(TicketCountMessage)) break; messages[toChangeLoc] = new TicketCountMessage(messages[toChangeLoc]); break; case MessageTrigger.TIMED_COUNTER: if (messages[toChangeLoc].GetType() == typeof(TimedCounterMessage)) break; messages[toChangeLoc] = new TimedCounterMessage(messages[toChangeLoc]); break; } messages[toChangeLoc].enable(); } } } else { string name = variable.Substring(0, variable.IndexOf(" - ")).Trim(); if (name.Contains("|")) name = name.Substring(0, name.IndexOf("|")).Trim(); Message message = messages.Find((m) => m.name.Equals(name)); if (message == null) { if (name.Contains("|")) name = name.Substring(0, name.IndexOf("|")).Trim(); //looks like an un-added message, must be loading settings message = new PlayerSpawnMessage(this, name, MessageType.SAY, MessageDestination.ALL, ""); messages.Add(message); message.enable(); } message.setVariable(variable, value); } }