feat: expand progression and multiplayer systems
Add named save slots, progression import/export, and a unified play flow. Add live friend requests, presence, invitations, and relationship controls without durable discovery-server social storage. Advance the network protocol with isolated channels, movement reconciliation, late-join recovery, fishing replication, and animation synchronization. Preserve per-species catch totals, refine generated-world startup and water recovery, and complete the related input and interface improvements.
This commit is contained in:
parent
1db1a5b754
commit
3b84bfe3a0
97 changed files with 7869 additions and 982 deletions
|
|
@ -36,6 +36,10 @@ func _run_host() -> void:
|
|||
as NetworkPlayerListService
|
||||
)
|
||||
var bans := main.get_node("%HostBanStore") as HostBanStore
|
||||
assert(bool(main.call(
|
||||
"_apply_world", WorldLayout.STARTER_ISLAND, 1, true
|
||||
)))
|
||||
assert(session.set_host_world(WorldLayout.STARTER_ISLAND, 1))
|
||||
assert(session.start_private_host(TEST_PORT))
|
||||
assert(session.set_host_open(true))
|
||||
|
||||
|
|
@ -65,7 +69,7 @@ func _run_host() -> void:
|
|||
assert(players_page != null)
|
||||
players_page.call("_refresh")
|
||||
assert(_has_button_text(players_page, "deop"))
|
||||
assert(_has_button_text(players_page, "clear art"))
|
||||
assert(_has_button_tooltip(players_page, "scrub art"))
|
||||
|
||||
var unban_deadline: int = Time.get_ticks_msec() + 12000
|
||||
while (
|
||||
|
|
@ -149,9 +153,9 @@ func _run_client() -> void:
|
|||
assert(players_page != null)
|
||||
players_page.call("_refresh")
|
||||
var tabs := players_page.get("_tabs") as HBoxContainer
|
||||
assert((tabs.get_child(2) as Button).visible)
|
||||
players_page.call("_select_tab", 2)
|
||||
assert(int(players_page.get("_current_tab")) == 2)
|
||||
assert((tabs.get_child(3) as Button).visible)
|
||||
players_page.call("_select_tab", 3)
|
||||
assert(int(players_page.get("_current_tab")) == 3)
|
||||
var local_entry: PlayerListEntry = _entry_for_peer(
|
||||
service, session.get_local_peer_id()
|
||||
)
|
||||
|
|
@ -176,7 +180,7 @@ func _run_client() -> void:
|
|||
await process_frame
|
||||
assert(not session.is_local_operator())
|
||||
assert(not service.is_local_moderator())
|
||||
assert(not (tabs.get_child(2) as Button).visible)
|
||||
assert(not (tabs.get_child(3) as Button).visible)
|
||||
assert(int(players_page.get("_current_tab")) == 0)
|
||||
service.request_unban.rpc_id(1, SECOND_BANNED_FINGERPRINT)
|
||||
var disconnect_deadline: int = Time.get_ticks_msec() + 10000
|
||||
|
|
@ -252,3 +256,11 @@ func _has_button_text(root_node: Node, text: String) -> bool:
|
|||
if button != null and button.text == text:
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func _has_button_tooltip(root_node: Node, tooltip: String) -> bool:
|
||||
for node: Node in root_node.find_children("*", "Button", true, false):
|
||||
var button := node as Button
|
||||
if button != null and button.tooltip_text == tooltip:
|
||||
return true
|
||||
return false
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue