using MetaAssets; using ServerCommon; using ServerCore; using ServerBase; 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, BattleInstanceRoom battleInstanceRoom) { var map = battleInstanceRoom.m_instance_room.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); } }