extends Node # Тестовый бот (автозагрузка во ВРЕМЕННОЙ копии проекта, см. tools/test/make_test_project.sh). # Пережидает смену сцен, по расписанию телепортирует игрока и раз в секунду печатает, что видит. # godot --headless --path <копия> res://maps/hub/hub.tscn -- --client --name=A --tp=2:-12,1,-15 --tp=9:0,1,11 # --tp=<секунда>:,, — телепорт игрока на этой секунде (например, прямо в портал). # Остальные аргументы пользователя (--server-url=..., --pack-url=...) читают Net и MapLoader. var t := 0.0 var label := "?" var tps := [] var next_print := 1.0 func _ready() -> void: for a in OS.get_cmdline_user_args(): if a.begins_with("--name="): label = a.substr(7) if a.begins_with("--tp="): var p := a.substr(5).split(":") var v := p[1].split(",") tps.append({"t": float(p[0]), "pos": Vector3(float(v[0]), float(v[1]), float(v[2])), "done": false}) func _process(delta: float) -> void: t += delta var scene := get_tree().current_scene var player := get_tree().get_first_node_in_group("local_player") if scene == null or player == null: return if not get_tree().paused: # на паузе идёт загрузка карты for tp in tps: if not tp.done and t >= tp.t: tp.done = true player.global_position = tp.pos player.velocity = Vector3.ZERO print("[%s] t=%.1f ТЕЛЕПОРТ %s" % [label, t, tp.pos]) if t >= next_print: next_print += 1.0 var chasers := [] for id in Net.chasers: var c: Node3D = Net.chasers[id] chasers.append("%s=(%.0f,%.0f)%s" % [id, c.global_position.x, c.global_position.z, "!" if c.get("_state") == 1 else ""]) print("[%s] t=%4.1f сцена=%s карта=%s владелец=%s свой=%s призраков=%d мёртв=%s %s" % [ label, t, scene.name, Net.current_map, Net.rock_owner, Net.rock_is_local(), Net.ghosts.size(), player.is_dead, " ".join(chasers)])