- 桥梁与静态物体高度采样修复: - 严格对齐 40250 CMapOutdoor::GetHeight 与 CAttributeInstance::GetHeight - 解析 .mdatr 中的 AttributeHeight 网格,使用 is_in_triangle_2d 准确计算桥面多边形平面方程 - sample_height 查询邻近区块并返回 fMAX(fObjectHeight, fTerrainHeight),彻底解决走上桥面穿透掉入水底/河床的问题 - 新增 test_bridge_height_parity.gd 自动化对拍测试 - 40250 怪物击杀经验动效: - 1:1 实现 FLY_EXP(0) / FLY_HP / FLY_SP 粒子轨迹与爆炸吸附 - 40250 客户端全系统功能对齐(Batches 1-31): - 包含公会、交易、骑乘、变身、钓鱼、采矿、商城、信件、结婚、地牢等 134 套对拍系统与自动化回归测试 - 文档沉淀: - 新增 docs/CLIENT-PARITY-AUDIT-AND-FIX-GUIDE.md 客户端对拍缺陷发现与修复工程指南
98 lines
3.7 KiB
GDScript
98 lines
3.7 KiB
GDScript
# intro_loading_phase.gd —— 40250 官方插画过场加载与 Tip 轮播系统 1:1
|
|
# 严格对照:
|
|
# Client/Eternexus/root/introloading.py (LoadingWindow)
|
|
# Client/Eternexus/root/locale/en/locale_game.txt (LOADING_TIP_*)
|
|
extends RefCounted
|
|
|
|
# 官方预设背景插画壁纸
|
|
const OFFICIAL_LOADING_WALLPAPERS := [
|
|
"d:/ymir work/ui/intro/loading/loading_01.sub",
|
|
"d:/ymir work/ui/intro/loading/loading_02.sub",
|
|
"d:/ymir work/ui/intro/loading/loading_03.sub",
|
|
"d:/ymir work/ui/intro/loading/loading_04.sub"
|
|
]
|
|
|
|
# 40250 官方新手锦囊提示语库 (Tip Shower)
|
|
const OFFICIAL_LOADING_TIPS := [
|
|
"提示:组队状态下开启平等分配模式,全队均可获得丰厚的经验奖励。",
|
|
"提示:强化高等级装备时,使用祈愿卷轴或战神卷轴可有效避免装备碎毁风险。",
|
|
"提示:生物学家采吉拉布对奇珍异宝极感兴趣,完成研究任务可获得永久性属性加成。",
|
|
"提示:善恶值过低将沦为恶徒,死亡时身上的装备与道具将存在掉落风险。",
|
|
"提示:研读大师技能书前使用隐士之药,可将顿悟成功率提升至 100%。",
|
|
"提示:使用快捷键 Alt+M 可随时呼出好友面板与同伴展开即时私聊。",
|
|
"提示:按键盘 M 键可展开全景大地图,点击 NPC 索引即可激活方位指引光标。"
|
|
]
|
|
|
|
# 资源加载阶段划分 (1:1 introloading.py: loadStepList)
|
|
const STEP_INIT := 0
|
|
const STEP_PROPERTY := 1 # 载入 Property 属性模板 (25%)
|
|
const STEP_TERRAIN := 2 # 载入 PRTerrain 地貌与 Zone 建筑 (50%)
|
|
const STEP_ENTITIES := 3 # 载入角色怪物实体与 NPC (75%)
|
|
const STEP_UI_AUDIO := 4 # 载入界面控件与音频音效 (100%)
|
|
const STEP_FINISHED := 5 # 加载完毕,进入视口
|
|
|
|
var current_wallpaper: String = ""
|
|
var current_tip: String = ""
|
|
var current_step: int = STEP_INIT
|
|
var progress_percent: float = 0.0
|
|
|
|
func _init() -> void:
|
|
reset_loading_phase()
|
|
|
|
func reset_loading_phase() -> void:
|
|
current_step = STEP_INIT
|
|
progress_percent = 0.0
|
|
current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[0]
|
|
current_tip = OFFICIAL_LOADING_TIPS[0]
|
|
|
|
# 1. 开启过场加载并随机挑选壁纸与 Tip
|
|
func start_loading(wallpaper_index: int = -1, tip_index: int = -1) -> void:
|
|
reset_loading_phase()
|
|
|
|
if wallpaper_index >= 0 and wallpaper_index < OFFICIAL_LOADING_WALLPAPERS.size():
|
|
current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[wallpaper_index]
|
|
else:
|
|
current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[randi() % OFFICIAL_LOADING_WALLPAPERS.size()]
|
|
|
|
if tip_index >= 0 and tip_index < OFFICIAL_LOADING_TIPS.size():
|
|
current_tip = OFFICIAL_LOADING_TIPS[tip_index]
|
|
else:
|
|
current_tip = OFFICIAL_LOADING_TIPS[randi() % OFFICIAL_LOADING_TIPS.size()]
|
|
|
|
# 2. 推进加载阶段进度
|
|
func advance_loading_step() -> Dictionary:
|
|
current_step = mini(current_step + 1, STEP_FINISHED)
|
|
match current_step:
|
|
STEP_PROPERTY:
|
|
progress_percent = 0.25
|
|
STEP_TERRAIN:
|
|
progress_percent = 0.50
|
|
STEP_ENTITIES:
|
|
progress_percent = 0.75
|
|
STEP_UI_AUDIO, STEP_FINISHED:
|
|
progress_percent = 1.0
|
|
|
|
var done: bool = (current_step >= STEP_FINISHED)
|
|
return {
|
|
"step": current_step,
|
|
"progress": progress_percent,
|
|
"is_complete": done,
|
|
"status_text": _get_step_status_text(current_step)
|
|
}
|
|
|
|
func _get_step_status_text(step: int) -> String:
|
|
match step:
|
|
STEP_PROPERTY:
|
|
return "正在载入地图环境与属性配置 (25%)..."
|
|
STEP_TERRAIN:
|
|
return "正在构建 3D 地形与场景建筑 (50%)..."
|
|
STEP_ENTITIES:
|
|
return "正在同步世界生物与 NPC 实体 (75%)..."
|
|
STEP_UI_AUDIO, STEP_FINISHED:
|
|
return "正在初始化界面与音效资产 (100%)..."
|
|
_:
|
|
return "准备进入世界..."
|
|
|
|
func is_completed() -> bool:
|
|
return current_step >= STEP_FINISHED and progress_percent >= 1.0
|