天气系统

This commit is contained in:
2025-07-14 11:58:33 +08:00
parent 98de447cb9
commit 106a69c89e
27 changed files with 842 additions and 217 deletions

View File

@@ -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="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"] [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://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://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="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"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5dq3w"]
@@ -110,8 +119,13 @@ shadow_size = 30
[sub_resource type="Environment" id="Environment_m6fch"] [sub_resource type="Environment" id="Environment_m6fch"]
background_mode = 3 background_mode = 3
ambient_light_energy = 0.0 ambient_light_energy = 0.0
glow_enabled = true
glow_intensity = 1.0
glow_bloom = 0.3 glow_bloom = 0.3
glow_blend_mode = 0 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"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ylhg"]
border_width_left = 10 border_width_left = 10
@@ -126,44 +140,98 @@ corner_detail = 20
shadow_size = 20 shadow_size = 20
shadow_offset = Vector2(3, 3) shadow_offset = Vector2(3, 3)
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_nf3jg"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_tdq2s"]
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
particle_flag_disable_z = true particle_flag_disable_z = true
emission_shape = 3 emission_shape = 3
emission_box_extents = Vector3(1000, 1, 1) emission_box_extents = Vector3(1000, 1, 1)
gravity = Vector3(46, 80, 0) gravity = Vector3(-30, 80, 0)
scale_min = 0.2 scale_min = 0.2
scale_max = 0.3 scale_max = 0.3
color_initial_ramp = SubResource("GradientTexture1D_5dq3w")
alpha_curve = SubResource("CurveTexture_nf3jg")
turbulence_enabled = true 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_min = 0.02
turbulence_influence_max = 0.08 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"] [node name="main" type="Node"]
script = ExtResource("1_v3yaj") script = ExtResource("1_v3yaj")
@@ -1562,9 +1630,9 @@ offset_bottom = -61.0
anchor_mode = 0 anchor_mode = 0
position_smoothing_enabled = true position_smoothing_enabled = true
script = ExtResource("10_o8l48") script = ExtResource("10_o8l48")
max_zoom = 2.0 max_zoom = 1.8
bounds_enabled = true bounds_enabled = true
bounds_min = Vector2(-500, -500) bounds_min = Vector2(-500, -400)
bounds_max = Vector2(500, 500) bounds_max = Vector2(500, 500)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
@@ -4277,27 +4345,125 @@ vertical_alignment = 1
[node name="WeatherSystem" type="Node2D" parent="."] [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"] [node name="Rain" type="GPUParticles2D" parent="WeatherSystem"]
visible = false visible = false
position = Vector2(-170, -272) z_index = 10
amount = 16 position = Vector2(246, -482)
sub_emitter = NodePath(".") amount = 450
texture = ExtResource("53_4ka7t") lifetime = 10.0
lifetime = 15.0 preprocess = 20.0
randomness = 0.5 speed_scale = 1.5
process_material = SubResource("ParticleProcessMaterial_nf3jg") visibility_rect = Rect2(-900, 0, 2000, 2000)
trail_lifetime = 0.01
process_material = SubResource("ParticleProcessMaterial_jiccn")
[node name="Snow" type="GPUParticles2D" parent="WeatherSystem"] [node name="Snow" type="GPUParticles2D" parent="WeatherSystem"]
z_index = 10 visible = false
position = Vector2(249, -262) position = Vector2(16, -520)
amount = 300 amount = 300
texture = ExtResource("53_4ka7t") texture = ExtResource("53_4ka7t")
lifetime = 15.0 lifetime = 18.0
preprocess = 30.0 preprocess = 30.0
visibility_rect = Rect2(-900, 0, 2000, 2000) visibility_rect = Rect2(-900, 0, 2300, 2000)
trail_sections = 2 process_material = SubResource("ParticleProcessMaterial_nf3jg")
trail_section_subdivisions = 1
process_material = SubResource("ParticleProcessMaterial_jiccn")
[node name="DayNightSystem" type="Node2D" parent="."] [node name="DayNightSystem" type="Node2D" parent="."]

28
Scene/Particle/Rain.tscn Normal file
View File

@@ -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")

View File

@@ -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")

View File

@@ -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"] [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] _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 = 4 point_count = 6
[sub_resource type="CurveTexture" id="CurveTexture_nf3jg"] [sub_resource type="CurveTexture" id="CurveTexture_nf3jg"]
curve = SubResource("Curve_4ka7t") 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"] [sub_resource type="GradientTexture1D" id="GradientTexture1D_5dq3w"]
gradient = SubResource("Gradient_adtqp") gradient = SubResource("Gradient_adtqp")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jiccn"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4ka7t"]
particle_flag_disable_z = true particle_flag_disable_z = true
emission_shape = 3 emission_shape = 3
emission_box_extents = Vector3(1000, 1, 1) emission_box_extents = Vector3(1000, 1, 1)
@@ -30,8 +30,10 @@ turbulence_influence_min = 0.02
turbulence_influence_max = 0.08 turbulence_influence_max = 0.08
[node name="Snow" type="GPUParticles2D"] [node name="Snow" type="GPUParticles2D"]
amount = 200 visible = false
texture = ExtResource("1_nqr5d") amount = 300
lifetime = 10.0 texture = ExtResource("1_yj638")
lifetime = 18.0
preprocess = 30.0 preprocess = 30.0
process_material = SubResource("ParticleProcessMaterial_jiccn") visibility_rect = Rect2(-900, 0, 2300, 2000)
process_material = SubResource("ParticleProcessMaterial_4ka7t")

