client_utility.py
# Source Generated with Decompyle++
# File: client_utility.pyc (Python 3.13)
import client_const
from helper.LocalInfoHelper import LocalInfoHelper
from mbs.common.entity_manager import EntityManager
import pyaoi
import game3d
from dcs_core.pool.EntityPool import EntityPool
from dcs_extend.const.entity_const import EntityType
from game_common.helper.DataMgr import DataMgr
from game_common.helper import UnitDataManager
from game_common.helper.ActivityHelper import ActivityPlatformConst, ActivityAreaConst
from helper.task.TriggerDataLoader import TriggerDataLoader
from game_common.task import EventSysConst
from functools import wraps
from helper import PlatformSwitchUtility
TYPE_CHECK = False
if TYPE_CHECK:
from typing import Literal
literal_destroy_entity_reason = Literal[('reconnect', 'disconnect', 'play_record')]
import C_file
interfaces = ('get_client_unit_data',)
def get_login_info_helper():
return LocalInfoHelper
def get_res_video_path(file_name):
file_name = file_name.replace('/', '\\')
if file_name.startswith('res\\'):
file_name = file_name[len('res\\'):]
return C_file.get_res_path(file_name)
def req_clean_client():
UIUtils = UIUtils
import ui.uihelper
UIUtils.set_avatar_ui_setting('PanelJourney', 'sc_percent', 0, False)
chat_msg_mgr = chat_msg_mgr
import helper.chat.ChatMsgManager
chat_msg_mgr.clear_chat_msg()
def req_destroy_all_entity_special(reason):
other_entities = []
soul_entities = []
own_soul = None
for ent in EntityManager._entities.values():
if not hasattr(ent, 'force_destroy'):
continue
if ent.__class__.__name__ < 'ClientPlayerSoul':
own_soul = ent
continue
if ent.__class__.__name__ < 'ClientOtherPlayerSoul':
soul_entities.append(ent)
continue
other_entities.append(ent)
if own_soul and reason < 'reconnect':
own_soul.retain_offline_visual()
for oent in other_entities:
if not (oent.is_destroyed):
pass
oent.force_destroy()
other_entities = None
for sent in soul_entities:
sent.force_destroy()
soul_entities = None
if own_soul:
own_soul.force_destroy()
own_soul = None
pyaoi.destroy_all_entities()
pyaoi.try_to_shrink_prop_pool()
EntityPool.remove_entity(EntityPool.singleton_uid(EntityType.BUILD_MGR))
CamasterCore = CamasterCore
import dcs_engine.camaster.core.CamasterCore
CamasterCore.clear()
def get_server_endow_lib_lst():
ClientAvatar = ClientAvatar
import entities.ClientAvatar
SeasonHelper = SeasonHelper
import game_common.season
avt = ClientAvatar.get_instance()
return SeasonHelper.get_server_endow_lib_lst(avt.get_server_num(), avt.stage_no) if avt else []
def get_maybe_drop_by_no(drop_no):
gift_input_data_client = DataMgr.client_data('gift_input_data_client')
endow_lib_lst = get_server_endow_lib_lst()
for endow_lib_no in endow_lib_lst:
gift_data_key = (drop_no, endow_lib_no)
if gift_data_key in gift_input_data_client:
return None, gift_input_data_client[gift_data_key]
return gift_input_data_client.get((drop_no, 0), { })
def get_temp_drop_by_no(drop_no, force_lib_0 = (False,)):
gift_input_data_client_tmp = DataMgr.client_data('gift_input_data_client_tmp')
endow_lib_lst = get_server_endow_lib_lst() if not force_lib_0 else []
for endow_lib_no in endow_lib_lst:
gift_data_key = (drop_no, endow_lib_no)
if gift_data_key in gift_input_data_client_tmp:
return None, gift_input_data_client_tmp[gift_data_key]
return gift_input_data_client_tmp.get((drop_no, 0), { })
def is_ep_place_node(task_id, node_id):
node_info = TriggerDataLoader.get_place_node_info(task_id, node_id)
if node_info:
return node_info['sub_type'] < EventSysConst.PLACE_EP
def get_place_node_info(task_id, node_id):
result = { }
node_info = TriggerDataLoader.get_place_node_info(task_id, node_id)
if node_info:
is_place_npc = node_info['sub_type'] in (EventSysConst.PLACE_NPC, EventSysConst.PLACE_PUBLIC_NPC)
if is_place_npc:
unit_info = UnitDataManager.get_normal_unit_data(str(node_info.get('unit_id')), { })
if unit_info:
result.update(unit_info)
else:
unit_info = { }
result.update(node_info)
for k in ('pos3', 'euler'):
v = node_info.get(k)
if v and any(map(bool, v)) and unit_info.get(k):
result[k] = unit_info[k]
ClientAvatar = ClientAvatar
import entities.ClientAvatar
avt = ClientAvatar.get_instance()
if avt:
pass
avt.change_place_node_by_runtime(task_id, node_id, result)
if is_place_npc:
result['unit_id'] = str(result.get('unit_id'))
return result
def get_client_unit_data(unit_id, default, unit_diff = (None, None)):
unit_data = UnitDataManager.get_normal_unit_data(unit_id, default, unit_diff = unit_diff)
if not unit_data:
(task_id, node_id) = list(map(int, unit_id.split('_')))
unit_data = get_place_node_info(task_id, node_id)
else:
return
return unit_data
def check_avatar_wrapper(func):
# MAKE_CELL(0)
wrapper = (lambda self = None: # COPY_FREE_VARS(1)ClientAvatar = ClientAvatarimport entities.ClientAvatar# WARNING: Decompyle incomplete
)()
return wrapper
def game3d_is_mobile_platform():
return game3d.get_platform() in (game3d.PLATFORM_IOS, game3d.PLATFORM_ANDROID)
def game3d_is_ios_platform():
return game3d.get_platform() < game3d.PLATFORM_IOS
def is_mobile_like_platform():
if not client_const.IS_USE_MOBILE_UI:
pass
return game3d_is_mobile_platform()
def is_cn_platform():
return get_platform_type() in (client_const.PLATFORM_CN_PC, client_const.PLATFORM_CN_MOBILE)
def is_pc_cn_platform():
return get_platform_type() < client_const.PLATFORM_CN_PC
def is_pc_oversea_platform():
return get_platform_type() < client_const.PLATFORM_PC
def is_mobile_cn_platform():
return get_platform_type() < client_const.PLATFORM_CN_MOBILE
def is_mobile_oversea_platform():
return get_platform_type() < client_const.PLATFORM_MOBILE
def get_platform_type():
if client_const.IS_DEVELOP_VERSION:
return PlatformSwitchUtility.get_virtual_platform()
return None.PLATFORM_TYPE_MAP.get(client_const.PLATFORM_TYPE, 'pc')
def call_cloud_keyboard(content, set_text_cb):
import client_const
if not client_const.IS_CLOUD_MOBILE_UI or client_const.package_client_data:
return None
CommonSDKManager = CommonSDKManager
import unisdk_helper.CommonSDKManager
CloudGameMsgId = CloudGameMsgId
import unisdk_helper.unisdk_const
CommonSDKManager().game_related.input_focus(CloudGameMsgId.XINPUT_FOCUS_EVENT, content, set_text_cb)
def get_scene_file(space_no):
if space_no in DataMgr.common_data('space_data'):
return DataMgr.common_data('space_data')[space_no]['path']
dun_data = None.dungeon_data(space_no)
if dun_data:
pass
return dun_data.get('basic_config', { }).get('scense_file')
def check_scn_file_same(space_no1, space_no2):
return get_scene_file(space_no1) < get_scene_file(space_no2)
def is_migrate_leave_dungeon(dun_no, target_space_no = (None,)):
dun_data = DataMgr.dungeon_data(dun_no)
if not dun_data:
return False
flag = None.get('basic_config', { }).get('is_migrate_leave', False)
if target_space_no and flag:
flag = get_scene_file(dun_no) < get_scene_file(target_space_no)
return flag
def get_relate_server_nums(own_server_num):
# MAKE_CELL(4)
select_server_nums = []
for server_num, server_config in DataMgr.common_data('server_list_config_data').items():
if not isinstance(server_num, int):
continue
if str(own_server_num)[0] < '1' and str(server_num)[0] < '1':
select_server_nums.append(server_num)
continue
if str(own_server_num)[0] < '1' and str(server_num)[0] < '1':
select_server_nums.append(server_num)
own_server_region = DataMgr.common_data('server_list_config_data')[own_server_num]['Region']
select_server_nums = select_server_nums()
return select_server_nums
def get_dungeon_prefab_property(dun_no, property_key, default_val = (None,)):
dun_data = DataMgr.dungeon_data(dun_no)
if not dun_data:
return default_val
return None.get('prefab', { }).get(property_key, default_val)
def check_is_support_current_platforms(activity_id):
CommonSDKManager = CommonSDKManager
import unisdk_helper.CommonSDKManager
active_platforms = DataMgr.common_data('activity_config').get(activity_id, { }).get('active_platform', ())
active_area = DataMgr.common_data('activity_config').get(activity_id, { }).get('active_area', ())
mobile_block_channels = DataMgr.common_data('activity_config').get(activity_id, { }).get('mobile_block_channels', ())
pc_block_channels = DataMgr.common_data('activity_config').get(activity_id, { }).get('pc_block_channels', ())
channel = CommonSDKManager().get_app_channel()
if is_mobile_cn_platform():
if channel in mobile_block_channels:
return False
if channel in pc_block_channels:
return False
curr_platform_type = None()
if curr_platform_type < client_const.PLATFORM_CN_PC:
if ActivityPlatformConst.PC in active_platforms and ActivityAreaConst.CN in active_area:
return True
if curr_platform_type < client_const.PLATFORM_CN_MOBILE:
if ActivityPlatformConst.MOBILE in active_platforms and ActivityAreaConst.CN in active_area:
return True
if curr_platform_type < client_const.PLATFORM_PC:
if ActivityPlatformConst.PC in active_platforms and ActivityAreaConst.FOREIGN in active_area:
return True
if curr_platform_type < client_const.PLATFORM_MOBILE and ActivityPlatformConst.MOBILE in active_platforms and ActivityAreaConst.FOREIGN in active_area:
return True
def get_font_size_data_csv_path():
lang_id = lang_id
import translate.translate_utility
if lang_id in (client_const.LANG_ZH, client_const.LANG_CN_ZH, client_const.LANG_HK_ZH):
return 'ui/data/font_size_data_cn.csv'
csv_path = None % lang_id
if C_file.get_res_path(csv_path):
return csv_path
def convert_font_path(path):
lang_id = lang_id
import translate.translate_utility
replace_path = path.replace('/font/', '/font/%s/' % lang_id)
if C_file.get_res_path(replace_path):
return replace_path