158 lines
6.2 KiB
C#
158 lines
6.2 KiB
C#
using Org.BouncyCastle.Asn1.Ocsp;
|
|
using ServerCommon;
|
|
using ServerCore; using ServerBase;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using static ClientToGameMessage.Types;
|
|
using static ServerMessage.Types;
|
|
|
|
namespace GameServer
|
|
{
|
|
internal static class MapNotifyHelper
|
|
{
|
|
public static bool send_S2C_NTF_MAP_LINKED_INFOS(this Player player)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var ntf_packet = new ClientToGame();
|
|
ntf_packet.Message = new ClientToGameMessage();
|
|
ntf_packet.Message.NtfMapLinkedInfos = new GS2C_NTF_MAP_LINKED_INFOS();
|
|
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
if (server_logic.getServerType().toServerType() == ServerType.Channel)
|
|
{
|
|
var world_meta_id = server_logic.getMap().MapMId;
|
|
|
|
if (!MetaData.Instance._WorldMetaTable.TryGetValue(world_meta_id, out var world_meta_data))
|
|
{
|
|
err_msg = $"Failed to MetaData.TryGetValue() !!! : worldMetaId:{world_meta_id} - {player.toBasicString()}";
|
|
result.setFail(ServerErrorCode.WorldMetaDataNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
return false;
|
|
}
|
|
|
|
if (!MapManager.Instance.GetWorldMapTree(world_meta_data.MapPath, out var world_map_tree))
|
|
{
|
|
err_msg = $"Failed to GetWorldMapTree() !!! : MapPath:{world_meta_data.MapPath} - {player.toBasicString()}";
|
|
result.setFail(ServerErrorCode.WorldMapTreeDataNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
return false;
|
|
}
|
|
|
|
foreach (var land_map_tree in world_map_tree.ChildLandMapTrees.Values)
|
|
{
|
|
if (!MetaData.Instance._LandTable.TryGetValue(land_map_tree.LandId, out var land_meta_data))
|
|
{
|
|
err_msg = $"Failed to MetaData.TryGetValue() !!! : landMetaId:{land_map_tree.LandId} - {player.toBasicString()}";
|
|
result.setFail(ServerErrorCode.LandMetaDataNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
continue;
|
|
}
|
|
|
|
if (land_meta_data.LandType != MetaAssets.LandType.RENTAL)
|
|
continue;
|
|
|
|
var building_map_tree = land_map_tree.ChildBuildingMapTree;
|
|
if (building_map_tree == null)
|
|
continue;
|
|
|
|
if (!MetaData.Instance._BuildingTable.TryGetValue(building_map_tree.BuildingMetaId, out var building_meta_data))
|
|
{
|
|
err_msg = $"Failed to MetaData.TryGetValue() !!! : buildingMetaId:{building_map_tree.BuildingMetaId} - {player.toBasicString()}";
|
|
result.setFail(ServerErrorCode.BuildingMetaDataNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
continue;
|
|
}
|
|
|
|
var land_linked_info = new LandLinkedInfo();
|
|
land_linked_info.LandId = land_map_tree.LandId;
|
|
|
|
foreach (var (floor, room_map_tree) in building_map_tree.ChildRoomMapTrees)
|
|
{
|
|
var floor_linked_info = new FloorLinkedInfo();
|
|
floor_linked_info.UgcNpcGuids.AddRange(room_map_tree.UgcNpcs);
|
|
|
|
land_linked_info.FloorLinkedInfos.TryAdd(floor, floor_linked_info);
|
|
}
|
|
|
|
ntf_packet.Message.NtfMapLinkedInfos.LandLinkedInfos.Add(land_linked_info);
|
|
}
|
|
}
|
|
|
|
if (false == GameServerApp.getServerLogic().onSendPacket(player, ntf_packet))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static bool broadcast_S2C_NTF_MODIFY_FLOOR_LINKED_INFOS(List<ModifyFloorLinkedInfo> modifyFloorLinkedInfos)
|
|
{
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
var users = server_logic.getPlayerManager().getUsers();
|
|
var players = users.Values.ToArray();
|
|
|
|
if (players.Length == 0)
|
|
return true;
|
|
|
|
if (modifyFloorLinkedInfos.Count < 1)
|
|
return true;
|
|
|
|
var ntf_packet = new ClientToGame();
|
|
ntf_packet.Message = new ClientToGameMessage();
|
|
ntf_packet.Message.NtfModifyFloorLinkedInfos = new GS2C_NTF_MODIFY_FLOOR_LINKED_INFOS();
|
|
|
|
ntf_packet.Message.NtfModifyFloorLinkedInfos.ModifyFloorLinkedInfos.AddRange(modifyFloorLinkedInfos);
|
|
|
|
if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static bool send_GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS(List<ModifyFloorLinkedInfo> modifyFloorLinkedInfos)
|
|
{
|
|
var server_logic = GameServerApp.getServerLogic();
|
|
|
|
if (modifyFloorLinkedInfos.Count < 1)
|
|
return true;
|
|
|
|
var message = new ServerMessage();
|
|
message.NtfModifyFloorLinkedInfos = new GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS();
|
|
|
|
message.NtfModifyFloorLinkedInfos.ExceptServerName = server_logic.getServerName();
|
|
message.NtfModifyFloorLinkedInfos.ModifyFloorLinkedInfos.AddRange(modifyFloorLinkedInfos);
|
|
|
|
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
|
|
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
|
|
|
rabbit_mq.sendMessageToExchangeAllGame(message);
|
|
|
|
return true;
|
|
}
|
|
|
|
public static bool sendNtfModifyFloorLinkedInfos(List<ModifyFloorLinkedInfo> modifyFloorLinkedInfos)
|
|
{
|
|
// 현재 서버 유저
|
|
broadcast_S2C_NTF_MODIFY_FLOOR_LINKED_INFOS(modifyFloorLinkedInfos);
|
|
|
|
// 다른 서버
|
|
send_GS2GS_NTF_MODIFY_FLOOR_LINKED_INFOS(modifyFloorLinkedInfos);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|