add export for dedicated server

This commit is contained in:
Teatov 2025-02-12 22:27:47 +10:00
parent 999de88669
commit 6bcc8757b7
4 changed files with 175 additions and 46 deletions

View File

@ -1,45 +1,5 @@
[preset.0]
name="linux"
platform="Linux"
runnable=true
advanced_options=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="build/linux/cadastery.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.1]
name="windows"
platform="Windows Desktop"
runnable=true
@ -56,7 +16,7 @@ encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
[preset.0.options]
custom_template/debug=""
custom_template/release=""
@ -103,6 +63,46 @@ ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debu
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.1]
name="linux"
platform="Linux"
runnable=true
advanced_options=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="build/linux/cadastery.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.2]
name="mac"
@ -352,3 +352,116 @@ open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.3]
name="server"
platform="Linux"
runnable=false
advanced_options=true
dedicated_server=true
custom_features=""
export_filter="customized"
customized_files={
"res://": "strip",
"res://assets/textures/ui/": "keep"
}
include_filter=""
exclude_filter=""
export_path="build/server/cadastery.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.3.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.4]
name="Windows Desktop"
platform="Windows Desktop"
runnable=false
advanced_options=true
dedicated_server=true
custom_features=""
export_filter="customized"
customized_files={
"res://": "strip",
"res://assets/textures/ui/": "keep"
}
include_filter=""
exclude_filter=""
export_path="build/server_windows/cadastery.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.4.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

View File

@ -34,7 +34,8 @@ func set_local_player_info(username: String) -> void:
_local_player_info["name"] = username
func host_game() -> void:
func host_game(dedicated: bool = false) -> void:
print("Hosting...")
_peer = ENetMultiplayerPeer.new()
var error := _peer.create_server(DEFAULT_PORT, MAX_PEERS)
@ -48,14 +49,16 @@ func host_game() -> void:
multiplayer.set_multiplayer_peer(_peer)
_load_main()
if not dedicated:
_players[1] = _local_player_info
player_connected.emit(1, _local_player_info)
_load_main()
_add_player(multiplayer.get_unique_id())
func join_game(ip: String) -> void:
print("Joining " + ip + "...")
_peer = ENetMultiplayerPeer.new()
var error := _peer.create_client(ip, DEFAULT_PORT)
@ -78,9 +81,11 @@ func _switch_scene(from: Node, to: PackedScene) -> void:
var new_scene := to.instantiate()
get_tree().get_root().add_child(new_scene)
print("Scene loaded")
func _load_main() -> void:
print("Loading Main...")
_switch_scene($/root/Title, _main_scene)
main_loaded.emit()
@ -89,6 +94,7 @@ func _add_player(peer_id: int) -> void:
if not multiplayer.is_server():
return
print("Adding player ", peer_id)
var player := _player_scene.instantiate() as Player
player.name = str(peer_id)
@ -100,6 +106,7 @@ func _remove_player(peer_id: int) -> void:
if not multiplayer.is_server():
return
print("Removing player ", peer_id)
var player_holder: Node = $/root/Main/Players
var player := player_holder.get_node_or_null(str(peer_id))
if player:
@ -108,6 +115,7 @@ func _remove_player(peer_id: int) -> void:
@rpc("any_peer", "reliable")
func _register_player(player_info: Dictionary) -> void:
print("Registering player ", player_info)
var player_id := multiplayer.get_remote_sender_id()
_players[player_id] = player_info
player_connected.emit(player_id, player_info)
@ -126,6 +134,7 @@ func _on_multiplayer_peer_disconnected(peer_id: int) -> void:
func _on_multiplayer_connected_to_server() -> void:
print("Connected to server")
var peer_id := multiplayer.get_unique_id()
_players[peer_id] = _local_player_info
player_connected.emit(peer_id, _local_player_info)

View File

@ -30,13 +30,16 @@ func _ready() -> void:
_camera.make_current()
Referencer.player = self
Referencer.main_camera = _camera
print("Player ", name, " ready")
func _exit_tree() -> void:
if not is_multiplayer_authority():
return
Referencer.player = null
Referencer.main_camera = null
print("Player ", name, " exiting tree")
func _process(delta: float) -> void:

View File

@ -8,6 +8,10 @@ extends Panel
func _ready() -> void:
if OS.has_feature("dedicated_server") or DisplayServer.get_name() == "headless":
Networker.host_game(true)
return
_host_button.pressed.connect(_on_host_button_pressed)
_join_button.pressed.connect(_on_join_button_pressed)
Networker.network_error.connect(_on_networker_network_error)