From 390ab0659bf2a13fe9866e33252dbcd45f27a976 Mon Sep 17 00:00:00 2001 From: yvmou_ Date: Sat, 12 Sep 2026 22:32:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E9=A1=B9=E7=9B=AE=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=EF=BC=88=E5=AE=A1=E6=A0=B8=E5=90=8Ecommit=EF=BC=89?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E6=97=A0=E5=A4=B4=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 89 +++++++++++++++++++++++++++++++++++++++++- run_headless_server.sh | 65 ++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 run_headless_server.sh diff --git a/project.godot b/project.godot index 0a17fee..469c2d6 100644 --- a/project.godot +++ b/project.godot @@ -11,11 +11,20 @@ config_version=5 [application] config/name="agame" +config/tags=PackedStringArray("3d", "network") +run/main_scene="res://scenes/level/level.tscn" config/features=PackedStringArray("4.7", "Forward Plus") -config/icon="uid://qsdtdrh44ejn" +config/icon="res://icon.png" + +[autoload] + +Network="*res://scripts/autoload/network.gd" +ItemDatabase="*res://scripts/autoload/item_database.gd" [display] +window/size/viewport_width=1280 +window/size/viewport_height=720 window/stretch/mode="canvas_items" window/stretch/aspect="expand" @@ -23,6 +32,83 @@ window/stretch/aspect="expand" enabled=PackedStringArray("res://addons/script-ide/plugin.cfg") +[global_group] + +Players="包含全部玩家节点的分组" + +[gui] + +theme/custom_font="res://assets/fonts/Kurland.ttf" + +[input] + +move_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +move_forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +move_backward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +shift={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +pause={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +toggle_chat={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":84,"key_label":0,"unicode":116,"location":0,"echo":false,"script":null) +] +} +inventory={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) +] +} +pickup={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} +attack={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(53, 16),"global_position":Vector2(62, 64),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +toggle_camera={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":86,"key_label":0,"unicode":118,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_1="player" +3d_physics/layer_2="world" +3d/physics_engine="Jolt Physics" + [physics] 3d/physics_engine="Jolt Physics" @@ -30,3 +116,4 @@ enabled=PackedStringArray("res://addons/script-ide/plugin.cfg") [rendering] rendering_device/driver.windows="d3d12" +anti_aliasing/quality/msaa_3d=2 diff --git a/run_headless_server.sh b/run_headless_server.sh new file mode 100644 index 0000000..3b7d31c --- /dev/null +++ b/run_headless_server.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +find_godot() { + if [[ -n "${GODOT_BIN:-}" && -x "$GODOT_BIN" ]]; then + printf '%s\n' "$GODOT_BIN" + return 0 + fi + + if command -v godot >/dev/null 2>&1; then + command -v godot + return 0 + fi + + return 1 +} + +stop_server() { + local server_pid="$1" + + if kill -0 "$server_pid" 2>/dev/null; then + echo + echo "Stopping Dedicated Server..." + kill "$server_pid" 2>/dev/null || true + + for _ in {1..20}; do + if ! kill -0 "$server_pid" 2>/dev/null; then + return + fi + sleep 0.1 + done + + kill -KILL "$server_pid" 2>/dev/null || true + fi +} + +main() { + local godot_bin + if ! godot_bin="$(find_godot)"; then + echo "Error: Godot 4 was not found." >&2 + echo "Install Godot 4, add it to PATH, or set GODOT_BIN to its executable path." >&2 + return 127 + fi + + local project_dir + project_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" + + echo "Starting Dedicated Server (Headless Mode) with: $godot_bin" + + "$godot_bin" --headless --path "$project_dir" & + local server_pid=$! + local stopping=false + + trap 'stopping=true; stop_server "$server_pid"' INT TERM EXIT + + local exit_code=0 + wait "$server_pid" 2>/dev/null || exit_code=$? + trap - INT TERM EXIT + + if [[ "$stopping" == true ]]; then + return 0 + fi + return "$exit_code" +} + +main "$@"