更新三个按钮 修了一堆bug
This commit is contained in:
@@ -30,7 +30,7 @@ scale = Vector2(0.2, 0.2)
|
||||
theme_override_font_sizes/font_size = 50
|
||||
script = ExtResource("2_1n4xp")
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
[node name="crop_name" type="Label" parent="."]
|
||||
layout_mode = 2
|
||||
offset_right = 250.0
|
||||
offset_bottom = 42.0
|
||||
@@ -40,3 +40,16 @@ theme_override_font_sizes/font_size = 30
|
||||
text = "[普通-胡萝卜]"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="status_label" type="Label" parent="."]
|
||||
modulate = Color(0.721569, 1, 1, 1)
|
||||
layout_mode = 2
|
||||
offset_top = 17.0
|
||||
offset_right = 500.0
|
||||
offset_bottom = 86.0
|
||||
scale = Vector2(0.2, 0.2)
|
||||
size_flags_horizontal = 3
|
||||
theme_override_font_sizes/font_size = 50
|
||||
text = "已浇水 已施肥 等级:1"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
@@ -31,7 +31,21 @@ func _ready():
|
||||
plant_button.pressed.connect(self._on_plant_button_pressed)
|
||||
remove_button.pressed.connect(self._on_remove_button_pressed)
|
||||
harvest_button.pressed.connect(self._on_harvest_button_pressed)
|
||||
dig_button.text = "开垦"+"\n花费:"+str(main_game.dig_money)
|
||||
|
||||
# 显示浇水、施肥、升级按钮
|
||||
water_button.visible = true
|
||||
fertilize_button.visible = true
|
||||
upgrade_button.visible = true
|
||||
|
||||
_update_button_texts()
|
||||
|
||||
# 更新按钮文本
|
||||
func _update_button_texts():
|
||||
dig_button.text = "开垦"+"\n¥"+str(main_game.dig_money)
|
||||
remove_button.text = "铲除"+"\n¥500"
|
||||
water_button.text = "浇水"+"\n¥50"
|
||||
fertilize_button.text = "施肥"+"\n¥150"
|
||||
upgrade_button.text = "升级"+"\n¥1000"
|
||||
|
||||
#开垦
|
||||
func _on_dig_button_pressed():
|
||||
@@ -41,11 +55,30 @@ func _on_dig_button_pressed():
|
||||
self.hide()
|
||||
return
|
||||
|
||||
dig_button.text = "开垦"+"\n花费:"+str(main_game.dig_money)
|
||||
# 检查玩家金钱是否足够
|
||||
var dig_cost = main_game.dig_money
|
||||
if main_game.money < dig_cost:
|
||||
Toast.show("金钱不足,开垦土地需要 " + str(dig_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否已经开垦
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if lot.get("is_diged", false):
|
||||
Toast.show("此地块已经开垦过了", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送开垦土地请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
# 使用服务器API来开垦土地
|
||||
if network_manager.sendDigGround(selected_lot_index):
|
||||
Toast.show("正在开垦土地...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送开垦请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法开垦土地", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
#浇水
|
||||
func _on_water_button_pressed():
|
||||
@@ -55,8 +88,49 @@ func _on_water_button_pressed():
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查玩家金钱是否足够
|
||||
var water_cost = 50
|
||||
if main_game.money < water_cost:
|
||||
Toast.show("金钱不足,浇水需要 " + str(water_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块状态
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_planted", false) or lot.get("crop_type", "") == "":
|
||||
Toast.show("此地块没有种植作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查作物是否已死亡
|
||||
if lot.get("is_dead", false):
|
||||
Toast.show("死亡的作物无法浇水", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查是否已经成熟
|
||||
if lot.get("grow_time", 0) >= lot.get("max_grow_time", 1):
|
||||
Toast.show("作物已经成熟,无需浇水", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查是否已经浇过水
|
||||
if lot.get("已浇水", false):
|
||||
Toast.show("今天已经浇过水了", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送浇水请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
if network_manager.sendWaterCrop(selected_lot_index):
|
||||
Toast.show("正在浇水...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送浇水请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法浇水", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
pass
|
||||
#施肥
|
||||
func _on_fertilize_button_pressed():
|
||||
# 检查是否处于访问模式
|
||||
@@ -65,8 +139,49 @@ func _on_fertilize_button_pressed():
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查玩家金钱是否足够
|
||||
var fertilize_cost = 150
|
||||
if main_game.money < fertilize_cost:
|
||||
Toast.show("金钱不足,施肥需要 " + str(fertilize_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块状态
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_planted", false) or lot.get("crop_type", "") == "":
|
||||
Toast.show("此地块没有种植作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查作物是否已死亡
|
||||
if lot.get("is_dead", false):
|
||||
Toast.show("死亡的作物无法施肥", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查是否已经成熟
|
||||
if lot.get("grow_time", 0) >= lot.get("max_grow_time", 1):
|
||||
Toast.show("作物已经成熟,无需施肥", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查是否已经施过肥
|
||||
if lot.get("已施肥", false):
|
||||
Toast.show("此作物已经施过肥了", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送施肥请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
if network_manager.sendFertilizeCrop(selected_lot_index):
|
||||
Toast.show("正在施肥...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送施肥请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法施肥", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
pass
|
||||
#升级
|
||||
func _on_upgrade_button_pressed():
|
||||
# 检查是否处于访问模式
|
||||
@@ -75,8 +190,38 @@ func _on_upgrade_button_pressed():
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查玩家金钱是否足够
|
||||
var upgrade_cost = 1000
|
||||
if main_game.money < upgrade_cost:
|
||||
Toast.show("金钱不足,升级土地需要 " + str(upgrade_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否已开垦
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_diged", false):
|
||||
Toast.show("此地块尚未开垦", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查土地是否已经升级
|
||||
var current_level = lot.get("土地等级", 0)
|
||||
if current_level >= 1:
|
||||
Toast.show("此土地已经升级过了", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送升级请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
if network_manager.sendUpgradeLand(selected_lot_index):
|
||||
Toast.show("正在升级土地...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送升级请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法升级土地", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
pass
|
||||
#种植
|
||||
func _on_plant_button_pressed():
|
||||
# 检查是否处于访问模式
|
||||
@@ -96,7 +241,30 @@ func _on_remove_button_pressed():
|
||||
self.hide()
|
||||
return
|
||||
|
||||
main_game.root_out_crop(selected_lot_index)
|
||||
# 检查玩家金钱是否足够
|
||||
var removal_cost = 500
|
||||
if main_game.money < removal_cost:
|
||||
Toast.show("金钱不足,铲除作物需要 " + str(removal_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否有作物
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_planted", false) or lot.get("crop_type", "") == "":
|
||||
Toast.show("此地块没有种植作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送铲除作物请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
if network_manager.sendRemoveCrop(selected_lot_index):
|
||||
Toast.show("正在铲除作物...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送铲除请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法铲除作物", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
pass
|
||||
#收获
|
||||
|
||||
@@ -24,7 +24,7 @@ extends PanelContainer
|
||||
#状态提示标签
|
||||
@onready var status_label : Label = $VBox/status_label
|
||||
|
||||
# 记住密码选项(如果UI中有CheckBox的话)
|
||||
# 记住密码选项
|
||||
var remember_password : bool = true # 默认记住密码
|
||||
|
||||
# 引用主场景和全局函数
|
||||
@@ -46,6 +46,9 @@ func _ready():
|
||||
# 加载保存的登录信息
|
||||
_load_login_info()
|
||||
|
||||
# 显示客户端版本号
|
||||
_display_version_info()
|
||||
|
||||
# 处理登录按钮点击
|
||||
func _on_login_button_pressed():
|
||||
var user_name = username_input.text.strip_edges() # 修剪前后的空格
|
||||
@@ -86,7 +89,6 @@ func _on_login_button_pressed():
|
||||
# 更新主游戏数据
|
||||
main_game.user_name = user_name
|
||||
main_game.user_password = user_password
|
||||
main_game.farmname = farmname
|
||||
|
||||
# 5秒后重新启用按钮(如果没有收到响应)
|
||||
await get_tree().create_timer(5.0).timeout
|
||||
@@ -156,6 +158,12 @@ func _on_register_button_pressed():
|
||||
var player_name = playername_input.text.strip_edges()
|
||||
var verification_code = verificationcode_input.text.strip_edges()
|
||||
|
||||
# 检查密码格式(只允许数字和字母)
|
||||
if not is_valid_password(user_password):
|
||||
status_label.text = "密码只能包含数字和字母!"
|
||||
status_label.modulate = Color.RED
|
||||
return
|
||||
|
||||
if user_name == "" or user_password == "":
|
||||
status_label.text = "用户名或密码不能为空!"
|
||||
status_label.modulate = Color.RED
|
||||
@@ -248,6 +256,12 @@ func is_valid_qq_number(qq_number: String) -> bool:
|
||||
|
||||
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
|
||||
|
||||
# 处理登录响应
|
||||
func _on_login_response_received(success: bool, message: String, user_data: Dictionary):
|
||||
# 启用按钮
|
||||
@@ -262,7 +276,8 @@ func _on_login_response_received(success: bool, message: String, user_data: Dict
|
||||
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.farmname = user_data.get("farm_name", "")
|
||||
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", "")
|
||||
|
||||
# 加载玩家背包数据
|
||||
@@ -431,3 +446,10 @@ func get_saved_username() -> String:
|
||||
return login_data.get("user_name", "")
|
||||
|
||||
return ""
|
||||
|
||||
# 显示版本信息
|
||||
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
|
||||
|
||||
@@ -11,6 +11,7 @@ offset_bottom = 82.0
|
||||
layout_mode = 2
|
||||
|
||||
[node name="SerialNumber" type="Label" parent="HBox"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "1."
|
||||
|
||||
@@ -104,7 +104,3 @@ func _on_refresh_button_pressed():
|
||||
# 退出按钮点击
|
||||
func _on_quit_button_pressed():
|
||||
self.hide()
|
||||
|
||||
# 添加到main.gd中调用
|
||||
func _handle_player_rankings_response(data):
|
||||
handle_player_rankings_response(data)
|
||||
|
||||
@@ -3,7 +3,7 @@ extends Node
|
||||
|
||||
const ToastScene = preload("res://components/ToastShow.tscn")
|
||||
|
||||
static func show(text: String,
|
||||
func show(text: String,
|
||||
color: Color = Color.WHITE,
|
||||
duration: float = 3.0,
|
||||
fade: float = 1.0) -> void:
|
||||
|
||||
203
MainGame.gd
203
MainGame.gd
@@ -12,14 +12,13 @@ extends Node
|
||||
@onready var show_player_name : Label = $UI/GUI/HBox2/player_name # 显示玩家昵称
|
||||
@onready var show_farm_name : Label = $UI/GUI/HBox2/farm_name # 显示农场名称
|
||||
@onready var show_status_label : Label = $UI/GUI/HBox2/StatusLabel # 显示与服务器连接状态
|
||||
|
||||
@onready var network_status_label :Label = get_node("/root/main/UI/TCPNetworkManager/StatusLabel")
|
||||
@onready var network_manager = get_node("/root/main/UI/TCPNetworkManager")
|
||||
@onready var return_my_farm_button: Button = $UI/GUI/VBox/ReturnMyFarmButton
|
||||
|
||||
|
||||
@onready var crop_grid_container : GridContainer = $UI/CropStorePanel/ScrollContainer/Crop_Grid #种子商店格子
|
||||
@onready var player_bag_grid_container : GridContainer = $UI/PlayerBagPanel/ScrollContainer/Bag_Grid #玩家背包格子
|
||||
|
||||
#种子商店格子
|
||||
@onready var crop_grid_container : GridContainer = $UI/CropStorePanel/ScrollContainer/Crop_Grid
|
||||
#玩家背包格子
|
||||
@onready var player_bag_grid_container : GridContainer = $UI/PlayerBagPanel/ScrollContainer/Bag_Grid
|
||||
#作物品质按钮
|
||||
@onready var green_bar : Button = $CopyNodes/GreenCrop #普通
|
||||
@onready var white_blue_bar : Button = $CopyNodes/WhiteBlueCrop #稀有
|
||||
@@ -33,10 +32,10 @@ extends Node
|
||||
@onready var login_panel : PanelContainer = $UI/LoginPanel#登录注册面板
|
||||
@onready var crop_store_panel : Panel = $UI/CropStorePanel#种子商店面板
|
||||
@onready var player_bag_panel : Panel = $UI/PlayerBagPanel#玩家背包面板
|
||||
@onready var TCPNerworkManager : Panel = $UI/TCPNetworkManager#网络管理器
|
||||
@onready var network_manager : Panel = $UI/TCPNetworkManager#网络管理器
|
||||
@onready var player_ranking_panel : Panel = $UI/PlayerRankingPanel#玩家排行榜面板
|
||||
|
||||
@onready var return_my_farm_button: Button = $UI/GUI/VBox/ReturnMyFarmButton
|
||||
|
||||
|
||||
var money: int = 500 # 默认每个人初始为100元
|
||||
var experience: float = 0.0 # 初始每个玩家的经验为0
|
||||
@@ -48,7 +47,6 @@ var dig_money : int = 1000 #开垦费用
|
||||
#临时变量
|
||||
var user_name : String = ""
|
||||
var user_password : String = ""
|
||||
var farmname : String = ""
|
||||
var login_data : Dictionary = {}
|
||||
var data : Dictionary = {}
|
||||
var buttons : Array = []
|
||||
@@ -75,16 +73,13 @@ var visited_player_data : Dictionary = {} # 被访问玩家的数据
|
||||
var crop_textures_cache : Dictionary = {} # 缓存已加载的作物图片
|
||||
var crop_frame_counts : Dictionary = {} # 记录每种作物的帧数
|
||||
|
||||
const client_version :String = "1.0.1" #记录客户端版本
|
||||
|
||||
|
||||
#-------------Godot自带方法-----------------
|
||||
func _on_quit_button_pressed():
|
||||
player_bag_panel.hide()
|
||||
pass
|
||||
|
||||
|
||||
# 准备阶段
|
||||
func _ready():
|
||||
print("萌芽农场客户端 v" + client_version + " 启动")
|
||||
_update_ui()
|
||||
_create_farm_buttons() # 创建地块按钮
|
||||
_update_farm_lots_state() # 初始更新地块状态
|
||||
@@ -105,8 +100,7 @@ func _ready():
|
||||
player_bag_panel.hide()
|
||||
|
||||
# 启动后稍等片刻尝试从服务器获取最新数据
|
||||
var timer = get_tree().create_timer(0.5)
|
||||
await timer.timeout
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
_try_load_from_server()
|
||||
|
||||
#每时每刻都更新
|
||||
@@ -115,8 +109,9 @@ func _physics_process(delta):
|
||||
update_timer += delta
|
||||
if update_timer >= update_interval:
|
||||
update_timer = 0.0 # 重置计时器
|
||||
|
||||
#同步网络管理器的状态
|
||||
show_status_label.text = network_status_label.text
|
||||
show_status_label.text = "服务器状态:"+network_status_label.text
|
||||
show_status_label.modulate = network_status_label.modulate
|
||||
|
||||
if start_game == true:
|
||||
@@ -131,21 +126,47 @@ func _physics_process(delta):
|
||||
pass
|
||||
pass
|
||||
|
||||
func _on_open_store_button_pressed():
|
||||
# 如果处于访问模式,不允许打开商店
|
||||
if is_visiting_mode:
|
||||
Toast.show("访问模式下无法使用商店", Color.ORANGE)
|
||||
return
|
||||
|
||||
# 确保商店面板已初始化
|
||||
crop_store_panel.init_store()
|
||||
# 显示商店面板
|
||||
crop_store_panel.show()
|
||||
# 确保在最前面显示
|
||||
crop_store_panel.move_to_front()
|
||||
pass
|
||||
|
||||
func _on_player_ranking_button_pressed() -> void:
|
||||
player_ranking_panel.show()
|
||||
pass
|
||||
|
||||
func _on_return_my_farm_button_pressed() -> void:
|
||||
# 如果当前处于访问模式,返回自己的农场
|
||||
if is_visiting_mode:
|
||||
return_to_my_farm()
|
||||
else:
|
||||
# 如果不在访问模式,这个按钮可能用于其他功能或者不做任何操作
|
||||
print("当前已在自己的农场")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 处理服务器作物更新消息
|
||||
func _handle_crop_update(update_data):
|
||||
# 检查是否是访问模式的更新
|
||||
var is_visiting_update = update_data.get("is_visiting", false)
|
||||
var visited_player = update_data.get("visited_player", "")
|
||||
|
||||
if is_visiting_update and is_visiting_mode:
|
||||
# 访问模式下的更新,更新被访问玩家的农场数据
|
||||
farm_lots = update_data["farm_lots"]
|
||||
print("收到访问模式下的作物更新,被访问玩家:", visited_player)
|
||||
elif not is_visiting_update and not is_visiting_mode:
|
||||
# 正常模式下的更新,更新自己的农场数据
|
||||
farm_lots = update_data["farm_lots"]
|
||||
print("收到自己农场的作物更新")
|
||||
else:
|
||||
# 状态不匹配,忽略更新
|
||||
print("忽略不匹配的作物更新,当前访问模式:", is_visiting_mode, ",更新类型:", is_visiting_update)
|
||||
@@ -221,16 +242,72 @@ func _handle_action_response(response_data):
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
|
||||
"remove_crop":
|
||||
if success:
|
||||
# 更新玩家数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 更新UI
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
Toast.show(message, Color.GREEN)
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
|
||||
"water_crop":
|
||||
if success:
|
||||
# 更新玩家数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 更新UI
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
Toast.show(message, Color.CYAN)
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
|
||||
"fertilize_crop":
|
||||
if success:
|
||||
# 更新玩家数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 更新UI
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
Toast.show(message, Color.PURPLE)
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
|
||||
"upgrade_land":
|
||||
if success:
|
||||
# 更新玩家数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 更新UI
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
Toast.show(message, Color.GOLD)
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
|
||||
# 处理玩家排行榜响应
|
||||
func _handle_player_rankings_response(data):
|
||||
if player_ranking_panel and player_ranking_panel.has_method("_handle_player_rankings_response"):
|
||||
player_ranking_panel._handle_player_rankings_response(data)
|
||||
player_ranking_panel.handle_player_rankings_response(data)
|
||||
|
||||
# 处理玩家游玩时间响应
|
||||
func _handle_play_time_response(data):
|
||||
# 如果需要在主游戏中处理游玩时间,可以在这里添加代码
|
||||
# 目前只是将响应转发给排行榜面板
|
||||
if player_ranking_panel and player_ranking_panel.has_method("handle_play_time_response"):
|
||||
player_ranking_panel.handle_play_time_response(data)
|
||||
|
||||
# 处理访问玩家响应
|
||||
@@ -334,12 +411,9 @@ func _handle_return_my_farm_response(data):
|
||||
Toast.show("返回农场失败:" + message, Color.RED)
|
||||
print("返回农场失败:", message)
|
||||
|
||||
#-------------Godot自带方法-----------------
|
||||
|
||||
|
||||
|
||||
#-------------自定义方法-----------------
|
||||
|
||||
#创建作物按钮
|
||||
func _create_crop_button(crop_name: String, crop_quality: String) -> Button:
|
||||
# 根据品质选择相应的进度条
|
||||
@@ -372,21 +446,6 @@ func _create_crop_button(crop_name: String, crop_quality: String) -> Button:
|
||||
|
||||
return button
|
||||
|
||||
# 打开商店按钮处理函数
|
||||
func _on_open_store_button_pressed():
|
||||
# 如果处于访问模式,不允许打开商店
|
||||
if is_visiting_mode:
|
||||
Toast.show("访问模式下无法使用商店", Color.ORANGE)
|
||||
return
|
||||
|
||||
# 确保商店面板已初始化
|
||||
crop_store_panel.init_store()
|
||||
# 显示商店面板
|
||||
crop_store_panel.show()
|
||||
# 确保在最前面显示
|
||||
crop_store_panel.move_to_front()
|
||||
pass
|
||||
|
||||
|
||||
|
||||
# 初始化农场地块按钮 - 只在游戏开始时调用一次
|
||||
@@ -421,7 +480,8 @@ func _update_farm_lots_state():
|
||||
|
||||
var lot = farm_lots[i]
|
||||
var button = grid_container.get_child(i)
|
||||
var label = button.get_node("Label")
|
||||
var label = button.get_node("crop_name")
|
||||
var status_label = button.get_node("status_label")
|
||||
var progressbar = button.get_node("ProgressBar")
|
||||
|
||||
# 更新作物图片
|
||||
@@ -437,7 +497,21 @@ func _update_farm_lots_state():
|
||||
else:
|
||||
# 正常生长逻辑
|
||||
var crop_name = lot["crop_type"]
|
||||
label.text = "[" + can_planted_crop[crop_name]["品质"] + "-" + lot["crop_type"] + "]"
|
||||
label.text = "[" + can_planted_crop[crop_name]["品质"] + "-" + lot["crop_type"] +"]"
|
||||
var status_text = ""
|
||||
# 添加状态标识
|
||||
var status_indicators = []
|
||||
if lot.get("已浇水", false):
|
||||
status_indicators.append("已浇水")#💧
|
||||
if lot.get("已施肥", false):
|
||||
status_indicators.append("已施肥")#🌱
|
||||
if lot.get("土地等级", 0) >= 1:
|
||||
status_indicators.append("等级:1")#⭐
|
||||
|
||||
if status_indicators.size() > 0:
|
||||
status_text += " " + " ".join(status_indicators)
|
||||
status_label.text = status_text
|
||||
|
||||
# 根据品质显示颜色
|
||||
match can_planted_crop[crop_name]["品质"]:
|
||||
"普通":
|
||||
@@ -456,8 +530,13 @@ func _update_farm_lots_state():
|
||||
progressbar.value = int(lot["grow_time"]) # 直接设置值,不使用动画
|
||||
else:
|
||||
# 已开垦但未种植的地块显示为空地
|
||||
var land_text = "[空地"
|
||||
if lot.get("土地等级", 0) >= 1:
|
||||
status_label.text = "等级:1"
|
||||
land_text += "]"
|
||||
|
||||
label.modulate = Color.GREEN#绿色
|
||||
label.text = "[" + "空地" + "]"
|
||||
label.text = land_text
|
||||
progressbar.hide()
|
||||
|
||||
else:
|
||||
@@ -493,6 +572,9 @@ func _on_item_selected(index):
|
||||
land_panel.show()
|
||||
land_panel.selected_lot_index = index
|
||||
selected_lot_index = index
|
||||
# 更新按钮文本
|
||||
if land_panel.has_method("_update_button_texts"):
|
||||
land_panel._update_button_texts()
|
||||
|
||||
# 处理访问模式下的地块点击事件
|
||||
func _on_visit_item_selected(index):
|
||||
@@ -538,17 +620,7 @@ func _harvest_crop(index):
|
||||
Toast.show("作物还未成熟", Color.RED)
|
||||
|
||||
|
||||
#铲除已死亡作物
|
||||
func root_out_crop(index):
|
||||
var lot = farm_lots[index]
|
||||
lot["is_planted"] = false
|
||||
lot["grow_time"] = 0
|
||||
Toast.show("从地块[" + str(index) + "]铲除了[" + lot["crop_type"] + "]作物", Color.YELLOW)
|
||||
lot["crop_type"] = ""
|
||||
_check_level_up()
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
pass
|
||||
|
||||
|
||||
|
||||
# 检查玩家是否可以升级
|
||||
@@ -562,23 +634,6 @@ func _check_level_up():
|
||||
crop_store_panel.init_store()
|
||||
|
||||
|
||||
|
||||
|
||||
#-------------自定义方法----------------
|
||||
|
||||
|
||||
func _on_player_ranking_button_pressed() -> void:
|
||||
player_ranking_panel.show()
|
||||
pass
|
||||
|
||||
func _on_return_my_farm_button_pressed() -> void:
|
||||
# 如果当前处于访问模式,返回自己的农场
|
||||
if is_visiting_mode:
|
||||
return_to_my_farm()
|
||||
else:
|
||||
# 如果不在访问模式,这个按钮可能用于其他功能或者不做任何操作
|
||||
print("当前已在自己的农场")
|
||||
|
||||
# 返回自己的农场
|
||||
func return_to_my_farm():
|
||||
if not is_visiting_mode:
|
||||
|
||||
@@ -49,7 +49,7 @@ expand_mode = 2
|
||||
modulate = Color(1, 0.670588, 0.490196, 1)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "树萌芽"
|
||||
text = "玩家昵称:树萌芽"
|
||||
|
||||
[node name="farm_name_image" type="TextureRect" parent="UI/GUI/HBox2"]
|
||||
layout_mode = 2
|
||||
@@ -60,7 +60,7 @@ expand_mode = 3
|
||||
modulate = Color(1, 0.858824, 0.623529, 1)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
text = "树萌芽的农场"
|
||||
text = "农场名称:树萌芽的农场"
|
||||
|
||||
[node name="status_label_image" type="TextureRect" parent="UI/GUI/HBox2"]
|
||||
layout_mode = 2
|
||||
@@ -304,7 +304,6 @@ text = "连接状态"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="LandPanel" type="Panel" parent="UI"]
|
||||
visible = false
|
||||
offset_left = 475.0
|
||||
offset_top = 145.0
|
||||
offset_right = 991.0
|
||||
@@ -344,53 +343,49 @@ columns = 5
|
||||
modulate = Color(1, 0.419608, 0.352941, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "开垦"
|
||||
|
||||
[node name="Plant_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
modulate = Color(1, 0.682353, 0, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "种植"
|
||||
|
||||
[node name="Remove_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
visible = false
|
||||
modulate = Color(1, 1, 0, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "铲除"
|
||||
|
||||
[node name="Harvest_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
modulate = Color(0.223529, 1, 0.290196, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "收获"
|
||||
|
||||
[node name="Water_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
visible = false
|
||||
modulate = Color(0, 1, 1, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "浇水"
|
||||
|
||||
[node name="Fertilize_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
visible = false
|
||||
modulate = Color(0.592157, 0.337255, 1, 1)
|
||||
custom_minimum_size = Vector2(80, 80)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "施肥"
|
||||
|
||||
[node name="Upgrade_Button" type="Button" parent="UI/LandPanel/Grid"]
|
||||
visible = false
|
||||
modulate = Color(0.0784314, 0.470588, 1, 1)
|
||||
custom_minimum_size = Vector2(100, 100)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 30
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "升级"
|
||||
|
||||
[node name="PlayerRankingPanel" type="Panel" parent="UI"]
|
||||
@@ -741,4 +736,3 @@ bounds_max = Vector2(500, 500)
|
||||
[connection signal="pressed" from="UI/GUI/VBox/OpenStoreButton" to="." method="_on_open_store_button_pressed"]
|
||||
[connection signal="pressed" from="UI/GUI/VBox/PlayerRankingButton" to="." method="_on_player_ranking_button_pressed"]
|
||||
[connection signal="pressed" from="UI/CropStorePanel/QuitButton" to="." method="_on_quit_button_pressed"]
|
||||
[connection signal="pressed" from="UI/PlayerBagPanel/QuitButton" to="." method="_on_quit_button_pressed"]
|
||||
|
||||
@@ -17,9 +17,9 @@ var client: TCPClient = TCPClient.new()
|
||||
|
||||
# 服务器配置 - 支持多个服务器地址
|
||||
var server_configs = [
|
||||
#{"host": "127.0.0.1", "port": 4040, "name": "本地服务器"},
|
||||
{"host": "127.0.0.1", "port": 4040, "name": "本地服务器"},
|
||||
#{"host": "192.168.1.110", "port": 4040, "name": "局域网服务器"},
|
||||
{"host": "47.108.90.0", "port": 4040, "name": "公网服务器"}#成都内网穿透
|
||||
#{"host": "47.108.90.0", "port": 4040, "name": "公网服务器"}#成都内网穿透
|
||||
]
|
||||
|
||||
var current_server_index = 0
|
||||
@@ -94,9 +94,6 @@ func _on_data_received(data):
|
||||
"ping":
|
||||
return
|
||||
"response":
|
||||
# 显示服务器响应
|
||||
if data.has("original"):
|
||||
var original = data.get("original", {})
|
||||
return
|
||||
"login_response":
|
||||
# 处理登录响应
|
||||
@@ -196,7 +193,8 @@ func sendLoginInfo(username, password):
|
||||
client.send_data({
|
||||
"type": "login",
|
||||
"username": username,
|
||||
"password": password
|
||||
"password": password,
|
||||
"client_version": main_game.client_version
|
||||
})
|
||||
|
||||
#发送注册信息
|
||||
@@ -207,7 +205,8 @@ func sendRegisterInfo(username, password, farmname, player_name="", verification
|
||||
"password": password,
|
||||
"farm_name": farmname,
|
||||
"player_name": player_name,
|
||||
"verification_code": verification_code
|
||||
"verification_code": verification_code,
|
||||
"client_version": main_game.client_version
|
||||
})
|
||||
|
||||
#发送收获作物信息
|
||||
@@ -247,6 +246,18 @@ func sendDigGround(lot_index):
|
||||
})
|
||||
return true
|
||||
|
||||
#发送铲除作物信息
|
||||
func sendRemoveCrop(lot_index):
|
||||
if not client.is_client_connected():
|
||||
return false
|
||||
|
||||
client.send_data({
|
||||
"type": "remove_crop",
|
||||
"lot_index": lot_index,
|
||||
"timestamp": Time.get_unix_time_from_system()
|
||||
})
|
||||
return true
|
||||
|
||||
#发送购买种子信息
|
||||
func sendBuySeed(crop_name):
|
||||
if not client.is_client_connected():
|
||||
@@ -347,6 +358,42 @@ func sendReturnMyFarm():
|
||||
})
|
||||
return true
|
||||
|
||||
#发送浇水作物信息
|
||||
func sendWaterCrop(lot_index):
|
||||
if not client.is_client_connected():
|
||||
return false
|
||||
|
||||
client.send_data({
|
||||
"type": "water_crop",
|
||||
"lot_index": lot_index,
|
||||
"timestamp": Time.get_unix_time_from_system()
|
||||
})
|
||||
return true
|
||||
|
||||
#发送施肥作物信息
|
||||
func sendFertilizeCrop(lot_index):
|
||||
if not client.is_client_connected():
|
||||
return false
|
||||
|
||||
client.send_data({
|
||||
"type": "fertilize_crop",
|
||||
"lot_index": lot_index,
|
||||
"timestamp": Time.get_unix_time_from_system()
|
||||
})
|
||||
return true
|
||||
|
||||
#发送升级土地信息
|
||||
func sendUpgradeLand(lot_index):
|
||||
if not client.is_client_connected():
|
||||
return false
|
||||
|
||||
client.send_data({
|
||||
"type": "upgrade_land",
|
||||
"lot_index": lot_index,
|
||||
"timestamp": Time.get_unix_time_from_system()
|
||||
})
|
||||
return true
|
||||
|
||||
#检查是否连接到服务器
|
||||
func is_connected_to_server():
|
||||
return client.is_client_connected()
|
||||
|
||||
241
Server/BugFix_UI_Update_Missing.md
Normal file
241
Server/BugFix_UI_Update_Missing.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# Bug修复:开垦和铲除操作UI更新缺失
|
||||
|
||||
## 问题描述
|
||||
|
||||
在开垦土地和铲除作物操作完成后,客户端的UI没有正确更新,具体表现为:
|
||||
|
||||
1. **金钱数量不更新**:操作完成后,显示的金钱数量仍然是操作前的数值
|
||||
2. **等级和经验不更新**:如果操作导致等级或经验变化,UI没有反映
|
||||
3. **地块状态不同步**:虽然服务器数据已更新,但客户端显示可能不一致
|
||||
|
||||
## 问题根源
|
||||
|
||||
### 原始问题分析
|
||||
|
||||
客户端的 `_handle_action_response()` 方法只处理了以下操作类型:
|
||||
- `harvest_crop` - 收获作物 ✅
|
||||
- `plant_crop` - 种植作物 ✅
|
||||
- `buy_seed` - 购买种子 ✅
|
||||
- `dig_ground` - 开垦土地 ✅
|
||||
|
||||
但是缺少了:
|
||||
- `remove_crop` - 铲除作物 ❌
|
||||
|
||||
### 代码问题位置
|
||||
|
||||
```gdscript
|
||||
# MainGame.gd 中的 _handle_action_response 方法
|
||||
func _handle_action_response(response_data):
|
||||
var action_type = response_data.get("action_type", "")
|
||||
var success = response_data.get("success", false)
|
||||
var message = response_data.get("message", "")
|
||||
var updated_data = response_data.get("updated_data", {})
|
||||
|
||||
match action_type:
|
||||
"harvest_crop":
|
||||
# 处理收获响应 ✅
|
||||
"plant_crop":
|
||||
# 处理种植响应 ✅
|
||||
"buy_seed":
|
||||
# 处理购买响应 ✅
|
||||
"dig_ground":
|
||||
# 处理开垦响应 ✅
|
||||
# 缺少 "remove_crop" 的处理 ❌
|
||||
```
|
||||
|
||||
## 修复方案
|
||||
|
||||
### 1. 添加铲除作物响应处理
|
||||
|
||||
在 `MainGame.gd` 的 `_handle_action_response()` 方法中添加对 `remove_crop` 操作的处理:
|
||||
|
||||
```gdscript
|
||||
"remove_crop":
|
||||
if success:
|
||||
# 更新玩家数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 更新UI
|
||||
_update_ui()
|
||||
_update_farm_lots_state()
|
||||
Toast.show(message, Color.GREEN)
|
||||
else:
|
||||
Toast.show(message, Color.RED)
|
||||
```
|
||||
|
||||
### 2. 优化客户端预验证
|
||||
|
||||
为了提供更好的用户体验,在 `land_panel.gd` 中添加了更完善的预验证:
|
||||
|
||||
#### 开垦操作预验证
|
||||
```gdscript
|
||||
# 检查玩家金钱是否足够
|
||||
var dig_cost = main_game.dig_money
|
||||
if main_game.money < dig_cost:
|
||||
Toast.show("金钱不足,开垦土地需要 " + str(dig_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否已经开垦
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if lot.get("is_diged", false):
|
||||
Toast.show("此地块已经开垦过了", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
```
|
||||
|
||||
#### 铲除操作预验证
|
||||
```gdscript
|
||||
# 检查玩家金钱是否足够
|
||||
var removal_cost = 500
|
||||
if main_game.money < removal_cost:
|
||||
Toast.show("金钱不足,铲除作物需要 " + str(removal_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否有作物
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_planted", false) or lot.get("crop_type", "") == "":
|
||||
Toast.show("此地块没有种植作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
```
|
||||
|
||||
### 3. 移除不必要的UI更新调用
|
||||
|
||||
移除了 `land_panel.gd` 中不必要的 `main_game._update_ui()` 调用,因为服务器响应会统一处理UI更新。
|
||||
|
||||
## 修复效果
|
||||
|
||||
### 修复前的问题
|
||||
1. **开垦土地后**:
|
||||
- 金钱显示:1000元 → 1000元 ❌ (实际应该减少)
|
||||
- 地块状态:可能不同步
|
||||
- 用户体验:困惑,不知道操作是否成功
|
||||
|
||||
2. **铲除作物后**:
|
||||
- 金钱显示:1000元 → 1000元 ❌ (实际应该减少500)
|
||||
- 地块状态:可能显示仍有作物
|
||||
- 用户体验:需要刷新页面才能看到变化
|
||||
|
||||
### 修复后的正确行为
|
||||
1. **开垦土地后**:
|
||||
- 金钱显示:1000元 → 0元 ✅ (正确扣除1000)
|
||||
- 地块状态:立即显示为已开垦 ✅
|
||||
- 用户体验:即时反馈,操作流畅
|
||||
|
||||
2. **铲除作物后**:
|
||||
- 金钱显示:1000元 → 500元 ✅ (正确扣除500)
|
||||
- 地块状态:立即显示为空地 ✅
|
||||
- 用户体验:即时反馈,操作流畅
|
||||
|
||||
## 数据流程
|
||||
|
||||
### 完整的操作流程
|
||||
1. **客户端预验证** → 检查金钱、地块状态等
|
||||
2. **发送请求** → 向服务器发送操作请求
|
||||
3. **服务器处理** → 验证并执行操作,更新数据
|
||||
4. **服务器响应** → 返回操作结果和更新后的数据
|
||||
5. **客户端处理响应** → 更新本地数据和UI显示
|
||||
6. **UI更新** → 刷新金钱、经验、地块状态等显示
|
||||
|
||||
### 数据同步机制
|
||||
```gdscript
|
||||
# 服务器响应处理
|
||||
if success:
|
||||
# 1. 更新本地数据
|
||||
if updated_data.has("money"):
|
||||
money = updated_data["money"]
|
||||
if updated_data.has("farm_lots"):
|
||||
farm_lots = updated_data["farm_lots"]
|
||||
|
||||
# 2. 刷新UI显示
|
||||
_update_ui() # 更新金钱、经验、等级显示
|
||||
_update_farm_lots_state() # 更新地块状态显示
|
||||
|
||||
# 3. 显示成功提示
|
||||
Toast.show(message, Color.GREEN)
|
||||
```
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 测试用例1:开垦土地UI更新
|
||||
1. 玩家有1000金钱
|
||||
2. 点击未开垦地块,选择开垦
|
||||
3. 操作成功后检查:
|
||||
- 金钱显示是否减少1000 ✅
|
||||
- 地块是否显示为已开垦 ✅
|
||||
- 是否显示成功提示 ✅
|
||||
|
||||
### 测试用例2:铲除作物UI更新
|
||||
1. 玩家有1000金钱,地块有作物
|
||||
2. 点击地块,选择铲除
|
||||
3. 操作成功后检查:
|
||||
- 金钱显示是否减少500 ✅
|
||||
- 地块是否显示为空地 ✅
|
||||
- 是否显示成功提示 ✅
|
||||
|
||||
### 测试用例3:操作失败时的UI状态
|
||||
1. 玩家金钱不足
|
||||
2. 尝试进行开垦或铲除操作
|
||||
3. 检查:
|
||||
- UI数据不应该改变 ✅
|
||||
- 显示错误提示 ✅
|
||||
- 操作被正确阻止 ✅
|
||||
|
||||
### 测试用例4:网络异常时的处理
|
||||
1. 断开网络连接
|
||||
2. 尝试进行操作
|
||||
3. 检查:
|
||||
- 显示网络错误提示 ✅
|
||||
- UI状态保持不变 ✅
|
||||
- 不发送无效请求 ✅
|
||||
|
||||
## 代码改进点
|
||||
|
||||
### 1. 统一的响应处理
|
||||
所有游戏操作现在都有统一的响应处理机制:
|
||||
- 成功时更新数据和UI
|
||||
- 失败时显示错误信息
|
||||
- 保持数据一致性
|
||||
|
||||
### 2. 改进的用户体验
|
||||
- 添加了操作进行中的提示("正在开垦土地...")
|
||||
- 提供了详细的错误信息
|
||||
- 即时的UI反馈
|
||||
|
||||
### 3. 更好的错误处理
|
||||
- 客户端预验证减少无效请求
|
||||
- 网络错误的友好提示
|
||||
- 服务器错误的正确显示
|
||||
|
||||
## 防止类似问题的建议
|
||||
|
||||
### 1. 代码审查检查点
|
||||
- 新增操作类型时,确保在 `_handle_action_response` 中添加对应处理
|
||||
- 检查所有UI更新是否通过统一的响应处理机制
|
||||
- 验证客户端和服务器的数据同步
|
||||
|
||||
### 2. 测试覆盖
|
||||
- 为每个新操作添加UI更新测试用例
|
||||
- 测试成功和失败场景的UI表现
|
||||
- 验证网络异常情况下的行为
|
||||
|
||||
### 3. 开发规范
|
||||
- 所有游戏操作都应该通过服务器处理
|
||||
- 客户端只做预验证和UI更新
|
||||
- 保持数据流的一致性
|
||||
|
||||
## 总结
|
||||
|
||||
这个bug修复确保了:
|
||||
- ✅ **数据一致性**:客户端UI与服务器数据保持同步
|
||||
- ✅ **用户体验**:操作后立即看到结果反馈
|
||||
- ✅ **错误处理**:完善的错误提示和状态管理
|
||||
- ✅ **代码质量**:统一的响应处理机制
|
||||
- ✅ **可维护性**:清晰的数据流和处理逻辑
|
||||
|
||||
通过这个修复,玩家在进行开垦和铲除操作时将获得与收获作物操作一致的流畅体验。
|
||||
184
Server/BugFix_VisitorMode_LastLoginTime.md
Normal file
184
Server/BugFix_VisitorMode_LastLoginTime.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# Bug修复:访客模式下最后登录时间错误更新
|
||||
|
||||
## 问题描述
|
||||
|
||||
在原始代码中,当玩家处于访客模式访问其他玩家的农场时,被访问玩家的最后登录时间会被意外更新。这是一个严重的数据完整性问题,因为:
|
||||
|
||||
1. **数据不准确**:被访问玩家实际上没有登录,但最后登录时间被更新了
|
||||
2. **逻辑错误**:只有玩家真正登录时,最后登录时间才应该被更新
|
||||
3. **影响统计**:这会影响玩家活跃度统计和排行榜数据的准确性
|
||||
|
||||
## 问题根源
|
||||
|
||||
### 原始问题代码
|
||||
|
||||
```python
|
||||
def update_crops_growth(self):
|
||||
"""更新所有玩家的作物生长状态"""
|
||||
# 获取所有玩家存档文件
|
||||
save_files = glob.glob(os.path.join("game_saves", "*.json"))
|
||||
|
||||
for save_file in save_files:
|
||||
try:
|
||||
# 从文件名提取账号ID
|
||||
account_id = os.path.basename(save_file).split('.')[0]
|
||||
|
||||
# 加载玩家数据
|
||||
player_data = self.load_player_data(account_id)
|
||||
# ... 更新作物生长状态 ...
|
||||
|
||||
# 如果有作物更新,保存玩家数据
|
||||
if growth_updated:
|
||||
self.save_player_data(account_id, player_data) # 问题在这里!
|
||||
```
|
||||
|
||||
**问题分析:**
|
||||
- 系统遍历所有玩家存档文件,包括离线玩家
|
||||
- 当保存玩家数据时,可能会触发其他逻辑更新最后登录时间
|
||||
- 访客模式下,被访问玩家的数据被加载和保存,导致时间戳更新
|
||||
|
||||
## 修复方案
|
||||
|
||||
### 1. 只更新在线玩家的作物生长状态
|
||||
|
||||
```python
|
||||
def update_crops_growth(self):
|
||||
"""更新所有玩家的作物生长状态"""
|
||||
# 只更新在线玩家的作物生长状态,避免影响离线玩家的数据
|
||||
for client_id, user_info in self.user_data.items():
|
||||
if not user_info.get("logged_in", False):
|
||||
continue
|
||||
|
||||
username = user_info.get("username")
|
||||
if not username:
|
||||
continue
|
||||
|
||||
try:
|
||||
# 加载玩家数据
|
||||
player_data = self.load_player_data(username)
|
||||
# ... 更新作物生长状态 ...
|
||||
|
||||
# 如果有作物更新,保存玩家数据
|
||||
if growth_updated:
|
||||
self.save_player_data(username, player_data)
|
||||
```
|
||||
|
||||
**修复要点:**
|
||||
- ✅ 只遍历在线玩家(`self.user_data`)
|
||||
- ✅ 检查玩家登录状态(`logged_in: True`)
|
||||
- ✅ 避免处理离线玩家的数据
|
||||
|
||||
### 2. 优化访客模式的数据推送
|
||||
|
||||
```python
|
||||
def _push_crop_update_to_player(self, account_id, player_data):
|
||||
# ... 现有代码 ...
|
||||
|
||||
if visiting_mode and visiting_target:
|
||||
# 如果处于访问模式,发送被访问玩家的更新数据
|
||||
# 注意:这里只读取数据,不修改被访问玩家的数据
|
||||
target_player_data = self.load_player_data(visiting_target)
|
||||
if target_player_data:
|
||||
# 检查被访问玩家是否也在线
|
||||
target_client_id = None
|
||||
for cid, user_info in self.user_data.items():
|
||||
if user_info.get("username") == visiting_target and user_info.get("logged_in", False):
|
||||
target_client_id = cid
|
||||
break
|
||||
|
||||
update_message = {
|
||||
"type": "crop_update",
|
||||
"farm_lots": target_player_data.get("farm_lots", []),
|
||||
"timestamp": time.time(),
|
||||
"is_visiting": True,
|
||||
"visited_player": visiting_target,
|
||||
"target_online": target_client_id is not None # 新增:标记被访问玩家是否在线
|
||||
}
|
||||
```
|
||||
|
||||
**优化要点:**
|
||||
- ✅ 明确标注只读取数据,不修改
|
||||
- ✅ 检查被访问玩家是否在线
|
||||
- ✅ 提供在线状态信息给客户端
|
||||
|
||||
## 修复效果
|
||||
|
||||
### 修复前的问题
|
||||
1. **错误场景**:
|
||||
- 玩家A访问玩家B的农场
|
||||
- 系统更新所有玩家的作物生长状态
|
||||
- 玩家B的数据被加载、修改、保存
|
||||
- 玩家B的最后登录时间被意外更新
|
||||
|
||||
2. **数据污染**:
|
||||
```
|
||||
玩家B实际最后登录:2024-01-01 10:00:00
|
||||
被访问后错误更新为:2024-01-02 15:30:00 ❌ 错误!
|
||||
```
|
||||
|
||||
### 修复后的正确行为
|
||||
1. **正确场景**:
|
||||
- 玩家A访问玩家B的农场
|
||||
- 系统只更新在线玩家(玩家A)的作物生长状态
|
||||
- 玩家B的数据只被读取,不被修改
|
||||
- 玩家B的最后登录时间保持不变
|
||||
|
||||
2. **数据准确**:
|
||||
```
|
||||
玩家B实际最后登录:2024-01-01 10:00:00
|
||||
访问后仍然保持:2024-01-01 10:00:00 ✅ 正确!
|
||||
```
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 测试用例1:访客模式数据完整性
|
||||
1. 玩家A登录游戏
|
||||
2. 玩家A访问离线玩家B的农场
|
||||
3. 等待作物生长更新周期
|
||||
4. 检查玩家B的最后登录时间是否保持不变
|
||||
|
||||
**预期结果**:玩家B的最后登录时间不应该改变
|
||||
|
||||
### 测试用例2:在线玩家正常更新
|
||||
1. 玩家A和玩家B都在线
|
||||
2. 玩家A访问玩家B的农场
|
||||
3. 等待作物生长更新周期
|
||||
4. 检查两个玩家的作物是否正常生长
|
||||
|
||||
**预期结果**:两个玩家的作物都应该正常生长
|
||||
|
||||
### 测试用例3:离线玩家数据保护
|
||||
1. 确保有离线玩家的存档文件
|
||||
2. 在线玩家进行游戏操作
|
||||
3. 检查离线玩家的数据是否被意外修改
|
||||
|
||||
**预期结果**:离线玩家的数据应该保持不变
|
||||
|
||||
## 代码审查要点
|
||||
|
||||
在未来的开发中,需要注意以下几点:
|
||||
|
||||
1. **数据修改原则**:
|
||||
- 只修改当前在线玩家的数据
|
||||
- 访问其他玩家数据时,优先使用只读操作
|
||||
- 避免在定时任务中修改离线玩家数据
|
||||
|
||||
2. **时间戳更新**:
|
||||
- 最后登录时间只在真正登录时更新
|
||||
- 避免在数据保存时自动更新时间戳
|
||||
- 区分数据修改和时间戳更新的逻辑
|
||||
|
||||
3. **访客模式处理**:
|
||||
- 明确区分访客模式和正常模式
|
||||
- 访客模式下只读取数据,不修改
|
||||
- 提供足够的状态信息给客户端
|
||||
|
||||
## 总结
|
||||
|
||||
这个bug修复确保了:
|
||||
- ✅ 数据完整性:只有真正登录的玩家才会更新最后登录时间
|
||||
- ✅ 性能优化:只处理在线玩家的数据,减少不必要的文件操作
|
||||
- ✅ 逻辑正确:访客模式下不会影响被访问玩家的数据
|
||||
- ✅ 可维护性:代码逻辑更清晰,易于理解和维护
|
||||
|
||||
通过这个修复,游戏的数据统计将更加准确,玩家的隐私和数据完整性得到更好的保护。
|
||||
277
Server/Feature_RemoveCrop.md
Normal file
277
Server/Feature_RemoveCrop.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# 铲除作物功能实现
|
||||
|
||||
## 功能概述
|
||||
|
||||
实现了玩家可以花费500金钱铲除地块上的作物,将地块变成空地的功能。这个功能完全基于服务器端处理,确保数据的一致性和安全性。
|
||||
|
||||
## 功能特点
|
||||
|
||||
- **费用固定**:铲除任何作物都需要花费500金钱
|
||||
- **服务器验证**:所有验证和处理都在服务器端完成
|
||||
- **状态重置**:铲除后地块变成空地,可以重新种植
|
||||
- **访客保护**:访客模式下无法进行铲除操作
|
||||
- **实时更新**:操作完成后立即更新客户端显示
|
||||
|
||||
## 实现架构
|
||||
|
||||
### 1. 服务器端实现
|
||||
|
||||
#### 消息路由
|
||||
```python
|
||||
elif message_type == "remove_crop":
|
||||
return self._handle_remove_crop(client_id, message)
|
||||
```
|
||||
|
||||
#### 主处理方法
|
||||
```python
|
||||
def _handle_remove_crop(self, client_id, message):
|
||||
"""处理铲除作物请求"""
|
||||
# 检查用户是否已登录
|
||||
logged_in, response = self._check_user_logged_in(client_id, "铲除作物", "remove_crop")
|
||||
if not logged_in:
|
||||
return self.send_data(client_id, response)
|
||||
|
||||
# 获取玩家数据
|
||||
player_data, username, response = self._load_player_data_with_check(client_id, "remove_crop")
|
||||
if not player_data:
|
||||
return self.send_data(client_id, response)
|
||||
|
||||
lot_index = message.get("lot_index", -1)
|
||||
|
||||
# 验证地块索引
|
||||
if lot_index < 0 or lot_index >= len(player_data.get("farm_lots", [])):
|
||||
return self._send_action_error(client_id, "remove_crop", "无效的地块索引")
|
||||
|
||||
lot = player_data["farm_lots"][lot_index]
|
||||
|
||||
# 检查地块状态
|
||||
if not lot.get("is_planted", False) or not lot.get("crop_type", ""):
|
||||
return self._send_action_error(client_id, "remove_crop", "此地块没有种植作物")
|
||||
|
||||
# 处理铲除
|
||||
return self._process_crop_removal(client_id, player_data, username, lot, lot_index)
|
||||
```
|
||||
|
||||
#### 铲除处理逻辑
|
||||
```python
|
||||
def _process_crop_removal(self, client_id, player_data, username, lot, lot_index):
|
||||
"""处理铲除作物逻辑"""
|
||||
# 铲除费用
|
||||
removal_cost = 500
|
||||
|
||||
# 检查玩家金钱是否足够
|
||||
if player_data["money"] < removal_cost:
|
||||
return self._send_action_error(client_id, "remove_crop", f"金钱不足,铲除作物需要 {removal_cost} 金钱")
|
||||
|
||||
# 获取作物名称用于日志
|
||||
crop_type = lot.get("crop_type", "未知作物")
|
||||
|
||||
# 执行铲除操作
|
||||
player_data["money"] -= removal_cost
|
||||
lot["is_planted"] = False
|
||||
lot["crop_type"] = ""
|
||||
lot["grow_time"] = 0
|
||||
lot["is_dead"] = False # 重置死亡状态
|
||||
|
||||
# 保存玩家数据
|
||||
self.save_player_data(username, player_data)
|
||||
|
||||
# 发送作物更新
|
||||
self._push_crop_update_to_player(username, player_data)
|
||||
|
||||
self.log('INFO', f"玩家 {username} 铲除了地块 {lot_index} 的作物 {crop_type},花费 {removal_cost} 金钱", 'SERVER')
|
||||
|
||||
return self.send_data(client_id, {
|
||||
"type": "action_response",
|
||||
"action_type": "remove_crop",
|
||||
"success": True,
|
||||
"message": f"成功铲除作物 {crop_type},花费 {removal_cost} 金钱",
|
||||
"updated_data": {
|
||||
"money": player_data["money"],
|
||||
"farm_lots": player_data["farm_lots"]
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
### 2. 网络通信
|
||||
|
||||
#### 客户端发送请求
|
||||
```gdscript
|
||||
#发送铲除作物信息
|
||||
func sendRemoveCrop(lot_index):
|
||||
if not client.is_client_connected():
|
||||
return false
|
||||
|
||||
client.send_data({
|
||||
"type": "remove_crop",
|
||||
"lot_index": lot_index,
|
||||
"timestamp": Time.get_unix_time_from_system()
|
||||
})
|
||||
return true
|
||||
```
|
||||
|
||||
### 3. 客户端UI实现
|
||||
|
||||
#### 按钮文本更新
|
||||
```gdscript
|
||||
# 更新按钮文本
|
||||
func _update_button_texts():
|
||||
dig_button.text = "开垦"+"\n花费:"+str(main_game.dig_money)
|
||||
remove_button.text = "铲除"+"\n花费:500"
|
||||
```
|
||||
|
||||
#### 铲除操作处理
|
||||
```gdscript
|
||||
#铲除
|
||||
func _on_remove_button_pressed():
|
||||
# 检查是否处于访问模式
|
||||
if main_game.is_visiting_mode:
|
||||
Toast.show("访问模式下无法铲除作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查玩家金钱是否足够
|
||||
var removal_cost = 500
|
||||
if main_game.money < removal_cost:
|
||||
Toast.show("金钱不足,铲除作物需要 " + str(removal_cost) + " 金钱", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 检查地块是否有作物
|
||||
var lot = main_game.farm_lots[selected_lot_index]
|
||||
if not lot.get("is_planted", false) or lot.get("crop_type", "") == "":
|
||||
Toast.show("此地块没有种植作物", Color.ORANGE, 2.0, 1.0)
|
||||
self.hide()
|
||||
return
|
||||
|
||||
# 发送铲除作物请求到服务器
|
||||
if network_manager and network_manager.is_connected_to_server():
|
||||
if network_manager.sendRemoveCrop(selected_lot_index):
|
||||
Toast.show("正在铲除作物...", Color.YELLOW, 1.5, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("发送铲除请求失败", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
else:
|
||||
Toast.show("网络未连接,无法铲除作物", Color.RED, 2.0, 1.0)
|
||||
self.hide()
|
||||
```
|
||||
|
||||
## 验证机制
|
||||
|
||||
### 服务器端验证
|
||||
1. **用户登录验证**:确保用户已登录
|
||||
2. **地块索引验证**:检查地块索引是否有效
|
||||
3. **地块状态验证**:确保地块有作物可以铲除
|
||||
4. **金钱验证**:检查玩家金钱是否足够支付铲除费用
|
||||
|
||||
### 客户端预验证
|
||||
1. **访问模式检查**:访客模式下禁止操作
|
||||
2. **金钱预检查**:提前检查金钱是否足够
|
||||
3. **地块状态预检查**:确保地块有作物
|
||||
4. **网络连接检查**:确保能够发送请求
|
||||
|
||||
## 操作流程
|
||||
|
||||
### 正常流程
|
||||
1. 玩家点击地块,显示操作面板
|
||||
2. 面板显示铲除按钮和费用信息
|
||||
3. 玩家点击铲除按钮
|
||||
4. 客户端进行预验证
|
||||
5. 发送铲除请求到服务器
|
||||
6. 服务器验证并处理请求
|
||||
7. 服务器返回操作结果
|
||||
8. 客户端更新UI显示
|
||||
|
||||
### 错误处理
|
||||
- **金钱不足**:显示错误提示,不发送请求
|
||||
- **无作物**:显示提示信息,不发送请求
|
||||
- **访客模式**:显示权限提示,不发送请求
|
||||
- **网络错误**:显示网络错误提示
|
||||
- **服务器错误**:显示服务器返回的错误信息
|
||||
|
||||
## 数据更新
|
||||
|
||||
### 地块状态重置
|
||||
```python
|
||||
lot["is_planted"] = False # 取消种植状态
|
||||
lot["crop_type"] = "" # 清空作物类型
|
||||
lot["grow_time"] = 0 # 重置生长时间
|
||||
lot["is_dead"] = False # 重置死亡状态
|
||||
```
|
||||
|
||||
### 玩家数据更新
|
||||
```python
|
||||
player_data["money"] -= removal_cost # 扣除金钱
|
||||
```
|
||||
|
||||
### 实时同步
|
||||
- 服务器保存玩家数据到文件
|
||||
- 推送作物更新到客户端
|
||||
- 客户端接收并更新UI显示
|
||||
|
||||
## 使用场景
|
||||
|
||||
1. **清理死亡作物**:当作物死亡时,玩家可以花费金钱清理
|
||||
2. **重新规划农场**:玩家想要种植不同作物时
|
||||
3. **紧急处理**:当玩家需要快速清理地块时
|
||||
4. **策略调整**:根据市场需求调整种植策略
|
||||
|
||||
## 安全考虑
|
||||
|
||||
1. **服务器权威**:所有验证和处理都在服务器端
|
||||
2. **数据一致性**:确保客户端和服务器数据同步
|
||||
3. **防作弊**:客户端无法直接修改游戏数据
|
||||
4. **访问控制**:访客模式下无法进行破坏性操作
|
||||
|
||||
## 扩展性
|
||||
|
||||
该功能设计具有良好的扩展性:
|
||||
|
||||
1. **费用可配置**:可以根据作物类型设置不同的铲除费用
|
||||
2. **条件扩展**:可以添加更多的铲除条件(如等级要求)
|
||||
3. **奖励机制**:可以在铲除时给予部分资源回收
|
||||
4. **工具系统**:可以引入铲子等工具来影响铲除效果
|
||||
|
||||
## 测试用例
|
||||
|
||||
### 测试用例1:正常铲除
|
||||
1. 玩家有足够金钱(≥500)
|
||||
2. 地块有作物
|
||||
3. 点击铲除按钮
|
||||
4. 验证:金钱减少500,地块变成空地
|
||||
|
||||
### 测试用例2:金钱不足
|
||||
1. 玩家金钱不足(<500)
|
||||
2. 地块有作物
|
||||
3. 点击铲除按钮
|
||||
4. 验证:显示金钱不足提示,操作失败
|
||||
|
||||
### 测试用例3:无作物地块
|
||||
1. 玩家有足够金钱
|
||||
2. 地块为空地
|
||||
3. 点击铲除按钮
|
||||
4. 验证:显示无作物提示,操作失败
|
||||
|
||||
### 测试用例4:访客模式
|
||||
1. 玩家处于访客模式
|
||||
2. 点击铲除按钮
|
||||
3. 验证:显示权限提示,操作失败
|
||||
|
||||
### 测试用例5:网络断开
|
||||
1. 网络连接断开
|
||||
2. 点击铲除按钮
|
||||
3. 验证:显示网络错误提示,操作失败
|
||||
|
||||
## 总结
|
||||
|
||||
铲除作物功能的实现遵循了以下设计原则:
|
||||
|
||||
- ✅ **服务器权威**:所有关键逻辑在服务器端处理
|
||||
- ✅ **用户体验**:提供清晰的费用信息和操作反馈
|
||||
- ✅ **数据安全**:多层验证确保数据完整性
|
||||
- ✅ **错误处理**:完善的错误提示和处理机制
|
||||
- ✅ **代码复用**:利用现有的验证和处理框架
|
||||
- ✅ **可维护性**:清晰的代码结构和文档
|
||||
|
||||
这个功能为玩家提供了更灵活的农场管理选项,同时保持了游戏的平衡性和数据安全性。
|
||||
236
Server/Feature_Summary.md
Normal file
236
Server/Feature_Summary.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# 萌芽农场新功能实现总结
|
||||
|
||||
## 功能概述
|
||||
|
||||
本次更新成功实现了三个重要的农场管理功能:浇水、施肥、升级土地。这些功能为玩家提供了更丰富的农场管理体验和策略选择。
|
||||
|
||||
## 实现的功能
|
||||
|
||||
### 1. 浇水功能 💧
|
||||
- **费用**:50金钱
|
||||
- **效果**:作物直接生长1%,如果达到100%直接成熟
|
||||
- **限制**:每天每块地只能浇水一次,每日自动重置
|
||||
- **状态显示**:浇过水的地块显示💧图标
|
||||
- **验证**:检查金钱、作物状态、是否已浇水等
|
||||
|
||||
### 2. 施肥功能 🌱
|
||||
- **费用**:150金钱
|
||||
- **效果**:作物在10分钟内以双倍速度生长
|
||||
- **限制**:每个作物只能施肥一次
|
||||
- **状态显示**:施过肥的地块显示🌱图标
|
||||
- **时间管理**:10分钟后自动清除施肥状态
|
||||
|
||||
### 3. 土地升级功能 ⭐
|
||||
- **费用**:1000金钱
|
||||
- **效果**:永久让这块土地的作物以1.5倍速度生长
|
||||
- **限制**:每块土地只能升级一次
|
||||
- **状态显示**:升级过的土地显示⭐图标
|
||||
- **持久性**:升级效果永久有效
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 服务器端实现
|
||||
|
||||
#### 1. 消息路由扩展
|
||||
```python
|
||||
# 在_handle_message中添加新的消息类型
|
||||
elif message_type == "water_crop":
|
||||
return self._handle_water_crop(client_id, message)
|
||||
elif message_type == "fertilize_crop":
|
||||
return self._handle_fertilize_crop(client_id, message)
|
||||
elif message_type == "upgrade_land":
|
||||
return self._handle_upgrade_land(client_id, message)
|
||||
```
|
||||
|
||||
#### 2. 处理方法实现
|
||||
- `_handle_water_crop()` - 处理浇水请求
|
||||
- `_handle_fertilize_crop()` - 处理施肥请求
|
||||
- `_handle_upgrade_land()` - 处理升级请求
|
||||
- `_process_watering()` - 浇水逻辑处理
|
||||
- `_process_fertilizing()` - 施肥逻辑处理
|
||||
- `_process_land_upgrade()` - 升级逻辑处理
|
||||
|
||||
#### 3. 作物生长系统增强
|
||||
```python
|
||||
# 计算生长速度倍数
|
||||
growth_multiplier = 1.0
|
||||
|
||||
# 土地等级影响:1级土地提供1.5倍生长速度
|
||||
if land_level >= 1:
|
||||
growth_multiplier *= 1.5
|
||||
|
||||
# 施肥影响:10分钟内双倍生长速度
|
||||
if fertilized and within_10_minutes:
|
||||
growth_multiplier *= 2.0
|
||||
```
|
||||
|
||||
#### 4. 状态管理
|
||||
- 每日重置浇水状态
|
||||
- 施肥时间戳管理
|
||||
- 土地等级持久化
|
||||
|
||||
### 客户端实现
|
||||
|
||||
#### 1. 网络通信扩展
|
||||
```gdscript
|
||||
# 新增发送方法
|
||||
func sendWaterCrop(lot_index)
|
||||
func sendFertilizeCrop(lot_index)
|
||||
func sendUpgradeLand(lot_index)
|
||||
```
|
||||
|
||||
#### 2. UI响应处理
|
||||
```gdscript
|
||||
# 在_handle_action_response中添加新的响应类型
|
||||
"water_crop", "fertilize_crop", "upgrade_land"
|
||||
```
|
||||
|
||||
#### 3. 地块面板功能
|
||||
- 显示浇水、施肥、升级按钮
|
||||
- 添加费用显示
|
||||
- 实现预验证逻辑
|
||||
- 错误提示处理
|
||||
|
||||
#### 4. 状态显示增强
|
||||
```gdscript
|
||||
# 添加状态标识
|
||||
if lot.get("已浇水", false):
|
||||
status_indicators.append("💧")
|
||||
if lot.get("已施肥", false):
|
||||
status_indicators.append("🌱")
|
||||
if lot.get("土地等级", 0) >= 1:
|
||||
status_indicators.append("⭐")
|
||||
```
|
||||
|
||||
## 数据结构扩展
|
||||
|
||||
### 地块数据结构
|
||||
```json
|
||||
{
|
||||
"crop_type": "作物名称",
|
||||
"grow_time": 当前生长时间,
|
||||
"max_grow_time": 最大生长时间,
|
||||
"is_planted": true/false,
|
||||
"is_diged": true/false,
|
||||
"is_dead": true/false,
|
||||
"已浇水": true/false,
|
||||
"已施肥": true/false,
|
||||
"土地等级": 0/1,
|
||||
"施肥时间": 时间戳
|
||||
}
|
||||
```
|
||||
|
||||
### 玩家数据扩展
|
||||
```json
|
||||
{
|
||||
"last_water_reset_date": "2024-01-01",
|
||||
// ... 其他现有字段
|
||||
}
|
||||
```
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 效果叠加
|
||||
- 土地升级 + 施肥 = 3倍生长速度(1.5 × 2.0)
|
||||
- 浇水 + 施肥 + 升级 = 最大化生长效率
|
||||
|
||||
### 2. 时间管理
|
||||
- 浇水:每日重置(基于日期)
|
||||
- 施肥:10分钟时效
|
||||
- 升级:永久有效
|
||||
|
||||
### 3. 经济平衡
|
||||
- 浇水:低成本,即时效果
|
||||
- 施肥:中等成本,短期加速
|
||||
- 升级:高成本,长期投资
|
||||
|
||||
### 4. 用户体验
|
||||
- 清晰的状态图标显示
|
||||
- 详细的错误提示
|
||||
- 即时的UI反馈
|
||||
- 流畅的操作体验
|
||||
|
||||
## 安全性和验证
|
||||
|
||||
### 1. 服务器端验证
|
||||
- 用户登录状态检查
|
||||
- 金钱充足性验证
|
||||
- 地块状态验证
|
||||
- 重复操作防护
|
||||
|
||||
### 2. 客户端预验证
|
||||
- 减少无效请求
|
||||
- 提供即时反馈
|
||||
- 改善用户体验
|
||||
|
||||
### 3. 数据一致性
|
||||
- 服务器权威验证
|
||||
- 客户端状态同步
|
||||
- 错误状态恢复
|
||||
|
||||
## 扩展性设计
|
||||
|
||||
### 1. 可配置参数
|
||||
- 浇水费用:50金钱(可调整)
|
||||
- 施肥费用:150金钱(可调整)
|
||||
- 升级费用:1000金钱(可调整)
|
||||
- 施肥持续时间:10分钟(可调整)
|
||||
|
||||
### 2. 未来扩展可能
|
||||
- 多级土地升级
|
||||
- 不同类型的肥料
|
||||
- 天气系统影响
|
||||
- 季节性效果
|
||||
|
||||
## 测试覆盖
|
||||
|
||||
### 1. 功能测试
|
||||
- 正常操作流程
|
||||
- 边界条件测试
|
||||
- 错误处理验证
|
||||
|
||||
### 2. 集成测试
|
||||
- 客户端-服务器通信
|
||||
- 数据同步验证
|
||||
- 状态持久化测试
|
||||
|
||||
### 3. 用户体验测试
|
||||
- 操作流畅性
|
||||
- 提示信息准确性
|
||||
- 视觉反馈效果
|
||||
|
||||
## 性能影响
|
||||
|
||||
### 1. 服务器性能
|
||||
- 作物生长计算复杂度略有增加
|
||||
- 状态管理内存占用轻微增长
|
||||
- 网络消息量适度增加
|
||||
|
||||
### 2. 客户端性能
|
||||
- UI更新频率保持稳定
|
||||
- 状态显示计算开销很小
|
||||
- 用户操作响应及时
|
||||
|
||||
## 维护和监控
|
||||
|
||||
### 1. 日志记录
|
||||
- 所有操作都有详细日志
|
||||
- 错误情况记录完整
|
||||
- 便于问题排查
|
||||
|
||||
### 2. 数据监控
|
||||
- 功能使用频率统计
|
||||
- 经济系统平衡监控
|
||||
- 用户行为分析
|
||||
|
||||
## 总结
|
||||
|
||||
本次功能实现成功为萌芽农场游戏添加了三个重要的农场管理功能,显著提升了游戏的策略性和可玩性。实现过程中注重了:
|
||||
|
||||
- **完整性**:从服务器到客户端的完整实现
|
||||
- **安全性**:多层验证和错误处理
|
||||
- **用户体验**:清晰的反馈和流畅的操作
|
||||
- **可维护性**:清晰的代码结构和文档
|
||||
- **扩展性**:为未来功能扩展预留空间
|
||||
|
||||
这些功能为玩家提供了更多的农场管理选择,增加了游戏的深度和策略性,同时保持了良好的游戏平衡性。
|
||||
@@ -1,100 +0,0 @@
|
||||
# JSON 批量编辑器
|
||||
|
||||
一个简洁强大的JSON编辑工具,专门用于批量添加键值对到JSON文件中的所有对象。
|
||||
|
||||
## 🚀 功能特点
|
||||
|
||||
- **批量添加属性**: 一键为JSON中所有对象添加新的键值对
|
||||
- **智能类型识别**: 自动识别并转换数据类型
|
||||
- **支持所有JSON数据类型**: 字符串、数字、布尔值、对象、数组、null
|
||||
- **文件上传**: 支持JSON文件拖拽上传
|
||||
- **即时下载**: 编辑完成后立即下载修改后的JSON文件
|
||||
- **无需服务器**: 纯前端实现,直接在浏览器中运行
|
||||
|
||||
## 📋 支持的数据类型
|
||||
|
||||
| 类型 | 输入示例 | 转换结果 |
|
||||
|------|----------|----------|
|
||||
| 字符串 | `hello world` | `"hello world"` |
|
||||
| 整数 | `123` | `123` |
|
||||
| 小数 | `3.14` | `3.14` |
|
||||
| 布尔值 | `true` 或 `false` | `true` 或 `false` |
|
||||
| 空值 | `null` | `null` |
|
||||
| 对象 | `{"key": "value"}` | `{"key": "value"}` |
|
||||
| 数组 | `[1, 2, 3]` | `[1, 2, 3]` |
|
||||
| 空字符串 | *(留空)* | `""` |
|
||||
|
||||
## 🎯 使用方法
|
||||
|
||||
### 1. 加载JSON数据
|
||||
- **方法一**: 点击"上传JSON文件"按钮选择文件
|
||||
- **方法二**: 直接在编辑器中粘贴JSON数据
|
||||
- **方法三**: 点击"加载示例数据"使用预设数据
|
||||
|
||||
### 2. 批量添加属性
|
||||
1. 在"键名"字段输入要添加的属性名,如: `能否购买`
|
||||
2. 在"键值"字段输入属性值,如: `true`
|
||||
3. 点击"批量添加到所有对象"按钮
|
||||
4. 系统会自动为JSON中的每个对象添加该属性
|
||||
|
||||
### 3. 下载结果
|
||||
点击"下载修改后的JSON"按钮保存编辑后的文件
|
||||
|
||||
## 💡 使用示例
|
||||
|
||||
### 原始JSON:
|
||||
```json
|
||||
{
|
||||
"小麦": {
|
||||
"花费": 120,
|
||||
"收益": 100,
|
||||
"品质": "普通"
|
||||
},
|
||||
"稻谷": {
|
||||
"花费": 100,
|
||||
"收益": 120,
|
||||
"品质": "普通"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 添加属性: 键名=`能否购买`, 键值=`true`
|
||||
|
||||
### 结果JSON:
|
||||
```json
|
||||
{
|
||||
"小麦": {
|
||||
"花费": 120,
|
||||
"收益": 100,
|
||||
"品质": "普通",
|
||||
"能否购买": true
|
||||
},
|
||||
"稻谷": {
|
||||
"花费": 100,
|
||||
"收益": 120,
|
||||
"品质": "普通",
|
||||
"能否购买": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🔧 快速开始
|
||||
|
||||
1. 直接在浏览器中打开 `templates/json_editor.html` 文件
|
||||
2. 无需安装任何依赖或服务器
|
||||
3. 开始使用批量编辑功能
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
- 工具会递归处理嵌套对象,为所有找到的对象添加指定属性
|
||||
- 数组元素如果是对象,也会被添加属性
|
||||
- 确保JSON格式正确,否则无法处理
|
||||
- 修改前建议备份原始文件
|
||||
|
||||
## 🎨 界面说明
|
||||
|
||||
- **左侧边栏**: 文件操作、批量编辑功能、快速示例
|
||||
- **右侧编辑区**: JSON数据显示和编辑
|
||||
- **智能提示**: 实时显示操作结果和错误信息
|
||||
|
||||
这个工具特别适合游戏开发、配置文件管理等需要批量修改JSON数据的场景。
|
||||
@@ -1,65 +0,0 @@
|
||||
# JSON格式化示例
|
||||
|
||||
以下展示三种不同的JSON格式化效果:
|
||||
|
||||
## 原始数据
|
||||
```json
|
||||
{"小麦":{"花费":120,"收益":100,"品质":"普通"},"稻谷":{"花费":100,"收益":120,"品质":"普通"}}
|
||||
```
|
||||
|
||||
## 1. 标准格式化(2空格缩进)
|
||||
```json
|
||||
{
|
||||
"小麦": {
|
||||
"花费": 120,
|
||||
"收益": 100,
|
||||
"品质": "普通"
|
||||
},
|
||||
"稻谷": {
|
||||
"花费": 100,
|
||||
"收益": 120,
|
||||
"品质": "普通"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 最小化(压缩)
|
||||
```json
|
||||
{"小麦":{"花费":120,"收益":100,"品质":"普通"},"稻谷":{"花费":100,"收益":120,"品质":"普通"}}
|
||||
```
|
||||
|
||||
## 3. 一行化(一个对象一行)
|
||||
```json
|
||||
{
|
||||
"小麦": {"花费":120,"收益":100,"品质":"普通"},
|
||||
"稻谷": {"花费":100,"收益":120,"品质":"普通"}
|
||||
}
|
||||
```
|
||||
|
||||
## 使用场景
|
||||
|
||||
- **标准格式化**: 适合阅读和编辑,开发时使用
|
||||
- **最小化**: 适合网络传输,节省带宽
|
||||
- **一行化**: 适合比较不同对象,每行一个对象便于查看差异
|
||||
|
||||
## 批量添加属性示例
|
||||
|
||||
添加键名: `能否购买`, 键值: `true`
|
||||
|
||||
### 结果:
|
||||
```json
|
||||
{
|
||||
"小麦": {
|
||||
"花费": 120,
|
||||
"收益": 100,
|
||||
"品质": "普通",
|
||||
"能否购买": true
|
||||
},
|
||||
"稻谷": {
|
||||
"花费": 100,
|
||||
"收益": 120,
|
||||
"品质": "普通",
|
||||
"能否购买": true
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -1,267 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from flask import Flask, request, jsonify, render_template, send_file
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
class JSONFormatter:
|
||||
"""JSON格式化工具类"""
|
||||
|
||||
@staticmethod
|
||||
def format_standard(data, indent=2):
|
||||
"""标准格式化 - 带缩进的可读格式"""
|
||||
return json.dumps(data, ensure_ascii=False, indent=indent)
|
||||
|
||||
@staticmethod
|
||||
def minify(data):
|
||||
"""最小化 - 压缩去除空格"""
|
||||
return json.dumps(data, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
@staticmethod
|
||||
def one_line_per_object(data):
|
||||
"""一行化 - 每个对象/元素占一行"""
|
||||
if isinstance(data, list):
|
||||
# 如果是数组,每个元素占一行
|
||||
lines = ['[']
|
||||
for i, item in enumerate(data):
|
||||
comma = ',' if i < len(data) - 1 else ''
|
||||
lines.append(f' {json.dumps(item, ensure_ascii=False)}{comma}')
|
||||
lines.append(']')
|
||||
return '\n'.join(lines)
|
||||
|
||||
elif isinstance(data, dict):
|
||||
# 如果是对象,每个键值对占一行
|
||||
lines = ['{']
|
||||
keys = list(data.keys())
|
||||
for i, key in enumerate(keys):
|
||||
comma = ',' if i < len(keys) - 1 else ''
|
||||
value_str = json.dumps(data[key], ensure_ascii=False)
|
||||
lines.append(f' {json.dumps(key, ensure_ascii=False)}: {value_str}{comma}')
|
||||
lines.append('}')
|
||||
return '\n'.join(lines)
|
||||
|
||||
else:
|
||||
# 基本类型直接返回
|
||||
return json.dumps(data, ensure_ascii=False)
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
"""主页"""
|
||||
return render_template('json_editor.html')
|
||||
|
||||
@app.route('/api/format', methods=['POST'])
|
||||
def format_json():
|
||||
"""JSON格式化API"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
content = data.get('content', '')
|
||||
format_type = data.get('format_type', 'standard') # standard, minify, oneline
|
||||
|
||||
if not content.strip():
|
||||
return jsonify({'success': False, 'message': '请提供JSON内容'})
|
||||
|
||||
# 解析JSON
|
||||
try:
|
||||
json_data = json.loads(content)
|
||||
except json.JSONDecodeError as e:
|
||||
return jsonify({'success': False, 'message': f'JSON格式错误: {str(e)}'})
|
||||
|
||||
# 根据类型格式化
|
||||
formatter = JSONFormatter()
|
||||
|
||||
if format_type == 'standard':
|
||||
formatted = formatter.format_standard(json_data)
|
||||
message = 'JSON标准格式化完成'
|
||||
elif format_type == 'minify':
|
||||
formatted = formatter.minify(json_data)
|
||||
message = 'JSON最小化完成'
|
||||
elif format_type == 'oneline':
|
||||
formatted = formatter.one_line_per_object(json_data)
|
||||
message = 'JSON一行化格式完成'
|
||||
else:
|
||||
return jsonify({'success': False, 'message': '不支持的格式化类型'})
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': message,
|
||||
'formatted': formatted,
|
||||
'original_length': len(content),
|
||||
'formatted_length': len(formatted)
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'success': False, 'message': f'处理错误: {str(e)}'})
|
||||
|
||||
@app.route('/api/batch_add', methods=['POST'])
|
||||
def batch_add_property():
|
||||
"""批量添加属性API"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
content = data.get('content', '')
|
||||
key_name = data.get('key_name', '')
|
||||
key_value = data.get('key_value', '')
|
||||
|
||||
if not content.strip():
|
||||
return jsonify({'success': False, 'message': '请提供JSON内容'})
|
||||
|
||||
if not key_name.strip():
|
||||
return jsonify({'success': False, 'message': '请提供键名'})
|
||||
|
||||
# 解析JSON
|
||||
try:
|
||||
json_data = json.loads(content)
|
||||
except json.JSONDecodeError as e:
|
||||
return jsonify({'success': False, 'message': f'JSON格式错误: {str(e)}'})
|
||||
|
||||
# 智能解析键值
|
||||
parsed_value = parse_value(key_value)
|
||||
|
||||
# 批量添加属性
|
||||
count = add_property_to_all_objects(json_data, key_name, parsed_value)
|
||||
|
||||
# 格式化输出
|
||||
formatted = JSONFormatter.format_standard(json_data)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': f'成功为 {count} 个对象添加了属性 "{key_name}": {json.dumps(parsed_value, ensure_ascii=False)}',
|
||||
'formatted': formatted,
|
||||
'count': count
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'success': False, 'message': f'处理错误: {str(e)}'})
|
||||
|
||||
def parse_value(value_str):
|
||||
"""智能解析值的类型"""
|
||||
if value_str == '':
|
||||
return ''
|
||||
|
||||
# null
|
||||
if value_str.lower() == 'null':
|
||||
return None
|
||||
|
||||
# boolean
|
||||
if value_str.lower() == 'true':
|
||||
return True
|
||||
if value_str.lower() == 'false':
|
||||
return False
|
||||
|
||||
# number
|
||||
try:
|
||||
if '.' in value_str:
|
||||
return float(value_str)
|
||||
else:
|
||||
return int(value_str)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# JSON object or array
|
||||
if (value_str.startswith('{') and value_str.endswith('}')) or \
|
||||
(value_str.startswith('[') and value_str.endswith(']')):
|
||||
try:
|
||||
return json.loads(value_str)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
|
||||
# string
|
||||
return value_str
|
||||
|
||||
def add_property_to_all_objects(obj, key, value):
|
||||
"""递归为所有对象添加属性"""
|
||||
count = 0
|
||||
|
||||
def traverse(current):
|
||||
nonlocal count
|
||||
if isinstance(current, dict):
|
||||
current[key] = value
|
||||
count += 1
|
||||
# 继续递归处理嵌套对象
|
||||
for val in current.values():
|
||||
if isinstance(val, (dict, list)) and val != current:
|
||||
traverse(val)
|
||||
elif isinstance(current, list):
|
||||
for item in current:
|
||||
traverse(item)
|
||||
|
||||
traverse(obj)
|
||||
return count
|
||||
|
||||
@app.route('/api/validate', methods=['POST'])
|
||||
def validate_json():
|
||||
"""JSON验证API"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
content = data.get('content', '')
|
||||
|
||||
if not content.strip():
|
||||
return jsonify({'success': False, 'message': '请提供JSON内容'})
|
||||
|
||||
try:
|
||||
json_data = json.loads(content)
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': 'JSON格式正确 ✓',
|
||||
'valid': True
|
||||
})
|
||||
except json.JSONDecodeError as e:
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': f'JSON格式错误: {str(e)}',
|
||||
'valid': False,
|
||||
'error': str(e)
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'success': False, 'message': f'验证错误: {str(e)}'})
|
||||
|
||||
@app.route('/api/download', methods=['POST'])
|
||||
def download_json():
|
||||
"""下载JSON文件"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
content = data.get('content', '')
|
||||
format_type = data.get('format_type', 'standard')
|
||||
|
||||
if not content.strip():
|
||||
return jsonify({'success': False, 'message': '没有可下载的内容'})
|
||||
|
||||
# 验证JSON格式
|
||||
try:
|
||||
json_data = json.loads(content)
|
||||
except json.JSONDecodeError as e:
|
||||
return jsonify({'success': False, 'message': f'JSON格式错误: {str(e)}'})
|
||||
|
||||
# 格式化
|
||||
formatter = JSONFormatter()
|
||||
if format_type == 'minify':
|
||||
formatted_content = formatter.minify(json_data)
|
||||
elif format_type == 'oneline':
|
||||
formatted_content = formatter.one_line_per_object(json_data)
|
||||
else:
|
||||
formatted_content = formatter.format_standard(json_data)
|
||||
|
||||
# 生成文件名
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
filename = f"edited_json_{format_type}_{timestamp}.json"
|
||||
|
||||
# 创建临时文件
|
||||
temp_file = f"temp_{filename}"
|
||||
with open(temp_file, 'w', encoding='utf-8') as f:
|
||||
f.write(formatted_content)
|
||||
|
||||
return send_file(temp_file, as_attachment=True, download_name=filename)
|
||||
|
||||
except Exception as e:
|
||||
return jsonify({'success': False, 'message': f'下载错误: {str(e)}'})
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 确保templates目录存在
|
||||
os.makedirs('templates', exist_ok=True)
|
||||
|
||||
# 运行应用
|
||||
app.run(debug=True, host='0.0.0.0', port=5000)
|
||||
@@ -1,2 +0,0 @@
|
||||
Flask==2.3.3
|
||||
Werkzeug==2.3.7
|
||||
@@ -1,627 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>简易JSON编辑器 - 批量添加键值</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
background: #f5f5f5;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: #4a90e2;
|
||||
color: white;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
display: grid;
|
||||
grid-template-columns: 300px 1fr;
|
||||
gap: 0;
|
||||
min-height: 600px;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background: #f8f9fa;
|
||||
border-right: 1px solid #dee2e6;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.editor-area {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.section {
|
||||
background: white;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.section h3 {
|
||||
margin-bottom: 15px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background: #4a90e2;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 10px 20px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
margin: 5px 5px 5px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background: #357abd;
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background: #28a745;
|
||||
}
|
||||
|
||||
.btn-success:hover {
|
||||
background: #218838;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.input-group label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.input-group input {
|
||||
width: 100%;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.input-group input:focus {
|
||||
outline: none;
|
||||
border-color: #4a90e2;
|
||||
}
|
||||
|
||||
#jsonEditor {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: 5px;
|
||||
padding: 15px;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
#jsonEditor:focus {
|
||||
outline: none;
|
||||
border-color: #4a90e2;
|
||||
}
|
||||
|
||||
.file-upload {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.file-upload input[type=file] {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding: 10px 15px;
|
||||
margin-bottom: 15px;
|
||||
border-radius: 5px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.alert-success {
|
||||
background: #d4edda;
|
||||
color: #155724;
|
||||
border: 1px solid #c3e6cb;
|
||||
}
|
||||
|
||||
.alert-error {
|
||||
background: #f8d7da;
|
||||
color: #721c24;
|
||||
border: 1px solid #f5c6cb;
|
||||
}
|
||||
|
||||
.alert-info {
|
||||
background: #d1ecf1;
|
||||
color: #0c5460;
|
||||
border: 1px solid #bee5eb;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.main-content {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>🔧 JSON批量编辑器</h1>
|
||||
<p>批量添加键值对到JSON文件</p>
|
||||
</div>
|
||||
|
||||
<div class="main-content">
|
||||
<!-- 侧边栏 -->
|
||||
<div class="sidebar">
|
||||
<!-- 文件操作 -->
|
||||
<div class="section">
|
||||
<h3>📁 文件操作</h3>
|
||||
<div class="file-upload btn">
|
||||
<input type="file" id="fileInput" accept=".json" />
|
||||
上传JSON文件
|
||||
</div>
|
||||
<button class="btn btn-success" onclick="downloadJSON()">
|
||||
下载修改后的JSON
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- 批量添加键值 -->
|
||||
<div class="section">
|
||||
<h3>⚡ 批量添加键值</h3>
|
||||
<div class="input-group">
|
||||
<label for="keyName">键名:</label>
|
||||
<input type="text" id="keyName" placeholder="例: 能否购买" />
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label for="keyValue">键值:</label>
|
||||
<input type="text" id="keyValue" placeholder="支持多种类型,见下方说明" />
|
||||
</div>
|
||||
<button class="btn btn-success" onclick="batchAddProperty()">
|
||||
批量添加到所有对象
|
||||
</button>
|
||||
|
||||
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 5px; font-size: 12px;">
|
||||
<strong>支持的数据类型:</strong><br>
|
||||
• 字符串: hello world<br>
|
||||
• 数字: 123 或 3.14<br>
|
||||
• 布尔值: true 或 false<br>
|
||||
• 空值: null<br>
|
||||
• 对象: {"key": "value"}<br>
|
||||
• 数组: [1, 2, 3]<br>
|
||||
<small style="color: #666;">系统会自动识别并转换数据类型</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 快速示例 -->
|
||||
<div class="section">
|
||||
<h3>📝 快速示例</h3>
|
||||
<button class="btn" onclick="loadSampleJSON()">
|
||||
加载示例数据
|
||||
</button>
|
||||
|
||||
<div style="margin-top: 15px;">
|
||||
<strong style="font-size: 12px;">快速填入示例键值:</strong><br>
|
||||
<button class="btn" style="font-size: 11px; padding: 5px 10px; margin: 2px;" onclick="fillExample('能否购买', 'true')">
|
||||
布尔值示例
|
||||
</button>
|
||||
<button class="btn" style="font-size: 11px; padding: 5px 10px; margin: 2px;" onclick="fillExample('价格', '150')">
|
||||
数字示例
|
||||
</button>
|
||||
<button class="btn" style="font-size: 11px; padding: 5px 10px; margin: 2px;" onclick="fillExample('备注', '新增属性')">
|
||||
字符串示例
|
||||
</button>
|
||||
<button class="btn" style="font-size: 11px; padding: 5px 10px; margin: 2px;" onclick="fillExample('tags', '["新", "热门"]')">
|
||||
数组示例
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- JSON格式化操作 -->
|
||||
<div class="section">
|
||||
<h3>🔧 格式化操作</h3>
|
||||
<button class="btn" onclick="formatJSONStandard()">
|
||||
标准格式化
|
||||
</button>
|
||||
<button class="btn btn-success" onclick="minifyJSON()">
|
||||
最小化(压缩)
|
||||
</button>
|
||||
<button class="btn" style="background: #17a2b8;" onclick="oneLinePerObject()">
|
||||
一行化(一个对象一行)
|
||||
</button>
|
||||
<button class="btn" style="background: #6f42c1; color: white;" onclick="validateJSON()">
|
||||
验证JSON格式
|
||||
</button>
|
||||
|
||||
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 5px; font-size: 12px;">
|
||||
<strong>格式化说明:</strong><br>
|
||||
• <strong>标准格式化</strong>: 2空格缩进,易于阅读<br>
|
||||
• <strong>最小化</strong>: 去除空格,节省空间<br>
|
||||
• <strong>一行化</strong>: 每个对象占一行,便于比较<br>
|
||||
• <strong>验证格式</strong>: 检查JSON语法是否正确<br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 编辑区域 -->
|
||||
<div class="editor-area">
|
||||
<!-- 消息区域 -->
|
||||
<div id="messageArea"></div>
|
||||
|
||||
<!-- JSON编辑器 -->
|
||||
<textarea id="jsonEditor" placeholder="在此输入或上传JSON数据..."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 初始化
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('fileInput').addEventListener('change', handleFileUpload);
|
||||
});
|
||||
|
||||
// 显示消息
|
||||
function showMessage(message, type = 'success') {
|
||||
const messageArea = document.getElementById('messageArea');
|
||||
let alertClass = 'alert-success';
|
||||
|
||||
if (type === 'error') {
|
||||
alertClass = 'alert-error';
|
||||
} else if (type === 'info') {
|
||||
alertClass = 'alert-info';
|
||||
}
|
||||
|
||||
messageArea.innerHTML = `
|
||||
<div class="alert ${alertClass}">
|
||||
${message}
|
||||
</div>
|
||||
`;
|
||||
|
||||
setTimeout(() => {
|
||||
messageArea.innerHTML = '';
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
// 加载示例JSON
|
||||
function loadSampleJSON() {
|
||||
const sampleJSON = {
|
||||
"测试作物": {
|
||||
"花费": 1,
|
||||
"生长时间": 3,
|
||||
"收益": 9999,
|
||||
"品质": "普通"
|
||||
},
|
||||
"小麦": {
|
||||
"花费": 120,
|
||||
"生长时间": 120,
|
||||
"收益": 100,
|
||||
"品质": "普通"
|
||||
},
|
||||
"稻谷": {
|
||||
"花费": 100,
|
||||
"生长时间": 240,
|
||||
"收益": 120,
|
||||
"品质": "普通"
|
||||
}
|
||||
};
|
||||
|
||||
document.getElementById('jsonEditor').value = JSON.stringify(sampleJSON, null, 2);
|
||||
showMessage('示例数据已加载');
|
||||
}
|
||||
|
||||
// 快速填入示例键值对
|
||||
function fillExample(keyName, keyValue) {
|
||||
document.getElementById('keyName').value = keyName;
|
||||
document.getElementById('keyValue').value = keyValue;
|
||||
showMessage(`已填入示例: ${keyName} = ${keyValue}`, 'info');
|
||||
}
|
||||
|
||||
// 文件上传处理
|
||||
function handleFileUpload(event) {
|
||||
const file = event.target.files[0];
|
||||
if (!file) return;
|
||||
|
||||
if (!file.name.toLowerCase().endsWith('.json')) {
|
||||
showMessage('请选择JSON文件', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
try {
|
||||
const content = e.target.result;
|
||||
JSON.parse(content); // 验证JSON格式
|
||||
document.getElementById('jsonEditor').value = content;
|
||||
showMessage('文件上传成功');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
};
|
||||
reader.readAsText(file);
|
||||
|
||||
// 清空文件输入
|
||||
event.target.value = '';
|
||||
}
|
||||
|
||||
// 批量添加属性
|
||||
function batchAddProperty() {
|
||||
const keyName = document.getElementById('keyName').value.trim();
|
||||
const keyValue = document.getElementById('keyValue').value.trim();
|
||||
const jsonContent = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!keyName) {
|
||||
showMessage('请输入键名', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!jsonContent) {
|
||||
showMessage('请输入或上传JSON数据', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
let jsonData = JSON.parse(jsonContent);
|
||||
|
||||
// 智能类型转换
|
||||
let processedValue = parseValue(keyValue);
|
||||
|
||||
// 批量添加属性
|
||||
const result = addPropertyToAllObjects(jsonData, keyName, processedValue);
|
||||
|
||||
if (result.count > 0) {
|
||||
document.getElementById('jsonEditor').value = JSON.stringify(jsonData, null, 2);
|
||||
showMessage(`成功为 ${result.count} 个对象添加了属性 "${keyName}": ${JSON.stringify(processedValue)}`);
|
||||
} else {
|
||||
showMessage('未找到可添加属性的对象', 'info');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
// 智能解析值的类型
|
||||
function parseValue(value) {
|
||||
// 如果输入为空,返回空字符串
|
||||
if (value === '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
// 尝试解析为null
|
||||
if (value.toLowerCase() === 'null') {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 尝试解析为undefined(虽然JSON不支持,但转为null)
|
||||
if (value.toLowerCase() === 'undefined') {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 尝试解析为布尔值
|
||||
if (value.toLowerCase() === 'true') {
|
||||
return true;
|
||||
}
|
||||
if (value.toLowerCase() === 'false') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 尝试解析为数字
|
||||
if (!isNaN(value) && !isNaN(parseFloat(value))) {
|
||||
// 检查是否为整数
|
||||
if (Number.isInteger(parseFloat(value))) {
|
||||
return parseInt(value, 10);
|
||||
} else {
|
||||
return parseFloat(value);
|
||||
}
|
||||
}
|
||||
|
||||
// 尝试解析为JSON对象或数组
|
||||
if ((value.startsWith('{') && value.endsWith('}')) ||
|
||||
(value.startsWith('[') && value.endsWith(']'))) {
|
||||
try {
|
||||
return JSON.parse(value);
|
||||
} catch (e) {
|
||||
// 如果解析失败,当作字符串处理
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
// 默认当作字符串处理
|
||||
return value;
|
||||
}
|
||||
|
||||
// 递归为所有对象添加属性
|
||||
function addPropertyToAllObjects(obj, key, value) {
|
||||
let count = 0;
|
||||
|
||||
function traverse(current) {
|
||||
if (typeof current === 'object' && current !== null) {
|
||||
if (Array.isArray(current)) {
|
||||
// 处理数组
|
||||
current.forEach(item => traverse(item));
|
||||
} else {
|
||||
// 处理对象
|
||||
current[key] = value;
|
||||
count++;
|
||||
|
||||
// 继续递归处理嵌套对象
|
||||
Object.values(current).forEach(val => {
|
||||
if (typeof val === 'object' && val !== null && val !== current) {
|
||||
traverse(val);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
traverse(obj);
|
||||
return { count };
|
||||
}
|
||||
|
||||
// 下载JSON
|
||||
function downloadJSON() {
|
||||
const content = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!content) {
|
||||
showMessage('没有可下载的内容', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 验证JSON格式
|
||||
JSON.parse(content);
|
||||
|
||||
const blob = new Blob([content], { type: 'application/json' });
|
||||
const url = URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.download = `edited_json_${new Date().getTime()}.json`;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
URL.revokeObjectURL(url);
|
||||
|
||||
showMessage('JSON文件下载成功');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误,无法下载: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
// 标准格式化JSON
|
||||
function formatJSONStandard() {
|
||||
const content = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!content) {
|
||||
showMessage('请输入JSON数据', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const jsonData = JSON.parse(content);
|
||||
const formatted = JSON.stringify(jsonData, null, 2);
|
||||
document.getElementById('jsonEditor').value = formatted;
|
||||
showMessage('JSON标准格式化完成');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
// 最小化JSON(压缩)
|
||||
function minifyJSON() {
|
||||
const content = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!content) {
|
||||
showMessage('请输入JSON数据', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const jsonData = JSON.parse(content);
|
||||
const minified = JSON.stringify(jsonData);
|
||||
document.getElementById('jsonEditor').value = minified;
|
||||
showMessage('JSON最小化完成');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
// 一行化格式(一个对象一行)
|
||||
function oneLinePerObject() {
|
||||
const content = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!content) {
|
||||
showMessage('请输入JSON数据', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const jsonData = JSON.parse(content);
|
||||
let formatted = '';
|
||||
|
||||
if (Array.isArray(jsonData)) {
|
||||
// 如果是数组,每个元素占一行
|
||||
formatted = '[\n';
|
||||
jsonData.forEach((item, index) => {
|
||||
formatted += ' ' + JSON.stringify(item);
|
||||
if (index < jsonData.length - 1) {
|
||||
formatted += ',';
|
||||
}
|
||||
formatted += '\n';
|
||||
});
|
||||
formatted += ']';
|
||||
} else if (typeof jsonData === 'object' && jsonData !== null) {
|
||||
// 如果是对象,每个键值对占一行
|
||||
formatted = '{\n';
|
||||
const keys = Object.keys(jsonData);
|
||||
keys.forEach((key, index) => {
|
||||
formatted += ' ' + JSON.stringify(key) + ': ' + JSON.stringify(jsonData[key]);
|
||||
if (index < keys.length - 1) {
|
||||
formatted += ',';
|
||||
}
|
||||
formatted += '\n';
|
||||
});
|
||||
formatted += '}';
|
||||
} else {
|
||||
// 基本类型直接输出
|
||||
formatted = JSON.stringify(jsonData);
|
||||
}
|
||||
|
||||
document.getElementById('jsonEditor').value = formatted;
|
||||
showMessage('JSON一行化格式完成');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
// 验证JSON格式
|
||||
function validateJSON() {
|
||||
const content = document.getElementById('jsonEditor').value.trim();
|
||||
|
||||
if (!content) {
|
||||
showMessage('请输入JSON数据', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
JSON.parse(content);
|
||||
showMessage('JSON格式验证通过');
|
||||
} catch (error) {
|
||||
showMessage('JSON格式错误: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
1
Server/New_Features_Test_Guide.md
Normal file
1
Server/New_Features_Test_Guide.md
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
Binary file not shown.
175
Server/README_Refactored.md
Normal file
175
Server/README_Refactored.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# TCPGameServer 重构说明
|
||||
|
||||
## 概述
|
||||
|
||||
原始的 `TCPGameServer.py` 文件有 1569 行代码,包含大量相似的函数和重复的逻辑。为了提高代码的可维护性和可读性,我们对其进行了重构,将相似功能的函数分组整理。
|
||||
|
||||
## 重构前后对比
|
||||
|
||||
### 重构前的问题
|
||||
- 文件过大(1569行)
|
||||
- 函数分散,相似功能没有分组
|
||||
- 大量重复的验证逻辑
|
||||
- 缺乏清晰的代码结构
|
||||
- 难以维护和扩展
|
||||
|
||||
### 重构后的改进
|
||||
- 代码行数减少到约 1200 行
|
||||
- 按功能模块清晰分组
|
||||
- 提取公共方法,减少重复代码
|
||||
- 增加详细的文档注释
|
||||
- 更好的代码组织结构
|
||||
|
||||
## 代码结构分组
|
||||
|
||||
### 1. 初始化和生命周期管理
|
||||
```python
|
||||
# ==================== 1. 初始化和生命周期管理 ====================
|
||||
- __init__() # 初始化服务器
|
||||
- start_crop_growth_timer() # 启动作物生长计时器
|
||||
- stop() # 停止服务器
|
||||
- _remove_client() # 移除客户端
|
||||
```
|
||||
|
||||
### 2. 验证和检查方法
|
||||
```python
|
||||
# ==================== 2. 验证和检查方法 ====================
|
||||
- _check_client_version() # 检查客户端版本
|
||||
- _check_user_logged_in() # 检查用户登录状态
|
||||
- _validate_qq_number() # 验证QQ号格式
|
||||
```
|
||||
|
||||
### 3. 数据管理方法
|
||||
```python
|
||||
# ==================== 3. 数据管理方法 ====================
|
||||
- load_player_data() # 加载玩家数据
|
||||
- save_player_data() # 保存玩家数据
|
||||
- _load_player_data_with_check() # 带检查的加载玩家数据
|
||||
- _load_crop_data() # 加载作物配置数据
|
||||
- _update_player_logout_time() # 更新玩家登出时间
|
||||
```
|
||||
|
||||
### 4. 作物系统管理
|
||||
```python
|
||||
# ==================== 4. 作物系统管理 ====================
|
||||
- update_crops_growth() # 更新作物生长状态
|
||||
- _push_crop_update_to_player() # 推送作物更新给玩家
|
||||
```
|
||||
|
||||
### 5. 消息处理路由
|
||||
```python
|
||||
# ==================== 5. 消息处理路由 ====================
|
||||
- _handle_message() # 消息路由分发
|
||||
```
|
||||
|
||||
### 6. 用户认证处理
|
||||
```python
|
||||
# ==================== 6. 用户认证处理 ====================
|
||||
- _handle_greeting() # 处理问候消息
|
||||
- _handle_login() # 处理登录
|
||||
- _handle_register() # 处理注册
|
||||
- _handle_verification_code_request() # 处理验证码请求
|
||||
- _handle_verify_code() # 处理验证码验证
|
||||
```
|
||||
|
||||
### 7. 游戏操作处理
|
||||
```python
|
||||
# ==================== 7. 游戏操作处理 ====================
|
||||
- _handle_harvest_crop() # 处理收获作物
|
||||
- _handle_plant_crop() # 处理种植作物
|
||||
- _handle_buy_seed() # 处理购买种子
|
||||
- _handle_dig_ground() # 处理开垦土地
|
||||
```
|
||||
|
||||
### 8. 系统功能处理
|
||||
```python
|
||||
# ==================== 8. 系统功能处理 ====================
|
||||
- _handle_get_play_time() # 获取游玩时间
|
||||
- _handle_update_play_time() # 更新游玩时间
|
||||
- _handle_player_rankings_request() # 获取玩家排行榜
|
||||
- _handle_crop_data_request() # 获取作物数据
|
||||
- _handle_visit_player_request() # 访问其他玩家农场
|
||||
- _handle_return_my_farm_request() # 返回自己农场
|
||||
```
|
||||
|
||||
### 9. 辅助方法
|
||||
```python
|
||||
# ==================== 辅助方法 ====================
|
||||
- _send_initial_login_data() # 发送登录初始数据
|
||||
- _send_register_error() # 发送注册错误响应
|
||||
- _send_action_error() # 发送游戏操作错误响应
|
||||
- _create_new_user() # 创建新用户
|
||||
- _process_harvest() # 处理作物收获逻辑
|
||||
- _process_planting() # 处理作物种植逻辑
|
||||
- _process_seed_purchase() # 处理种子购买逻辑
|
||||
- _process_digging() # 处理土地开垦逻辑
|
||||
```
|
||||
|
||||
## 主要改进点
|
||||
|
||||
### 1. 代码复用
|
||||
- 提取了公共的验证逻辑(如 `_check_user_logged_in`、`_check_client_version`)
|
||||
- 统一了错误处理方式(如 `_send_action_error`、`_send_register_error`)
|
||||
- 将复杂的业务逻辑提取为独立方法(如 `_process_harvest`、`_process_planting`)
|
||||
|
||||
### 2. 清晰的分组
|
||||
- 按功能将方法分为8个主要组别
|
||||
- 每个组别有明确的职责边界
|
||||
- 便于查找和维护特定功能
|
||||
|
||||
### 3. 统一的导入
|
||||
- 将所有导入语句集中在文件顶部
|
||||
- 按标准库、第三方库、本地模块的顺序组织
|
||||
|
||||
### 4. 改进的文档
|
||||
- 为每个方法组添加了清晰的注释
|
||||
- 为主要方法添加了详细的文档字符串
|
||||
- 在类的开头添加了功能概述
|
||||
|
||||
### 5. 错误处理优化
|
||||
- 统一了错误响应格式
|
||||
- 提取了公共的错误处理逻辑
|
||||
- 减少了重复的错误处理代码
|
||||
|
||||
## 使用方法
|
||||
|
||||
重构后的代码与原代码功能完全相同,使用方法不变:
|
||||
|
||||
```python
|
||||
# 启动服务器
|
||||
python TCPGameServer_Refactored.py
|
||||
```
|
||||
|
||||
## 迁移指南
|
||||
|
||||
如果要从原始版本迁移到重构版本:
|
||||
|
||||
1. 备份原始的 `TCPGameServer.py` 文件
|
||||
2. 将 `TCPGameServer_Refactored.py` 重命名为 `TCPGameServer.py`
|
||||
3. 确保所有依赖文件(如 `TCPServer.py`、`QQEmailSend.py`)仍然存在
|
||||
4. 测试所有功能是否正常工作
|
||||
|
||||
## 维护建议
|
||||
|
||||
1. **添加新功能时**:按照现有的分组结构,将新方法添加到相应的组别中
|
||||
2. **修改现有功能时**:优先考虑是否可以复用现有的辅助方法
|
||||
3. **错误处理**:使用统一的错误处理方法,保持响应格式一致
|
||||
4. **文档更新**:添加新功能时,记得更新相应的文档注释
|
||||
|
||||
## 性能影响
|
||||
|
||||
重构主要关注代码结构和可维护性,对运行时性能的影响微乎其微:
|
||||
- 方法调用层次略有增加,但影响可忽略
|
||||
- 代码逻辑保持不变,算法复杂度相同
|
||||
- 内存使用基本相同
|
||||
|
||||
## 总结
|
||||
|
||||
通过这次重构,我们成功地:
|
||||
- 减少了代码重复
|
||||
- 提高了代码可读性
|
||||
- 改善了代码组织结构
|
||||
- 便于后续维护和扩展
|
||||
- 保持了原有功能的完整性
|
||||
|
||||
重构后的代码更加专业和易于维护,为后续的功能扩展奠定了良好的基础。
|
||||
File diff suppressed because it is too large
Load Diff
BIN
Server/__pycache__/TCPGameServer.cpython-313.pyc
Normal file
BIN
Server/__pycache__/TCPGameServer.cpython-313.pyc
Normal file
Binary file not shown.
1569
Server/__pycache__/TCPGameServer.py
Normal file
1569
Server/__pycache__/TCPGameServer.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,32 +0,0 @@
|
||||
{
|
||||
|
||||
"测试作物": {"花费": 1, "生长时间": 3, "收益": 9999, "品质": "普通", "描述": "测试作物", "耐候性": 10, "等级": 1, "经验": 999},
|
||||
|
||||
"小麦": {"花费": 120, "生长时间": 120, "收益": 100, "品质": "普通", "描述": "基础作物,品质较低,适合新手种植", "耐候性": 10, "等级": 1, "经验": 10},
|
||||
"稻谷": {"花费": 100, "生长时间": 240, "收益": 120, "品质": "普通", "描述": "适合大规模种植的基础作物", "耐候性": 10, "等级": 1, "经验": 10},
|
||||
"玉米": {"花费": 70, "生长时间": 600, "收益": 90, "品质": "普通", "描述": "营养丰富的优良作物,适合稍有经验的玩家", "耐候性": 15, "等级": 2, "经验": 15},
|
||||
"土豆": {"花费": 75, "生长时间": 360, "收益": 90, "品质": "普通", "描述": "容易种植的耐寒作物", "耐候性": 12, "等级": 1, "经验": 10},
|
||||
"胡萝卜": {"花费": 60, "生长时间": 480, "收益": 80, "品质": "普通", "描述": "适合新手的健康作物", "耐候性": 12, "等级": 1, "经验": 10},
|
||||
|
||||
"草莓": {"花费": 120, "生长时间": 960, "收益": 150, "品质": "优良", "描述": "营养丰富的果实,收益不错", "耐候性": 14, "等级": 2, "经验": 20},
|
||||
"番茄": {"花费": 100, "生长时间": 720, "收益": 130, "品质": "优良", "描述": "常见作物,适合小规模种植", "耐候性": 12, "等级": 2, "经验": 15},
|
||||
"大豆": {"花费": 90, "生长时间": 840, "收益": 110, "品质": "优良", "描述": "富含蛋白质的基础作物", "耐候性": 11, "等级": 2, "经验": 12},
|
||||
|
||||
"蓝莓": {"花费": 150, "生长时间": 1200, "收益": 200, "品质": "稀有", "描述": "较为稀有的作物,市场价值较高", "耐候性": 18, "等级": 3, "经验": 25},
|
||||
"洋葱": {"花费": 85, "生长时间": 600, "收益": 105, "品质": "稀有", "描述": "烹饪常用的作物,适合中级种植", "耐候性": 10, "等级": 2, "经验": 10},
|
||||
"南瓜": {"花费": 180, "生长时间": 1440, "收益": 250, "品质": "稀有", "描述": "秋季收获的高收益作物", "耐候性": 20, "等级": 4, "经验": 30},
|
||||
"葡萄": {"花费": 200, "生长时间": 1200, "收益": 300, "品质": "稀有", "描述": "需要特殊管理的高收益作物", "耐候性": 15, "等级": 4, "经验": 35},
|
||||
"柿子": {"花费": 160, "生长时间": 1080, "收益": 240, "品质": "稀有", "描述": "富含营养的秋季作物", "耐候性": 18, "等级": 3, "经验": 28},
|
||||
"花椰菜": {"花费": 130, "生长时间": 960, "收益": 170, "品质": "稀有", "描述": "耐寒的高品质作物,适合经验丰富的玩家", "耐候性": 17, "等级": 3, "经验": 22},
|
||||
"芦笋": {"花费": 200, "生长时间": 1560, "收益": 280, "品质": "稀有", "描述": "市场需求量高的稀有作物", "耐候性": 15, "等级": 4, "经验": 30},
|
||||
|
||||
"香草": {"花费": 250, "生长时间": 1800, "收益": 400, "品质": "史诗", "描述": "非常稀有且收益极高的作物", "耐候性": 22, "等级": 5, "经验": 40},
|
||||
"西瓜": {"花费": 240, "生长时间": 2400, "收益": 420, "品质": "史诗", "描述": "夏季丰产的高价值作物", "耐候性": 21, "等级": 5, "经验": 45},
|
||||
"甜菜": {"花费": 220, "生长时间": 2160, "收益": 350, "品质": "史诗", "描述": "营养丰富的根茎作物,收益较高", "耐候性": 20, "等级": 5, "经验": 38},
|
||||
"甘蔗": {"花费": 260, "生长时间": 3000, "收益": 450, "品质": "史诗", "描述": "需要充足水源的高价值作物", "耐候性": 18, "等级": 5, "经验": 50},
|
||||
|
||||
"龙果": {"花费": 400, "生长时间": 4800, "收益": 600, "品质": "传奇", "描述": "极为稀有的热带作物,产量和价值都极高", "耐候性": 25, "等级": 6, "经验": 60},
|
||||
"松露": {"花费": 500, "生长时间": 7200, "收益": 700, "品质": "传奇", "描述": "极其珍贵的地下作物,市场价格极高", "耐候性": 23, "等级": 7, "经验": 80},
|
||||
"人参": {"花费": 450, "生长时间": 6600, "收益": 650, "品质": "传奇", "描述": "需要耐心等待的珍贵药材", "耐候性": 22, "等级": 6, "经验": 75},
|
||||
"金橘": {"花费": 420, "生长时间": 4800, "收益": 620, "品质": "传奇", "描述": "少见的耐寒果树,市场需求量极大", "耐候性": 26, "等级": 7, "经验": 70}
|
||||
}
|
||||
@@ -9,56 +9,56 @@
|
||||
"last_login_time": "2025年12时09分35秒",
|
||||
"total_login_time": "0时0分0秒",
|
||||
"farm_lots": [
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": true, "is_planted": false, "max_grow_time": 3},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": true, "is_planted": false, "max_grow_time": 3},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": true, "is_planted": false, "max_grow_time": 3},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": true, "is_planted": false, "max_grow_time": 3},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": true, "is_planted": false, "max_grow_time": 3},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5},
|
||||
{"crop_type": "", "grow_time": 0, "is_dead": false, "is_diged": false, "is_planted": false, "max_grow_time": 5}
|
||||
{"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},
|
||||
{"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": []
|
||||
}
|
||||
@@ -9,406 +9,56 @@
|
||||
"last_login_time": "2025年05月25日16时43分38秒",
|
||||
"total_login_time": "0时0分29秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
{"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},
|
||||
{"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": []
|
||||
}
|
||||
414
Server/game_saves/2143323382.json.backup
Normal file
414
Server/game_saves/2143323382.json.backup
Normal file
@@ -0,0 +1,414 @@
|
||||
{
|
||||
"experience": 0,
|
||||
"level": 1,
|
||||
"money": 1000,
|
||||
"farm_name": "柚大青の小农场",
|
||||
"player_name": "柚大青",
|
||||
"user_name": "2143323382",
|
||||
"user_password": "tyh@19900420",
|
||||
"last_login_time": "2025年05月25日16时43分38秒",
|
||||
"total_login_time": "0时0分29秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": []
|
||||
}
|
||||
67
Server/game_saves/2221023030.json
Normal file
67
Server/game_saves/2221023030.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"experience": 1408,
|
||||
"level": 29,
|
||||
"money": 294776,
|
||||
"farm_name": "虚空农场",
|
||||
"user_name": "2221023030",
|
||||
"player_name": "虚空领主",
|
||||
"user_password": "wangpeng666",
|
||||
"last_login_time": "2025年05月25日21时37分28秒",
|
||||
"total_login_time": "0时13分51秒",
|
||||
"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":3,"is_dead":false,"is_diged":true,"is_planted":true,"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":3,"is_dead":false,"is_diged":true,"is_planted":true,"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":360,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":360,"已浇水":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},
|
||||
{"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":7},
|
||||
{"name":"测试作物","quality":"普通","count":30}
|
||||
]
|
||||
}
|
||||
425
Server/game_saves/2221023030.json.backup
Normal file
425
Server/game_saves/2221023030.json.backup
Normal file
@@ -0,0 +1,425 @@
|
||||
{
|
||||
"experience": 1408,
|
||||
"level": 29,
|
||||
"money": 294776,
|
||||
"farm_name": "虚空农场",
|
||||
"user_name": "2221023030",
|
||||
"player_name": "虚空领主",
|
||||
"user_password": "wangpeng666",
|
||||
"last_login_time": "2025年05月25日21时37分28秒",
|
||||
"total_login_time": "0时13分51秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "土豆",
|
||||
"grow_time": 360,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 360
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "土豆",
|
||||
"quality": "普通",
|
||||
"count": 7
|
||||
},
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 30
|
||||
}
|
||||
]
|
||||
}
|
||||
68
Server/game_saves/2427948832.json
Normal file
68
Server/game_saves/2427948832.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"experience": 2235,
|
||||
"level": 53,
|
||||
"money": 1222211,
|
||||
"farm_name": "神经病院",
|
||||
"user_name": "2427948832",
|
||||
"player_name": "唐大伟",
|
||||
"user_password": "mylc205823",
|
||||
"last_login_time": "2025年05月27日10时30分31秒",
|
||||
"total_login_time": "0时34分45秒",
|
||||
"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":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":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":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":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},
|
||||
{"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":2},
|
||||
{"name":"测试作物","quality":"普通","count":219},
|
||||
{"name":"稻谷","quality":"普通","count":1}
|
||||
]
|
||||
}
|
||||
430
Server/game_saves/2427948832.json.backup
Normal file
430
Server/game_saves/2427948832.json.backup
Normal file
@@ -0,0 +1,430 @@
|
||||
{
|
||||
"experience": 2235,
|
||||
"level": 53,
|
||||
"money": 1222211,
|
||||
"farm_name": "神经病院",
|
||||
"user_name": "2427948832",
|
||||
"player_name": "唐大伟",
|
||||
"user_password": "mylc205823",
|
||||
"last_login_time": "2025年05月27日10时30分31秒",
|
||||
"total_login_time": "0时34分45秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "洋葱",
|
||||
"quality": "稀有",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 219
|
||||
},
|
||||
{
|
||||
"name": "稻谷",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
67
Server/game_saves/2634726358.json
Normal file
67
Server/game_saves/2634726358.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"experience": 1485,
|
||||
"level": 17,
|
||||
"money": 106782,
|
||||
"farm_name": "嘻嘻",
|
||||
"user_name": "2634726358",
|
||||
"player_name": "哈哈",
|
||||
"user_password": "wxt20050712",
|
||||
"last_login_time": "2025年05月25日19时22分59秒",
|
||||
"total_login_time": "0时8分43秒",
|
||||
"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":240,"已浇水":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":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":240,"已浇水":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},
|
||||
{"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":4},
|
||||
{"name":"测试作物","quality":"普通","count":3}
|
||||
]
|
||||
}
|
||||
425
Server/game_saves/2634726358.json.backup
Normal file
425
Server/game_saves/2634726358.json.backup
Normal file
@@ -0,0 +1,425 @@
|
||||
{
|
||||
"experience": 1485,
|
||||
"level": 17,
|
||||
"money": 106782,
|
||||
"farm_name": "嘻嘻",
|
||||
"user_name": "2634726358",
|
||||
"player_name": "哈哈",
|
||||
"user_password": "wxt20050712",
|
||||
"last_login_time": "2025年05月25日19时22分59秒",
|
||||
"total_login_time": "0时8分43秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 240
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 240
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 240
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "番茄",
|
||||
"quality": "优良",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
69
Server/game_saves/2671387804.json
Normal file
69
Server/game_saves/2671387804.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"experience": 1678,
|
||||
"level": 38,
|
||||
"money": 537188,
|
||||
"farm_name": "杨亮的家",
|
||||
"user_name": "2671387804",
|
||||
"player_name": "杨亮的主人",
|
||||
"user_password": "woshiyangliang",
|
||||
"last_login_time": "2025年05月25日21时45分45秒",
|
||||
"total_login_time": "0时16分13秒",
|
||||
"farm_lots": [
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"小麦","grow_time":120,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":120,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"测试作物","grow_time":3,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":3,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"测试作物","grow_time":3,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":3,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"测试作物","grow_time":3,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":3,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"测试作物","grow_time":3,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":3,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"测试作物","grow_time":3,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":3,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"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},
|
||||
{"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":5},
|
||||
{"name":"土豆","quality":"普通","count":2},
|
||||
{"name":"稻谷","quality":"普通","count":1},
|
||||
{"name":"测试作物","quality":"普通","count":105}
|
||||
]
|
||||
}
|
||||
435
Server/game_saves/2671387804.json.backup
Normal file
435
Server/game_saves/2671387804.json.backup
Normal file
@@ -0,0 +1,435 @@
|
||||
{
|
||||
"experience": 1678,
|
||||
"level": 38,
|
||||
"money": 537188,
|
||||
"farm_name": "杨亮的家",
|
||||
"user_name": "2671387804",
|
||||
"player_name": "杨亮的主人",
|
||||
"user_password": "woshiyangliang",
|
||||
"last_login_time": "2025年05月25日21时45分45秒",
|
||||
"total_login_time": "0时16分13秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "小麦",
|
||||
"grow_time": 120,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 120
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "测试作物",
|
||||
"grow_time": 3,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "胡萝卜",
|
||||
"quality": "普通",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"name": "土豆",
|
||||
"quality": "普通",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"name": "稻谷",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 105
|
||||
}
|
||||
]
|
||||
}
|
||||
64
Server/game_saves/2809548669.json
Normal file
64
Server/game_saves/2809548669.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"experience": 0,
|
||||
"level": 1,
|
||||
"money": 1000,
|
||||
"farm_name": "丿Dream丨天辰",
|
||||
"user_name": "2809548669",
|
||||
"player_name": "丿Dream丨天辰",
|
||||
"user_password": "asd123456",
|
||||
"last_login_time": "2025年05月25日22时06分21秒",
|
||||
"total_login_time": "0时0分15秒",
|
||||
"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":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},
|
||||
{"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": []
|
||||
}
|
||||
414
Server/game_saves/2809548669.json.backup
Normal file
414
Server/game_saves/2809548669.json.backup
Normal file
@@ -0,0 +1,414 @@
|
||||
{
|
||||
"experience": 0,
|
||||
"level": 1,
|
||||
"money": 1000,
|
||||
"farm_name": "丿Dream丨天辰",
|
||||
"user_name": "2809548669",
|
||||
"player_name": "丿Dream丨天辰",
|
||||
"user_password": "asd123456",
|
||||
"last_login_time": "2025年05月25日22时06分21秒",
|
||||
"total_login_time": "0时0分15秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 3
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": []
|
||||
}
|
||||
68
Server/game_saves/2973419538.json
Normal file
68
Server/game_saves/2973419538.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"experience": 899,
|
||||
"level": 2,
|
||||
"money": 5026,
|
||||
"farm_name": "niuma",
|
||||
"user_name": "2973419538",
|
||||
"player_name": "niuma",
|
||||
"user_password": "247896",
|
||||
"last_login_time": "2025年05月27日15时45分58秒",
|
||||
"total_login_time": "0时2分5秒",
|
||||
"farm_lots": [
|
||||
{"crop_type":"小麦","grow_time":120,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":120,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"胡萝卜","grow_time":480,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":480,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"小麦","grow_time":120,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":120,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"土豆","grow_time":360,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":360,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"稻谷","grow_time":240,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":240,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"小麦","grow_time":120,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":120,"已浇水":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},
|
||||
{"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":3},
|
||||
{"name":"稻谷","quality":"普通","count":3},
|
||||
{"name":"土豆","quality":"普通","count":1}
|
||||
]
|
||||
}
|
||||
430
Server/game_saves/2973419538.json.backup
Normal file
430
Server/game_saves/2973419538.json.backup
Normal file
@@ -0,0 +1,430 @@
|
||||
{
|
||||
"experience": 899,
|
||||
"level": 2,
|
||||
"money": 5026,
|
||||
"farm_name": "niuma",
|
||||
"user_name": "2973419538",
|
||||
"player_name": "niuma",
|
||||
"user_password": "247896",
|
||||
"last_login_time": "2025年05月27日15时45分58秒",
|
||||
"total_login_time": "0时2分5秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "小麦",
|
||||
"grow_time": 120,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 120
|
||||
},
|
||||
{
|
||||
"crop_type": "胡萝卜",
|
||||
"grow_time": 480,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 480
|
||||
},
|
||||
{
|
||||
"crop_type": "小麦",
|
||||
"grow_time": 120,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 120
|
||||
},
|
||||
{
|
||||
"crop_type": "土豆",
|
||||
"grow_time": 360,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 360
|
||||
},
|
||||
{
|
||||
"crop_type": "稻谷",
|
||||
"grow_time": 240,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 240
|
||||
},
|
||||
{
|
||||
"crop_type": "小麦",
|
||||
"grow_time": 120,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 120
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"name": "稻谷",
|
||||
"quality": "普通",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"name": "土豆",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
91
Server/game_saves/3346964708.json
Normal file
91
Server/game_saves/3346964708.json
Normal file
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"experience": 4193,
|
||||
"level": 8,
|
||||
"money": 28470,
|
||||
"farm_name": "困困的鼠鼠",
|
||||
"user_name": "3346964708",
|
||||
"player_name": "OVO",
|
||||
"user_password": "123456",
|
||||
"last_login_time": "2025年05月26日23时53分53秒",
|
||||
"total_login_time": "0时7分6秒",
|
||||
"farm_lots": [
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"金橘","grow_time":4800,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":4800,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"小麦","grow_time":120,"is_dead":false,"is_diged":true,"is_planted":true,"max_grow_time":120,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"is_planted":false,"max_grow_time":5,"已浇水":false,"已施肥":false,"土地等级":0},
|
||||
{"crop_type":"","grow_time":0,"is_dead":false,"is_diged":true,"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},
|
||||
{"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":3},
|
||||
{"name":"小麦","quality":"普通","count":3},
|
||||
{"name":"稻谷","quality":"普通","count":1},
|
||||
{"name":"玉米","quality":"普通","count":1},
|
||||
{"name":"土豆","quality":"普通","count":1},
|
||||
{"name":"胡萝卜","quality":"普通","count":1},
|
||||
{"name":"草莓","quality":"优良","count":1},
|
||||
{"name":"番茄","quality":"优良","count":1},
|
||||
{"name":"大豆","quality":"优良","count":1},
|
||||
{"name":"蓝莓","quality":"稀有","count":1},
|
||||
{"name":"洋葱","quality":"稀有","count":1},
|
||||
{"name":"南瓜","quality":"稀有","count":1},
|
||||
{"name":"葡萄","quality":"稀有","count":1},
|
||||
{"name":"柿子","quality":"稀有","count":1},
|
||||
{"name":"芦笋","quality":"稀有","count":1},
|
||||
{"name":"花椰菜","quality":"稀有","count":1},
|
||||
{"name":"香草","quality":"史诗","count":1},
|
||||
{"name":"西瓜","quality":"史诗","count":1},
|
||||
{"name":"甜菜","quality":"史诗","count":1},
|
||||
{"name":"甘蔗","quality":"史诗","count":1},
|
||||
{"name":"龙果","quality":"传奇","count":1},
|
||||
{"name":"松露","quality":"传奇","count":1},
|
||||
{"name":"人参","quality":"传奇","count":1},
|
||||
{"name":"富贵竹","quality":"传奇","count":1},
|
||||
{"name":"芦荟","quality":"传奇","count":1},
|
||||
{"name":"金橘","quality":"传奇","count":1}
|
||||
]
|
||||
}
|
||||
545
Server/game_saves/3346964708.json.backup
Normal file
545
Server/game_saves/3346964708.json.backup
Normal file
@@ -0,0 +1,545 @@
|
||||
{
|
||||
"experience": 4193,
|
||||
"level": 8,
|
||||
"money": 28470,
|
||||
"farm_name": "困困的鼠鼠",
|
||||
"user_name": "3346964708",
|
||||
"player_name": "OVO",
|
||||
"user_password": "123456",
|
||||
"last_login_time": "2025年05月26日23时53分53秒",
|
||||
"total_login_time": "0时7分6秒",
|
||||
"farm_lots": [
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "金橘",
|
||||
"grow_time": 4800,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 4800
|
||||
},
|
||||
{
|
||||
"crop_type": "小麦",
|
||||
"grow_time": 120,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": true,
|
||||
"max_grow_time": 120
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": true,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
},
|
||||
{
|
||||
"crop_type": "",
|
||||
"grow_time": 0,
|
||||
"is_dead": false,
|
||||
"is_diged": false,
|
||||
"is_planted": false,
|
||||
"max_grow_time": 5
|
||||
}
|
||||
],
|
||||
"player_bag": [
|
||||
{
|
||||
"name": "测试作物",
|
||||
"quality": "普通",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"name": "小麦",
|
||||
"quality": "普通",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"name": "稻谷",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "玉米",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "土豆",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "胡萝卜",
|
||||
"quality": "普通",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "草莓",
|
||||
"quality": "优良",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "番茄",
|
||||
"quality": "优良",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "大豆",
|
||||
"quality": "优良",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "蓝莓",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "洋葱",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "南瓜",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "葡萄",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "柿子",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "芦笋",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "花椰菜",
|
||||
"quality": "稀有",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "香草",
|
||||
"quality": "史诗",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "西瓜",
|
||||
"quality": "史诗",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "甜菜",
|
||||
"quality": "史诗",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "甘蔗",
|
||||
"quality": "史诗",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "龙果",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "松露",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "人参",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "富贵竹",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "芦荟",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "金橘",
|
||||
"quality": "传奇",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -15,7 +15,7 @@ func setup(text: String, color: Color, duration: float, fade: float):
|
||||
display_time = duration
|
||||
fade_duration = fade
|
||||
# 确保添加到场景树
|
||||
Engine.get_main_loop().root.add_child(self)
|
||||
Engine.get_main_loop().root.get_node("main/UI").add_child(self)
|
||||
Toast(text, color)
|
||||
|
||||
func Toast(text: String, text_color: Color = Color.WHITE):
|
||||
|
||||
@@ -26,6 +26,7 @@ GlobalVariables="*res://GlobalScript/GlobalVariables.gd"
|
||||
|
||||
window/size/viewport_width=1400
|
||||
window/size/viewport_height=720
|
||||
window/size/resizable=false
|
||||
window/stretch/mode="viewport"
|
||||
window/per_pixel_transparency/allowed=true
|
||||
window/vsync/vsync_mode=0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
100
test_version_validation.md
Normal file
100
test_version_validation.md
Normal file
@@ -0,0 +1,100 @@
|
||||
# 版本号验证功能测试指南
|
||||
|
||||
## 功能概述
|
||||
实现了客户端和服务端的版本号验证机制,确保只有版本匹配的客户端才能登录或注册游戏。
|
||||
|
||||
## 实现的功能
|
||||
|
||||
### 1. 客户端修改
|
||||
- 在 `MainGame.gd` 中定义了客户端版本号:`const client_version :String = "1.0.1"`
|
||||
- 在 `TCPNetworkManager.gd` 中修改了登录和注册请求,添加了版本号字段
|
||||
- 在 `login_panel.gd` 中添加了版本号显示功能
|
||||
|
||||
### 2. 服务端修改
|
||||
- 在 `TCPGameServer.py` 中定义了服务端版本号:`server_version: str = "1.0.1"`
|
||||
- 添加了版本号验证函数 `_check_client_version()`
|
||||
- 在登录和注册处理中添加了版本号验证逻辑
|
||||
- 在服务器启动时显示版本信息
|
||||
|
||||
## 测试步骤
|
||||
|
||||
### 测试1:版本匹配(正常情况)
|
||||
1. 确保客户端和服务端版本号都是 "1.0.1"
|
||||
2. 启动服务器,应该看到:
|
||||
```
|
||||
萌芽农场游戏服务器 v1.0.1
|
||||
服务器地址: 0.0.0.0:4040
|
||||
==================================================
|
||||
```
|
||||
3. 启动客户端,应该看到:
|
||||
```
|
||||
萌芽农场客户端 v1.0.1 启动
|
||||
```
|
||||
4. 在登录界面应该显示:`萌芽农场 v1.0.1 - 欢迎使用`
|
||||
5. 尝试登录或注册,应该正常工作
|
||||
|
||||
### 测试2:版本不匹配(客户端版本较低)
|
||||
1. 修改客户端版本号为 "0.9.0":
|
||||
```gdscript
|
||||
const client_version :String = "0.9.0"
|
||||
```
|
||||
2. 保持服务端版本为 "1.0.0"
|
||||
3. 重新启动客户端
|
||||
4. 尝试登录,应该收到错误消息:
|
||||
```
|
||||
版本不匹配!客户端版本: 0.9.0, 服务端版本: 1.0.1,请更新客户端
|
||||
```
|
||||
5. 尝试注册,应该收到相同的错误消息
|
||||
|
||||
### 测试3:版本不匹配(客户端版本较高)
|
||||
1. 修改客户端版本号为 "1.1.0":
|
||||
```gdscript
|
||||
const client_version :String = "1.1.0"
|
||||
```
|
||||
2. 保持服务端版本为 "1.0.1"
|
||||
3. 重新启动客户端
|
||||
4. 尝试登录或注册,应该收到版本不匹配的错误消息
|
||||
|
||||
### 测试4:空版本号处理
|
||||
1. 修改客户端代码,发送空的版本号
|
||||
2. 尝试登录或注册,应该被拒绝
|
||||
|
||||
## 预期结果
|
||||
|
||||
### 成功情况
|
||||
- 版本匹配时,登录和注册功能正常工作
|
||||
- 客户端和服务端都显示正确的版本信息
|
||||
|
||||
### 失败情况
|
||||
- 版本不匹配时,登录和注册被拒绝
|
||||
- 显示清晰的错误消息,指出版本不匹配的具体信息
|
||||
- 服务端记录相应的警告日志
|
||||
|
||||
## 日志示例
|
||||
|
||||
### 服务端日志(版本匹配)
|
||||
```
|
||||
[INFO] [SERVER] TCP游戏服务器初始化 - 版本: 1.0.1
|
||||
[INFO] [SERVER] 用户 12345 登录成功
|
||||
```
|
||||
|
||||
### 服务端日志(版本不匹配)
|
||||
```
|
||||
[WARNING] [SERVER] 用户 12345 登录失败: 版本不匹配 (客户端: 0.9.0, 服务端: 1.0.1)
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **版本号格式**:建议使用语义化版本号格式(如 1.0.0)
|
||||
2. **向后兼容性**:如果需要支持多个版本,可以修改验证逻辑
|
||||
3. **版本更新策略**:
|
||||
- 主版本号变更:不兼容的重大更新
|
||||
- 次版本号变更:向后兼容的功能更新
|
||||
- 修订版本号变更:向后兼容的问题修复
|
||||
|
||||
## 扩展功能建议
|
||||
|
||||
1. **版本兼容性矩阵**:支持多个兼容版本
|
||||
2. **自动更新提示**:客户端检测到版本不匹配时提供更新链接
|
||||
3. **最低版本要求**:设置服务端支持的最低客户端版本
|
||||
4. **版本信息API**:提供接口查询当前服务端版本和兼容的客户端版本列表
|
||||
Reference in New Issue
Block a user