using System.Diagnostics.CodeAnalysis; using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public partial class InstanceRoom { public async Task battleInstanceInit() { var result = await BattleInstanceManager.It.battleInstanceInit(this, _roomId); if (result.isFail()) { Log.getLogger().error(result.toBasicString()); return false; } return true; } public async Task sendGameModeInstanceJoinSuccess(Player player) { await Task.CompletedTask; //var game_mod_handler = GameModeManager.It.getGameModeJoinHandler(_placeType); return new(); } public bool tryGetInstanceMember(string userGuid, [MaybeNullWhen(false)] out Player out_player) { out_player = null; if (false == m_players.TryGetValue(userGuid, out var player)) { return false; } out_player = player; return true; } public List tryGetInstanceExistUserForLog() { List users = new(); foreach (var player in m_players.Values) { BattleRoundingExistUsers user = new(player.getUserGuid(), player.getUserNickname()); users.Add(user); } return users; } public async Task LeaveBattleInstanceRoom(Player player, bool disconnected) { var user_guid = player.getUserGuid(); Log.getLogger().info($"BattleInstanceRoom.Leave() Start !!! - userGuid:{user_guid}, instanceRoomId:{_roomId}, sessionCount:{SessionCount}, addConnectedUser:{getMap().getCurrCountAsAddConnectedUser()}"); if (m_players.TryRemove(player.getUserGuid(), out _)) { await BattleInstanceRoomHandler.leaveBattleInstanceRoom(user_guid, _roomId); } var location_attribute = player.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(location_attribute, () => $"LocationAttribute is null !!! - player:{player.toBasicString()}"); location_attribute.CurrentIndunLocation.clear(); var game_zone_action = player.getEntityAction(); await game_zone_action.tryLeaveGameZone(); if (SessionCount + getMap().getCurrCountAsAddConnectedUser() == 0) { if (!_isPartyInstance || _concertEnd) { await destroyRoom(); } } else { { ClientToGame clientToGame = new ClientToGame(); clientToGame.Message = new ClientToGameMessage(); clientToGame.Message.LeaveInstanceRoomMember = new ClientToGameMessage.Types.LeaveInstanceRoomMember(); clientToGame.Message.LeaveInstanceRoomMember.MemberGuid = player.getUserGuid(); Broadcast(clientToGame); } } Log.getLogger().info($"InstanceRoom.Leave() Finish !!! - userGuid:{user_guid}, instanceRoomId:{_roomId}, sessionCount:{SessionCount}, addConnectedUser:{getMap().getCurrCountAsAddConnectedUser()}"); } }