From b2655bd9e9073a70ab6b1d684d74a29060a98f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A0=91=E8=90=8C=E8=8A=BD?= <3205788256@qq.com> Date: Mon, 21 Jul 2025 08:16:29 +0800 Subject: [PATCH] 1 --- Script/BigPanel/LoginPanel.gd | 648 ++--- Script/SmallPanel/AccountSettingPanel.gd | 9 +- Server/TCPGameServer.py | 5 +- .../config/initial_player_data_template.json | 1 - Server/game_saves/2143323382.json | 1 - Server/game_saves/2804775686.json | 2099 +++++++++++++++++ server/game_saves/3205788256.json | 3 - 7 files changed, 2343 insertions(+), 423 deletions(-) create mode 100644 Server/game_saves/2804775686.json diff --git a/Script/BigPanel/LoginPanel.gd b/Script/BigPanel/LoginPanel.gd index e8029ff..3a95826 100644 --- a/Script/BigPanel/LoginPanel.gd +++ b/Script/BigPanel/LoginPanel.gd @@ -110,36 +110,16 @@ func _on_forget_password_button_pressed(): # 处理登录按钮点击 func _on_login_button_pressed(): - password_2.hide() - verification_code.hide() - player_name.hide() - farm_name.hide() - - - - var user_name = username_input.text.strip_edges() # 修剪前后的空格 + var user_name = username_input.text.strip_edges() var user_password = password_input.text.strip_edges() - var farmname = farmname_input.text.strip_edges() - if user_name == "" or user_password == "": - status_label.text = "用户名或密码不能为空!" - status_label.modulate = Color.RED + # 验证输入 + if not _validate_login_input(user_name, user_password, status_label): return - # 检查网络连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label.text = "未连接到服务器,正在尝试连接..." - status_label.modulate = Color.YELLOW - # 尝试自动连接到服务器 - tcp_network_manager_panel.connect_to_current_server() - await get_tree().create_timer(2.0).timeout - - # 再次检查连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label.text = "连接服务器失败,正在尝试其他服务器..." - status_label.modulate = Color.YELLOW - # 等待自动服务器切换完成 - await get_tree().create_timer(3.0).timeout + # 检查网络连接 + if not await _ensure_network_connection(status_label): + return # 禁用按钮,防止重复点击 @@ -169,30 +149,13 @@ func _on_login_button_pressed(): func _on_send_button_pressed(): var user_name = register_username_input.text.strip_edges() - if user_name == "": - status_label_2.text = "请输入QQ号以接收验证码!" - status_label_2.modulate = Color.RED - return - - if !is_valid_qq_number(user_name): - status_label_2.text = "请输入正确的QQ号码(5-12位数字)!" - status_label_2.modulate = Color.RED + # 验证输入 + if not _validate_qq_input(user_name, status_label_2): return - # 检查网络连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_2.text = "未连接到服务器,正在尝试连接..." - status_label_2.modulate = Color.YELLOW - # 尝试自动连接到服务器 - tcp_network_manager_panel.connect_to_current_server() - await get_tree().create_timer(2.0).timeout - - # 再次检查连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_2.text = "连接服务器失败,正在尝试其他服务器..." - status_label_2.modulate = Color.YELLOW - # 等待自动服务器切换完成 - await get_tree().create_timer(3.0).timeout + # 检查网络连接 + if not await _ensure_network_connection(status_label_2): + return # 禁用按钮,防止重复点击 @@ -223,55 +186,18 @@ func _on_send_button_pressed(): func _on_register_button_2_pressed(): var user_name = register_username_input.text.strip_edges() var user_password = password_input_1.text.strip_edges() - var user_password_2 = password_input_2.text.strip_edges() - var farmname = farmname_input.text.strip_edges() + var password_confirm = password_input_2.text.strip_edges() var player_name = playername_input.text.strip_edges() + var farm_name = farmname_input.text.strip_edges() var verification_code = verificationcode_input.text.strip_edges() - # 检查密码格式(只允许数字和字母) - if not is_valid_password(user_password): - status_label_2.text = "密码只能包含数字和字母!" - status_label_2.modulate = Color.RED + # 验证输入 + if not _validate_register_input(user_name, user_password, password_confirm, player_name, farm_name, verification_code, status_label_2): return - if user_name == "" or user_password == "": - status_label_2.text = "用户名或密码不能为空!" - status_label_2.modulate = Color.RED + # 检查网络连接 + if not await _ensure_network_connection(status_label_2): return - if farmname == "": - status_label_2.text = "农场名称不能为空!" - status_label_2.modulate = Color.RED - return - if user_password != user_password_2: - status_label_2.text = "两次输入的密码不一致!" - status_label_2.modulate = Color.RED - return - - if !is_valid_qq_number(user_name): - status_label_2.text = "请输入正确的QQ号码(5-12位数字)!" - status_label_2.modulate = Color.RED - return - - if verification_code == "": - status_label_2.text = "请输入验证码!" - status_label_2.modulate = Color.RED - return - - # 检查网络连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_2.text = "未连接到服务器,正在尝试连接..." - status_label_2.modulate = Color.YELLOW - # 尝试自动连接到服务器 - tcp_network_manager_panel.connect_to_current_server() - await get_tree().create_timer(2.0).timeout - - # 再次检查连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_2.text = "连接服务器失败,正在尝试其他服务器..." - status_label_2.modulate = Color.YELLOW - # 等待自动服务器切换完成 - await get_tree().create_timer(3.0).timeout - # 禁用按钮,防止重复点击 register_button_2.disabled = true @@ -279,13 +205,8 @@ func _on_register_button_2_pressed(): status_label_2.text = "正在注册,请稍候..." status_label_2.modulate = Color.YELLOW - # 发送注册请求 - tcp_network_manager_panel.sendRegisterInfo(user_name, user_password, farmname, player_name, verification_code) - - # 更新主游戏数据 - main_game.user_name = user_name - main_game.user_password = user_password - # farmname 直接在注册成功后通过UI更新,这里不需要设置 + # 发送注册请求 + tcp_network_manager_panel.sendRegisterInfo(user_name, user_password, player_name, farm_name, verification_code) # 5秒后重新启用按钮(如果没有收到响应) await get_tree().create_timer(5.0).timeout @@ -298,30 +219,13 @@ func _on_register_button_2_pressed(): func _on_forget_send_button_pressed(): var user_name = forget_username_input.text.strip_edges() - if user_name == "": - status_label_3.text = "请输入QQ号以接收验证码!" - status_label_3.modulate = Color.RED - return - - if !is_valid_qq_number(user_name): - status_label_3.text = "请输入正确的QQ号码(5-12位数字)!" - status_label_3.modulate = Color.RED + # 验证输入 + if not _validate_qq_input(user_name, status_label_3): return - # 检查网络连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_3.text = "未连接到服务器,正在尝试连接..." - status_label_3.modulate = Color.YELLOW - # 尝试自动连接到服务器 - tcp_network_manager_panel.connect_to_current_server() - await get_tree().create_timer(2.0).timeout - - # 再次检查连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_3.text = "连接服务器失败,正在尝试其他服务器..." - status_label_3.modulate = Color.YELLOW - # 等待自动服务器切换完成 - await get_tree().create_timer(3.0).timeout + # 检查网络连接 + if not await _ensure_network_connection(status_label_3): + return # 禁用按钮,防止重复点击 forget_send_button.disabled = true @@ -353,41 +257,13 @@ func _on_forget_password_confirm_pressed(): var new_password = new_password_input.text.strip_edges() var verification_code = forget_verificationcode_input.text.strip_edges() - # 检查密码格式(只允许数字和字母) - if not is_valid_password(new_password): - status_label_3.text = "密码只能包含数字和字母!" - status_label_3.modulate = Color.RED + # 验证输入 + if not _validate_forget_password_input(user_name, new_password, verification_code, status_label_3): return - if user_name == "" or new_password == "": - status_label_3.text = "用户名或新密码不能为空!" - status_label_3.modulate = Color.RED + # 检查网络连接 + if not await _ensure_network_connection(status_label_3): return - - if !is_valid_qq_number(user_name): - status_label_3.text = "请输入正确的QQ号码(5-12位数字)!" - status_label_3.modulate = Color.RED - return - - if verification_code == "": - status_label_3.text = "请输入验证码!" - status_label_3.modulate = Color.RED - return - - # 检查网络连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_3.text = "未连接到服务器,正在尝试连接..." - status_label_3.modulate = Color.YELLOW - # 尝试自动连接到服务器 - tcp_network_manager_panel.connect_to_current_server() - await get_tree().create_timer(2.0).timeout - - # 再次检查连接状态 - if !tcp_network_manager_panel.client.is_client_connected(): - status_label_3.text = "连接服务器失败,正在尝试其他服务器..." - status_label_3.modulate = Color.YELLOW - # 等待自动服务器切换完成 - await get_tree().create_timer(3.0).timeout # 禁用按钮,防止重复点击 forget_password_button.disabled = true @@ -407,291 +283,112 @@ func _on_forget_password_confirm_pressed(): # 处理验证码发送响应 func _on_verification_code_response(success: bool, message: String): - if success: - status_label.text = message - status_label.modulate = Color.GREEN - else: - status_label.text = message - status_label.modulate = Color.RED + _set_status(status_label, message, Color.GREEN if success else Color.RED) + if not success: send_button.disabled = false send_button.text = "发送验证码" # 处理验证码验证响应 func _on_verify_code_response(success: bool, message: String): - if success: - status_label.text = message - status_label.modulate = Color.GREEN - else: - status_label.text = message - status_label.modulate = Color.RED + _set_status(status_label, message, Color.GREEN if success else Color.RED) -# 验证QQ号是否有效 +# 输入验证函数 func is_valid_qq_number(qq_number: String) -> bool: - # QQ号的标准格式是5到12位的数字 var qq_regex = RegEx.new() - var pattern = r"^\d{5,12}$" - - var error = qq_regex.compile(pattern) - if error != OK: - status_label.text = "QQ号验证失败部错误" - status_label.modulate = Color.RED + if qq_regex.compile(r"^\d{5,12}$") != OK: return false - return qq_regex.search(qq_number) != null -# 添加密码验证函数 func is_valid_password(password: String) -> bool: - # 使用正则表达式检查是否只包含数字和字母 - var pattern = r"^[a-zA-Z0-9]+$" - return password.match(pattern) != null + return password.match(r"^[a-zA-Z0-9]+$") != null # 处理登录响应 func _on_login_response_received(success: bool, message: String, user_data: Dictionary): - # 启用按钮 login_button.disabled = false if success: - status_label.text = "登录成功!正在加载游戏..." - status_label.modulate = Color.GREEN - - # 保存登录数据到主游戏 - main_game.login_data = user_data.duplicate() - - # 保存剩余点赞次数 - main_game.remaining_likes = user_data.get("今日剩余点赞次数", 10) - - # 更新主游戏数据 - main_game.experience = user_data.get("experience", 0) - main_game.farm_lots = user_data.get("farm_lots", []) - main_game.level = user_data.get("level", 1) - main_game.money = user_data.get("money", 0) - main_game.stamina = user_data.get("体力值", 20) - main_game.show_farm_name.text = "农场名称:"+user_data.get("farm_name", "") - main_game.show_player_name.text = "玩家昵称:"+user_data.get("player_name", "") - farmname_input.text = user_data.get("farm_name", "") - - # 加载玩家背包数据 - if user_data.has("player_bag"): - main_game.player_bag = user_data.get("player_bag", []) - else: - main_game.player_bag = [] - - # 加载作物仓库数据 - if user_data.has("作物仓库"): - main_game.crop_warehouse = user_data.get("作物仓库", []) - else: - main_game.crop_warehouse = [] - - # 加载道具背包数据 - if user_data.has("道具背包"): - main_game.item_bag = user_data.get("道具背包", []) - else: - main_game.item_bag = [] - - # 加载宠物背包数据 - if user_data.has("宠物背包"): - main_game.pet_bag = user_data.get("宠物背包", []) - else: - main_game.pet_bag = [] - - # 加载巡逻宠物数据 - if user_data.has("巡逻宠物"): - main_game.patrol_pets = user_data.get("巡逻宠物", []) - else: - main_game.patrol_pets = [] - - main_game.start_game = true - self.hide() - - # 确保在更新数据后调用主游戏的 UI 更新函数 - main_game._update_ui() - main_game._refresh_farm_lots() - - player_bag_panel.update_player_bag_ui() - # 更新作物仓库和道具背包UI - crop_warehouse_panel.update_crop_warehouse_ui() - item_bag_panel.update_item_bag_ui() - # 更新宠物背包UI - if pet_bag_panel and pet_bag_panel.has_method("update_pet_bag_ui"): - pet_bag_panel.update_pet_bag_ui() - - # 初始化巡逻宠物 - if main_game.has_method("init_patrol_pets"): - main_game.init_patrol_pets() - - # 调用主游戏的登录成功处理函数 - main_game.handle_login_success(user_data) - - # 初始化游戏设置 - if main_game.game_setting_panel and main_game.game_setting_panel.has_method("refresh_settings"): - main_game.game_setting_panel.refresh_settings() + _set_status(status_label, "登录成功!正在加载游戏...", Color.GREEN) + _handle_login_success(user_data) else: - status_label.text = "登录失败:" + message - status_label.modulate = Color.RED - - # 如果登录失败且是密码错误,可以选择清除保存的信息 + _set_status(status_label, "登录失败:" + message, Color.RED) if "密码" in message or "password" in message.to_lower(): print("登录失败,可能是密码错误。如需清除保存的登录信息,请调用_clear_login_info()") # 处理注册响应 func _on_register_response_received(success: bool, message: String): - # 启用按钮 register_button_2.disabled = false if success: - status_label_2.text = "注册成功!请登录游戏" - status_label_2.modulate = Color.GREEN - - # 注册成功后,如果启用了记住密码,保存登录信息 - if remember_password: - var user_name = register_username_input.text.strip_edges() - var user_password = password_input_1.text.strip_edges() - _save_login_info(user_name, user_password) - - # 清除注册相关的输入框 - password_input_2.text = "" - verificationcode_input.text = "" - - # 切换回登录面板 - register_vbox.hide() - forget_password_vbox.hide() - login_v_box.show() - - # 如果记住密码,自动填充登录信息 - if remember_password: - username_input.text = register_username_input.text - password_input.text = password_input_1.text + _set_status(status_label_2, "注册成功!请登录游戏", Color.GREEN) + _handle_register_success() else: - status_label_2.text = "注册失败:" + message - status_label_2.modulate = Color.RED + _set_status(status_label_2, "注册失败:" + message, Color.RED) # 处理忘记密码响应 func _on_forget_password_response_received(success: bool, message: String): - # 启用按钮 forget_password_button.disabled = false if success: - status_label_3.text = "密码重置成功!请使用新密码登录" - status_label_3.modulate = Color.GREEN - - # 保存新的登录信息 - if remember_password: - var user_name = forget_username_input.text.strip_edges() - var new_password = new_password_input.text.strip_edges() - _save_login_info(user_name, new_password) - - # 清除输入框 - forget_verificationcode_input.text = "" - - # 切换回登录面板并自动填充账号信息 - forget_password_vbox.hide() - register_vbox.hide() - login_v_box.show() - - # 自动填充登录信息 - username_input.text = forget_username_input.text - password_input.text = new_password_input.text - - status_label.text = "密码已重置,请登录" - status_label.modulate = Color.GREEN + _set_status(status_label_3, "密码重置成功!请使用新密码登录", Color.GREEN) + _handle_forget_password_success() else: - status_label_3.text = "密码重置失败:" + message - status_label_3.modulate = Color.RED + _set_status(status_label_3, "密码重置失败:" + message, Color.RED) -# 保存登录信息到JSON文件 +# 登录信息文件操作 func _save_login_info(user_name: String, password: String): - var login_data = { - "user_name": user_name, - "password": password - } - - var file = FileAccess.open("user://login.json", FileAccess.WRITE) - if file: - var json_string = JSON.stringify(login_data, "\t") - file.store_string(json_string) - file.close() - print("登录信息已保存") - else: - print("无法保存登录信息") + _write_login_file({"user_name": user_name, "password": password}) + print("登录信息已保存" if user_name != "" else "登录信息已清除") -# 从JSON文件加载登录信息 func _load_login_info(): - var file = FileAccess.open("user://login.json", FileAccess.READ) - if file: - var json_text = file.get_as_text() - file.close() + var login_data = _read_login_file() + if login_data: + var saved_username = login_data.get("user_name", "") + var saved_password = login_data.get("password", "") - var json = JSON.new() - var parse_result = json.parse(json_text) - if parse_result == OK: - var login_data = json.get_data() - if login_data.has("user_name") and login_data.has("password"): - var saved_username = login_data.get("user_name", "") - var saved_password = login_data.get("password", "") - - if saved_username != "" and saved_password != "": - username_input.text = saved_username - password_input.text = saved_password - status_label.text = "已加载保存的登录信息" - status_label.modulate = Color.CYAN - print("登录信息已加载:用户名 =", saved_username) - else: - status_label.text = "欢迎使用萌芽农场" - status_label.modulate = Color.WHITE - print("没有有效的保存登录信息") - else: - print("登录信息格式错误") - else: - print("登录信息JSON解析错误:", json.get_error_message()) - else: - # 创建默认的登录信息文件 - _save_login_info("", "") - status_label.text = "欢迎使用萌芽农场" - status_label.modulate = Color.WHITE - print("没有找到保存的登录信息,已创建默认文件") + if saved_username != "" and saved_password != "": + username_input.text = saved_username + password_input.text = saved_password + _set_status(status_label, "已加载保存的登录信息", Color.CYAN) + print("登录信息已加载:用户名 =", saved_username) + return + + _set_status(status_label, "欢迎使用萌芽农场", Color.WHITE) + print("没有有效的保存登录信息") -# 清除保存的登录信息 func _clear_login_info(): + _save_login_info("", "") + +func _write_login_file(data: Dictionary): var file = FileAccess.open("user://login.json", FileAccess.WRITE) if file: - var empty_data = { - "user_name": "", - "password": "" - } - var json_string = JSON.stringify(empty_data, "\t") - file.store_string(json_string) + file.store_string(JSON.stringify(data, "\t")) file.close() - print("登录信息已清除") - else: - print("无法清除登录信息") -# 切换记住密码选项 +func _read_login_file() -> Dictionary: + var file = FileAccess.open("user://login.json", FileAccess.READ) + if not file: + _write_login_file({"user_name": "", "password": ""}) + return {} + + var json_text = file.get_as_text() + file.close() + + var json = JSON.new() + if json.parse(json_text) == OK: + return json.get_data() + return {} + +# 记住密码和快捷登录功能 func toggle_remember_password(): remember_password = !remember_password print("记住密码选项:", "开启" if remember_password else "关闭") - - # 如果关闭了记住密码,清除已保存的信息 if not remember_password: _clear_login_info() -# 检查是否有保存的登录信息 func has_saved_login_info() -> bool: - var file = FileAccess.open("user://login.json", FileAccess.READ) - if file: - var json_text = file.get_as_text() - file.close() - - var json = JSON.new() - var parse_result = json.parse(json_text) - if parse_result == OK: - var login_data = json.get_data() - var user_name = login_data.get("user_name", "") - var password = login_data.get("password", "") - return user_name != "" and password != "" - - return false + var login_data = _read_login_file() + return login_data.get("user_name", "") != "" and login_data.get("password", "") != "" -# 快捷登录(使用保存的登录信息) func quick_login(): if has_saved_login_info(): var user_name = username_input.text.strip_edges() @@ -701,40 +398,171 @@ func quick_login(): print("执行快捷登录...") _on_login_button_pressed() else: - status_label.text = "保存的登录信息不完整" - status_label.modulate = Color.ORANGE + _set_status(status_label, "保存的登录信息不完整", Color.ORANGE) else: - status_label.text = "没有保存的登录信息" - status_label.modulate = Color.ORANGE + _set_status(status_label, "没有保存的登录信息", Color.ORANGE) -# 获取保存的用户名(用于调试或显示) func get_saved_username() -> String: - var file = FileAccess.open("user://login.json", FileAccess.READ) - if file: - var json_text = file.get_as_text() - file.close() - - var json = JSON.new() - var parse_result = json.parse(json_text) - if parse_result == OK: - var login_data = json.get_data() - return login_data.get("user_name", "") - - return "" + return _read_login_file().get("user_name", "") # 显示版本信息 func _display_version_info(): - # 在状态标签中显示客户端版本信息 - if status_label.text == "欢迎使用萌芽农场" or status_label.text == "连接状态": - status_label.text = "萌芽农场 v" + main_game.client_version + " - 欢迎使用" - status_label.modulate = Color.CYAN + if status_label.text in ["欢迎使用萌芽农场", "连接状态"]: + _set_status(status_label, "萌芽农场 v" + main_game.client_version + " - 欢迎使用", Color.CYAN) +# 登录成功处理 +func _handle_login_success(user_data: Dictionary): + # 保存登录数据到主游戏 + main_game.login_data = user_data.duplicate() + main_game.remaining_likes = user_data.get("今日剩余点赞次数", 10) + + # 更新主游戏数据 + main_game.experience = user_data.get("experience", 0) + main_game.farm_lots = user_data.get("farm_lots", []) + main_game.level = user_data.get("level", 1) + main_game.money = user_data.get("money", 0) + main_game.stamina = user_data.get("体力值", 20) + main_game.show_farm_name.text = "农场名称:" + user_data.get("farm_name", "") + main_game.show_player_name.text = "玩家昵称:" + user_data.get("player_name", "") + farmname_input.text = user_data.get("farm_name", "") + + # 加载各种背包数据 + main_game.player_bag = user_data.get("player_bag", []) + main_game.crop_warehouse = user_data.get("作物仓库", []) + main_game.item_bag = user_data.get("道具背包", []) + main_game.pet_bag = user_data.get("宠物背包", []) + main_game.patrol_pets = user_data.get("巡逻宠物", []) + + # 启动游戏并隐藏登录面板 + main_game.start_game = true + self.hide() + + # 更新UI + main_game._update_ui() + main_game._refresh_farm_lots() + player_bag_panel.update_player_bag_ui() + crop_warehouse_panel.update_crop_warehouse_ui() + item_bag_panel.update_item_bag_ui() + + if pet_bag_panel and pet_bag_panel.has_method("update_pet_bag_ui"): + pet_bag_panel.update_pet_bag_ui() + if main_game.has_method("init_patrol_pets"): + main_game.init_patrol_pets() + + main_game.handle_login_success(user_data) + + if main_game.game_setting_panel and main_game.game_setting_panel.has_method("refresh_settings"): + main_game.game_setting_panel.refresh_settings() + +# 注册成功处理 +func _handle_register_success(): + if remember_password: + var user_name = register_username_input.text.strip_edges() + var user_password = password_input_1.text.strip_edges() + _save_login_info(user_name, user_password) + + # 清除注册相关的输入框 + password_input_2.text = "" + verificationcode_input.text = "" + + # 切换回登录面板 + _switch_to_login_panel() + + # 如果记住密码,自动填充登录信息 + if remember_password: + username_input.text = register_username_input.text + password_input.text = password_input_1.text + +# 忘记密码成功处理 +func _handle_forget_password_success(): + if remember_password: + var user_name = forget_username_input.text.strip_edges() + var new_password = new_password_input.text.strip_edges() + _save_login_info(user_name, new_password) + + # 清除输入框 + forget_verificationcode_input.text = "" + + # 切换回登录面板并自动填充账号信息 + _switch_to_login_panel() + username_input.text = forget_username_input.text + password_input.text = new_password_input.text + _set_status(status_label, "密码已重置,请登录", Color.GREEN) + +# 切换到登录面板 +func _switch_to_login_panel(): + register_vbox.hide() + forget_password_vbox.hide() + login_v_box.show() + +# 公共验证函数 +func _validate_login_input(user_name: String, password: String, label: Label) -> bool: + if user_name.is_empty() or password.is_empty(): + _set_status(label, "用户名或密码不能为空!", Color.RED) + return false + return true + +func _validate_register_input(user_name: String, password: String, password_confirm: String, player_name: String, farm_name: String, verification_code: String, label: Label) -> bool: + if user_name.is_empty() or password.is_empty() or password_confirm.is_empty() or player_name.is_empty() or farm_name.is_empty(): + _set_status(label, "所有字段都不能为空!", Color.RED) + return false + if password != password_confirm: + _set_status(label, "两次输入的密码不一致!", Color.RED) + return false + if not is_valid_qq_number(user_name): + _set_status(label, "请输入有效的QQ号(5-12位数字)!", Color.RED) + return false + if not is_valid_password(password): + _set_status(label, "密码只能包含数字和字母!", Color.RED) + return false + if verification_code.is_empty(): + _set_status(label, "验证码不能为空!", Color.RED) + return false + return true + +func _validate_qq_input(user_name: String, label: Label) -> bool: + if user_name.is_empty(): + _set_status(label, "请输入QQ号以接收验证码!", Color.RED) + return false + if not is_valid_qq_number(user_name): + _set_status(label, "请输入正确的QQ号码(5-12位数字)!", Color.RED) + return false + return true + +func _validate_forget_password_input(user_name: String, new_password: String, verification_code: String, label: Label) -> bool: + if user_name.is_empty() or new_password.is_empty(): + _set_status(label, "用户名或新密码不能为空!", Color.RED) + return false + if not is_valid_qq_number(user_name): + _set_status(label, "请输入正确的QQ号码(5-12位数字)!", Color.RED) + return false + if not is_valid_password(new_password): + _set_status(label, "密码只能包含数字和字母!", Color.RED) + return false + if verification_code.is_empty(): + _set_status(label, "请输入验证码!", Color.RED) + return false + return true + +# 公共网络连接检查函数 +func _ensure_network_connection(label: Label) -> bool: + if not tcp_network_manager_panel.client.is_client_connected(): + _set_status(label, "未连接到服务器,正在尝试连接...", Color.YELLOW) + tcp_network_manager_panel.connect_to_current_server() + await get_tree().create_timer(2.0).timeout + + if not tcp_network_manager_panel.client.is_client_connected(): + _set_status(label, "连接服务器失败,正在尝试其他服务器...", Color.YELLOW) + await get_tree().create_timer(3.0).timeout + return false + return true + +# 公共状态设置函数 +func _set_status(label: Label, text: String, color: Color): + label.text = text + label.modulate = color + #面板显示与隐藏切换处理 func _on_visibility_changed(): - if visible: - GlobalVariables.isZoomDisabled = true - pass - else: - GlobalVariables.isZoomDisabled = false - pass + GlobalVariables.isZoomDisabled = visible diff --git a/Script/SmallPanel/AccountSettingPanel.gd b/Script/SmallPanel/AccountSettingPanel.gd index 0cf16e3..f3d303c 100644 --- a/Script/SmallPanel/AccountSettingPanel.gd +++ b/Script/SmallPanel/AccountSettingPanel.gd @@ -27,6 +27,7 @@ func _ready() -> void: refresh_button.pressed.connect(_on_refresh_button_pressed) confirm_btn.pressed.connect(_on_confirm_btn_pressed) remove_account_btn.pressed.connect(_on_remove_account_btn_pressed) + visibility_changed.connect(_on_visibility_changed) # 初始显示界面数据 _refresh_player_info() @@ -36,7 +37,7 @@ func _ready() -> void: await get_tree().create_timer(1.0).timeout _request_player_info_from_server() - +#面板切换显示时 func _on_visibility_changed(): if visible: GlobalVariables.isZoomDisabled = true @@ -216,11 +217,11 @@ func handle_account_response(response_data: Dictionary): var updated_data = response_data["updated_data"] if main_game: if updated_data.has("player_name"): - main_game.data["player_name"] = updated_data["player_name"] + main_game.login_data["player_name"] = updated_data["player_name"] if updated_data.has("farm_name"): - main_game.data["farm_name"] = updated_data["farm_name"] + main_game.login_data["farm_name"] = updated_data["farm_name"] if updated_data.has("个人简介"): - main_game.data["个人简介"] = updated_data["个人简介"] + main_game.login_data["个人简介"] = updated_data["个人简介"] if updated_data.has("user_password"): main_game.user_password = updated_data["user_password"] diff --git a/Server/TCPGameServer.py b/Server/TCPGameServer.py index 468dce6..34c3575 100644 --- a/Server/TCPGameServer.py +++ b/Server/TCPGameServer.py @@ -7960,10 +7960,7 @@ class TCPGameServer(TCPServer): if not new_farm_name: return self._send_modify_account_error(client_id, "农场名称不能为空") - - if len(new_password) < 6: - return self._send_modify_account_error(client_id, "密码长度至少6个字符") - + if len(new_player_name) > 20: return self._send_modify_account_error(client_id, "玩家昵称不能超过20个字符") diff --git a/Server/config/initial_player_data_template.json b/Server/config/initial_player_data_template.json index adc919d..ff6c974 100644 --- a/Server/config/initial_player_data_template.json +++ b/Server/config/initial_player_data_template.json @@ -8,7 +8,6 @@ "user_password": "密码", "last_login_time": "2025年07月20日17时19分16秒", "total_login_time": "0时0分0秒", - "last_water_reset_date": "2025-06-05", "farm_lots": [], "player_bag": [], "作物仓库": [], diff --git a/Server/game_saves/2143323382.json b/Server/game_saves/2143323382.json index 13a83bb..4f0496f 100644 --- a/Server/game_saves/2143323382.json +++ b/Server/game_saves/2143323382.json @@ -682,7 +682,6 @@ "count": 1 } ], - "last_water_reset_date": "2025-06-05", "注册时间": "2025年05月21日15时00分00秒", "个人简介": "其实我是一个梨子,真的,不骗你", "作物仓库": [ diff --git a/Server/game_saves/2804775686.json b/Server/game_saves/2804775686.json new file mode 100644 index 0000000..af56e15 --- /dev/null +++ b/Server/game_saves/2804775686.json @@ -0,0 +1,2099 @@ +{ + "experience": 877, + "level": 11, + "money": 1231231162929, + "farm_name": "123", + "player_name": "123", + "user_name": "2804775686", + "user_password": "123", + "last_login_time": "2025年07月21日07时55分08秒", + "total_login_time": "0时4分18秒", + "注册时间": "2025年07月20日23时08分10秒", + "个人简介": "我要女朋友", + "farm_lots": [ + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": true, + "is_planted": false, + "max_grow_time": 3, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "", + "grow_time": 0, + "is_dead": false, + "is_diged": false, + "is_planted": false, + "max_grow_time": 5, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + } + ], + "player_bag": [ + { + "name": "辣椒", + "quality": "普通", + "count": 11 + }, + { + "name": "土豆", + "quality": "普通", + "count": 13 + }, + { + "name": "石榴", + "quality": "普通", + "count": 1 + }, + { + "name": "生菜", + "quality": "普通", + "count": 4 + }, + { + "name": "大蒜", + "quality": "普通", + "count": 1 + }, + { + "name": "小麦", + "quality": "普通", + "count": 9 + }, + { + "name": "胡萝卜", + "quality": "普通", + "count": 11 + }, + { + "name": "稻谷", + "quality": "普通", + "count": 4 + }, + { + "name": "龙果", + "quality": "传奇", + "count": 3 + }, + { + "name": "杂交树1", + "quality": "传奇", + "count": 1 + }, + { + "name": "杂交树2", + "quality": "传奇", + "count": 1 + }, + { + "name": "芒果", + "quality": "稀有", + "count": 3 + }, + { + "name": "树莓", + "quality": "优良", + "count": 4 + }, + { + "name": "金橘", + "quality": "史诗", + "count": 1 + }, + { + "name": "茄子", + "quality": "普通", + "count": 5 + }, + { + "name": "橘子", + "quality": "优良", + "count": 1 + }, + { + "name": "番茄", + "quality": "普通", + "count": 2 + }, + { + "name": "野草2", + "quality": "优良", + "count": 3 + }, + { + "name": "芦笋", + "quality": "优良", + "count": 6 + }, + { + "name": "枇杷", + "quality": "优良", + "count": 3 + }, + { + "name": "牵牛花", + "quality": "稀有", + "count": 4 + }, + { + "name": "玉米", + "quality": "优良", + "count": 6 + }, + { + "name": "野草1", + "quality": "优良", + "count": 3 + }, + { + "name": "苹果", + "quality": "优良", + "count": 2 + }, + { + "name": "山楂", + "quality": "优良", + "count": 1 + }, + { + "name": "柠檬", + "quality": "稀有", + "count": 2 + }, + { + "name": "豌豆", + "quality": "普通", + "count": 4 + }, + { + "name": "仙人掌", + "quality": "优良", + "count": 2 + }, + { + "name": "南瓜", + "quality": "优良", + "count": 5 + }, + { + "name": "葫芦", + "quality": "优良", + "count": 5 + }, + { + "name": "摇钱树", + "quality": "传奇", + "count": 1 + }, + { + "name": "大豆", + "quality": "普通", + "count": 3 + }, + { + "name": "梨子", + "quality": "优良", + "count": 3 + }, + { + "name": "山葵", + "quality": "稀有", + "count": 1 + }, + { + "name": "杂草2", + "quality": "普通", + "count": 2 + } + ], + "作物仓库": [], + "宠物背包": [ + { + "场景路径": "res://Scene/Pet/SmallGreen.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小绿", + "队伍标识": "team1", + "宠物ID": "1753024341725", + "宠物类型": "小绿", + "生日": "2025年7月20日23时12分21秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallBlue.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小蓝", + "队伍标识": "team1", + "宠物ID": "1753024343029", + "宠物类型": "小蓝", + "生日": "2025年7月20日23时12分23秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallYellow.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小黄", + "队伍标识": "team1", + "宠物ID": "1753024344253", + "宠物类型": "小黄", + "生日": "2025年7月20日23时12分24秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallOrange.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小橙", + "队伍标识": "team1", + "宠物ID": "1753024345485", + "宠物类型": "小橙", + "生日": "2025年7月20日23时12分25秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallPink.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小粉", + "队伍标识": "team1", + "宠物ID": "1753024346767", + "宠物类型": "小粉", + "生日": "2025年7月20日23时12分26秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/RedSlime.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的红史莱姆", + "队伍标识": "team1", + "宠物ID": "1753024348069", + "宠物类型": "红史莱姆", + "生日": "2025年7月20日23时12分28秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/GreenSlime.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的绿史莱姆", + "队伍标识": "team1", + "宠物ID": "1753024349429", + "宠物类型": "绿史莱姆", + "生日": "2025年7月20日23时12分29秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/LittleKnight.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小骑士", + "队伍标识": "team1", + "宠物ID": "1753024350990", + "宠物类型": "小骑士", + "生日": "2025年7月20日23时12分30秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/BigBeetle.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的大甲虫", + "队伍标识": "team1", + "宠物ID": "1753024354464", + "宠物类型": "大甲虫", + "生日": "2025年7月20日23时12分34秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallBeetle.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小甲虫", + "队伍标识": "team1", + "宠物ID": "1753024355389", + "宠物类型": "小甲虫", + "生日": "2025年7月20日23时12分35秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/FlyingBird.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的飞鸟", + "队伍标识": "team1", + "宠物ID": "1753024356493", + "宠物类型": "飞鸟", + "生日": "2025年7月20日23时12分36秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 1, + "当前经验": 0, + "最大经验": 100, + "亲密度": 0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 200, + "当前生命值": 200, + "生命恢复速度": 1, + "最大护盾值": 0, + "当前护盾值": 0, + "护盾恢复速度": 0, + "最大护甲值": 100, + "当前护甲值": 100 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 25, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + }, + { + "场景路径": "res://Scene/Pet/SmallDrillBit.tscn", + "基本信息": { + "宠物主人": "2804775686", + "宠物名称": "2804775686的小钻头", + "队伍标识": "team1", + "宠物ID": "1753024357344", + "宠物类型": "小钻头", + "生日": "2025年7月20日23时12分37秒", + "年龄": 0, + "性格": "活泼", + "简介": "", + "爱好": "" + }, + "等级经验": { + "宠物等级": 2, + "当前经验": 30.0, + "最大经验": 120.0, + "亲密度": 68.0, + "最大亲密度": 1000 + }, + "购买信息": { + "能否购买": true, + "购买价格": 1000, + "出售价格": 500 + }, + "生命与防御": { + "最大生命值": 220.00000000000003, + "当前生命值": 220.00000000000003, + "生命恢复速度": 1, + "最大护盾值": 0.0, + "当前护盾值": 0.0, + "护盾恢复速度": 0, + "最大护甲值": 110.00000000000001, + "当前护甲值": 110.00000000000001 + }, + "基础攻击属性": { + "攻击类型": "MELEE", + "基础攻击伤害": 27.500000000000004, + "攻击距离": 100, + "暴击率": 0.1, + "暴击伤害倍数": 1.5, + "生命汲取": 0.1, + "护甲穿透": 0 + }, + "近战攻击": { + "近战额外伤害": 0, + "近战攻击速度": 1 + }, + "远程攻击": { + "远程额外伤害": 0, + "远程攻击速度": 1, + "远程攻击模式": "SINGLE", + "子弹速度": 300 + }, + "散弹攻击": { + "散弹数量": 5, + "散弹扩散角度": 45 + }, + "多发射击": { + "多发射击行数": 2, + "多发射击列数": 3, + "多发射击间距": 30 + }, + "加特林属性": { + "加特林子弹数量": 8, + "加特林射击间隔": 0.1, + "加特林冷却时间": 2 + }, + "穿透属性": { + "穿透数量": 3 + }, + "移动与闪避": { + "移动速度": 100, + "闪避率": 0.05, + "击退力度": 300, + "击退抗性": 0 + }, + "元素属性": { + "元素类型": "NONE", + "元素克制额外伤害": 50 + }, + "特殊属性": { + "控制抗性": 0, + "伤害反弹": 0, + "死亡免疫": false, + "狂暴阈值": 0.3, + "狂暴状态伤害倍数": 1.5 + }, + "特殊机制开关": { + "启用伤害反弹机制": false, + "启用狂暴模式机制": false, + "启用死亡免疫机制": false, + "启用援助召唤机制": false, + "启用死亡重生机制": false + }, + "援助系统": { + "援助触发阈值": 0.2, + "援助召唤数量": 2, + "援助召唤间隔": 5 + }, + "品质系统": { + "宠物品质": "COMMON" + } + } + ], + "巡逻宠物": [ + "1753024350990" + ], + "出战宠物": [ + "1753024357344" + ], + "稻草人配置": { + "已拥有稻草人类型": [ + "稻草人1" + ], + "稻草人展示类型": "", + "稻草人昵称": "稻草人", + "稻草人说的话": { + "第一句话": { + "内容": "第一句话", + "颜色": "52dceeff" + }, + "第二句话": { + "内容": "第二句话", + "颜色": "80d5ffff" + }, + "第三句话": { + "内容": "第三句话", + "颜色": "ac52ffff" + }, + "第四句话": { + "内容": "第四句话", + "颜色": "f881ffff" + } + }, + "稻草人昵称颜色": "b38282ff" + }, + "智慧树配置": { + "距离上一次杀虫时间": 1753004237, + "距离上一次除草时间": 1753004237, + "智慧树显示的话": "", + "等级": 1, + "当前经验值": 0, + "最大经验值": 100, + "最大生命值": 100, + "当前生命值": 100, + "高度": 20, + "上次护理时间": 1753024232 + }, + "签到历史": { + "2025年07月20日23时13分52秒": "金币236 经验84 稻谷x3 小麦x3" + }, + "在线礼包": { + "当前日期": "2025-07-21", + "今日在线时长": 0.0, + "已领取礼包": [], + "登录时间": 1753054985.2239232 + }, + "点赞系统": { + "今日剩余点赞次数": 10, + "点赞上次刷新时间": "2025-07-21" + }, + "新手礼包": { + "已领取": true, + "领取时间": "2025-07-20 23:13:43" + }, + "体力系统": { + "当前体力值": 25, + "最大体力值": 25, + "上次刷新时间": "2025-07-21", + "上次恢复时间": 1753054985.221472 + }, + "道具背包": [ + { + "name": "小额经验卡", + "count": 1 + }, + { + "name": "敦岩图腾", + "count": 1 + }, + { + "name": "烈焰图腾", + "count": 1 + }, + { + "name": "潮汐图腾", + "count": 1 + }, + { + "name": "灵木图腾", + "count": 1 + }, + { + "name": "金刚图腾", + "count": 1 + }, + { + "name": "援军令牌", + "count": 1 + }, + { + "name": "狂暴药水", + "count": 1 + }, + { + "name": "荆棘护甲", + "count": 1 + }, + { + "name": "不死图腾", + "count": 1 + }, + { + "name": "铲子", + "count": 1 + }, + { + "name": "生长素", + "count": 1 + }, + { + "name": "除草剂", + "count": 1 + } + ], + "玩家小卖部": [], + "小卖部格子数": 10, + "游戏设置": { + "背景音乐音量": 1.0, + "天气显示": true + } +} \ No newline at end of file diff --git a/server/game_saves/3205788256.json b/server/game_saves/3205788256.json index 84ec0d9..da5176d 100644 --- a/server/game_saves/3205788256.json +++ b/server/game_saves/3205788256.json @@ -582,9 +582,6 @@ "total_login_time": "162时47分40秒", "user_name": "3205788256", "user_password": "tyh@19900420", - "last_water_reset_date": "2025-06-06", - "last_check_in_date": "2025-06-01", - "session_start_time": 1749878790.288913, "个人简介": "人生啊,就这样吧", "注册时间": "2025年05月21日15时00分00秒", "作物仓库": [