초기커밋
This commit is contained in:
157
GameServer/Map/Helper/MapNotifyHelper.cs
Normal file
157
GameServer/Map/Helper/MapNotifyHelper.cs
Normal file
@@ -0,0 +1,157 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user