250501 커밋
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
namespace GameServer;
|
||||
|
||||
public static class BattleConstant
|
||||
{
|
||||
public static readonly string PREFIX_BATTLE_INSTANCE_ROOM_ID = "battle_instance";
|
||||
public static readonly string RESPAWN_POS_ANCHOR_NAME = "AT_RespawnPos";
|
||||
public static readonly string BATTLE_OBJECT_ANCHOR_NAME = "AT_BattleObject";
|
||||
public static readonly string BATTLE_OBJECT_GROUP_ANCHOR_NAME = "AT_BattleObjectGroup";
|
||||
public static readonly string BATTLE_ROOM_TRANSACTION_ID_NAME = "BattleRoom";
|
||||
public static readonly string BATTLE_POD_STORAGE_NAME = "Pod_CombatStand";
|
||||
public static readonly string PREFIX_BATTLE_TRANSACTION_GUID = "battle_tran:";
|
||||
public static readonly string BATTLE_INSTANCE_TRANSACTION_NAME = "BattleInstanceUpdate";
|
||||
|
||||
|
||||
public static readonly int BATTLE_EVENT_CHECK_INTERVAL = 240_000;//4분
|
||||
public static readonly int BATTLE_ROOM_CHECK_INTERVAL = 200;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
using GameServer.Contents.GameMode.Manage.PlayManage;
|
||||
using MetaAssets;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCore;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public static class BattleInstancePlayModeHelper
|
||||
{
|
||||
|
||||
public static BattleInstancesObject? getBattleObject(string anchorGuid, BattleInstanceSnapshotAttribute attribute, EBattleObjectType type)
|
||||
{
|
||||
BattleInstancesObject? battle_instance_object = null;
|
||||
if (type.Equals(EBattleObjectType.Weapon))
|
||||
{
|
||||
battle_instance_object = getBattleObjectWeapon(anchorGuid, attribute);
|
||||
}
|
||||
else if (type.Equals(EBattleObjectType.Buff))
|
||||
{
|
||||
battle_instance_object = getBattleObjectBuff(anchorGuid, attribute);
|
||||
}
|
||||
else if (type.Equals(EBattleObjectType.Pod_Combat))
|
||||
{
|
||||
battle_instance_object = getBattleObjectPodCombat(anchorGuid, attribute);
|
||||
}
|
||||
else if (type.Equals(EBattleObjectType.Pod_Box))
|
||||
{
|
||||
battle_instance_object = getBattleObjectPickupPod(anchorGuid, attribute);
|
||||
}
|
||||
|
||||
return battle_instance_object;
|
||||
}
|
||||
|
||||
private static BattleInstancesObject getBattleObjectWeapon(string anchorGuid, BattleInstanceSnapshotAttribute attribute)
|
||||
{
|
||||
if (false == attribute.m_combat_pod_mode.m_weapons.TryGetValue(anchorGuid, out var battle_instance_object_weapon))
|
||||
{
|
||||
battle_instance_object_weapon = new BattleObjectWeapon(anchorGuid);
|
||||
attribute.m_combat_pod_mode.m_weapons.TryAdd(anchorGuid, battle_instance_object_weapon);
|
||||
}
|
||||
return battle_instance_object_weapon;
|
||||
}
|
||||
|
||||
private static BattleInstancesObject getBattleObjectBuff(string anchorGuid, BattleInstanceSnapshotAttribute attribute)
|
||||
{
|
||||
if (false == attribute.m_combat_pod_mode.m_buffs.TryGetValue(anchorGuid, out var battle_instance_object_buff))
|
||||
{
|
||||
battle_instance_object_buff = new BattleObjectBuff(anchorGuid);
|
||||
attribute.m_combat_pod_mode.m_buffs.TryAdd(anchorGuid, battle_instance_object_buff);
|
||||
}
|
||||
return battle_instance_object_buff;
|
||||
}
|
||||
|
||||
private static BattleInstancesObject getBattleObjectPodCombat(string anchorGuid, BattleInstanceSnapshotAttribute attribute)
|
||||
{
|
||||
if (false == attribute.m_combat_pod_mode.m_pod_storages.TryGetValue(anchorGuid, out var storages))
|
||||
{
|
||||
storages = new BattleObjectPodStorage(anchorGuid);
|
||||
attribute.m_combat_pod_mode.m_pod_storages.TryAdd(anchorGuid, storages);
|
||||
}
|
||||
|
||||
return storages;
|
||||
}
|
||||
|
||||
private static BattleInstancesObject getBattleObjectPickupPod(string anchorGuid, BattleInstanceSnapshotAttribute attribute)
|
||||
{
|
||||
if (false == attribute.m_combat_pod_mode.m_pickup_pods.TryGetValue(anchorGuid, out var pickupPod))
|
||||
{
|
||||
Log.getLogger().warn($"not exist pickup pod so..create anchorguid : {anchorGuid}");
|
||||
pickupPod = new BattleObjectPickupPod(anchorGuid);
|
||||
pickupPod.m_is_active = false;
|
||||
attribute.m_combat_pod_mode.m_pickup_pods.TryAdd(anchorGuid, pickupPod);
|
||||
}
|
||||
|
||||
return pickupPod;
|
||||
}
|
||||
|
||||
public static bool isPodCombat(BattleInstanceSnapshotAttribute attribute, string anchorGuid)
|
||||
{
|
||||
return attribute.m_combat_pod_mode.m_pod_combat.m_anchor_guid.Equals(anchorGuid);
|
||||
}
|
||||
|
||||
|
||||
public static (Result, BattleObjectMetaData) getBattleObjectMeta(string anchorGuid, GameModeBase battleInstanceRoom)
|
||||
{
|
||||
var map = battleInstanceRoom.getInstanceRoom().getMap();
|
||||
string err_msg = string.Empty;
|
||||
var result = new Result();
|
||||
if(false == map.m_anchors.TryGetValue(anchorGuid, out var anchorInfo))
|
||||
{
|
||||
err_msg = $"Anchor Info Not Exist.... room_id : {map.m_room_id} anchor guid : {anchorGuid}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return (result, new(new BattleObjectMetaDataMutable()));
|
||||
}
|
||||
|
||||
if (false == MapDataTable.Instance.getAnchor(anchorGuid, out var anchor))
|
||||
{
|
||||
err_msg = $"Not found Anchor in MapFileType !!! : anchourGuid:{anchorGuid}";
|
||||
//Log.getLogger(err_msg);
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return (result, new(new BattleObjectMetaDataMutable()));
|
||||
}
|
||||
|
||||
var table_id = anchorInfo.AnchorProp.TableId;
|
||||
|
||||
if (anchor.Type.Equals(BattleConstant.BATTLE_OBJECT_GROUP_ANCHOR_NAME))
|
||||
{
|
||||
if (false == MetaData.Instance._BattleObjectSpawnGroupMetaTable.TryGetValue(table_id, out var battle_object_spawn_group_meta))
|
||||
{
|
||||
err_msg = $"_BattleObjectSpawnGroupMetaTable data Not Exist.... room_id : {map.m_room_id} anchor guid : {anchorGuid}, tableId : {table_id}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceObjectMetaNotExist, err_msg);
|
||||
return (result, new(new BattleObjectMetaDataMutable()));
|
||||
}
|
||||
|
||||
table_id = battle_object_spawn_group_meta.BattleObjectID;
|
||||
}
|
||||
|
||||
if (false == MetaData.Instance._BattleObjectMetaTable.TryGetValue(table_id, out var battle_object_meta))
|
||||
{
|
||||
err_msg = $"_BattleObjectMetaTable data Not Exist.... room_id : {map.m_room_id} anchor guid : {anchorGuid}, tableId : {table_id}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceObjectMetaNotExist, err_msg);
|
||||
return (result, new(new BattleObjectMetaDataMutable()));
|
||||
}
|
||||
|
||||
return (result, battle_object_meta);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using MetaAssets;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using ServerCore;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
//인터렉션 로직에 대한 정보를 저장후 처리
|
||||
public class BattleObjectInteractionLogicHandler
|
||||
{
|
||||
public BattleObjectInteractionLogicHandler(string userGuid, string userNickname, string interactionAnchorGuid, string roomId)
|
||||
{
|
||||
m_user_guid = userGuid;
|
||||
m_interaction_anchor_guid = interactionAnchorGuid;
|
||||
|
||||
m_interaction_log_info.m_interaction_anchor_guid = interactionAnchorGuid;
|
||||
m_interaction_log_info.m_interaction_user_guid = userGuid;
|
||||
m_interaction_log_info.m_interaction_user_nickname = userNickname;
|
||||
m_interaction_log_info.m_room_id = roomId;
|
||||
}
|
||||
public string m_user_guid { get; } = string.Empty;
|
||||
public string m_interaction_anchor_guid { get; } = string.Empty;
|
||||
public BattleObjectMetaData m_battle_object_meta { get; set; } = new(new BattleObjectMetaDataMutable());
|
||||
public BattleInstancesObject m_battle_object { get; set; } = new BattleObjectEmpty();
|
||||
|
||||
public bool m_is_combat_pod { get; set; } = false; //true : 전달 받은 anchor_guid 가 combat pod을 의미한다.
|
||||
|
||||
public BattleObjectPodCombat? m_pod_combat { get; set; } = null;
|
||||
|
||||
public bool m_is_need_combat_pod_noti { get; set; } = false;
|
||||
|
||||
public List<BattleInstancesObject> m_need_noti_objects { get; set; } = new(); //인터렉션시 종속적으로상태가 같이 바뀌는 object들은 여기에 넣어서 나중에 noti 보낼때 사용
|
||||
|
||||
public DateTime m_object_active_time { get; set; } = DateTimeHelper.Current;
|
||||
|
||||
|
||||
public BattleObjectInteractionLogInfo m_interaction_log_info { get; set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,268 @@
|
||||
using GameServer.Contents.GameMode.Mode_Battle.Manage;
|
||||
using Newtonsoft.Json;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCore;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
using Contents.GameMode.Helper;
|
||||
|
||||
public class BattleRoomHelper
|
||||
{
|
||||
public static Result checkBattleActive(EPlaceType type)
|
||||
{
|
||||
var result = new Result();
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var server_config = server_logic.getServerConfig();
|
||||
bool is_battle_system_active = server_config.BattleSystemEnable;
|
||||
|
||||
if (type == EPlaceType.BattleRoom && is_battle_system_active) return result;
|
||||
|
||||
string err_msg = $"BattleSystem Not Active!!!! type : {type}, is_battle_system_active : {is_battle_system_active}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceInActive, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool checkBattleActive()
|
||||
{
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var server_config = server_logic.getServerConfig();
|
||||
bool is_battle_system_active = server_config.BattleSystemEnable;
|
||||
|
||||
if (is_battle_system_active) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static (Result, string) getRandomCombatPodAnchorGuid(BattleInstanceSnapshotAttribute attribute, GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
string err_msg = string.Empty;
|
||||
var keys = new List<int>(battleInstanceRoom.m_battle_pod_storage_guid_group.Keys);
|
||||
if (keys.Count == 0)
|
||||
{
|
||||
err_msg = $"battle_instance_room.m_battle_pod_stand_group_pos_meta Keys Count is zero battle_instance_room : {battleInstanceRoom.getRoomId()}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
Random random = new Random();
|
||||
|
||||
for(int i = 0; i < 10; i++)
|
||||
{
|
||||
// 첫 번째 랜덤: battle_group_id 선택
|
||||
int random_group_idx = random.Next(keys.Count);
|
||||
int selected_battle_group_id = keys[random_group_idx];
|
||||
|
||||
// 선택된 battle_group_id의 List<BattlePosMeta> 가져오기
|
||||
if (false == battleInstanceRoom.m_battle_pod_storage_guid_group.TryGetValue(selected_battle_group_id, out var battle_pos_metas))
|
||||
{
|
||||
err_msg = $"battle_instance_room.m_battle_pod_stand_group_pos_meta value not exist battle_instance_room : {battleInstanceRoom.getRoomId()}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
// 두 번째 랜덤: List<BattlePosMeta>에서 BattlePosMeta 선택
|
||||
List<string> pos_metas = battle_pos_metas.ToList();
|
||||
if (pos_metas.Count == 0) continue;
|
||||
|
||||
int random_idx = random.Next(pos_metas.Count);
|
||||
var anchor_guid = pos_metas[random_idx];
|
||||
return (result, anchor_guid);
|
||||
}
|
||||
|
||||
err_msg = $"not exist anchorGuid {battleInstanceRoom.getRoomId()}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
public static (Result, string) getRandomRespawnPos(BattleInstanceSnapshotAttribute attribute, GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
List<string> active_respawns = new();
|
||||
var now = DateTimeHelper.Current;
|
||||
foreach (var respawn_info in attribute.m_combat_pod_mode.m_respawns)
|
||||
{
|
||||
var key = respawn_info.Key;
|
||||
var next_respawn_time = respawn_info.Value;
|
||||
|
||||
if(next_respawn_time <= now ) active_respawns.Add(key);
|
||||
}
|
||||
|
||||
var result = new Result();
|
||||
|
||||
if (active_respawns.Count == 0)
|
||||
{
|
||||
var err_msg = $"respawn pos not exist now : {now}, respawnInfo : {JsonConvert.SerializeObject(attribute.m_combat_pod_mode.m_respawns)} ";
|
||||
result.setFail(ServerErrorCode.BattleInstanceUsableSpawnPointNotExist, err_msg);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
Random random = new Random();
|
||||
int random_idx = random.Next(active_respawns.Count);
|
||||
var guid = active_respawns[random_idx];
|
||||
|
||||
|
||||
return (result, guid);
|
||||
}
|
||||
|
||||
|
||||
public static (Result, string) getRandomPickupPod(int groupId, int idx, GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, BattleInstanceSnapshotAttribute attribute)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
string err_msg = string.Empty;
|
||||
Random random = new Random();
|
||||
|
||||
//선택된 battle_group_id의 List<BattlePosMeta> 가져오기
|
||||
if (false == battleInstanceRoom.m_battle_pickup_pod_guid_group.TryGetValue(groupId, out var pickup_pod_guid_group))
|
||||
{
|
||||
err_msg = $"battle_instance_room.m_battle_pickup_pod_group_pos_meta value not exist battle_instance_room : {battleInstanceRoom.getInstanceRoom().getMap().m_room_id}";
|
||||
result.setFail(ServerErrorCode.BattleInstanceNotExistAnchors, err_msg);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
// 두 번째 랜덤: List<BattlePosMeta>에서 BattlePosMeta 선택
|
||||
//bool is_duplicate = false;
|
||||
HashSet<string> old_allocated_guids = new();
|
||||
foreach (var infos in attribute.m_combat_pod_mode.m_pickup_pod_generated_info)
|
||||
{
|
||||
var generated_info = infos.Value;
|
||||
var group_id = infos.Key.Item1;
|
||||
var generated_idx = infos.Key.Item2;
|
||||
if (false == generated_info.m_anchor_guid.Equals(string.Empty))
|
||||
{
|
||||
old_allocated_guids.Add(generated_info.m_anchor_guid);
|
||||
}
|
||||
if (false == generated_info.m_before_anchor_guid.Equals(string.Empty) && generated_idx == idx)
|
||||
{
|
||||
old_allocated_guids.Add(generated_info.m_before_anchor_guid);
|
||||
}
|
||||
}
|
||||
|
||||
List<string> guids = pickup_pod_guid_group.ToList();
|
||||
foreach (var old_guid in old_allocated_guids)
|
||||
{
|
||||
guids.Remove(old_guid);
|
||||
}
|
||||
|
||||
|
||||
if (guids.Count == 0)
|
||||
{
|
||||
err_msg = $"guids count is zero..so can't assing pickup pod reward... old_allocated_guids : {JsonConvert.SerializeObject(old_allocated_guids)}, " +
|
||||
$"pickup pod info : {JsonConvert.SerializeObject(attribute.m_combat_pod_mode.m_pickup_pod_generated_info)}";
|
||||
result.setFail(ServerErrorCode.BattleInstancePickupPodRewardAllocateError, err_msg);
|
||||
return (result, string.Empty);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int random_idx = random.Next(guids.Count);
|
||||
var anchor_guid = guids[random_idx];
|
||||
|
||||
return (result, anchor_guid);
|
||||
}
|
||||
|
||||
|
||||
public static SystemBattleEvent? getBattleRoomStartTimeByEventId(string roomId)
|
||||
{
|
||||
|
||||
//instanceroom:battle_instance:0:1017006:timestamp:5978:info//룸ID의 형태
|
||||
|
||||
var event_id = getBattleEventIdFromRoomId(roomId);
|
||||
|
||||
if (event_id == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (false == BattleInstanceManager.It.getSystemBattleEvent(event_id, out var battleEvent))
|
||||
{
|
||||
Log.getLogger().error($"system battle event not exist eventId : {event_id}, total events : {JsonConvert.SerializeObject(BattleInstanceManager.It.getSystemBattleEvents())}");
|
||||
return null;
|
||||
}
|
||||
return battleEvent;
|
||||
}
|
||||
|
||||
public static int getBattleEventIdFromRoomId(string roomId)
|
||||
{
|
||||
var arr_room_tokens = roomId.Split(":");
|
||||
var event_tokens = arr_room_tokens[1].Split("_");
|
||||
if (false == int.TryParse(event_tokens[0], out var eventId))
|
||||
{
|
||||
Log.getLogger().error($"arr_room_tokens parse error !!!! roomId : {arr_room_tokens}");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return eventId;
|
||||
}
|
||||
|
||||
public static DateTime calculateDestroyedTime(DateTime startTime, Int32 configId, Int32 roundCount)
|
||||
{
|
||||
if (false == MetaData.Instance._BattleFFAConfigMetaTable.TryGetValue(configId, out var meta))
|
||||
{
|
||||
Log.getLogger().error($"Not Exist _BattleFFAConfigMetaTable configId : {configId}");
|
||||
return DateTimeHelper.Current.AddSeconds(-10);
|
||||
}
|
||||
|
||||
if (roundCount < 1)
|
||||
{
|
||||
Log.getLogger().error($"roundCount less than 1 roundCount : {roundCount}");
|
||||
return DateTimeHelper.Current.AddSeconds(-10);
|
||||
}
|
||||
|
||||
var round_time = meta.RoundTime;
|
||||
var wait_time = meta.NextRoundWaitTime;
|
||||
var result_time = meta.ResultUIWaitTime;
|
||||
|
||||
var process_time_sec = (round_time * roundCount) + (wait_time * (roundCount - 1)) + result_time;
|
||||
|
||||
return startTime.AddSeconds(process_time_sec);
|
||||
}
|
||||
|
||||
|
||||
public static DateTime calculateRoomJoinableTime(DateTime startTime, Int32 configId, Int32 roundCount)
|
||||
{
|
||||
if (false == MetaData.Instance._BattleFFAConfigMetaTable.TryGetValue(configId, out var meta))
|
||||
{
|
||||
Log.getLogger().error($"Not Exist _BattleFFAConfigMetaTable configId : {configId}");
|
||||
return DateTimeHelper.Current.AddSeconds(-10);
|
||||
}
|
||||
|
||||
if (roundCount < 1)
|
||||
{
|
||||
Log.getLogger().error($"roundCount less than 1 roundCount : {roundCount}");
|
||||
return DateTimeHelper.Current.AddSeconds(-10);
|
||||
}
|
||||
|
||||
|
||||
var round_time = meta.RoundTime;
|
||||
var wait_time = meta.NextRoundWaitTime;
|
||||
|
||||
var process_time_sec = (round_time * roundCount) + (wait_time * (roundCount - 1)) - meta.EntranceClosingTime;
|
||||
|
||||
return startTime.AddSeconds(process_time_sec);
|
||||
}
|
||||
|
||||
public static IHostMigrator createHostMigrator(BattlePlayMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case BattlePlayMode.PodCombat:
|
||||
|
||||
//return HostMigrationFactory.createCommonHostMigrator((int) BattlePlayMode.PodCombat, GameServerApp.getServerLogic());
|
||||
return new BattleFFAModeHostMigrator();
|
||||
default:
|
||||
Log.getLogger($"createHostMigrator Not implements mode : {mode}");
|
||||
throw new NotImplementedException();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
using GameServer.Contents.GameMode.Mode_Battle.Manage;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Newtonsoft.Json;
|
||||
using ServerCommon;
|
||||
using ServerCore;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public static class BattleRoomNotifyHelper
|
||||
{
|
||||
|
||||
public static void send_GS2C_NTF_POD_COMBAT_STATE(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, Player player)
|
||||
{
|
||||
var ntf = makePodCombatStateNotify(battleInstanceRoom);
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_POD_COMBAT_STATE(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
var ntf = makePodCombatStateNotify(battleInstanceRoom);
|
||||
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_POD_COMBAT_STATE ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfPodCombatState)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
private static ClientToGame makePodCombatStateNotify(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfPodCombatState = new ClientToGameMessage.Types.GS2C_NTF_POD_COMBAT_STATE();
|
||||
|
||||
var attribute = battleInstanceRoom.getEntityAttribute<BattleInstanceSnapshotAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(attribute, () => $"location attribute is null !!");
|
||||
|
||||
var pod_combat = attribute.m_combat_pod_mode.m_pod_combat;
|
||||
|
||||
BattlePodCombatState state = new();
|
||||
state.PodCombatGuid = pod_combat.m_anchor_guid;
|
||||
state.OwnerPodCombatStandGuid = pod_combat.m_source_storage_anchor_guid;
|
||||
state.PodCombatStateType = pod_combat.m_state;
|
||||
state.StatechangeTime = Timestamp.FromDateTime(pod_combat.m_state_change_time);
|
||||
state.CurrentPos = pod_combat.m_currenct_Pos;
|
||||
state.CurrentOwnerGuid = pod_combat.m_current_occupier_guid;
|
||||
state.CurrentTime = Timestamp.FromDateTime(DateTimeHelper.Current);
|
||||
|
||||
ntf.Message.NtfPodCombatState.PodCombatState.Add(state);
|
||||
|
||||
|
||||
return ntf;
|
||||
}
|
||||
|
||||
|
||||
public static void send_GS2C_NTF_BATTLE_INSTANCE_STATE(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, Player player)
|
||||
{
|
||||
var ntf = makeBattleInstanceStateNotify(battleInstanceRoom);
|
||||
Log.getLogger().debug($"send_GS2C_NTF_BATTLE_INSTANCE_STATE ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfBattleInstanceState)}");
|
||||
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_INSTANCE_STATE(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
var ntf = makeBattleInstanceStateNotify(battleInstanceRoom);
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_BATTLE_INSTANCE_STATE ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfBattleInstanceState)}");
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
private static ClientToGame makeBattleInstanceStateNotify(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleInstanceState = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_INSTANCE_STATE();
|
||||
ntf.Message.NtfBattleInstanceState.CreateTime = Timestamp.FromDateTime(battleInstanceRoom.m_battle_instance_event_start_time);
|
||||
|
||||
var attribute = battleInstanceRoom.getEntityAttribute<BattleInstanceSnapshotAttribute>();
|
||||
NullReferenceCheckHelper.throwIfNull(attribute, () => $"attribute is null !!!");
|
||||
|
||||
ntf.Message.NtfBattleInstanceState.CurrentRound = attribute.m_combat_pod_mode.m_current_round;
|
||||
ntf.Message.NtfBattleInstanceState.RoundStateStartTime = Timestamp.FromDateTime(attribute.m_combat_pod_mode.m_current_state_start_time);
|
||||
ntf.Message.NtfBattleInstanceState.RoundStateType = attribute.m_combat_pod_mode.m_round_state_type;
|
||||
ntf.Message.NtfBattleInstanceState.RewardedStep = attribute.m_combat_pod_mode.m_rewarded_step;
|
||||
ntf.Message.NtfBattleInstanceState.ChargedStep = attribute.m_combat_pod_mode.m_charged_step;
|
||||
|
||||
return ntf;
|
||||
}
|
||||
|
||||
public static void send_GS2C_NTF_PLAYER_DEATH(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, string killerGuid, string deadUserGuid, Player player)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattlePlayerDeath = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_PLAYER_DEATH();
|
||||
ntf.Message.NtfBattlePlayerDeath.DeadUserGuid = deadUserGuid;
|
||||
ntf.Message.NtfBattlePlayerDeath.KillerUserGuid = killerGuid;
|
||||
|
||||
Log.getLogger().debug($"send_GS2C_NTF_PLAYER_DEATH ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfBattlePlayerDeath)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
|
||||
}
|
||||
|
||||
public static void send_GS2C_NTF_PLAYER_RESPAWN(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, Pos pos, Player player)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattlePlayerRespawn = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_PLAYER_RESPAWN();
|
||||
ntf.Message.NtfBattlePlayerRespawn.RespawnUserGuid = player.getUserGuid();
|
||||
ntf.Message.NtfBattlePlayerRespawn.Pos = pos;
|
||||
|
||||
Log.getLogger().debug($"send_GS2C_NTF_PLAYER_RESPAWN ntf battleInstanceRoom Id : {battleInstanceRoom.getInstanceRoom().getMap().m_room_id} data : {JsonConvert.SerializeObject(ntf.Message.NtfBattlePlayerRespawn)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_OBJECT_STATE_INFO(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, BattleObjectInteractionLogicHandler handler)
|
||||
{
|
||||
BattleObjectInfo info = new();
|
||||
info.AnchorGuid = handler.m_battle_object.m_anchor_guid;
|
||||
var now = DateTimeHelper.Current;
|
||||
info.IsActive = handler.m_battle_object.m_is_active ? BoolType.True : BoolType.False;
|
||||
List<BattleObjectInfo> infos = new();
|
||||
infos.Add(info);
|
||||
|
||||
|
||||
|
||||
broadcast_GS2C_NTF_BATTLE_OBJECT_STATE_INFO(battleInstanceRoom, infos);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_OBJECT_STATE_INFO(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, List<BattleObjectInfo> infos)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleObjectStateInfo = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_OBJECT_STATE_INFO();
|
||||
ntf.Message.NtfBattleObjectStateInfo.BattleObjectInfos.AddRange(infos);
|
||||
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_BATTLE_OBJECT_STATE_INFO ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data :{JsonConvert.SerializeObject(infos)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void send_GS2C_NTF_BATTLE_OBJECT_STATE_INFO(List<BattleObjectInfo> infos, Player player)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleObjectStateInfo = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_OBJECT_STATE_INFO();
|
||||
ntf.Message.NtfBattleObjectStateInfo.BattleObjectInfos.AddRange(infos);
|
||||
|
||||
Log.getLogger().debug($"send_GS2C_NTF_BATTLE_OBJECT_STATE_INFO ntf : {JsonConvert.SerializeObject(infos)}");
|
||||
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_OBJECT_INTERACTION(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, string userGuid, string anchorGuid)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleObjectInteraction = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_OBJECT_INTERACTION();
|
||||
ntf.Message.NtfBattleObjectInteraction.AnchorGuid = anchorGuid;
|
||||
ntf.Message.NtfBattleObjectInteraction.UserGuid = userGuid;
|
||||
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_BATTLE_OBJECT_INTERACTION ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfBattleObjectInteraction)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_REWARD(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, string acquireUserGuid, CommonResult commonResult)
|
||||
{
|
||||
if (commonResult.EntityCommonResults.Count == 0) return;
|
||||
if (acquireUserGuid.Equals(string.Empty)) return;
|
||||
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleInstanceReward = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_INSTANCE_REWARD();
|
||||
ntf.Message.NtfBattleInstanceReward.AcquireRewards = commonResult;
|
||||
ntf.Message.NtfBattleInstanceReward.AcquireUserGuid = acquireUserGuid;
|
||||
|
||||
Log.getLogger().debug($"send battle reward ntf acquireUserGuid : {acquireUserGuid}, commonResult : {JsonConvert.SerializeObject(commonResult)}");
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void send_GS2C_NTF_BATTLE_EVENT(Player player)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleEvent = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_EVENT();
|
||||
ntf.Message.NtfBattleEvent.BattleEvent.AddRange(BattleInstanceManager.It.getAllProtoBattleEvents());
|
||||
Log.getLogger().debug($"send battle event ntf guid : {player.getUserGuid()}, ntf : {JsonConvert.SerializeObject(ntf.Message.NtfBattleEvent)}");
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_BATTLE_EVENT(List<BattleEventInfo> infos)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfBattleEvent = new ClientToGameMessage.Types.GS2C_NTF_BATTLE_EVENT();
|
||||
ntf.Message.NtfBattleEvent.BattleEvent.AddRange(infos);
|
||||
|
||||
foreach (var each in GameServerApp.getServerLogic().getPlayerManager().getUsers())
|
||||
{
|
||||
var player = each.Value;
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
}
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_PREPARATION_FOR_LEAVING_BATTLE_INSTANCE(GameModeTPSFreeForAll<GameModeTPSFreeForAllData> battleInstanceRoom, string leavingUserGuid)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfPreparationForLeavingBattleInstance = new ClientToGameMessage.Types.GS2C_NTF_PREPARATION_FOR_LEAVING_BATTLE_INSTANCE();
|
||||
ntf.Message.NtfPreparationForLeavingBattleInstance.LeavingUserGuid = leavingUserGuid;
|
||||
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_PREPARATION_FOR_LEAVING_BATTLE_INSTANCE ntf battleInstanceRoom Id : {battleInstanceRoom.getRoomId()} data : {JsonConvert.SerializeObject(ntf.Message.NtfPreparationForLeavingBattleInstance)}");
|
||||
|
||||
battleInstanceRoom.getInstanceRoom().Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void broadcast_GS2C_NTF_P2P_HOST_UPDATE(InstanceRoom instanceRoom, string hostUserGuid)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfP2PHostUpdate = new ClientToGameMessage.Types.GS2C_NTF_P2P_HOST_UPDATE();
|
||||
ntf.Message.NtfP2PHostUpdate.HostUserGuid = hostUserGuid;
|
||||
|
||||
Log.getLogger().debug($"broadcast_GS2C_NTF_P2P_HOST_UPDATE ntf battleInstanceRoom Id : {instanceRoom.getMap().m_room_id} data : {JsonConvert.SerializeObject(ntf.Message.NtfP2PHostUpdate)}");
|
||||
instanceRoom.Broadcast(ntf);
|
||||
}
|
||||
|
||||
public static void send_GS2C_NTF_P2P_HOST_UPDATE(Player player, string hostUserGuid)
|
||||
{
|
||||
ClientToGame ntf = new ClientToGame();
|
||||
ntf.Message = new ClientToGameMessage();
|
||||
ntf.Message.NtfP2PHostUpdate = new ClientToGameMessage.Types.GS2C_NTF_P2P_HOST_UPDATE();
|
||||
ntf.Message.NtfP2PHostUpdate.HostUserGuid = hostUserGuid;
|
||||
GameServerApp.getServerLogic().onSendPacket(player, ntf);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user