I want to make party system.
But unfortunately, I’m told that the party system has a code error.
I want to get advice from code.
For reference I already make var . So I hope you don’t mind me not writing down the variables.
Also, I need to move participants to the game scene when matchmaking happens, but honestly, I’m not good at implementing it.
func create_party():
if party != null:
return
if nk_socket == null or not nk_socket.connected:
return
party = await nk_socket.create_party_async(true, 5)
if party.is_exception():
party = null
return
is_party_leader = true
party_users[nk_session.user_id] = Playerdata.nick_name
update_party_labels()
await join_party_chat(party.party_id)
update_party_ui()
func _join_party_via_chat(party_id: String):
if party != null:
auto_create_party = false
await leave_current_party()
var result = await nk_socket.join_party_async(party_id)
if result.is_exception():
print("error", result.exception.message)
_add_chat_log("error")
auto_create_party = true
await create_party()
return
party = result
is_party_leader = false
_add_chat_log("join party successful")
await join_party_chat(party.party_id)
update_party_ui()
auto_create_party = true
func join_party_chat(party_id: String):
var room_name = "party_" + party_id
var channel = await nk_socket.join_chat_async(room_name, 1, true, false)
if channel.is_exception():
print("partychat failed", channel.exception.message)
return
party_chat_channel = channel
func leave_party_chat():
if party_chat_channel == null:
return
await nk_socket.leave_chat_async(party_chat_channel.id)
party_chat_channel = null
leave_party_button.visible=false
func leave_current_party():
if party == null:
return
await leave_party_chat()
await nk_socket.leave_party_async(party.party_id)
party = null
party_users.clear()
is_party_leader = false
update_party_ui()
if auto_create_party:
await get_tree().create_timer(0.3).timeout
await create_party()
func _on_party_presence(event):
for join in event.joins:
party_users[join.user_id] = join.username
for leave in event.leaves:
party_users.erase(leave.user_id)
update_party_labels()
func update_party_labels():
for label in party_labels:
label.text = ""
label.visible = false
var i := 0
for username in party_users.values():
if i >= party_labels.size():
break
party_labels[i].text = username
party_labels[i].visible = true
i += 1
func update_party_ui():
if party != null:
leave_party_button.visible = true
ready_button.visible = party_users.size() >= 2
else:
leave_party_button.visible = false
ready_button.visible = false
func ready_button_pressed():
if ready_players.has(Playerdata.user_id) and ready_players[Playerdata.user_id]:
ready_players[Playerdata.user_id] = false
ready_button.text = "Ready"
else:
ready_players[Playerdata.user_id] = true
ready_button.text = "Ready complete"
if is_party_leader:
_check_all_ready()
func _check_all_ready():
for uid in party_users.keys():
if not ready_players.has(uid) or not ready_players[uid]:
return
print("all player ready")
join_party_match()
func join_party_match():
if not is_party_leader:
return
var party_id = party.party_id
match_ticket = await nk_socket.add_matchmaker_async("*", party_users.size(), party_users.size(), {"party_id": party_id}, {})
if match_ticket.is_exception():
print("join failed", match_ticket.exception.message)
return
print("ready", party_id)