View File

@@ -849,7 +849,9 @@ class TCPGameServer(TCPServer):
# 检查并更新体力值 # 检查并更新体力值
stamina_updated = self._check_and_update_stamina(player_data) stamina_updated = self._check_and_update_stamina(player_data)
if stamina_updated: 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) 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_new_player_gift_history(player_data)
# 检查并清理体力系统历史数据
self._cleanup_stamina_system_history(player_data)
# 检查并更新已存在玩家的注册时间 # 检查并更新已存在玩家的注册时间
self._check_and_update_register_time(player_data, username) self._check_and_update_register_time(player_data, username)
@@ -5103,6 +5108,62 @@ class TCPGameServer(TCPServer):
self.log('INFO', f"已清理玩家数据中的旧英文新手礼包格式", 'SERVER') 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_time = time.time()
current_date = datetime.datetime.now().strftime("%Y-%m-%d") current_date = datetime.datetime.now().strftime("%Y-%m-%d")
# 初始化体力值相关字段 # 加载体力系统配置
if "体力值" not in player_data: stamina_config = self._load_stamina_config()
player_data["体力值"] = 20 max_stamina = stamina_config.get("最大体力值", 20)
if "体力上次刷新时间" not in player_data: recovery_amount = stamina_config.get("每小时恢复体力", 1)
player_data["体力上次刷新时间"] = current_date recovery_interval = stamina_config.get("恢复间隔秒数", 3600)
if "体力上次恢复时间" not in player_data: initial_stamina = stamina_config.get("新玩家初始体力", 20)
player_data["体力上次恢复时间"] = current_time
# 获取或创建体力系统对象
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: if last_refresh_date != current_date:
# 新的一天,重置体力值 # 新的一天,重置体力值
player_data["体力值"] = 20 stamina_system["当前体力值"] = max_stamina
player_data["体力上次刷新时间"] = current_date stamina_system["上次刷新时间"] = current_date
player_data["体力上次恢复时间"] = current_time stamina_system["上次恢复时间"] = current_time
return True # 发生了重置 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 time_diff = current_time - last_recovery_time
# 如果超过1小时3600秒,恢复体力值 # 如果超过恢复间隔时间,恢复体力值
if time_diff >= 3600: if time_diff >= recovery_interval:
hours_passed = int(time_diff // 3600) recovery_cycles = int(time_diff // recovery_interval)
current_stamina = player_data.get("体力值", 0) 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: if new_stamina > current_stamina:
player_data["体力值"] = new_stamina stamina_system["当前体力值"] = new_stamina
player_data["体力上次恢复时间"] = current_time stamina_system["上次恢复时间"] = current_time
return True # 发生了恢复 return True # 发生了恢复
return False # 没有变化 return False # 没有变化
@@ -5169,18 +5243,20 @@ class TCPGameServer(TCPServer):
#消耗体力值 #消耗体力值
def _consume_stamina(self, player_data, amount, action_name): 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: if current_stamina < amount:
return False, f"体力值不足!{action_name}需要 {amount} 点体力,当前体力:{current_stamina}" return False, f"体力值不足!{action_name}需要 {amount} 点体力,当前体力:{current_stamina}"
player_data["体力值"] = current_stamina - amount stamina_system["当前体力值"] = current_stamina - amount
return True, f"消耗 {amount} 点体力,剩余体力:{player_data['体力值']}" return True, f"消耗 {amount} 点体力,剩余体力:{stamina_system['当前体力值']}"
#检查体力值是否足够 #检查体力值是否足够
def _check_stamina_sufficient(self, player_data, amount): 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 return current_stamina >= amount
def _check_and_update_register_time(self, player_data, username): 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) 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 = { player_info = {
"user_name": player_data.get("user_name", account_id), "user_name": player_data.get("user_name", account_id),
"player_name": player_data.get("player_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), "level": player_data.get("level", 1),
"money": player_data.get("money", 0), "money": player_data.get("money", 0),
"experience": player_data.get("experience", 0), "experience": player_data.get("experience", 0),
"体力值": player_data.get("体力值", 20), "体力值": current_stamina,
"seed_count": seed_count, "seed_count": seed_count,
"last_login_time": last_login_str, "last_login_time": last_login_str,
"last_login_timestamp": last_login_timestamp, "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) 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 = { safe_player_data = {
"user_name": target_player_data.get("user_name", target_username), "user_name": target_player_data.get("user_name", target_username),
"player_name": target_player_data.get("player_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), "level": target_player_data.get("level", 1),
"money": target_player_data.get("money", 0), "money": target_player_data.get("money", 0),
"experience": target_player_data.get("experience", 0), "experience": target_player_data.get("experience", 0),
"体力值": target_player_data.get("体力值", 20), "体力值": target_current_stamina,
"farm_lots": target_player_data.get("farm_lots", []), "farm_lots": target_player_data.get("farm_lots", []),
"player_bag": target_player_data.get("player_bag", []), "player_bag": target_player_data.get("player_bag", []),
"作物仓库": target_player_data.get("作物仓库", []), "作物仓库": target_player_data.get("作物仓库", []),
@@ -5653,6 +5735,9 @@ class TCPGameServer(TCPServer):
self.log('INFO', f"玩家 {username} 返回了自己的农场", 'SERVER') 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, { return self.send_data(client_id, {
"type": "return_my_farm_response", "type": "return_my_farm_response",
"success": True, "success": True,
@@ -5664,7 +5749,7 @@ class TCPGameServer(TCPServer):
"level": player_data.get("level", 1), "level": player_data.get("level", 1),
"money": player_data.get("money", 0), "money": player_data.get("money", 0),
"experience": player_data.get("experience", 0), "experience": player_data.get("experience", 0),
"体力值": player_data.get("体力值", 20), "体力值": my_current_stamina,
"farm_lots": player_data.get("farm_lots", []), "farm_lots": player_data.get("farm_lots", []),
"player_bag": player_data.get("player_bag", []), "player_bag": player_data.get("player_bag", []),
"宠物背包": player_data.get("宠物背包", []), "宠物背包": player_data.get("宠物背包", []),

View File

@@ -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}"
}
}
}

View File

@@ -1,32 +1,32 @@
{ {
"experience": 2926, "experience": 3039,
"level": 32, "level": 32,
"money": 1250116, "money": 1224518,
"farm_name": "柚大青の小农场", "farm_name": "柚大青の小农场",
"player_name": "柚大青", "player_name": "柚大青",
"user_name": "2143323382", "user_name": "2143323382",
"user_password": "tyh@19900420", "user_password": "tyh@19900420",
"last_login_time": "2025年07月12日23时02分19秒", "last_login_time": "2025年07月14日08时03分08秒",
"total_login_time": "5时14分13秒", "total_login_time": "5时36分14秒",
"farm_lots": [ "farm_lots": [
{ {
"crop_type": "", "crop_type": "番茄",
"grow_time": 0, "grow_time": 724,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 650, "max_grow_time": 720,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 2 "土地等级": 4
}, },
{ {
"crop_type": "", "crop_type": "小麦",
"grow_time": 0, "grow_time": 300,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 720, "max_grow_time": 300,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 2 "土地等级": 2
@@ -43,45 +43,45 @@
"土地等级": 3 "土地等级": 3
}, },
{ {
"crop_type": "", "crop_type": "龙果",
"grow_time": 0, "grow_time": 14492,
"is_dead": false, "is_dead": false,
"is_diged": true, "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, "max_grow_time": 900,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
}, },
{ {
"crop_type": "", "crop_type": "小麦",
"grow_time": 0, "grow_time": 316,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 3000, "max_grow_time": 300,
"已浇水": 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,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
@@ -120,78 +120,78 @@
"土地等级": 0 "土地等级": 0
}, },
{ {
"crop_type": "", "crop_type": "小麦",
"grow_time": 0, "grow_time": 300,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 240,
"已浇水": false,
"已施肥": false,
"土地等级": 2
},
{
"crop_type": "",
"grow_time": 0,
"is_dead": false,
"is_diged": true,
"is_planted": false,
"max_grow_time": 300, "max_grow_time": 300,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 2 "土地等级": 2
}, },
{ {
"crop_type": "", "crop_type": "玉米",
"grow_time": 0, "grow_time": 912,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 600, "max_grow_time": 900,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 2 "土地等级": 2
}, },
{ {
"crop_type": "", "crop_type": "杂交树1",
"grow_time": 0, "grow_time": 21632,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 720, "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,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
}, },
{ {
"crop_type": "", "crop_type": "稻谷",
"grow_time": 0, "grow_time": 614,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 7000, "max_grow_time": 600,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
}, },
{ {
"crop_type": "", "crop_type": "胡萝卜",
"grow_time": 0, "grow_time": 240,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 240, "max_grow_time": 240,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
}, },
{ {
"crop_type": "", "crop_type": "花椰菜",
"grow_time": 0, "grow_time": 1334,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"max_grow_time": 650, "max_grow_time": 1320,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 1 "土地等级": 1
@@ -230,38 +230,38 @@
"土地等级": 0 "土地等级": 0
}, },
{ {
"crop_type": "", "crop_type": "番茄",
"grow_time": 0, "grow_time": 726,
"is_dead": false, "is_dead": false,
"is_diged": true, "is_diged": true,
"is_planted": false, "is_planted": true,
"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,
"max_grow_time": 720, "max_grow_time": 720,
"已浇水": false, "已浇水": false,
"已施肥": false, "已施肥": false,
"土地等级": 0 "土地等级": 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": "", "crop_type": "",
"grow_time": 0, "grow_time": 0,
@@ -564,32 +564,32 @@
{ {
"name": "稻谷", "name": "稻谷",
"quality": "普通", "quality": "普通",
"count": 2 "count": 1
}, },
{ {
"name": "土豆", "name": "土豆",
"quality": "普通", "quality": "普通",
"count": 3 "count": 6
}, },
{ {
"name": "小麦", "name": "小麦",
"quality": "普通", "quality": "普通",
"count": 5 "count": 8
}, },
{ {
"name": "胡萝卜", "name": "胡萝卜",
"quality": "普通", "quality": "普通",
"count": 5 "count": 7
}, },
{ {
"name": "玉米", "name": "玉米",
"quality": "优良", "quality": "优良",
"count": 6 "count": 4
}, },
{ {
"name": "番茄", "name": "番茄",
"quality": "普通", "quality": "普通",
"count": 5 "count": 3
}, },
{ {
"name": "辣椒", "name": "辣椒",
@@ -604,7 +604,7 @@
{ {
"name": "花椰菜", "name": "花椰菜",
"quality": "优良", "quality": "优良",
"count": 2 "count": 1
}, },
{ {
"name": "葡萄", "name": "葡萄",
@@ -634,7 +634,7 @@
{ {
"name": "龙果", "name": "龙果",
"quality": "稀有", "quality": "稀有",
"count": 2 "count": 1
}, },
{ {
"name": "松露", "name": "松露",
@@ -646,11 +646,6 @@
"quality": "传奇", "quality": "传奇",
"count": 1 "count": 1
}, },
{
"name": "杂交树1",
"quality": "传奇",
"count": 1
},
{ {
"name": "杂交树2", "name": "杂交树2",
"quality": "传奇", "quality": "传奇",
@@ -658,9 +653,6 @@
} }
], ],
"last_water_reset_date": "2025-06-05", "last_water_reset_date": "2025-06-05",
"体力值": 20,
"体力上次刷新时间": "2025-07-12",
"体力上次恢复时间": 1752323298.9468062,
"注册时间": "2025年05月21日15时00分00秒", "注册时间": "2025年05月21日15时00分00秒",
"个人简介": "其实我是一个梨子,真的,不骗你", "个人简介": "其实我是一个梨子,真的,不骗你",
"作物仓库": [], "作物仓库": [],
@@ -816,29 +808,27 @@
"当前生命值": 106 "当前生命值": 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", "当前日期": "2025-07-14",
"今日在线时长": 100008.91207242012, "今日在线时长": 0.0,
"已领取礼包": [ "已领取礼包": [],
"1分钟", "登录时间": 1752451388.1583223
"3分钟",
"5分钟",
"10分钟",
"30分钟",
"1小时",
"3小时",
"5小时"
],
"登录时间": 1752329209.0102558
}, },
"点赞系统": { "点赞系统": {
"今日剩余点赞次数": 0, "今日剩余点赞次数": 10,
"点赞上次刷新时间": "2025-07-12" "点赞上次刷新时间": "2025-07-14"
}, },
"新手礼包": { "新手礼包": {
"已领取": true, "已领取": true,
"领取时间": "2025-07-12 23:02:25" "领取时间": "2025-07-12 23:02:25"
},
"体力系统": {
"当前体力值": 20,
"最大体力值": 20,
"上次刷新时间": "2025-07-14",
"上次恢复时间": 1752451388.157905
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -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

View File

@@ -15,7 +15,7 @@ extends Camera2D
@export var bounds_min: Vector2 = Vector2(-1000, -1000) @export var bounds_min: Vector2 = Vector2(-1000, -1000)
@export var bounds_max: 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 var is_dragging: bool = false

View File

@@ -967,5 +967,5 @@
"高度": 53, "高度": 53,
"上次护理时间": 1752051799 "上次护理时间": 1752051799
}, },
"点赞数": 32 "点赞数": 42
} }