From a0076078c8a2176219e987144cca97cde7eb4643 Mon Sep 17 00:00:00 2001 From: makeyangcom Date: Sat, 16 Mar 2024 11:52:44 +0800 Subject: [PATCH 1/3] main --- game/scenes/launch/launch.tscn | 407 +++++++++++-- game/scripts/launch/launch.gd | 79 +++ .../database/game_account_data/table.go | 45 ++ .../database/game_level_data/table.go | 53 ++ .../framework/database/game_map_data/table.go | 47 ++ .../database/game_player_data/table.go | 81 +++ .../database/game_server_data/table.go | 40 ++ server/framework/interface/account/account.go | 81 +++ server/framework/interface/interface.go | 7 + update.bat | 2 +- wiki/course/3.0.0.md | 540 +++++++++++++++++- 11 files changed, 1335 insertions(+), 47 deletions(-) create mode 100644 game/scripts/launch/launch.gd create mode 100644 server/framework/database/game_account_data/table.go create mode 100644 server/framework/database/game_level_data/table.go create mode 100644 server/framework/database/game_map_data/table.go create mode 100644 server/framework/database/game_player_data/table.go create mode 100644 server/framework/database/game_server_data/table.go create mode 100644 server/framework/interface/account/account.go diff --git a/game/scenes/launch/launch.tscn b/game/scenes/launch/launch.tscn index 01425ee..cca112a 100644 --- a/game/scenes/launch/launch.tscn +++ b/game/scenes/launch/launch.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=21 format=3 uid="uid://i6g3y6btijjm"] +[gd_scene load_steps=25 format=3 uid="uid://i6g3y6btijjm"] +[ext_resource type="Script" path="res://scripts/launch/launch.gd" id="1_4mmer"] [ext_resource type="Texture2D" uid="uid://d05rp7emahb2e" path="res://assets/launch/background.jpeg" id="1_5xji2"] [ext_resource type="Texture2D" uid="uid://cuej03yg4jipe" path="res://assets/launch/logo.png" id="2_0aob3"] [ext_resource type="Texture2D" uid="uid://fsim526ipc0l" path="res://assets/launch/login/login_main.png" id="3_5llxh"] @@ -13,6 +14,7 @@ [ext_resource type="Texture2D" uid="uid://c2yxw4e4eqhtf" path="res://assets/launch/login/change_password_button_1.png" id="11_qrjou"] [ext_resource type="Texture2D" uid="uid://bc32c8pqrsy0b" path="res://assets/launch/login/change_password_button_2.png" id="12_2fiqv"] [ext_resource type="Texture2D" uid="uid://7ckxiv7awadm" path="res://assets/launch/login/register.png" id="13_ruxkj"] +[ext_resource type="FontFile" uid="uid://b8ippc7k3ew6o" path="res://assets/common/font/msyh.ttc" id="13_scx2i"] [ext_resource type="Texture2D" uid="uid://bijbk6c76ynei" path="res://assets/launch/login/change_password.png" id="14_d8t0o"] [ext_resource type="Texture2D" uid="uid://dmkyb57b0idt6" path="res://assets/launch/login/confirm_button_0.png" id="14_f5mlh"] [ext_resource type="Texture2D" uid="uid://b2fk8xp87k1g" path="res://assets/launch/login/confirm_button_1.png" id="15_783oq"] @@ -21,6 +23,10 @@ [ext_resource type="Texture2D" uid="uid://06rsvnelh6ug" path="res://assets/launch/login/cancel_button_1.png" id="18_odk15"] [ext_resource type="Texture2D" uid="uid://cbdi6fpcw3q66" path="res://assets/launch/login/cancel_button_2.png" id="19_m2fqs"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_m6v8k"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_twyo5"] + [node name="Launch" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -28,6 +34,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +script = ExtResource("1_4mmer") [node name="Background" type="TextureRect" parent="."] layout_mode = 1 @@ -48,9 +55,9 @@ anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 offset_left = -200.5 -offset_top = -266.5 +offset_top = -264.5 offset_right = 200.5 -offset_bottom = 170.5 +offset_bottom = 172.5 grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("2_0aob3") @@ -79,14 +86,14 @@ anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 offset_left = -281.0 -offset_top = 60.5 +offset_top = 64.5 offset_right = 281.0 -offset_bottom = 315.5 +offset_bottom = 319.5 grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("3_5llxh") -[node name="LoginButton" type="TextureButton" parent="Login/Main/Background"] +[node name="MainSubmitButton" type="TextureButton" parent="Login/Main/Background"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -94,42 +101,42 @@ anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 offset_left = -93.0 -offset_top = 16.0 +offset_top = 13.0 offset_right = 109.0 -offset_bottom = 62.0 +offset_bottom = 59.0 grow_horizontal = 2 grow_vertical = 2 texture_normal = ExtResource("4_h5ojd") texture_pressed = ExtResource("5_jt32w") texture_hover = ExtResource("6_0lxvy") -[node name="RegisterButton" type="TextureButton" parent="Login/Main/Background"] +[node name="MainRegisterButton" type="TextureButton" parent="Login/Main/Background"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -151.0 -offset_top = 80.0 -offset_right = -29.0 -offset_bottom = 103.0 +offset_left = -170.0 +offset_top = 81.0 +offset_right = -48.0 +offset_bottom = 104.0 grow_horizontal = 2 grow_vertical = 2 texture_normal = ExtResource("7_tqnk7") texture_pressed = ExtResource("8_gwvfn") texture_hover = ExtResource("9_4hsjm") -[node name="RetrievePasswordButton" type="TextureButton" parent="Login/Main/Background"] +[node name="MainChangePasswordButton" type="TextureButton" parent="Login/Main/Background"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = 27.0 +offset_left = 45.0 offset_top = 79.0 -offset_right = 149.0 +offset_right = 167.0 offset_bottom = 104.0 grow_horizontal = 2 grow_vertical = 2 @@ -137,6 +144,46 @@ texture_normal = ExtResource("10_pmgwe") texture_pressed = ExtResource("11_qrjou") texture_hover = ExtResource("12_2fiqv") +[node name="MainAccountInput" type="LineEdit" parent="Login/Main/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -84.0 +offset_top = -79.5 +offset_right = 102.0 +offset_bottom = -52.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入登录邮箱" +flat = true + +[node name="MainPasswordInput" type="LineEdit" parent="Login/Main/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -83.0 +offset_top = -30.5 +offset_right = 103.0 +offset_bottom = -3.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_twyo5") +placeholder_text = "请输入登录密码" +flat = true +secret = true +secret_character = "*" + [node name="Register" type="Control" parent="Login"] layout_mode = 1 anchors_preset = 15 @@ -160,41 +207,213 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("13_ruxkj") -[node name="ConfirmButton" type="TextureButton" parent="Login/Register/Background"] +[node name="RegisterConfirmButton" type="TextureButton" parent="Login/Register/Background"] layout_mode = 1 -anchors_preset = 8 +anchors_preset = 7 anchor_left = 0.5 -anchor_top = 0.5 +anchor_top = 1.0 anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = 23.0 -offset_top = 138.5 -offset_right = 107.0 -offset_bottom = 167.5 +anchor_bottom = 1.0 +offset_left = 20.0 +offset_top = -52.0 +offset_right = 104.0 +offset_bottom = -23.0 grow_horizontal = 2 -grow_vertical = 2 +grow_vertical = 0 texture_normal = ExtResource("14_f5mlh") texture_pressed = ExtResource("15_783oq") texture_hover = ExtResource("16_tgcix") -[node name="CancelButton" type="TextureButton" parent="Login/Register/Background"] +[node name="RegisterCancelButton" type="TextureButton" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = 121.0 +offset_top = -52.0 +offset_right = 205.0 +offset_bottom = -23.0 +grow_horizontal = 2 +grow_vertical = 0 +texture_normal = ExtResource("17_1wujc") +texture_pressed = ExtResource("18_odk15") +texture_hover = ExtResource("19_m2fqs") + +[node name="RegisterAccountInput" type="LineEdit" parent="Login/Register/Background"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = 117.0 -offset_top = 138.5 -offset_right = 201.0 -offset_bottom = 167.5 +offset_left = -170.5 +offset_top = -131.5 +offset_right = 10.5 +offset_bottom = -106.5 grow_horizontal = 2 grow_vertical = 2 -texture_normal = ExtResource("17_1wujc") -texture_pressed = ExtResource("18_odk15") -texture_hover = ExtResource("19_m2fqs") +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入登录邮箱" +flat = true -[node name="RetrievePassword" type="Control" parent="Login"] +[node name="RegisterPasswordInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -170.5 +offset_top = -101.5 +offset_right = 10.5 +offset_bottom = -76.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入登录密码" +flat = true + +[node name="RegisterConfirmPasswordInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -170.5 +offset_top = -71.5 +offset_right = 10.5 +offset_bottom = -46.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入登录密码" +flat = true + +[node name="RegisterNameInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = -28.5 +offset_right = 9.5 +offset_bottom = -3.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入真实姓名" +flat = true + +[node name="RegisterNumberInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = 1.5 +offset_right = 9.5 +offset_bottom = 26.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入身份证号码" +flat = true + +[node name="RegisterQuestionAInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = 53.5 +offset_right = 9.5 +offset_bottom = 78.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请设置密保问题" +flat = true + +[node name="RegisterAnswerAInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = 83.5 +offset_right = 9.5 +offset_bottom = 108.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请设置密保问题答案" +flat = true + +[node name="RegisterQuestionBInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = 113.5 +offset_right = 9.5 +offset_bottom = 138.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请设置密保问题" +flat = true + +[node name="RegisterAnswerBInput" type="LineEdit" parent="Login/Register/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -171.5 +offset_top = 143.5 +offset_right = 9.5 +offset_bottom = 168.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请设置密保问题答案" +flat = true + +[node name="ChangePassword" type="Control" parent="Login"] +visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -202,7 +421,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Background" type="TextureRect" parent="Login/RetrievePassword"] +[node name="Background" type="TextureRect" parent="Login/ChangePassword"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -217,24 +436,116 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("14_d8t0o") -[node name="ConfirmButton" type="TextureButton" parent="Login/RetrievePassword/Background"] -offset_left = 136.5 -offset_top = 186.5 -offset_right = 220.5 -offset_bottom = 215.5 +[node name="ChangePasswordConfirmButton" type="TextureButton" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -47.0 +offset_top = -62.0 +offset_right = 37.0 +offset_bottom = -33.0 +grow_horizontal = 2 +grow_vertical = 0 texture_normal = ExtResource("14_f5mlh") texture_pressed = ExtResource("15_783oq") texture_hover = ExtResource("16_tgcix") -[node name="CancelButton" type="TextureButton" parent="Login/RetrievePassword/Background"] -offset_left = 238.5 -offset_top = 186.5 -offset_right = 322.5 -offset_bottom = 215.5 +[node name="ChangePasswordCancelButton" type="TextureButton" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = 54.0 +offset_top = -62.0 +offset_right = 138.0 +offset_bottom = -33.0 +grow_horizontal = 2 +grow_vertical = 0 texture_normal = ExtResource("17_1wujc") texture_pressed = ExtResource("18_odk15") texture_hover = ExtResource("19_m2fqs") +[node name="ChangePasswordAccountInput" type="LineEdit" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -45.5 +offset_top = -64.5 +offset_right = 135.5 +offset_bottom = -39.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入账户邮箱" +flat = true + +[node name="ChangePasswordOldInput" type="LineEdit" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -45.5 +offset_top = -34.5 +offset_right = 135.5 +offset_bottom = -9.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入原始密码" +flat = true + +[node name="ChangePasswordNewInput" type="LineEdit" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -45.5 +offset_top = -4.5 +offset_right = 135.5 +offset_bottom = 20.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请输入新的密码" +flat = true + +[node name="ChangePasswordConfirmInput" type="LineEdit" parent="Login/ChangePassword/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -45.5 +offset_top = 25.5 +offset_right = 135.5 +offset_bottom = 50.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_fonts/font = ExtResource("13_scx2i") +theme_override_font_sizes/font_size = 12 +theme_override_styles/focus = SubResource("StyleBoxEmpty_m6v8k") +placeholder_text = "请再次输入新的密码" +flat = true + [node name="Server" type="Control" parent="."] anchors_preset = 0 offset_right = 40.0 @@ -244,3 +555,9 @@ offset_bottom = 40.0 anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 + +[connection signal="pressed" from="Login/Main/Background/MainRegisterButton" to="." method="_on_main_register_button_pressed"] +[connection signal="pressed" from="Login/Main/Background/MainChangePasswordButton" to="." method="_on_main_change_password_button_pressed"] +[connection signal="pressed" from="Login/Register/Background/RegisterConfirmButton" to="." method="_on_register_confirm_button_pressed"] +[connection signal="pressed" from="Login/Register/Background/RegisterCancelButton" to="." method="_on_register_cancel_button_pressed"] +[connection signal="pressed" from="Login/ChangePassword/Background/ChangePasswordCancelButton" to="." method="_on_change_password_cancel_button_pressed"] diff --git a/game/scripts/launch/launch.gd b/game/scripts/launch/launch.gd new file mode 100644 index 0000000..bd38079 --- /dev/null +++ b/game/scripts/launch/launch.gd @@ -0,0 +1,79 @@ +#***************************************************************************** +# @file launch.gd +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +extends Control + +@onready var login: Control = $Login +@onready var main: Control = $Login/Main +@onready var main_submit_button: TextureButton = $Login/Main/Background/MainSubmitButton +@onready var main_register_button: TextureButton = $Login/Main/Background/MainRegisterButton +@onready var main_change_password_button: TextureButton = $Login/Main/Background/MainChangePasswordButton +@onready var main_account_input: LineEdit = $Login/Main/Background/MainAccountInput +@onready var main_password_input: LineEdit = $Login/Main/Background/MainPasswordInput + +@onready var register: Control = $Login/Register +@onready var register_confirm_button: TextureButton = $Login/Register/Background/RegisterConfirmButton +@onready var register_cancel_button: TextureButton = $Login/Register/Background/RegisterCancelButton +@onready var register_account_input: LineEdit = $Login/Register/Background/RegisterAccountInput +@onready var register_password_input: LineEdit = $Login/Register/Background/RegisterPasswordInput +@onready var register_confirm_password_input: LineEdit = $Login/Register/Background/RegisterConfirmPasswordInput +@onready var register_name_input: LineEdit = $Login/Register/Background/RegisterNameInput +@onready var register_number_input: LineEdit = $Login/Register/Background/RegisterNumberInput +@onready var register_question_a_input: LineEdit = $Login/Register/Background/RegisterQuestionAInput +@onready var register_answer_a_input: LineEdit = $Login/Register/Background/RegisterAnswerAInput +@onready var register_question_b_input: LineEdit = $Login/Register/Background/RegisterQuestionBInput +@onready var register_answer_b_input: LineEdit = $Login/Register/Background/RegisterAnswerBInput + +@onready var change_password: Control = $Login/ChangePassword +@onready var change_password_confirm_button: TextureButton = $Login/ChangePassword/Background/ChangePasswordConfirmButton +@onready var change_password_cancel_button: TextureButton = $Login/ChangePassword/Background/ChangePasswordCancelButton +@onready var change_password_account_input: LineEdit = $Login/ChangePassword/Background/ChangePasswordAccountInput +@onready var change_password_old_input: LineEdit = $Login/ChangePassword/Background/ChangePasswordOldInput +@onready var change_password_new_input: LineEdit = $Login/ChangePassword/Background/ChangePasswordNewInput +@onready var change_password_confirm_input: LineEdit = $Login/ChangePassword/Background/ChangePasswordConfirmInput + +@onready var server: Control = $Server +@onready var role: Control = $Role + +func _ready() -> void: + server.visible = false + role.visible = false + register.visible = false + change_password.visible = false + +func _process(delta: float) -> void: + pass + +func _on_main_register_button_pressed() -> void: + register.visible = true + +func _on_main_change_password_button_pressed() -> void: + change_password.visible = true + +func _on_register_cancel_button_pressed() -> void: + register.visible = false + +func _on_change_password_cancel_button_pressed() -> void: + change_password.visible = false + +func _on_register_confirm_button_pressed() -> void: + if register_account_input.text == "" or register_password_input.text == "" or register_confirm_password_input.text == "": + printerr("注册信息不完整") + return + if register_password_input.text != register_confirm_password_input.text: + printerr("密码输入不一致") + return + print("开始请求后端接口") + var post_data: Dictionary = { + "account": register_password_input.text, + "password": register_password_input.text, + "name": register_name_input.text, + "number": register_number_input.text, + "question_a": register_question_a_input.text, + "answer_a": register_answer_a_input.text, + "question_b": register_question_b_input.text, + "answer_b": register_answer_b_input.text, + } + print(post_data) diff --git a/server/framework/database/game_account_data/table.go b/server/framework/database/game_account_data/table.go new file mode 100644 index 0000000..a37e63e --- /dev/null +++ b/server/framework/database/game_account_data/table.go @@ -0,0 +1,45 @@ +/** +#***************************************************************************** +# @file table.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package GameAccountData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_account_data" + +type Data struct { + AccountId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:account_id"` + AccountAccount string `gorm:"column:account_account"` + AccountPassword string `gorm:"column:account_password"` + AccountName string `gorm:"column:account_name"` + AccountNumber string `gorm:"column:account_number"` + AccountQuestionA string `gorm:"column:account_question_a"` + AccountQuestionB string `gorm:"column:account_question_b"` + AccountAnswerA string `gorm:"column:account_answer_a"` + AccountAnswerB string `gorm:"column:account_answer_b"` + AccountStatus int `gorm:"column:account_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.AccountId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.AccountId) + } + + return data +} diff --git a/server/framework/database/game_level_data/table.go b/server/framework/database/game_level_data/table.go new file mode 100644 index 0000000..d495df1 --- /dev/null +++ b/server/framework/database/game_level_data/table.go @@ -0,0 +1,53 @@ +/** +#***************************************************************************** +# @file table.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package GameLevelData + +import ( + "Game/framework/database" +) + +var TableName = "game_level_data" + +type Data struct { + LevelId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:level_id"` + LevelServerId int `gorm:"column:level_server_id"` + LevelCareer string `gorm:"column:level_career"` + LevelName string `gorm:"column:level_name"` + LevelMin int `gorm:"column:level_min"` + LevelMax int `gorm:"column:level_max"` + LevelLifeValue int `gorm:"column:level_life_value"` + LevelMagicValue int `gorm:"column:level_magic_value"` + LevelStatus int `gorm:"column:level_status"` + Database.DefaultField +} + +type Return struct { + LevelCareer string `json:"level_career"` + LevelName string `json:"level_name"` + LevelMin int `json:"level_min"` + LevelMax int `json:"level_max"` + LevelLifeValue int `json:"level_life_value"` + LevelMagicValue int `json:"level_magic_value"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.LevelId > 0 { + data.LevelCareer = dataStruct.LevelCareer + data.LevelName = dataStruct.LevelName + data.LevelMin = dataStruct.LevelMin + data.LevelMax = dataStruct.LevelMax + data.LevelLifeValue = dataStruct.LevelLifeValue + data.LevelMagicValue = dataStruct.LevelMagicValue + } + + return data +} diff --git a/server/framework/database/game_map_data/table.go b/server/framework/database/game_map_data/table.go new file mode 100644 index 0000000..1dcc613 --- /dev/null +++ b/server/framework/database/game_map_data/table.go @@ -0,0 +1,47 @@ +/** +#***************************************************************************** +# @file table.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package GameMapData + +import ( + "Game/framework/database" +) + +var TableName = "game_map_data" + +type Data struct { + MapId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:map_id"` + MapServerId int `gorm:"column:map_server_id"` + MapNumber string `gorm:"column:map_number"` + MapName string `gorm:"column:map_name"` + MapDefaultX int `gorm:"column:map_default_x"` + MapDefaultY int `gorm:"column:map_default_y"` + MapStatus int `gorm:"column:map_status"` + Database.DefaultField +} + +type Return struct { + MapNumber string `json:"map_number"` + MapName string `json:"map_name"` + MapDefaultX int `json:"map_default_x"` + MapDefaultY int `json:"map_default_y"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.MapId > 0 { + data.MapNumber = dataStruct.MapNumber + data.MapName = dataStruct.MapName + data.MapDefaultX = dataStruct.MapDefaultX + data.MapDefaultY = dataStruct.MapDefaultY + } + + return data +} diff --git a/server/framework/database/game_player_data/table.go b/server/framework/database/game_player_data/table.go new file mode 100644 index 0000000..dc548da --- /dev/null +++ b/server/framework/database/game_player_data/table.go @@ -0,0 +1,81 @@ +/** +#***************************************************************************** +# @file table.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package GamePlayerData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_player_data" + +type Data struct { + PlayerId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:player_id"` + PlayerAccountId int `gorm:"column:player_account_id"` + PlayerServerId int `gorm:"column:player_server_id"` + PlayerNickname string `gorm:"column:player_nickname"` + PlayerCareer string `gorm:"column:player_career"` + PlayerGender string `gorm:"column:player_gender"` + PlayerAngle int `gorm:"column:player_angle"` + PlayerMap string `gorm:"column:player_map"` + PlayerMapX int `gorm:"column:player_map_x"` + PlayerMapY int `gorm:"column:player_map_y"` + PlayerAssetLife int `gorm:"column:player_asset_life"` + PlayerAssetMagic int `gorm:"column:player_asset_magic"` + PlayerAssetExperience int `gorm:"column:player_asset_experience"` + PlayerBodyClothe string `gorm:"column:player_body_clothe"` + PlayerBodyWeapon string `gorm:"column:player_body_weapon"` + PlayerBodyWing string `gorm:"column:player_body_wing"` + PlayerGroupId int `gorm:"column:player_group_id"` + PlayerStatus int `gorm:"column:player_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` + PlayerNickname string `json:"player_nickname"` + PlayerCareer string `json:"player_career"` + PlayerGender string `json:"player_gender"` + PlayerAngle int `json:"player_angle"` + PlayerMap string `json:"player_map"` + PlayerMapX int `json:"player_map_x"` + PlayerMapY int `json:"player_map_y"` + PlayerAssetLife int `json:"player_asset_life"` + PlayerAssetMagic int `json:"player_asset_magic"` + PlayerAssetExperience int `json:"player_asset_experience"` + PlayerBodyClothe string `json:"player_body_clothe"` + PlayerBodyWeapon string `json:"player_body_weapon"` + PlayerBodyWing string `json:"player_body_wing"` + PlayerGroupId int `json:"player_group_id"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.PlayerId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.PlayerId, dataStruct.PlayerAccountId, dataStruct.PlayerServerId) + data.PlayerNickname = dataStruct.PlayerNickname + data.PlayerCareer = dataStruct.PlayerCareer + data.PlayerGender = dataStruct.PlayerGender + data.PlayerAngle = dataStruct.PlayerAngle + data.PlayerMap = dataStruct.PlayerMap + data.PlayerMapX = dataStruct.PlayerMapX + data.PlayerMapY = dataStruct.PlayerMapY + data.PlayerAssetLife = dataStruct.PlayerAssetLife + data.PlayerAssetMagic = dataStruct.PlayerAssetMagic + data.PlayerAssetExperience = dataStruct.PlayerAssetExperience + data.PlayerBodyClothe = dataStruct.PlayerBodyClothe + data.PlayerBodyWeapon = dataStruct.PlayerBodyWeapon + data.PlayerBodyWing = dataStruct.PlayerBodyWing + data.PlayerGroupId = dataStruct.PlayerGroupId + } + + return data +} diff --git a/server/framework/database/game_server_data/table.go b/server/framework/database/game_server_data/table.go new file mode 100644 index 0000000..0affdd3 --- /dev/null +++ b/server/framework/database/game_server_data/table.go @@ -0,0 +1,40 @@ +/** +#***************************************************************************** +# @file table.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package GameServerData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_server_data" + +type Data struct { + ServerId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:server_id"` + ServerName string `gorm:"column:server_name"` + ServerStatus int `gorm:"column:server_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` + ServerName string `json:"server_name"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.ServerId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.ServerId) + data.ServerName = dataStruct.ServerName + } + + return data +} diff --git a/server/framework/interface/account/account.go b/server/framework/interface/account/account.go new file mode 100644 index 0000000..7d91433 --- /dev/null +++ b/server/framework/interface/account/account.go @@ -0,0 +1,81 @@ +/** +#***************************************************************************** +# @file account.go +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +*/ + +package AccountInterface + +import ( + "Game/framework/database" + "Game/framework/database/game_account_data" + "Game/framework/utils" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +type requestRegister struct { + Account string `json:"account"` + Password string `json:"password"` + Name string `json:"name"` + Number string `json:"number"` + QuestionA string `json:"question_a"` + AnswerA string `json:"answer_a"` + QuestionB string `json:"question_b"` + AnswerB string `json:"answer_b"` +} + +type responseRegister struct { + Token string `json:"token"` +} + +func Register(c *gin.Context) { + + returnData := responseRegister{} + + jsonData := requestRegister{} + requestJson, _ := ioutil.ReadAll(c.Request.Body) + err := json.Unmarshal(requestJson, &jsonData) + if err != nil { + Utils.Error(c, returnData) + return + } + + accountDatabase := Database.New(GameAccountData.TableName) + accountData := GameAccountData.Data{} + where := fmt.Sprintf("account_account = %q", jsonData.Account) + err = accountDatabase.GetData(&accountData, where, "") + if err == nil && accountData.AccountId > 0 { + Utils.Warning(c, 10001, "邮箱已经被注册", returnData) + return + } + + setData := &GameAccountData.Data{} + setData.AccountAccount = jsonData.Account + setData.AccountPassword = Utils.MD5Hash(jsonData.Password) + setData.AccountName = jsonData.Name + setData.AccountNumber = jsonData.Number + setData.AccountQuestionA = jsonData.QuestionA + setData.AccountAnswerA = jsonData.AnswerA + setData.AccountQuestionB = jsonData.QuestionB + setData.AccountAnswerB = jsonData.AnswerB + setData.AccountStatus = 2 + err = accountDatabase.CreateData(setData) + if err != nil { + Utils.Error(c, accountData) + return + } + if setData.AccountId == 0 { + Utils.Error(c, accountData) + return + } + + returnData.Token = Utils.EncodeId(128, setData.AccountId) + + Utils.Success(c, returnData) + return +} diff --git a/server/framework/interface/interface.go b/server/framework/interface/interface.go index ccbc37f..07189b0 100644 --- a/server/framework/interface/interface.go +++ b/server/framework/interface/interface.go @@ -10,6 +10,7 @@ package Interface import ( "Game/framework/config" + AccountInterface "Game/framework/interface/account" "Game/framework/interface/ping" "context" "fmt" @@ -32,6 +33,12 @@ func router() *gin.Engine { // 健康检查接口 router.GET("/ping", PingInterface.Ping) + // 账户相关接口 + account := router.Group("account") + { + account.POST("/register", AccountInterface.Register) + } + return router } diff --git a/update.bat b/update.bat index 3a41796..cd90589 100644 --- a/update.bat +++ b/update.bat @@ -1,2 +1,2 @@ @echo off -scp -r ./engine/release/server* root@172.21.245.0:/data/wwwroot/game/ \ No newline at end of file +scp -r ./engine/release/server* root@172.19.166.1:/data/wwwroot/game/ \ No newline at end of file diff --git a/wiki/course/3.0.0.md b/wiki/course/3.0.0.md index 0d46d4e..9a6cdf9 100644 --- a/wiki/course/3.0.0.md +++ b/wiki/course/3.0.0.md @@ -4,4 +4,542 @@ ### 用户界面 -> 用户界面的知识点、用户界面的规划 \ No newline at end of file +> 用户界面的知识点、用户界面的规划 + +### 数据表字段映射程序 + +> `game_account_data`数据表字段映射程序 + +```go +package GameAccountData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_account_data" + +type Data struct { + AccountId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:account_id"` + AccountAccount string `gorm:"column:account_account"` + AccountPassword string `gorm:"column:account_password"` + AccountName string `gorm:"column:account_name"` + AccountNumber string `gorm:"column:account_number"` + AccountQuestionA string `gorm:"column:account_question_a"` + AccountQuestionB string `gorm:"column:account_question_b"` + AccountAnswerA string `gorm:"column:account_answer_a"` + AccountAnswerB string `gorm:"column:account_answer_b"` + AccountStatus int `gorm:"column:account_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.AccountId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.AccountId) + } + + return data +} +``` + +> `game_level_data`数据表字段映射程序 + +```go +package GameLevelData + +import ( + "Game/framework/database" +) + +var TableName = "game_level_data" + +type Data struct { + LevelId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:level_id"` + LevelServerId int `gorm:"column:level_server_id"` + LevelCareer string `gorm:"column:level_career"` + LevelName string `gorm:"column:level_name"` + LevelMin int `gorm:"column:level_min"` + LevelMax int `gorm:"column:level_max"` + LevelLifeValue int `gorm:"column:level_life_value"` + LevelMagicValue int `gorm:"column:level_magic_value"` + LevelStatus int `gorm:"column:level_status"` + Database.DefaultField +} + +type Return struct { + LevelCareer string `json:"level_career"` + LevelName string `json:"level_name"` + LevelMin int `json:"level_min"` + LevelMax int `json:"level_max"` + LevelLifeValue int `json:"level_life_value"` + LevelMagicValue int `json:"level_magic_value"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.LevelId > 0 { + data.LevelCareer = dataStruct.LevelCareer + data.LevelName = dataStruct.LevelName + data.LevelMin = dataStruct.LevelMin + data.LevelMax = dataStruct.LevelMax + data.LevelLifeValue = dataStruct.LevelLifeValue + data.LevelMagicValue = dataStruct.LevelMagicValue + } + + return data +} +``` + +> `game_map_data`数据表字段映射程序 + +```go +package GameMapData + +import ( + "Game/framework/database" +) + +var TableName = "game_map_data" + +type Data struct { + MapId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:map_id"` + MapServerId int `gorm:"column:map_server_id"` + MapNumber string `gorm:"column:map_number"` + MapName string `gorm:"column:map_name"` + MapDefaultX int `gorm:"column:map_default_x"` + MapDefaultY int `gorm:"column:map_default_y"` + MapStatus int `gorm:"column:map_status"` + Database.DefaultField +} + +type Return struct { + MapNumber string `json:"map_number"` + MapName string `json:"map_name"` + MapDefaultX int `json:"map_default_x"` + MapDefaultY int `json:"map_default_y"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.MapId > 0 { + data.MapNumber = dataStruct.MapNumber + data.MapName = dataStruct.MapName + data.MapDefaultX = dataStruct.MapDefaultX + data.MapDefaultY = dataStruct.MapDefaultY + } + + return data +} +``` + +> `game_player_data`数据表字段映射程序 + +```go +package GamePlayerData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_player_data" + +type Data struct { + PlayerId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:player_id"` + PlayerAccountId int `gorm:"column:player_account_id"` + PlayerServerId int `gorm:"column:player_server_id"` + PlayerNickname string `gorm:"column:player_nickname"` + PlayerCareer string `gorm:"column:player_career"` + PlayerGender string `gorm:"column:player_gender"` + PlayerAngle int `gorm:"column:player_angle"` + PlayerMap string `gorm:"column:player_map"` + PlayerMapX int `gorm:"column:player_map_x"` + PlayerMapY int `gorm:"column:player_map_y"` + PlayerAssetLife int `gorm:"column:player_asset_life"` + PlayerAssetMagic int `gorm:"column:player_asset_magic"` + PlayerAssetExperience int `gorm:"column:player_asset_experience"` + PlayerBodyClothe string `gorm:"column:player_body_clothe"` + PlayerBodyWeapon string `gorm:"column:player_body_weapon"` + PlayerBodyWing string `gorm:"column:player_body_wing"` + PlayerGroupId int `gorm:"column:player_group_id"` + PlayerStatus int `gorm:"column:player_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` + PlayerNickname string `json:"player_nickname"` + PlayerCareer string `json:"player_career"` + PlayerGender string `json:"player_gender"` + PlayerAngle int `json:"player_angle"` + PlayerMap string `json:"player_map"` + PlayerMapX int `json:"player_map_x"` + PlayerMapY int `json:"player_map_y"` + PlayerAssetLife int `json:"player_asset_life"` + PlayerAssetMagic int `json:"player_asset_magic"` + PlayerAssetExperience int `json:"player_asset_experience"` + PlayerBodyClothe string `json:"player_body_clothe"` + PlayerBodyWeapon string `json:"player_body_weapon"` + PlayerBodyWing string `json:"player_body_wing"` + PlayerGroupId int `json:"player_group_id"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.PlayerId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.PlayerId, dataStruct.PlayerAccountId, dataStruct.PlayerServerId) + data.PlayerNickname = dataStruct.PlayerNickname + data.PlayerCareer = dataStruct.PlayerCareer + data.PlayerGender = dataStruct.PlayerGender + data.PlayerAngle = dataStruct.PlayerAngle + data.PlayerMap = dataStruct.PlayerMap + data.PlayerMapX = dataStruct.PlayerMapX + data.PlayerMapY = dataStruct.PlayerMapY + data.PlayerAssetLife = dataStruct.PlayerAssetLife + data.PlayerAssetMagic = dataStruct.PlayerAssetMagic + data.PlayerAssetExperience = dataStruct.PlayerAssetExperience + data.PlayerBodyClothe = dataStruct.PlayerBodyClothe + data.PlayerBodyWeapon = dataStruct.PlayerBodyWeapon + data.PlayerBodyWing = dataStruct.PlayerBodyWing + data.PlayerGroupId = dataStruct.PlayerGroupId + } + + return data +} +``` + +> `game_server_data`数据表字段映射程序 + +```go +package GameServerData + +import ( + "Game/framework/database" + "Game/framework/utils" +) + +var TableName = "game_server_data" + +type Data struct { + ServerId int `gorm:"primary_key;AUTO_INCREMENT;unique_index;not null;column:server_id"` + ServerName string `gorm:"column:server_name"` + ServerStatus int `gorm:"column:server_status"` + Database.DefaultField +} + +type Return struct { + Token string `json:"token"` + ServerName string `json:"server_name"` +} + +func ReturnData(dataStruct *Data) Return { + + data := Return{} + + if dataStruct.ServerId > 0 { + data.Token = Utils.EncodeId(32, dataStruct.ServerId) + data.ServerName = dataStruct.ServerName + } + + return data +} +``` + +### 创建数据表测试数据 + +> `game_level_data`数据表测试数据 + +```mysql +INSERT INTO `game_level_data` VALUES (1, 1, 'warrior', 1, 1, 100, 10, 10, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (2, 1, 'warrior', 2, 100, 500, 20, 20, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (3, 1, 'warrior', 3, 500, 1000, 30, 30, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (4, 1, 'warrior', 4, 1000, 1500, 40, 40, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (5, 1, 'warrior', 5, 1500, 2000, 50, 50, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (6, 1, 'warrior', 6, 2000, 2500, 60, 60, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (7, 1, 'warrior', 7, 2500, 3000, 70, 70, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (8, 1, 'warrior', 8, 3000, 3500, 80, 80, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (9, 1, 'warrior', 9, 3500, 4000, 90, 90, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (10, 1, 'warrior', 10, 4000, 4500, 100, 100, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (11, 1, 'warrior', 11, 4500, 5000, 110, 110, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (12, 1, 'warrior', 12, 5000, 5500, 120, 120, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (13, 1, 'warrior', 13, 5500, 6000, 130, 130, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (14, 1, 'warrior', 14, 6000, 6500, 140, 140, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (15, 1, 'warrior', 15, 6500, 7000, 150, 150, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (16, 1, 'warrior', 16, 7000, 7500, 160, 160, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (17, 1, 'warrior', 17, 7500, 8000, 170, 170, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (18, 1, 'warrior', 18, 8000, 8500, 180, 180, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (19, 1, 'warrior', 19, 8500, 9000, 190, 190, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (20, 1, 'warrior', 20, 9000, 9500, 200, 200, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (21, 1, 'warrior', 21, 9500, 10500, 250, 220, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (22, 1, 'warrior', 22, 10500, 11000, 300, 240, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (23, 1, 'warrior', 23, 11000, 15000, 350, 260, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (24, 1, 'warrior', 24, 15000, 20000, 400, 280, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (25, 1, 'warrior', 25, 20000, 25000, 450, 300, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (26, 1, 'warrior', 26, 25000, 30000, 500, 320, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (27, 1, 'warrior', 27, 30000, 35000, 550, 340, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (28, 1, 'warrior', 28, 35000, 40000, 600, 380, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (29, 1, 'warrior', 29, 40000, 45000, 650, 400, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (30, 1, 'warrior', 30, 45000, 50000, 700, 420, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (31, 1, 'warrior', 31, 50000, 60000, 750, 440, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (32, 1, 'warrior', 32, 70000, 80000, 800, 460, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (33, 1, 'warrior', 33, 80000, 90000, 850, 480, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (34, 1, 'warrior', 34, 90000, 100000, 900, 500, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (35, 1, 'warrior', 35, 100000, 200000, 950, 520, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (36, 1, 'warrior', 36, 200000, 300000, 1000, 540, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (37, 1, 'warrior', 37, 300000, 400000, 1050, 560, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (38, 1, 'warrior', 38, 400000, 500000, 1100, 580, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (39, 1, 'warrior', 39, 500000, 600000, 1150, 600, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (40, 1, 'warrior', 40, 600000, 700000, 1200, 620, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (41, 1, 'warrior', 41, 700000, 800000, 1250, 640, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (42, 1, 'warrior', 42, 800000, 900000, 1300, 660, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (43, 1, 'warrior', 43, 900000, 1000000, 1350, 680, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (44, 1, 'warrior', 44, 1000000, 110000, 1400, 700, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (45, 1, 'warrior', 45, 1100000, 1200000, 1450, 720, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (46, 1, 'warrior', 46, 1200000, 1300000, 1500, 740, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (47, 1, 'warrior', 47, 1300000, 1400000, 1550, 760, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (48, 1, 'warrior', 48, 1400000, 1500000, 1600, 780, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (49, 1, 'warrior', 49, 1500000, 1600000, 1650, 800, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (50, 1, 'warrior', 50, 1600000, 1700000, 1700, 820, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (61, 1, 'warrior', 51, 1700000, 1800000, 1750, 840, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (62, 1, 'warrior', 52, 1800000, 1900000, 1800, 860, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (63, 1, 'warrior', 53, 1900000, 2000000, 1850, 880, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (64, 1, 'warrior', 54, 2000000, 3000000, 1900, 900, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (65, 1, 'warrior', 55, 3000000, 4000000, 1950, 920, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (66, 1, 'warrior', 56, 4000000, 5000000, 2000, 940, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (67, 1, 'warrior', 57, 5000000, 6000000, 2050, 960, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (68, 1, 'warrior', 58, 6000000, 7000000, 2100, 980, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (69, 1, 'warrior', 59, 7000000, 8000000, 2150, 1000, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (70, 1, 'warrior', 60, 8000000, 100000000, 2200, 1020, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (71, 1, 'mage', 1, 1, 100, 10, 10, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (72, 1, 'mage', 2, 100, 500, 20, 20, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (73, 1, 'mage', 3, 500, 1000, 30, 30, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (74, 1, 'mage', 4, 1000, 1500, 40, 40, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (75, 1, 'mage', 5, 1500, 2000, 50, 50, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (76, 1, 'mage', 6, 2000, 2500, 60, 60, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (77, 1, 'mage', 7, 2500, 3000, 70, 70, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (78, 1, 'mage', 8, 3000, 3500, 80, 80, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (79, 1, 'mage', 9, 3500, 4000, 90, 90, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (80, 1, 'mage', 10, 4000, 4500, 100, 100, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (81, 1, 'mage', 11, 4500, 5000, 110, 110, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (82, 1, 'mage', 12, 5000, 5500, 120, 120, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (83, 1, 'mage', 13, 5500, 6000, 130, 130, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (84, 1, 'mage', 14, 6000, 6500, 140, 140, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (85, 1, 'mage', 15, 6500, 7000, 150, 150, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (86, 1, 'mage', 16, 7000, 7500, 160, 160, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (87, 1, 'mage', 17, 7500, 8000, 170, 170, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (88, 1, 'mage', 18, 8000, 8500, 180, 180, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (89, 1, 'mage', 19, 8500, 9000, 190, 190, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (90, 1, 'mage', 20, 9000, 9500, 200, 200, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (91, 1, 'mage', 21, 9500, 10500, 250, 220, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (92, 1, 'mage', 22, 10500, 11000, 300, 240, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (93, 1, 'mage', 23, 11000, 15000, 350, 260, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (94, 1, 'mage', 24, 15000, 20000, 400, 280, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (95, 1, 'mage', 25, 20000, 25000, 450, 300, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (96, 1, 'mage', 26, 25000, 30000, 500, 320, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (97, 1, 'mage', 27, 30000, 35000, 550, 340, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (98, 1, 'mage', 28, 35000, 40000, 600, 380, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (99, 1, 'mage', 29, 40000, 45000, 650, 400, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (100, 1, 'mage', 30, 45000, 50000, 700, 420, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (101, 1, 'mage', 31, 50000, 60000, 750, 440, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (102, 1, 'mage', 32, 70000, 80000, 800, 460, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (103, 1, 'mage', 33, 80000, 90000, 850, 480, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (104, 1, 'mage', 34, 90000, 100000, 900, 500, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (105, 1, 'mage', 35, 100000, 200000, 950, 520, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (106, 1, 'mage', 36, 200000, 300000, 1000, 540, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (107, 1, 'mage', 37, 300000, 400000, 1050, 560, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (108, 1, 'mage', 38, 400000, 500000, 1100, 580, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (109, 1, 'mage', 39, 500000, 600000, 1150, 600, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (110, 1, 'mage', 40, 600000, 700000, 1200, 620, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (111, 1, 'mage', 41, 700000, 800000, 1250, 640, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (112, 1, 'mage', 42, 800000, 900000, 1300, 660, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (113, 1, 'mage', 43, 900000, 1000000, 1350, 680, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (114, 1, 'mage', 44, 1000000, 110000, 1400, 700, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (115, 1, 'mage', 45, 1100000, 1200000, 1450, 720, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (116, 1, 'mage', 46, 1200000, 1300000, 1500, 740, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (117, 1, 'mage', 47, 1300000, 1400000, 1550, 760, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (118, 1, 'mage', 48, 1400000, 1500000, 1600, 780, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (119, 1, 'mage', 49, 1500000, 1600000, 1650, 800, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (120, 1, 'mage', 50, 1600000, 1700000, 1700, 820, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (121, 1, 'mage', 51, 1700000, 1800000, 1750, 840, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (122, 1, 'mage', 52, 1800000, 1900000, 1800, 860, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (123, 1, 'mage', 53, 1900000, 2000000, 1850, 880, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (124, 1, 'mage', 54, 2000000, 3000000, 1900, 900, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (125, 1, 'mage', 55, 3000000, 4000000, 1950, 920, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (126, 1, 'mage', 56, 4000000, 5000000, 2000, 940, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (127, 1, 'mage', 57, 5000000, 6000000, 2050, 960, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (128, 1, 'mage', 58, 6000000, 7000000, 2100, 980, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (129, 1, 'mage', 59, 7000000, 8000000, 2150, 1000, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (130, 1, 'mage', 60, 8000000, 100000000, 2200, 1020, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (131, 1, 'taoist', 1, 1, 100, 10, 10, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (132, 1, 'taoist', 2, 100, 500, 20, 20, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (133, 1, 'taoist', 3, 500, 1000, 30, 30, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (134, 1, 'taoist', 4, 1000, 1500, 40, 40, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (135, 1, 'taoist', 5, 1500, 2000, 50, 50, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (136, 1, 'taoist', 6, 2000, 2500, 60, 60, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (137, 1, 'taoist', 7, 2500, 3000, 70, 70, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (138, 1, 'taoist', 8, 3000, 3500, 80, 80, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (139, 1, 'taoist', 9, 3500, 4000, 90, 90, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (140, 1, 'taoist', 10, 4000, 4500, 100, 100, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (141, 1, 'taoist', 11, 4500, 5000, 110, 110, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (142, 1, 'taoist', 12, 5000, 5500, 120, 120, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (143, 1, 'taoist', 13, 5500, 6000, 130, 130, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (144, 1, 'taoist', 14, 6000, 6500, 140, 140, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (145, 1, 'taoist', 15, 6500, 7000, 150, 150, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (146, 1, 'taoist', 16, 7000, 7500, 160, 160, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (147, 1, 'taoist', 17, 7500, 8000, 170, 170, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (148, 1, 'taoist', 18, 8000, 8500, 180, 180, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (149, 1, 'taoist', 19, 8500, 9000, 190, 190, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (150, 1, 'taoist', 20, 9000, 9500, 200, 200, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (151, 1, 'taoist', 21, 9500, 10500, 250, 220, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (152, 1, 'taoist', 22, 10500, 11000, 300, 240, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (153, 1, 'taoist', 23, 11000, 15000, 350, 260, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (154, 1, 'taoist', 24, 15000, 20000, 400, 280, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (155, 1, 'taoist', 25, 20000, 25000, 450, 300, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (156, 1, 'taoist', 26, 25000, 30000, 500, 320, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (157, 1, 'taoist', 27, 30000, 35000, 550, 340, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (158, 1, 'taoist', 28, 35000, 40000, 600, 380, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (159, 1, 'taoist', 29, 40000, 45000, 650, 400, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (160, 1, 'taoist', 30, 45000, 50000, 700, 420, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (161, 1, 'taoist', 31, 50000, 60000, 750, 440, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (162, 1, 'taoist', 32, 70000, 80000, 800, 460, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (163, 1, 'taoist', 33, 80000, 90000, 850, 480, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (164, 1, 'taoist', 34, 90000, 100000, 900, 500, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (165, 1, 'taoist', 35, 100000, 200000, 950, 520, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (166, 1, 'taoist', 36, 200000, 300000, 1000, 540, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (167, 1, 'taoist', 37, 300000, 400000, 1050, 560, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (168, 1, 'taoist', 38, 400000, 500000, 1100, 580, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (169, 1, 'taoist', 39, 500000, 600000, 1150, 600, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (170, 1, 'taoist', 40, 600000, 700000, 1200, 620, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (171, 1, 'taoist', 41, 700000, 800000, 1250, 640, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (172, 1, 'taoist', 42, 800000, 900000, 1300, 660, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (173, 1, 'taoist', 43, 900000, 1000000, 1350, 680, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (174, 1, 'taoist', 44, 1000000, 110000, 1400, 700, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (175, 1, 'taoist', 45, 1100000, 1200000, 1450, 720, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (176, 1, 'taoist', 46, 1200000, 1300000, 1500, 740, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (177, 1, 'taoist', 47, 1300000, 1400000, 1550, 760, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (178, 1, 'taoist', 48, 1400000, 1500000, 1600, 780, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (179, 1, 'taoist', 49, 1500000, 1600000, 1650, 800, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (180, 1, 'taoist', 50, 1600000, 1700000, 1700, 820, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (181, 1, 'taoist', 51, 1700000, 1800000, 1750, 840, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (182, 1, 'taoist', 52, 1800000, 1900000, 1800, 860, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (183, 1, 'taoist', 53, 1900000, 2000000, 1850, 880, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (184, 1, 'taoist', 54, 2000000, 3000000, 1900, 900, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (185, 1, 'taoist', 55, 3000000, 4000000, 1950, 920, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (186, 1, 'taoist', 56, 4000000, 5000000, 2000, 940, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (187, 1, 'taoist', 57, 5000000, 6000000, 2050, 960, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (188, 1, 'taoist', 58, 6000000, 7000000, 2100, 980, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (189, 1, 'taoist', 59, 7000000, 8000000, 2150, 1000, 2, 0, 0, 0); +INSERT INTO `game_level_data` VALUES (190, 1, 'taoist', 60, 8000000, 100000000, 2200, 1020, 2, 0, 0, 0); +``` + +> `game_server_data`数据表测试数据 + +```mysql +INSERT INTO `game_server_data` VALUES (1, '游戏一区', 2, 0, 0, 0); +INSERT INTO `game_server_data` VALUES (2, '游戏二区', 2, 0, 0, 0); +INSERT INTO `game_server_data` VALUES (3, '游戏三区', 2, 0, 0, 0); +``` + +### 用户注册接口 + +> 用户注册接口程序源码 + +```go +package AccountInterface + +import ( + "Game/framework/database" + "Game/framework/database/game_account_data" + "Game/framework/utils" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "io/ioutil" +) + +type requestRegister struct { + Account string `json:"account"` + Password string `json:"password"` + Name string `json:"name"` + Number string `json:"number"` + QuestionA string `json:"question_a"` + AnswerA string `json:"answer_a"` + QuestionB string `json:"question_b"` + AnswerB string `json:"answer_b"` +} + +type responseRegister struct { + Token string `json:"token"` +} + +func Register(c *gin.Context) { + + returnData := responseRegister{} + + jsonData := requestRegister{} + requestJson, _ := ioutil.ReadAll(c.Request.Body) + err := json.Unmarshal(requestJson, &jsonData) + if err != nil { + Utils.Error(c, returnData) + return + } + + accountDatabase := Database.New(GameAccountData.TableName) + accountData := GameAccountData.Data{} + where := fmt.Sprintf("account_account = %q", jsonData.Account) + err = accountDatabase.GetData(&accountData, where, "") + if err == nil && accountData.AccountId > 0 { + Utils.Warning(c, 10001, "邮箱已经被注册", returnData) + return + } + + setData := &GameAccountData.Data{} + setData.AccountAccount = jsonData.Account + setData.AccountPassword = Utils.MD5Hash(jsonData.Password) + setData.AccountName = jsonData.Name + setData.AccountNumber = jsonData.Number + setData.AccountQuestionA = jsonData.QuestionA + setData.AccountAnswerA = jsonData.AnswerA + setData.AccountQuestionB = jsonData.QuestionB + setData.AccountAnswerB = jsonData.AnswerB + setData.AccountStatus = 2 + err = accountDatabase.CreateData(setData) + if err != nil { + Utils.Error(c, accountData) + return + } + if setData.AccountId == 0 { + Utils.Error(c, accountData) + return + } + + returnData.Token = Utils.EncodeId(128, setData.AccountId) + + Utils.Success(c, returnData) + return +} +``` + +> 用户注册接口路由 + +```go +// 账户相关接口 +account := router.Group("account") +{ + account.POST("/register", AccountInterface.Register) +} +``` \ No newline at end of file From 865ea763c15b2b5dbdc670c205744c07bfb7a5a4 Mon Sep 17 00:00:00 2001 From: makeyangcom Date: Sat, 16 Mar 2024 12:34:38 +0800 Subject: [PATCH 2/3] 3.0.0 --- game/scripts/launch/launch.gd | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/game/scripts/launch/launch.gd b/game/scripts/launch/launch.gd index bd38079..a1c675c 100644 --- a/game/scripts/launch/launch.gd +++ b/game/scripts/launch/launch.gd @@ -77,3 +77,14 @@ func _on_register_confirm_button_pressed() -> void: "answer_b": register_answer_b_input.text, } print(post_data) + Request.on_server("/account/register", HTTPClient.METHOD_POST, post_data, func(_result, code, _headers, body): + if code == 200: + var response = JSON.parse_string(body.get_string_from_utf8()) + print("[接口反馈数据]", response) + if response["code"] == 0: + print("接口请求成功") + else: + printerr("接口请求出错") + else: + printerr("接口异常") + ) From 1b1f3fac2211f8998fc77e2ec2dccf8df3a720e1 Mon Sep 17 00:00:00 2001 From: makeyangcom Date: Sat, 16 Mar 2024 16:00:57 +0800 Subject: [PATCH 3/3] 3.0.0 --- game/assets/launch/message_background.png | Bin 0 -> 11305 bytes .../launch/message_background.png.import | 34 +++++++++++++++++ game/scripts/base/global.gd | 5 +++ game/scripts/launch/launch.gd | 35 ++++++++++++++++-- wiki/course/3.0.0.md | 14 +++++++ 5 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 game/assets/launch/message_background.png create mode 100644 game/assets/launch/message_background.png.import diff --git a/game/assets/launch/message_background.png b/game/assets/launch/message_background.png new file mode 100644 index 0000000000000000000000000000000000000000..fd688891da875d5ad72edcab36e61e2571942c8c GIT binary patch literal 11305 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 literal 0 HcmV?d00001 diff --git a/game/assets/launch/message_background.png.import b/game/assets/launch/message_background.png.import new file mode 100644 index 0000000..35dc11b --- /dev/null +++ b/game/assets/launch/message_background.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://llh2in832a08" +path="res://.godot/imported/message_background.png-921fc0d794af457637631219ca27a628.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/launch/message_background.png" +dest_files=["res://.godot/imported/message_background.png-921fc0d794af457637631219ca27a628.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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 diff --git a/game/scripts/base/global.gd b/game/scripts/base/global.gd index e3a9a95..ed3bea3 100644 --- a/game/scripts/base/global.gd +++ b/game/scripts/base/global.gd @@ -60,3 +60,8 @@ func get_server_address() -> String: # 获取用户Token func get_account_token() -> String: return data["account"]["token"] + +# 更新并返回用户Token +func update_account_token(token: String) -> String: + data["account"]["token"] = token + return data["account"]["token"] diff --git a/game/scripts/launch/launch.gd b/game/scripts/launch/launch.gd index a1c675c..3af0ebe 100644 --- a/game/scripts/launch/launch.gd +++ b/game/scripts/launch/launch.gd @@ -65,9 +65,13 @@ func _on_register_confirm_button_pressed() -> void: if register_password_input.text != register_confirm_password_input.text: printerr("密码输入不一致") return + if !check_mail_format(register_account_input.text): + printerr("邮箱格式不正确") + return + register_confirm_button.disabled = true print("开始请求后端接口") var post_data: Dictionary = { - "account": register_password_input.text, + "account": register_account_input.text, "password": register_password_input.text, "name": register_name_input.text, "number": register_number_input.text, @@ -83,8 +87,33 @@ func _on_register_confirm_button_pressed() -> void: print("[接口反馈数据]", response) if response["code"] == 0: print("接口请求成功") + Global.update_account_token(response["data"]["token"]) + register_confirm_button.disabled = false + register.visible = false + register_account_input.text = "" + register_password_input.text = "" + register_confirm_password_input.text = "" + register_name_input.text = "" + register_number_input.text = "" + register_question_a_input.text = "" + register_answer_a_input.text= "" + register_question_b_input.text = "" + register_answer_b_input.text = "" else: - printerr("接口请求出错") + register_confirm_button.disabled = false + if response["code"] == 10001: + printerr("邮箱已经被使用,请换一个") + else: + printerr("接口请求出错") else: - printerr("接口异常") + printerr("接口异常") + register_confirm_button.disabled = false ) + +func check_mail_format(mail:String) -> bool: + var check:bool = true + var regex = RegEx.new() + regex.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$") + if !regex.search(mail): + check = false + return check diff --git a/wiki/course/3.0.0.md b/wiki/course/3.0.0.md index 9a6cdf9..c30f6f9 100644 --- a/wiki/course/3.0.0.md +++ b/wiki/course/3.0.0.md @@ -542,4 +542,18 @@ account := router.Group("account") { account.POST("/register", AccountInterface.Register) } +``` + +### 邮箱格式验证函数 + +> 用于游戏引擎中验证邮箱格式的合法性 + +``` go +func check_mail_format(mail:String) -> bool: + var check:bool = true + var regex = RegEx.new() + regex.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$") + if !regex.search(mail): + check = false + return check ``` \ No newline at end of file