feat: 2.3.1

This commit is contained in:
2026-05-12 17:55:53 +08:00
parent 13f3c3d591
commit 7ca11c6534
28 changed files with 1328 additions and 578 deletions
+21 -1
View File
@@ -1,7 +1,27 @@
{
"latest_version": "2.3.1",
"latest_version": "2.3.2",
"minimum_app_version": "2.1.0",
"releases": [
{
"version": "2.3.2",
"date": "2026-05-12",
"pck_url": "https://raw.githubusercontent.com/adtpdn/tekton-updates/main/latest/patch.pck",
"pck_size": 0,
"changelog": [
"Integrated Mailbox UI into lobby with CanvasLayer overlay",
"Redesigned mailbox_panel.tscn to 3-column layout (mail list, content, rewards)",
"Added auto read-all and auto claim-all on mailbox open",
"Fixed MailboxBtn text glitch — replaced text override with MailBadge Label overlay",
"Admin Panel: Target user field now accepts username or user_id with Find button",
"Admin Panel: New Mail Manager tab to view, edit, end, and delete sent announcements",
"Admin Panel: Edit dialog uses DatePicker for end date and supports recipient reassignment",
"Server: Added admin_list_mail, admin_update_mail, admin_delete_mail_server RPCs",
"Server: admin_list_mail scans all users personal inboxes via storageList",
"Server: admin_update_mail supports moving mail between users and global",
"Server: Added save_mail_state RPC to persist read_ids to server",
"Fixed mark_as_read — now persists to Nakama inbox state instead of local-only pass"
]
},
{
"version": "2.3.1",
"date": "2026-05-11",
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://mw0hjqg4u58a"
path="res://.godot/imported/btn_back.png-766f18f6c608c9d18d187505f5ac889b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/btn_back.png"
dest_files=["res://.godot/imported/btn_back.png-766f18f6c608c9d18d187505f5ac889b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://byvqbe1m2dr41"
path="res://.godot/imported/btn_delete.png-cf3f17cefdd7f374d94d8379a1c9f478.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/btn_delete.png"
dest_files=["res://.godot/imported/btn_delete.png-cf3f17cefdd7f374d94d8379a1c9f478.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cs5lke40qve7y"
path="res://.godot/imported/mailbox_icon.png-c85e0603097425f2befc209c5030293f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/mailbox_icon.png"
dest_files=["res://.godot/imported/mailbox_icon.png-c85e0603097425f2befc209c5030293f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bc14cddtp0gvq"
path="res://.godot/imported/mailbox_node_01.png-a4c2ade2737ef5ed9de0d64d83793bb5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/mailbox_node_01.png"
dest_files=["res://.godot/imported/mailbox_node_01.png-a4c2ade2737ef5ed9de0d64d83793bb5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cosjvp4msuv34"
path="res://.godot/imported/mailbox_node_02.png-c71d25c932b515f6569f65ba769a206c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/mailbox_node_02.png"
dest_files=["res://.godot/imported/mailbox_node_02.png-c71d25c932b515f6569f65ba769a206c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://exkx1hado3wi"
path="res://.godot/imported/read_all.png-3faf33804509dc0f18651b7ee0cbaf4b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/gui/mailbox/read_all.png"
dest_files=["res://.godot/imported/read_all.png-3faf33804509dc0f18651b7ee0cbaf4b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
-286
View File
@@ -1,286 +0,0 @@
[gd_scene format=3 uid="uid://xpalyawdgnyl"]
[ext_resource type="Script" uid="uid://b5q6yekyk0tld" path="res://scenes/lobby.gd" id="1_lp6xi"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2_theme"]
[node name="Lobby" type="Control" unique_id=1681755368]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_theme")
script = ExtResource("1_lp6xi")
[node name="Background" type="ColorRect" parent="." unique_id=610186638]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.12, 0.1, 0.08, 1)
[node name="MainMenuPanel" type="PanelContainer" parent="." unique_id=749972967]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -220.0
offset_top = -240.0
offset_right = 220.0
offset_bottom = 240.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel" unique_id=172832102]
layout_mode = 2
theme_override_constants/separation = 18
[node name="TitleContainer" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=1254704944]
layout_mode = 2
theme_override_constants/separation = 4
[node name="Title" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer" unique_id=1313646849]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 44
text = "TEKTON DASH"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Subtitle" type="Label" parent="MainMenuPanel/VBoxContainer/TitleContainer" unique_id=981494139]
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 12
text = "ARMAGEDDON VERSION"
horizontal_alignment = 1
[node name="Separator" type="HSeparator" parent="MainMenuPanel/VBoxContainer" unique_id=1861761683]
layout_mode = 2
[node name="InputSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=113453689]
layout_mode = 2
theme_override_constants/separation = 10
[node name="PlayerNameLabel" type="Label" parent="MainMenuPanel/VBoxContainer/InputSection" unique_id=2007198770]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 13
text = "YOUR NAME"
[node name="PlayerNameInput" type="LineEdit" parent="MainMenuPanel/VBoxContainer/InputSection" unique_id=543986981]
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "Player"
placeholder_text = "Enter your name..."
[node name="ButtonSection" type="VBoxContainer" parent="MainMenuPanel/VBoxContainer" unique_id=357245135]
layout_mode = 2
theme_override_constants/separation = 12
[node name="CreateRoomBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection" unique_id=1297504653]
custom_minimum_size = Vector2(0, 48)
layout_mode = 2
theme_override_font_sizes/font_size = 16
text = "CREATE ROOM"
[node name="BrowseRoomsBtn" type="Button" parent="MainMenuPanel/VBoxContainer/ButtonSection" unique_id=1825906901]
custom_minimum_size = Vector2(0, 48)
layout_mode = 2
theme_override_font_sizes/font_size = 16
text = "BROWSE ROOMS"
[node name="RoomListPanel" type="PanelContainer" parent="." unique_id=1969054574]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -300.0
offset_top = -260.0
offset_right = 300.0
offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="RoomListPanel" unique_id=726092140]
layout_mode = 2
theme_override_constants/separation = 14
[node name="Header" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=1272860526]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 28
text = "SERVER BROWSER"
horizontal_alignment = 1
[node name="HSeparator" type="HSeparator" parent="RoomListPanel/VBoxContainer" unique_id=38843595]
layout_mode = 2
[node name="MatchIdLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=316758674]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "DIRECT CONNECT (MATCH ID)"
[node name="MatchIdInput" type="LineEdit" parent="RoomListPanel/VBoxContainer" unique_id=159753310]
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
placeholder_text = "Paste match ID here..."
[node name="RoomListLabel" type="Label" parent="RoomListPanel/VBoxContainer" unique_id=867057060]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "AVAILABLE SERVERS"
[node name="RoomList" type="ItemList" parent="RoomListPanel/VBoxContainer" unique_id=203590990]
custom_minimum_size = Vector2(0, 200)
layout_mode = 2
allow_reselect = true
[node name="ButtonContainer" type="HBoxContainer" parent="RoomListPanel/VBoxContainer" unique_id=178401080]
layout_mode = 2
theme_override_constants/separation = 14
alignment = 1
[node name="RefreshBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1068680772]
custom_minimum_size = Vector2(110, 44)
layout_mode = 2
text = "REFRESH"
[node name="JoinBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=822083530]
custom_minimum_size = Vector2(130, 44)
layout_mode = 2
text = "JOIN SERVER"
[node name="BackBtn" type="Button" parent="RoomListPanel/VBoxContainer/ButtonContainer" unique_id=1873303918]
custom_minimum_size = Vector2(110, 44)
layout_mode = 2
text = "BACK"
[node name="LobbyPanel" type="PanelContainer" parent="." unique_id=1955208668]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -300.0
offset_top = -260.0
offset_right = 300.0
offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="LobbyPanel" unique_id=1443407103]
layout_mode = 2
theme_override_constants/separation = 14
[node name="RoomNameHeader" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=2019479226]
layout_mode = 2
theme_override_colors/font_color = Color(0.647, 0.996, 0.224, 1)
theme_override_font_sizes/font_size = 26
text = "ROOM: "
horizontal_alignment = 1
[node name="MatchIdContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer" unique_id=280307543]
layout_mode = 2
alignment = 1
[node name="MatchIdDisplay" type="Label" parent="LobbyPanel/VBoxContainer/MatchIdContainer" unique_id=1883524532]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 0.5, 0.55, 1)
theme_override_font_sizes/font_size = 10
text = "Match ID: "
[node name="CopyIdBtn" type="Button" parent="LobbyPanel/VBoxContainer/MatchIdContainer" unique_id=1770583860]
custom_minimum_size = Vector2(80, 32)
layout_mode = 2
theme_override_font_sizes/font_size = 10
text = "COPY"
[node name="HSeparator" type="HSeparator" parent="LobbyPanel/VBoxContainer" unique_id=346787128]
layout_mode = 2
[node name="PlayersLabel" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=1266635921]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 13
text = "PLAYERS"
[node name="PlayerList" type="ItemList" parent="LobbyPanel/VBoxContainer" unique_id=1481128408]
custom_minimum_size = Vector2(0, 160)
layout_mode = 2
allow_reselect = true
[node name="StatusLabel" type="Label" parent="LobbyPanel/VBoxContainer" unique_id=1750308910]
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Waiting for players..."
horizontal_alignment = 1
[node name="ButtonContainer" type="HBoxContainer" parent="LobbyPanel/VBoxContainer" unique_id=941148439]
layout_mode = 2
theme_override_constants/separation = 14
alignment = 1
[node name="ReadyBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=386730307]
custom_minimum_size = Vector2(110, 48)
layout_mode = 2
toggle_mode = true
text = "READY"
[node name="StartGameBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=1510805318]
custom_minimum_size = Vector2(140, 48)
layout_mode = 2
disabled = true
text = "START GAME"
[node name="LeaveBtn" type="Button" parent="LobbyPanel/VBoxContainer/ButtonContainer" unique_id=1773320572]
custom_minimum_size = Vector2(110, 48)
layout_mode = 2
text = "LEAVE"
[node name="StatusBar" type="PanelContainer" parent="." unique_id=547557114]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 24.0
offset_top = -72.0
offset_right = -24.0
offset_bottom = -24.0
grow_horizontal = 2
grow_vertical = 0
[node name="ConnectionStatus" type="Label" parent="StatusBar" unique_id=1282790307]
layout_mode = 2
theme_override_colors/font_color = Color(0.69, 0.529, 0.357, 1)
theme_override_font_sizes/font_size = 12
text = "NOT CONNECTED"
horizontal_alignment = 1
[node name="VersionLabel" type="Label" parent="." unique_id=1619858099]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -130.0
offset_top = 20.0
offset_right = -20.0
offset_bottom = 40.0
grow_horizontal = 0
theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 0.6)
theme_override_font_sizes/font_size = 11
text = "v0.1.0 ALPHA"
horizontal_alignment = 2