diff --git a/MainGame.tscn b/MainGame.tscn index ff32014..413b5f0 100644 --- a/MainGame.tscn +++ b/MainGame.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=72 format=3 uid="uid://dgh61dttaas5a"] +[gd_scene load_steps=85 format=3 uid="uid://dgh61dttaas5a"] [ext_resource type="Script" uid="uid://2pt11sfcaxf7" path="res://MainGame.gd" id="1_v3yaj"] [ext_resource type="Texture2D" uid="uid://du2pyiojliasy" path="res://assets/游戏UI/经验球.webp" id="2_6jgly"] @@ -53,6 +53,15 @@ [ext_resource type="Texture2D" uid="uid://dswjorjhf1i6f" path="res://assets/灌木丛图片/灌木丛2.webp" id="50_sqnmr"] [ext_resource type="Texture2D" uid="uid://go3n3qnpancf" path="res://assets/灌木丛图片/灌木丛3.webp" id="51_2i8fe"] [ext_resource type="Texture2D" uid="uid://dk4yl4ghmxaa2" path="res://assets/天气系统图片/雪花.webp" id="53_4ka7t"] +[ext_resource type="PackedScene" uid="uid://cvg38nsrm77jy" path="res://Scene/Particle/WillowLeafRain.tscn" id="53_nf3jg"] +[ext_resource type="Texture2D" uid="uid://chcgrmluhfxuk" path="res://assets/天气系统图片/樱花1.webp" id="53_tdq2s"] +[ext_resource type="Texture2D" uid="uid://c1qqalp7owgy2" path="res://assets/天气系统图片/栀子花1.webp" id="53_xyeuq"] +[ext_resource type="Texture2D" uid="uid://dfkgmj7e0555q" path="res://assets/天气系统图片/樱花2.webp" id="54_dygjy"] +[ext_resource type="Texture2D" uid="uid://bfducebx4c4il" path="res://assets/天气系统图片/柳叶3.webp" id="54_jiccn"] +[ext_resource type="Texture2D" uid="uid://cd7x78uyi2csh" path="res://assets/天气系统图片/栀子花2.webp" id="54_t4s8j"] +[ext_resource type="Texture2D" uid="uid://dl58ie2lneq77" path="res://assets/天气系统图片/柳叶1.webp" id="55_e8wx8"] +[ext_resource type="Texture2D" uid="uid://q0difb6wjkgm" path="res://assets/天气系统图片/樱花3.webp" id="55_edvcq"] +[ext_resource type="Texture2D" uid="uid://cqqyc3ddwtvpn" path="res://assets/天气系统图片/栀子花3.webp" id="55_iluto"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5dq3w"] @@ -110,8 +119,13 @@ shadow_size = 30 [sub_resource type="Environment" id="Environment_m6fch"] background_mode = 3 ambient_light_energy = 0.0 +glow_enabled = true +glow_intensity = 1.0 glow_bloom = 0.3 glow_blend_mode = 0 +glow_hdr_threshold = 2.0 +volumetric_fog_emission_energy = 281.25 +volumetric_fog_gi_inject = 1.38 [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ylhg"] border_width_left = 10 @@ -126,44 +140,98 @@ corner_detail = 20 shadow_size = 20 shadow_offset = Vector2(3, 3) -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_nf3jg"] -lifetime_randomness = 1.0 -particle_flag_disable_z = true -emission_shape = 3 -emission_box_extents = Vector3(1, 1, 1) -gravity = Vector3(0, 98, 0) -scale_min = 0.5 -scale_max = 0.5 -turbulence_enabled = true - -[sub_resource type="Curve" id="Curve_4ka7t"] -_data = [Vector2(0, 0.951807), 0.0, 0.0, 0, 0, Vector2(0.0153846, 1), 0.0, 0.0, 0, 0, Vector2(0.0461538, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] -point_count = 4 - -[sub_resource type="CurveTexture" id="CurveTexture_nf3jg"] -curve = SubResource("Curve_4ka7t") - -[sub_resource type="Gradient" id="Gradient_adtqp"] -offsets = PackedFloat32Array(0.52, 0.697143) -colors = PackedColorArray(1, 1, 1, 0.352941, 1, 1, 1, 1) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_5dq3w"] -gradient = SubResource("Gradient_adtqp") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jiccn"] -lifetime_randomness = 0.07 +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_tdq2s"] particle_flag_disable_z = true emission_shape = 3 emission_box_extents = Vector3(1000, 1, 1) -gravity = Vector3(46, 80, 0) +gravity = Vector3(-30, 80, 0) scale_min = 0.2 scale_max = 0.3 -color_initial_ramp = SubResource("GradientTexture1D_5dq3w") -alpha_curve = SubResource("CurveTexture_nf3jg") turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_dygjy"] +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +gravity = Vector3(-30, 80, 0) +scale_min = 0.2 +scale_max = 0.3 +turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_e8wx8"] +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +gravity = Vector3(-30, 80, 0) +scale_min = 0.4 +scale_max = 0.5 +turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4ka7t"] +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +gravity = Vector3(-45, 80, 0) +scale_min = 0.4 +scale_max = 0.5 +turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jiccn"] +lifetime_randomness = 0.6 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +direction = Vector3(0, 1, 0) +spread = 0.0 +initial_velocity_min = 100.0 +initial_velocity_max = 400.0 +gravity = Vector3(0, 98, 0) +scale_min = 4.0 +scale_max = 6.0 +color = Color(0, 0.380392, 1, 1) turbulence_influence_min = 0.02 turbulence_influence_max = 0.08 +[sub_resource type="Curve" id="Curve_5dq3w"] +_data = [Vector2(0, 0.987952), 0.0, 0.0, 0, 0, Vector2(1e-05, 1), 0.0, 0.0, 0, 0, Vector2(0.0153846, 1), 0.0, 0.0, 0, 0, Vector2(0.838462, 0.253012), -2.16867, -2.16867, 0, 0, Vector2(0.976923, 0), 0.0, 0.0, 0, 0, Vector2(0.99999, 0), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 7 + +[sub_resource type="CurveTexture" id="CurveTexture_jiccn"] +curve = SubResource("Curve_5dq3w") + +[sub_resource type="Gradient" id="Gradient_e8wx8"] +offsets = PackedFloat32Array(0.372727, 0.718182) +colors = PackedColorArray(0.886, 0.886, 0.886, 0.313, 1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_tdq2s"] +gradient = SubResource("Gradient_e8wx8") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_nf3jg"] +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +gravity = Vector3(45, 98, 0) +scale_min = 0.4 +scale_max = 0.5 +color_initial_ramp = SubResource("GradientTexture1D_tdq2s") +alpha_curve = SubResource("CurveTexture_jiccn") +turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + [node name="main" type="Node"] script = ExtResource("1_v3yaj") @@ -1562,9 +1630,9 @@ offset_bottom = -61.0 anchor_mode = 0 position_smoothing_enabled = true script = ExtResource("10_o8l48") -max_zoom = 2.0 +max_zoom = 1.8 bounds_enabled = true -bounds_min = Vector2(-500, -500) +bounds_min = Vector2(-500, -400) bounds_max = Vector2(500, 500) [node name="WorldEnvironment" type="WorldEnvironment" parent="."] @@ -4277,27 +4345,125 @@ vertical_alignment = 1 [node name="WeatherSystem" type="Node2D" parent="."] +[node name="CherryBlossomRain" type="Node2D" parent="WeatherSystem"] +visible = false +position = Vector2(934, -469) + +[node name="CherryBlossomRain1" type="GPUParticles2D" parent="WeatherSystem/CherryBlossomRain"] +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +position = Vector2(-143, 11) +amount = 50 +texture = ExtResource("53_xyeuq") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_tdq2s") + +[node name="CherryBlossomRain2" type="GPUParticles2D" parent="WeatherSystem/CherryBlossomRain"] +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +position = Vector2(-143, 11) +amount = 50 +texture = ExtResource("54_t4s8j") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_tdq2s") + +[node name="CherryBlossomRain3" type="GPUParticles2D" parent="WeatherSystem/CherryBlossomRain"] +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +position = Vector2(-143, 11) +amount = 50 +texture = ExtResource("55_iluto") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_tdq2s") + +[node name="GardeniaRain" type="Node2D" parent="WeatherSystem"] +position = Vector2(759, -370) + +[node name="WillowLeafRain1" type="GPUParticles2D" parent="WeatherSystem/GardeniaRain"] +self_modulate = Color(0.9, 0.9, 0.9, 1) +z_index = 10 +amount = 50 +texture = ExtResource("53_tdq2s") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_dygjy") + +[node name="WillowLeafRain2" type="GPUParticles2D" parent="WeatherSystem/GardeniaRain"] +self_modulate = Color(0.9, 0.9, 0.9, 1) +z_index = 10 +amount = 50 +texture = ExtResource("54_dygjy") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_dygjy") + +[node name="WillowLeafRain3" type="GPUParticles2D" parent="WeatherSystem/GardeniaRain"] +self_modulate = Color(0.9, 0.9, 0.9, 1) +z_index = 10 +amount = 50 +texture = ExtResource("55_edvcq") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_dygjy") + +[node name="WillowLeafRain" type="Node2D" parent="WeatherSystem"] +visible = false +position = Vector2(882, -469) + +[node name="WillowLeafRain1" parent="WeatherSystem/WillowLeafRain" instance=ExtResource("53_nf3jg")] +visible = false + +[node name="WillowLeafRain2" type="GPUParticles2D" parent="WeatherSystem/WillowLeafRain"] +visible = false +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +amount = 50 +texture = ExtResource("55_e8wx8") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_e8wx8") + +[node name="WillowLeafRain3" type="GPUParticles2D" parent="WeatherSystem/WillowLeafRain"] +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +amount = 50 +texture = ExtResource("54_jiccn") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_4ka7t") + [node name="Rain" type="GPUParticles2D" parent="WeatherSystem"] visible = false -position = Vector2(-170, -272) -amount = 16 -sub_emitter = NodePath(".") -texture = ExtResource("53_4ka7t") -lifetime = 15.0 -randomness = 0.5 -process_material = SubResource("ParticleProcessMaterial_nf3jg") +z_index = 10 +position = Vector2(246, -482) +amount = 450 +lifetime = 10.0 +preprocess = 20.0 +speed_scale = 1.5 +visibility_rect = Rect2(-900, 0, 2000, 2000) +trail_lifetime = 0.01 +process_material = SubResource("ParticleProcessMaterial_jiccn") [node name="Snow" type="GPUParticles2D" parent="WeatherSystem"] -z_index = 10 -position = Vector2(249, -262) +visible = false +position = Vector2(16, -520) amount = 300 texture = ExtResource("53_4ka7t") -lifetime = 15.0 +lifetime = 18.0 preprocess = 30.0 -visibility_rect = Rect2(-900, 0, 2000, 2000) -trail_sections = 2 -trail_section_subdivisions = 1 -process_material = SubResource("ParticleProcessMaterial_jiccn") +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_nf3jg") [node name="DayNightSystem" type="Node2D" parent="."] diff --git a/Scene/Particle/Rain.tscn b/Scene/Particle/Rain.tscn new file mode 100644 index 0000000..ed4fd89 --- /dev/null +++ b/Scene/Particle/Rain.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=2 format=3 uid="uid://3cr6q4he2y0x"] + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jiccn"] +lifetime_randomness = 0.6 +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +direction = Vector3(0, 1, 0) +spread = 0.0 +initial_velocity_min = 100.0 +initial_velocity_max = 400.0 +gravity = Vector3(0, 98, 0) +scale_min = 4.0 +scale_max = 6.0 +color = Color(0, 0.380392, 1, 1) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.08 + +[node name="Rain" type="GPUParticles2D"] +visible = false +z_index = 10 +amount = 450 +lifetime = 10.0 +preprocess = 20.0 +speed_scale = 1.5 +visibility_rect = Rect2(-900, 0, 2000, 2000) +trail_lifetime = 0.01 +process_material = SubResource("ParticleProcessMaterial_jiccn") diff --git a/Scene/Particle/WillowLeafRain.tscn b/Scene/Particle/WillowLeafRain.tscn new file mode 100644 index 0000000..31863b7 --- /dev/null +++ b/Scene/Particle/WillowLeafRain.tscn @@ -0,0 +1,25 @@ +[gd_scene load_steps=3 format=3 uid="uid://cvg38nsrm77jy"] + +[ext_resource type="Texture2D" uid="uid://bnv6wb0k443fv" path="res://assets/天气系统图片/柳叶2.webp" id="1_tq8cs"] + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_tdq2s"] +particle_flag_disable_z = true +emission_shape = 3 +emission_box_extents = Vector3(1000, 1, 1) +gravity = Vector3(-30, 80, 0) +scale_min = 0.4 +scale_max = 0.5 +turbulence_enabled = true +turbulence_noise_speed = Vector3(10, 0, 0) +turbulence_influence_min = 0.02 +turbulence_influence_max = 0.07 + +[node name="WillowLeafRain1" type="GPUParticles2D"] +self_modulate = Color(0.7, 0.7, 0.7, 1) +z_index = 10 +amount = 50 +texture = ExtResource("1_tq8cs") +lifetime = 20.0 +preprocess = 10.0 +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_tdq2s") diff --git a/Scene/Particle/snow.tscn b/Scene/Particle/snow.tscn index 08cdda5..632527b 100644 --- a/Scene/Particle/snow.tscn +++ b/Scene/Particle/snow.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=7 format=3 uid="uid://b5j2tonaoiku5"] +[gd_scene load_steps=7 format=3 uid="uid://dx7rtwu53mgxh"] -[ext_resource type="Texture2D" uid="uid://dk4yl4ghmxaa2" path="res://assets/天气系统图片/雪花.webp" id="1_nqr5d"] +[ext_resource type="Texture2D" uid="uid://dk4yl4ghmxaa2" path="res://assets/天气系统图片/雪花.webp" id="1_yj638"] [sub_resource type="Curve" id="Curve_4ka7t"] -_data = [Vector2(0, 0.951807), 0.0, 0.0, 0, 0, Vector2(0.0153846, 1), 0.0, 0.0, 0, 0, Vector2(0.0461538, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] -point_count = 4 +_data = [Vector2(0, 0.951807), 0.0, 0.0, 0, 0, Vector2(1e-05, 0.963855), 0.0, 0.0, 0, 0, Vector2(0.0153846, 1), 0.0, 0.0, 0, 0, Vector2(0.0461538, 1), 0.0, 0.0, 0, 0, Vector2(0.561538, 0.819277), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 6 [sub_resource type="CurveTexture" id="CurveTexture_nf3jg"] curve = SubResource("Curve_4ka7t") @@ -16,7 +16,7 @@ colors = PackedColorArray(1, 1, 1, 0.352941, 1, 1, 1, 1) [sub_resource type="GradientTexture1D" id="GradientTexture1D_5dq3w"] gradient = SubResource("Gradient_adtqp") -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jiccn"] +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4ka7t"] particle_flag_disable_z = true emission_shape = 3 emission_box_extents = Vector3(1000, 1, 1) @@ -30,8 +30,10 @@ turbulence_influence_min = 0.02 turbulence_influence_max = 0.08 [node name="Snow" type="GPUParticles2D"] -amount = 200 -texture = ExtResource("1_nqr5d") -lifetime = 10.0 +visible = false +amount = 300 +texture = ExtResource("1_yj638") +lifetime = 18.0 preprocess = 30.0 -process_material = SubResource("ParticleProcessMaterial_jiccn") +visibility_rect = Rect2(-900, 0, 2300, 2000) +process_material = SubResource("ParticleProcessMaterial_4ka7t") diff --git a/Server/TCPGameServer.py b/Server/TCPGameServer.py index c94eec8..0a3fd40 100644 --- a/Server/TCPGameServer.py +++ b/Server/TCPGameServer.py @@ -849,7 +849,9 @@ class TCPGameServer(TCPServer): # 检查并更新体力值 stamina_updated = self._check_and_update_stamina(player_data) if stamina_updated: - self.log('INFO', f"玩家 {username} 体力值已更新:{player_data.get('体力值', 20)}", 'SERVER') + stamina_system = player_data.get("体力系统", {}) + current_stamina = stamina_system.get("当前体力值", 20) + self.log('INFO', f"玩家 {username} 体力值已更新:{current_stamina}", 'SERVER') # 检查并更新每日点赞次数 likes_updated = self._check_and_update_daily_likes(player_data) @@ -864,6 +866,9 @@ class TCPGameServer(TCPServer): # 检查并清理新手礼包历史数据 self._cleanup_new_player_gift_history(player_data) + # 检查并清理体力系统历史数据 + self._cleanup_stamina_system_history(player_data) + # 检查并更新已存在玩家的注册时间 self._check_and_update_register_time(player_data, username) @@ -5103,6 +5108,62 @@ class TCPGameServer(TCPServer): self.log('INFO', f"已清理玩家数据中的旧英文新手礼包格式", 'SERVER') + def _cleanup_stamina_system_history(self, player_data): + """清理旧的体力系统数据,迁移到新的"体力系统"对象""" + if "体力值" in player_data or "体力上次刷新时间" in player_data or "体力上次恢复时间" in player_data: + # 加载体力系统配置 + stamina_config = self._load_stamina_config() + max_stamina = stamina_config.get("最大体力值", 20) + + # 保存旧的体力数据 + old_stamina = player_data.get("体力值", 20) + old_refresh_time = player_data.get("体力上次刷新时间", "") + old_recovery_time = player_data.get("体力上次恢复时间", 0) + + # 创建新的体力系统对象 + if "体力系统" not in player_data: + player_data["体力系统"] = {} + + stamina_system = player_data["体力系统"] + + # 迁移数据到新格式 + stamina_system["当前体力值"] = old_stamina + stamina_system["最大体力值"] = max_stamina + stamina_system["上次刷新时间"] = old_refresh_time + stamina_system["上次恢复时间"] = old_recovery_time + + # 移除旧的体力数据 + if "体力值" in player_data: + del player_data["体力值"] + if "体力上次刷新时间" in player_data: + del player_data["体力上次刷新时间"] + if "体力上次恢复时间" in player_data: + del player_data["体力上次恢复时间"] + + self.log('INFO', f"已清理玩家数据中的旧体力系统格式,迁移到新的体力系统对象", 'SERVER') + + def _load_stamina_config(self): + """加载体力系统配置""" + try: + config_path = os.path.join(os.path.dirname(__file__), "config", "stamina_config.json") + with open(config_path, 'r', encoding='utf-8') as file: + config_data = json.load(file) + return config_data.get("体力系统配置", {}) + except FileNotFoundError: + self.log('WARNING', f"体力系统配置文件未找到,使用默认配置", 'SERVER') + return { + "最大体力值": 20, + "每小时恢复体力": 1, + "恢复间隔秒数": 3600, + "新玩家初始体力": 20 + } + except json.JSONDecodeError as e: + self.log('ERROR', f"体力系统配置文件格式错误: {e}", 'SERVER') + return {} + except Exception as e: + self.log('ERROR', f"加载体力系统配置时发生错误: {e}", 'SERVER') + return {} + #==========================点赞玩家处理========================== @@ -5131,37 +5192,50 @@ class TCPGameServer(TCPServer): current_time = time.time() current_date = datetime.datetime.now().strftime("%Y-%m-%d") - # 初始化体力值相关字段 - if "体力值" not in player_data: - player_data["体力值"] = 20 - if "体力上次刷新时间" not in player_data: - player_data["体力上次刷新时间"] = current_date - if "体力上次恢复时间" not in player_data: - player_data["体力上次恢复时间"] = current_time + # 加载体力系统配置 + stamina_config = self._load_stamina_config() + max_stamina = stamina_config.get("最大体力值", 20) + recovery_amount = stamina_config.get("每小时恢复体力", 1) + recovery_interval = stamina_config.get("恢复间隔秒数", 3600) + initial_stamina = stamina_config.get("新玩家初始体力", 20) + + # 获取或创建体力系统对象 + if "体力系统" not in player_data: + player_data["体力系统"] = { + "当前体力值": initial_stamina, + "最大体力值": max_stamina, + "上次刷新时间": current_date, + "上次恢复时间": current_time + } + + stamina_system = player_data["体力系统"] + + # 确保最大体力值与配置同步 + stamina_system["最大体力值"] = max_stamina # 检查是否需要每日重置 - last_refresh_date = player_data.get("体力上次刷新时间", "") + last_refresh_date = stamina_system.get("上次刷新时间", "") if last_refresh_date != current_date: # 新的一天,重置体力值 - player_data["体力值"] = 20 - player_data["体力上次刷新时间"] = current_date - player_data["体力上次恢复时间"] = current_time + stamina_system["当前体力值"] = max_stamina + stamina_system["上次刷新时间"] = current_date + stamina_system["上次恢复时间"] = current_time return True # 发生了重置 # 检查每小时恢复 - last_recovery_time = player_data.get("体力上次恢复时间", current_time) + last_recovery_time = stamina_system.get("上次恢复时间", current_time) time_diff = current_time - last_recovery_time - # 如果超过1小时(3600秒),恢复体力值 - if time_diff >= 3600: - hours_passed = int(time_diff // 3600) - current_stamina = player_data.get("体力值", 0) + # 如果超过恢复间隔时间,恢复体力值 + if time_diff >= recovery_interval: + recovery_cycles = int(time_diff // recovery_interval) + current_stamina = stamina_system.get("当前体力值", 0) - # 体力值恢复,但不能超过20 - new_stamina = min(20, current_stamina + hours_passed) + # 体力值恢复,但不能超过最大值 + new_stamina = min(max_stamina, current_stamina + (recovery_cycles * recovery_amount)) if new_stamina > current_stamina: - player_data["体力值"] = new_stamina - player_data["体力上次恢复时间"] = current_time + stamina_system["当前体力值"] = new_stamina + stamina_system["上次恢复时间"] = current_time return True # 发生了恢复 return False # 没有变化 @@ -5169,18 +5243,20 @@ class TCPGameServer(TCPServer): #消耗体力值 def _consume_stamina(self, player_data, amount, action_name): """消耗体力值""" - current_stamina = player_data.get("体力值", 20) + stamina_system = player_data.get("体力系统", {}) + current_stamina = stamina_system.get("当前体力值", 20) if current_stamina < amount: return False, f"体力值不足!{action_name}需要 {amount} 点体力,当前体力:{current_stamina}" - player_data["体力值"] = current_stamina - amount - return True, f"消耗 {amount} 点体力,剩余体力:{player_data['体力值']}" + stamina_system["当前体力值"] = current_stamina - amount + return True, f"消耗 {amount} 点体力,剩余体力:{stamina_system['当前体力值']}" #检查体力值是否足够 def _check_stamina_sufficient(self, player_data, amount): """检查体力值是否足够""" - current_stamina = player_data.get("体力值", 20) + stamina_system = player_data.get("体力系统", {}) + current_stamina = stamina_system.get("当前体力值", 20) return current_stamina >= amount def _check_and_update_register_time(self, player_data, username): @@ -5437,6 +5513,9 @@ class TCPGameServer(TCPServer): last_login_timestamp = self._parse_login_time_to_timestamp(last_login_str) # 获取所需的玩家信息 + stamina_system = player_data.get("体力系统", {}) + current_stamina = stamina_system.get("当前体力值", 20) + player_info = { "user_name": player_data.get("user_name", account_id), "player_name": player_data.get("player_name", player_data.get("user_name", account_id)), @@ -5444,7 +5523,7 @@ class TCPGameServer(TCPServer): "level": player_data.get("level", 1), "money": player_data.get("money", 0), "experience": player_data.get("experience", 0), - "体力值": player_data.get("体力值", 20), + "体力值": current_stamina, "seed_count": seed_count, "last_login_time": last_login_str, "last_login_timestamp": last_login_timestamp, @@ -5591,6 +5670,9 @@ class TCPGameServer(TCPServer): self._check_and_fix_wisdom_tree_config(target_player_data, target_username) # 返回目标玩家的农场数据(只返回可见的数据,不包含敏感信息如密码) + target_stamina_system = target_player_data.get("体力系统", {}) + target_current_stamina = target_stamina_system.get("当前体力值", 20) + safe_player_data = { "user_name": target_player_data.get("user_name", target_username), "player_name": target_player_data.get("player_name", target_username), @@ -5598,7 +5680,7 @@ class TCPGameServer(TCPServer): "level": target_player_data.get("level", 1), "money": target_player_data.get("money", 0), "experience": target_player_data.get("experience", 0), - "体力值": target_player_data.get("体力值", 20), + "体力值": target_current_stamina, "farm_lots": target_player_data.get("farm_lots", []), "player_bag": target_player_data.get("player_bag", []), "作物仓库": target_player_data.get("作物仓库", []), @@ -5653,6 +5735,9 @@ class TCPGameServer(TCPServer): self.log('INFO', f"玩家 {username} 返回了自己的农场", 'SERVER') # 返回玩家自己的农场数据 + my_stamina_system = player_data.get("体力系统", {}) + my_current_stamina = my_stamina_system.get("当前体力值", 20) + return self.send_data(client_id, { "type": "return_my_farm_response", "success": True, @@ -5664,7 +5749,7 @@ class TCPGameServer(TCPServer): "level": player_data.get("level", 1), "money": player_data.get("money", 0), "experience": player_data.get("experience", 0), - "体力值": player_data.get("体力值", 20), + "体力值": my_current_stamina, "farm_lots": player_data.get("farm_lots", []), "player_bag": player_data.get("player_bag", []), "宠物背包": player_data.get("宠物背包", []), diff --git a/Server/config/stamina_config.json b/Server/config/stamina_config.json new file mode 100644 index 0000000..e8e1a34 --- /dev/null +++ b/Server/config/stamina_config.json @@ -0,0 +1,23 @@ +{ + "体力系统配置": { + "最大体力值": 20, + "每小时恢复体力": 1, + "恢复间隔秒数": 3600, + "新玩家初始体力": 20, + "体力消耗": { + "浇水": 1, + "施肥": 1, + "挖地": 2, + "收获": 1, + "种植": 1, + "除草": 1, + "偷菜": 2 + }, + "提示消息": { + "体力不足": "体力值不足!当前体力:{current_stamina},需要:{required_stamina}", + "体力恢复": "体力已恢复到:{current_stamina}", + "体力重置": "新的一天,体力已重置为:{current_stamina}", + "体力消耗": "消耗 {amount} 点体力,剩余体力:{remaining_stamina}" + } + } +} \ No newline at end of file diff --git a/Server/game_saves/2143323382.json b/Server/game_saves/2143323382.json index 3ec126d..9ea2706 100644 --- a/Server/game_saves/2143323382.json +++ b/Server/game_saves/2143323382.json @@ -1,32 +1,32 @@ { - "experience": 2926, + "experience": 3039, "level": 32, - "money": 1250116, + "money": 1224518, "farm_name": "柚大青の小农场", "player_name": "柚大青", "user_name": "2143323382", "user_password": "tyh@19900420", - "last_login_time": "2025年07月12日23时02分19秒", - "total_login_time": "5时14分13秒", + "last_login_time": "2025年07月14日08时03分08秒", + "total_login_time": "5时36分14秒", "farm_lots": [ { - "crop_type": "", - "grow_time": 0, + "crop_type": "番茄", + "grow_time": 724, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 650, + "is_planted": true, + "max_grow_time": 720, "已浇水": false, "已施肥": false, - "土地等级": 2 + "土地等级": 4 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "小麦", + "grow_time": 300, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 720, + "is_planted": true, + "max_grow_time": 300, "已浇水": false, "已施肥": false, "土地等级": 2 @@ -43,45 +43,45 @@ "土地等级": 3 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "龙果", + "grow_time": 14492, "is_dead": false, "is_diged": true, - "is_planted": false, + "is_planted": true, + "max_grow_time": 14400, + "已浇水": false, + "已施肥": false, + "土地等级": 4 + }, + { + "crop_type": "小麦", + "grow_time": 318, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 300, + "已浇水": false, + "已施肥": false, + "土地等级": 1 + }, + { + "crop_type": "玉米", + "grow_time": 918, + "is_dead": false, + "is_diged": true, + "is_planted": true, "max_grow_time": 900, "已浇水": false, "已施肥": false, "土地等级": 1 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "小麦", + "grow_time": 316, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 3000, - "已浇水": false, - "已施肥": false, - "土地等级": 1 - }, - { - "crop_type": "", - "grow_time": 0, - "is_dead": false, - "is_diged": true, - "is_planted": false, - "max_grow_time": 7800, - "已浇水": false, - "已施肥": false, - "土地等级": 1 - }, - { - "crop_type": "", - "grow_time": 0, - "is_dead": false, - "is_diged": true, - "is_planted": false, - "max_grow_time": 900, + "is_planted": true, + "max_grow_time": 300, "已浇水": false, "已施肥": false, "土地等级": 1 @@ -120,78 +120,78 @@ "土地等级": 0 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "小麦", + "grow_time": 300, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 240, - "已浇水": false, - "已施肥": false, - "土地等级": 2 - }, - { - "crop_type": "", - "grow_time": 0, - "is_dead": false, - "is_diged": true, - "is_planted": false, + "is_planted": true, "max_grow_time": 300, "已浇水": false, "已施肥": false, "土地等级": 2 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "玉米", + "grow_time": 912, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 600, + "is_planted": true, + "max_grow_time": 900, "已浇水": false, "已施肥": false, "土地等级": 2 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "杂交树1", + "grow_time": 21632, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 720, + "is_planted": true, + "max_grow_time": 21600, + "已浇水": false, + "已施肥": false, + "土地等级": 2 + }, + { + "crop_type": "小麦", + "grow_time": 314, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 300, "已浇水": false, "已施肥": false, "土地等级": 1 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "稻谷", + "grow_time": 614, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 7000, + "is_planted": true, + "max_grow_time": 600, "已浇水": false, "已施肥": false, "土地等级": 1 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "胡萝卜", + "grow_time": 240, "is_dead": false, "is_diged": true, - "is_planted": false, + "is_planted": true, "max_grow_time": 240, "已浇水": false, "已施肥": false, "土地等级": 1 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "花椰菜", + "grow_time": 1334, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 650, + "is_planted": true, + "max_grow_time": 1320, "已浇水": false, "已施肥": false, "土地等级": 1 @@ -230,38 +230,38 @@ "土地等级": 0 }, { - "crop_type": "", - "grow_time": 0, + "crop_type": "番茄", + "grow_time": 726, "is_dead": false, "is_diged": true, - "is_planted": false, - "max_grow_time": 650, - "已浇水": false, - "已施肥": false, - "土地等级": 0 - }, - { - "crop_type": "", - "grow_time": 0, - "is_dead": false, - "is_diged": true, - "is_planted": false, - "max_grow_time": 240, - "已浇水": false, - "已施肥": false, - "土地等级": 0 - }, - { - "crop_type": "", - "grow_time": 0, - "is_dead": false, - "is_diged": true, - "is_planted": false, + "is_planted": true, "max_grow_time": 720, "已浇水": false, "已施肥": false, "土地等级": 0 }, + { + "crop_type": "土豆", + "grow_time": 486, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 480, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, + { + "crop_type": "土豆", + "grow_time": 486, + "is_dead": false, + "is_diged": true, + "is_planted": true, + "max_grow_time": 480, + "已浇水": false, + "已施肥": false, + "土地等级": 0 + }, { "crop_type": "", "grow_time": 0, @@ -564,32 +564,32 @@ { "name": "稻谷", "quality": "普通", - "count": 2 + "count": 1 }, { "name": "土豆", "quality": "普通", - "count": 3 + "count": 6 }, { "name": "小麦", "quality": "普通", - "count": 5 + "count": 8 }, { "name": "胡萝卜", "quality": "普通", - "count": 5 + "count": 7 }, { "name": "玉米", "quality": "优良", - "count": 6 + "count": 4 }, { "name": "番茄", "quality": "普通", - "count": 5 + "count": 3 }, { "name": "辣椒", @@ -604,7 +604,7 @@ { "name": "花椰菜", "quality": "优良", - "count": 2 + "count": 1 }, { "name": "葡萄", @@ -634,7 +634,7 @@ { "name": "龙果", "quality": "稀有", - "count": 2 + "count": 1 }, { "name": "松露", @@ -646,11 +646,6 @@ "quality": "传奇", "count": 1 }, - { - "name": "杂交树1", - "quality": "传奇", - "count": 1 - }, { "name": "杂交树2", "quality": "传奇", @@ -658,9 +653,6 @@ } ], "last_water_reset_date": "2025-06-05", - "体力值": 20, - "体力上次刷新时间": "2025-07-12", - "体力上次恢复时间": 1752323298.9468062, "注册时间": "2025年05月21日15时00分00秒", "个人简介": "其实我是一个梨子,真的,不骗你", "作物仓库": [], @@ -816,29 +808,27 @@ "当前生命值": 106 }, "签到历史": { - "2025年07月12日21时05分47秒": "金币249 经验75 土豆x3" + "2025年07月12日21时05分47秒": "金币249 经验75 土豆x3", + "2025年07月13日07时26分04秒": "金币302 经验63 土豆x5 小麦x3" }, "在线礼包": { - "当前日期": "2025-07-12", - "今日在线时长": 100008.91207242012, - "已领取礼包": [ - "1分钟", - "3分钟", - "5分钟", - "10分钟", - "30分钟", - "1小时", - "3小时", - "5小时" - ], - "登录时间": 1752329209.0102558 + "当前日期": "2025-07-14", + "今日在线时长": 0.0, + "已领取礼包": [], + "登录时间": 1752451388.1583223 }, "点赞系统": { - "今日剩余点赞次数": 0, - "点赞上次刷新时间": "2025-07-12" + "今日剩余点赞次数": 10, + "点赞上次刷新时间": "2025-07-14" }, "新手礼包": { "已领取": true, "领取时间": "2025-07-12 23:02:25" + }, + "体力系统": { + "当前体力值": 20, + "最大体力值": 20, + "上次刷新时间": "2025-07-14", + "上次恢复时间": 1752451388.157905 } } \ No newline at end of file diff --git a/assets/天气系统图片/柳叶1.webp b/assets/天气系统图片/柳叶1.webp new file mode 100644 index 0000000..e94efee Binary files /dev/null and b/assets/天气系统图片/柳叶1.webp differ diff --git a/assets/天气系统图片/柳叶1.webp.import b/assets/天气系统图片/柳叶1.webp.import new file mode 100644 index 0000000..d4a0d2a --- /dev/null +++ b/assets/天气系统图片/柳叶1.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dl58ie2lneq77" +path="res://.godot/imported/柳叶1.webp-398a016f09f48b59043f7f62f266a003.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/柳叶1.webp" +dest_files=["res://.godot/imported/柳叶1.webp-398a016f09f48b59043f7f62f266a003.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/柳叶2.webp b/assets/天气系统图片/柳叶2.webp new file mode 100644 index 0000000..9312ff3 Binary files /dev/null and b/assets/天气系统图片/柳叶2.webp differ diff --git a/assets/天气系统图片/柳叶2.webp.import b/assets/天气系统图片/柳叶2.webp.import new file mode 100644 index 0000000..1cc7d6e --- /dev/null +++ b/assets/天气系统图片/柳叶2.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnv6wb0k443fv" +path="res://.godot/imported/柳叶2.webp-5e1ed5d07f4a9635072a847ad9ab1fc8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/柳叶2.webp" +dest_files=["res://.godot/imported/柳叶2.webp-5e1ed5d07f4a9635072a847ad9ab1fc8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/柳叶3.webp b/assets/天气系统图片/柳叶3.webp new file mode 100644 index 0000000..3aed05c Binary files /dev/null and b/assets/天气系统图片/柳叶3.webp differ diff --git a/assets/天气系统图片/柳叶3.webp.import b/assets/天气系统图片/柳叶3.webp.import new file mode 100644 index 0000000..22b19df --- /dev/null +++ b/assets/天气系统图片/柳叶3.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfducebx4c4il" +path="res://.godot/imported/柳叶3.webp-babc0a99bab5569728c5730a5eced834.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/柳叶3.webp" +dest_files=["res://.godot/imported/柳叶3.webp-babc0a99bab5569728c5730a5eced834.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/栀子花1.webp b/assets/天气系统图片/栀子花1.webp new file mode 100644 index 0000000..7121767 Binary files /dev/null and b/assets/天气系统图片/栀子花1.webp differ diff --git a/assets/天气系统图片/栀子花1.webp.import b/assets/天气系统图片/栀子花1.webp.import new file mode 100644 index 0000000..51abeed --- /dev/null +++ b/assets/天气系统图片/栀子花1.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1qqalp7owgy2" +path="res://.godot/imported/栀子花1.webp-c96e2437381ef6ec97a91ec278d747a7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/栀子花1.webp" +dest_files=["res://.godot/imported/栀子花1.webp-c96e2437381ef6ec97a91ec278d747a7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/栀子花2.webp b/assets/天气系统图片/栀子花2.webp new file mode 100644 index 0000000..bb90b8c Binary files /dev/null and b/assets/天气系统图片/栀子花2.webp differ diff --git a/assets/天气系统图片/栀子花2.webp.import b/assets/天气系统图片/栀子花2.webp.import new file mode 100644 index 0000000..2958def --- /dev/null +++ b/assets/天气系统图片/栀子花2.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd7x78uyi2csh" +path="res://.godot/imported/栀子花2.webp-378a97ef3111167708ae38b3b4fbc8da.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/栀子花2.webp" +dest_files=["res://.godot/imported/栀子花2.webp-378a97ef3111167708ae38b3b4fbc8da.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/栀子花3.webp b/assets/天气系统图片/栀子花3.webp new file mode 100644 index 0000000..25b41e9 Binary files /dev/null and b/assets/天气系统图片/栀子花3.webp differ diff --git a/assets/天气系统图片/栀子花3.webp.import b/assets/天气系统图片/栀子花3.webp.import new file mode 100644 index 0000000..1c592e6 --- /dev/null +++ b/assets/天气系统图片/栀子花3.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqqyc3ddwtvpn" +path="res://.godot/imported/栀子花3.webp-e3a2730673004ddca56ebe58989cde6b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/栀子花3.webp" +dest_files=["res://.godot/imported/栀子花3.webp-e3a2730673004ddca56ebe58989cde6b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/樱花1.webp b/assets/天气系统图片/樱花1.webp new file mode 100644 index 0000000..8876ae6 Binary files /dev/null and b/assets/天气系统图片/樱花1.webp differ diff --git a/assets/天气系统图片/樱花1.webp.import b/assets/天气系统图片/樱花1.webp.import new file mode 100644 index 0000000..b892969 --- /dev/null +++ b/assets/天气系统图片/樱花1.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chcgrmluhfxuk" +path="res://.godot/imported/樱花1.webp-e6e58e29a3d25ab80c42c1cce97b5c4f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/樱花1.webp" +dest_files=["res://.godot/imported/樱花1.webp-e6e58e29a3d25ab80c42c1cce97b5c4f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/樱花2.webp b/assets/天气系统图片/樱花2.webp new file mode 100644 index 0000000..6fb0bad Binary files /dev/null and b/assets/天气系统图片/樱花2.webp differ diff --git a/assets/天气系统图片/樱花2.webp.import b/assets/天气系统图片/樱花2.webp.import new file mode 100644 index 0000000..3066501 --- /dev/null +++ b/assets/天气系统图片/樱花2.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dfkgmj7e0555q" +path="res://.godot/imported/樱花2.webp-bf8a60ab8c1f4ffeb88bc69a58c7c758.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/樱花2.webp" +dest_files=["res://.godot/imported/樱花2.webp-bf8a60ab8c1f4ffeb88bc69a58c7c758.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/assets/天气系统图片/樱花3.webp b/assets/天气系统图片/樱花3.webp new file mode 100644 index 0000000..ec5c08d Binary files /dev/null and b/assets/天气系统图片/樱花3.webp differ diff --git a/assets/天气系统图片/樱花3.webp.import b/assets/天气系统图片/樱花3.webp.import new file mode 100644 index 0000000..12e1f49 --- /dev/null +++ b/assets/天气系统图片/樱花3.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://q0difb6wjkgm" +path="res://.godot/imported/樱花3.webp-1b2f7e3262067dca93e303e328cc1ff6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/天气系统图片/樱花3.webp" +dest_files=["res://.godot/imported/樱花3.webp-1b2f7e3262067dca93e303e328cc1ff6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.01 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/game_camera.gd b/game_camera.gd index bbfca6a..4ffb7cf 100644 --- a/game_camera.gd +++ b/game_camera.gd @@ -15,7 +15,7 @@ extends Camera2D @export var bounds_min: Vector2 = Vector2(-1000, -1000) @export var bounds_max: Vector2 = Vector2(1000, 1000) -var current_zoom_level: float = 2 +var current_zoom_level: float = 1.6 # 触摸相关变量 var is_dragging: bool = false diff --git a/server/game_saves/3205788256.json b/server/game_saves/3205788256.json index 5a9c8c0..fc53f97 100644 --- a/server/game_saves/3205788256.json +++ b/server/game_saves/3205788256.json @@ -967,5 +967,5 @@ "高度": 53, "上次护理时间": 1752051799 }, - "点赞数": 32 + "点赞数": 42 } \ No newline at end of file