Implement 40250 classic client port
This commit is contained in:
+22
-1
@@ -17,17 +17,19 @@ class FakeClient extends Node:
|
||||
signal vitals_changed(vid: int)
|
||||
signal points_changed(points: Dictionary)
|
||||
signal target_info(vid: int, hp_percent: int)
|
||||
signal observer_mode_changed(enabled: bool)
|
||||
signal chat(type: int, vid: int, text: String)
|
||||
var ents := {}
|
||||
var main := 0
|
||||
var in_game := true
|
||||
var calls := {"move": [], "attack": [], "set_target": []}
|
||||
var calls := {"move": [], "attack": [], "set_target": [], "click_npc": []}
|
||||
func is_in_game() -> bool: return in_game
|
||||
func get_main_vid() -> int: return main
|
||||
func get_entity(vid: int) -> Dictionary: return ents.get(vid, {})
|
||||
func move(f, a, rot, x, y) -> bool: calls.move.append([f, a, rot, x, y]); return true
|
||||
func attack(motion, vid) -> bool: calls.attack.append([motion, vid]); return true
|
||||
func set_target(vid) -> bool: calls.set_target.append(vid); return true
|
||||
func click_npc(vid) -> bool: calls.click_npc.append(vid); return true
|
||||
|
||||
class FakePC extends Node:
|
||||
signal target_selected(node: Node3D)
|
||||
@@ -119,6 +121,15 @@ func _run() -> void:
|
||||
pc.target_selected.emit(mob)
|
||||
_ck(fc.calls.set_target.size() == 1 and fc.calls.set_target[0] == 2000, "set_target(2000)")
|
||||
|
||||
# NPC/传送点/石头走 click_npc,而不是被误当成攻击目标;这是 Cube
|
||||
# 窗口由服务端 cube_open 命令打开前的入口。
|
||||
var npc := Node3D.new()
|
||||
npc.set_meta("vid", 3000)
|
||||
root.add_child(npc)
|
||||
fc.ents[3000] = {"vid": 3000, "ch_type": 1, "name": "Cube NPC", "pos": npc.position}
|
||||
pc.target_selected.emit(npc)
|
||||
_ck(fc.calls.click_npc == [3000], "NPC selection -> click_npc(3000)")
|
||||
|
||||
# 5) 攻击距离内 -> 按 attack_period 自动 attack
|
||||
for i in 4: await process_frame
|
||||
_ck(fc.calls.attack.size() >= 1, "auto-attack fired, got %d" % fc.calls.attack.size())
|
||||
@@ -150,3 +161,13 @@ func _run() -> void:
|
||||
fc.ents[2000]["dead"] = true
|
||||
fc.entity_dead.emit(2000)
|
||||
_ck(hud.cleared >= 1, "target cleared on death")
|
||||
|
||||
# 10) 观战模式锁住本地移动/选目标,并清掉当前目标
|
||||
fc.ents[2000]["dead"] = false
|
||||
fc.observer_mode_changed.emit(true)
|
||||
pc.player.position = Vector3(8, 0, -5)
|
||||
pc.moved.emit(pc.player.position)
|
||||
pc.target_selected.emit(mob)
|
||||
_ck(fc.calls.move.size() == 2 and fc.calls.set_target.size() == 1,
|
||||
"observer mode blocks local movement and targeting")
|
||||
fc.observer_mode_changed.emit(false)
|
||||
|
||||
Reference in New Issue
Block a user