Release alpha 10 with bilingual UI and social co-op
This commit is contained in:
1 parent
7d5cad7277
commit
d53467baf2
22 files changed
+1714
-271
No files matched your search
@@ -0,0 +1,68 @@
|
||||
extends SceneTree
|
||||
|
||||
var received_invites: Array = []
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
call_deferred("_run")
|
||||
|
||||
|
||||
func _run() -> void:
|
||||
var nakama = root.get_node("Nakama")
|
||||
var host := OS.get_environment("VOID_BASTION_TEST_HOST")
|
||||
var scheme := OS.get_environment("VOID_BASTION_TEST_SCHEME")
|
||||
var port_text := OS.get_environment("VOID_BASTION_TEST_PORT")
|
||||
if host.is_empty():
|
||||
host = "192.168.178.20"
|
||||
if scheme.is_empty():
|
||||
scheme = "http"
|
||||
var port := int(port_text) if not port_text.is_empty() else 7350
|
||||
var client_a: NakamaClient = nakama.create_client("voidbastion-public-v1", host, port, scheme, 5, NakamaLogger.LOG_LEVEL.ERROR)
|
||||
var client_b: NakamaClient = nakama.create_client("voidbastion-public-v1", host, port, scheme, 5, NakamaLogger.LOG_LEVEL.ERROR)
|
||||
var suffix := str(Time.get_ticks_usec())
|
||||
var session_a: NakamaSession = await client_a.authenticate_device_async("social_test_a_" + suffix, "social_a_" + suffix, true)
|
||||
var session_b: NakamaSession = await client_b.authenticate_device_async("social_test_b_" + suffix, "social_b_" + suffix, true)
|
||||
assert(not session_a.is_exception() and not session_b.is_exception(), "Beide Testkonten müssen sich anmelden können.")
|
||||
var socket_a: NakamaSocket = nakama.create_socket_from(client_a)
|
||||
var socket_b: NakamaSocket = nakama.create_socket_from(client_b)
|
||||
assert(not (await socket_a.connect_async(session_a, true, 5)).is_exception())
|
||||
assert(not (await socket_b.connect_async(session_b, true, 5)).is_exception())
|
||||
socket_b.received_notification.connect(func(note):
|
||||
if int(note.code) == 101:
|
||||
received_invites.append(JSON.parse_string(note.content)))
|
||||
var requested = await client_a.add_friends_async(session_a, null, PackedStringArray([session_b.username]))
|
||||
assert(not requested.is_exception(), "Eine Freundschaftsanfrage muss gesendet werden können.")
|
||||
var accepted = await client_b.add_friends_async(session_b, PackedStringArray([session_a.user_id]))
|
||||
assert(not accepted.is_exception(), "Die Anfrage muss angenommen werden können.")
|
||||
var friend_list = await client_a.list_friends_async(session_a, 0, 100)
|
||||
assert(not friend_list.is_exception() and friend_list.friends.size() == 1 and friend_list.friends[0].user.id == session_b.user_id,
|
||||
"Die gegenseitige Freundschaft muss auf dem Server gespeichert sein.")
|
||||
var followed = await socket_a.follow_users_async(PackedStringArray([session_b.user_id]), PackedStringArray())
|
||||
assert(not followed.is_exception(), "Der Freundesstatus muss abonnierbar sein.")
|
||||
assert(not (await socket_b.update_status_async("playing")).is_exception(), "Der Im-Spiel-Status muss gesetzt werden können.")
|
||||
var created = await client_a.rpc_async(session_a, "create_private_room", JSON.stringify({"difficulty": 1}))
|
||||
assert(not created.is_exception(), "Ein privater Raum muss erstellbar sein.")
|
||||
var room: Dictionary = JSON.parse_string(created.payload)
|
||||
var code := String(room.get("room_code", ""))
|
||||
assert(code.length() == 6)
|
||||
var joined = await socket_a.join_match_async(String(room.get("match_id", "")))
|
||||
assert(not joined.is_exception(), "Der Gastgeber muss den privaten Raum betreten können.")
|
||||
var invited = await client_a.rpc_async(session_a, "invite_friend", JSON.stringify({"friend_id": session_b.user_id, "room_code": code}))
|
||||
assert(not invited.is_exception() and bool(JSON.parse_string(invited.payload).get("accepted", false)),
|
||||
"Der Gastgeber muss einen bestätigten Freund einladen können.")
|
||||
for attempt in 40:
|
||||
if not received_invites.is_empty():
|
||||
break
|
||||
await create_timer(0.05).timeout
|
||||
assert(not received_invites.is_empty() and received_invites[0] is Dictionary and String(received_invites[0].get("room_code", "")) == code,
|
||||
"Die Echtzeit-Einladung muss den Raumcode enthalten.")
|
||||
var unauthorized = await client_b.rpc_async(session_b, "invite_friend", JSON.stringify({"friend_id": session_a.user_id, "room_code": code}))
|
||||
assert(not unauthorized.is_exception() and not bool(JSON.parse_string(unauthorized.payload).get("accepted", true)),
|
||||
"Ein Mitspieler ohne Gastgeberrolle darf keine Einladung versenden.")
|
||||
socket_a.close()
|
||||
socket_b.close()
|
||||
var deleted_a = await client_a.rpc_async(session_a, "delete_account", "{}")
|
||||
var deleted_b = await client_b.rpc_async(session_b, "delete_account", "{}")
|
||||
assert(not deleted_a.is_exception() and not deleted_b.is_exception(), "Die Testkonten müssen entfernt werden können.")
|
||||
print("VOID_BASTION_SOCIAL_INTEGRATION_OK")
|
||||
quit()
|
||||
Reference in new issue
Block a user