public void Remove(Entities.User u) { if (u.Room != null) { if (u.Room.ID == this.ID) { lock (this.RoomLock) { Player p; byte oldSlot = 0; lock (_playerLock) { if (Players.ContainsKey(u.RoomSlot)) { Players.TryRemove(u.RoomSlot, out p); if (p != null) { oldSlot = u.RoomSlot; p.User.SetRoom(null, 0); } else { u.SetRoom(null, 0); } if (Players.Count > 0) { // Asign new master // if (oldSlot == Master) { // Remove the suppermaster buff :) this.Supermaster = false; // Calculate the priority level. int[] priority = new int[MaximumPlayers]; for (byte i = 0; i < MaximumPlayers; i++) { if (Players.ContainsKey(i)) { if (Players[i] != null) { priority[i] = 1 + (int)Players[i].User.Premium; } else { priority[i] = 0; // no priority. } } else { priority[i] = 0; // no priority. } } // Find the new master. sbyte newMaster = -1; int masterPrior = 0; for (byte j = 0; j < MaximumPlayers; j++) { if (priority[j] > masterPrior) // A player with higher piority has been found. { newMaster = (sbyte)j; // set the master slot masterPrior = priority[j]; // store the piority. } } // We have found a new master! if (newMaster >= 0) { Master = (byte)newMaster; Players[Master].Ready = true; } else { Destroy(); } } } else { Destroy(); } byte[] pBuffer = new Packets.RoomLeave(u, oldSlot, this).BuildEncrypted(); if (Players.Count > 0) { Send(pBuffer); } u.Send(pBuffer); //tell the players if (State == RoomState.Playing) { // string _playerLeft = Cristina.Core.Cristina.Localization.GetLocMessageFrom("PLAYER_LEFT"); // if (_playerLeft.Contains("%/nickname/%")) // _playerLeft = _playerLeft.Replace("/nickname/%", u.Displayname); Cristina.Core.Cristina.Chat.SaytoRoom(u.Displayname + " ha salido de la sala", this); } } } } } } }
public void Remove(Entities.User u) { if (u.Room != null) { if (u.Room.ID == this.ID) { lock (this.RoomLock) { Player p; byte oldSlot = 0; lock (_playerLock) { if (Players.ContainsKey(u.RoomSlot)) { Players.TryRemove(u.RoomSlot, out p); if (p != null) { oldSlot = u.RoomSlot; p.User.SetRoom(null, 0); } else { u.SetRoom(null, 0); } if (Players.Count > 0) { // Asign new master // if (u.RoomSlot == Master) { // Remove the suppermaster buff :) this.Supermaster = false; // Calculate the priority level. int[] priority = new int[MaximumPlayers]; for (byte i = 0; i < MaximumPlayers; i++) { if (Players.ContainsKey(i)) { if (Players[i] != null) { priority[i] = 1 + (int)Players[i].User.Premium; } else { priority[i] = 0; // no priority. } } else { priority[i] = 0; // no priority. } } // Find the new master. sbyte newMaster = -1; int masterPrior = 0; for (byte j = 0; j < MaximumPlayers; j++) { if (priority[j] > masterPrior) // A player with higher piority has been found. { newMaster = (sbyte)j; // set the master slot masterPrior = priority[j]; // store the piority. } } // We have found a new master! if (newMaster >= 0) { Master = (byte)newMaster; } else { Destory(); } } } else { Destory(); } byte[] pBuffer = new Packets.RoomLeave(u, oldSlot, this).BuildEncrypted(); if (Players.Count > 0) { Send(pBuffer); } u.Send(pBuffer); } } } } } }