胡萝卜牛肉汤ceshi4 存数据 退出
This commit is contained in:
1 parent
d662cca0c5
commit
87991d5dcf
1 file changed
+76
-7
@@ -14,6 +14,8 @@
|
||||
serverApi.RegisterSystem("rtdd", "CookingService",
|
||||
"Script_NeteaseModousIY5aSF.ceshi.service.CookingService.CookingService")
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
import time
|
||||
import mod.server.extraServerApi as serverApi
|
||||
|
||||
@@ -22,6 +24,7 @@ comp = serverApi.GetEngineCompFactory()
|
||||
|
||||
# 继承 BlueFoxServerSystem 后,LoadMod() 会自动发现并注册本系统
|
||||
from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
||||
from ...BlueFoxTools.ToolsConfig import LevelId
|
||||
|
||||
# 从配方数据文件导入所有配方
|
||||
from ..RecipeData import RECIPES
|
||||
@@ -151,11 +154,14 @@ class CookingService(BlueFoxServerSystem):
|
||||
|
||||
def handleStir(self, key, recipe, playerId, pos, dim, itemDict):
|
||||
now = time.time()
|
||||
data = self.stirData.get(key) or {
|
||||
"count": 0, "lastTime": 0.0, "finished": False,
|
||||
"dropIfDone": recipe.get("dropIfDone", []),
|
||||
"dropIfNot": recipe.get("dropIfNot", [])
|
||||
}
|
||||
data = self.stirData.get(key) or self.loadStirData(playerId, pos, dim, recipe)
|
||||
if not data:
|
||||
data = {
|
||||
"count": 0, "lastTime": 0.0, "finished": False,
|
||||
"dropIfDone": recipe.get("dropIfDone", []),
|
||||
"dropIfNot": recipe.get("dropIfNot", [])
|
||||
}
|
||||
self.stirData[key] = data
|
||||
|
||||
# 冷却检查
|
||||
if now - data["lastTime"] < recipe.get("stirCd", 1.0):
|
||||
@@ -269,14 +275,76 @@ class CookingService(BlueFoxServerSystem):
|
||||
|
||||
# ==================== 翻炒数据持久化 ====================
|
||||
|
||||
def _getDataFile(self):
|
||||
"""获取持久化数据文件路径"""
|
||||
# 获取模组脚本目录
|
||||
scriptDir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
return os.path.join(scriptDir, "rtdd_cooking_data.json")
|
||||
|
||||
def _loadFileData(self):
|
||||
"""从文件加载所有翻炒数据"""
|
||||
filePath = self._getDataFile()
|
||||
if os.path.exists(filePath):
|
||||
try:
|
||||
with open(filePath, "r") as f:
|
||||
return json.load(f)
|
||||
except:
|
||||
pass
|
||||
return {}
|
||||
|
||||
def _saveFileData(self, allData):
|
||||
"""保存所有翻炒数据到文件"""
|
||||
filePath = self._getDataFile()
|
||||
try:
|
||||
with open(filePath, "w") as f:
|
||||
json.dump(allData, f)
|
||||
except:
|
||||
pass
|
||||
|
||||
def _makeKey(self, pos, dim):
|
||||
"""把方块坐标拼成一个字符串 key,如 '0_100_64_200'"""
|
||||
return "%s_%s_%s_%s" % (dim, pos[0], pos[1], pos[2])
|
||||
|
||||
def loadStirData(self, playerId, pos, dim, recipe):
|
||||
try:
|
||||
key = self._makeKey(pos, dim)
|
||||
allData = self._loadFileData()
|
||||
blockData = allData.get(key, {})
|
||||
if blockData and "rtdd_sc" in blockData:
|
||||
return {
|
||||
"count": blockData.get("rtdd_sc", 0),
|
||||
"lastTime": blockData.get("rtdd_slt", 0.0),
|
||||
"finished": blockData.get("rtdd_sf", False),
|
||||
"dropIfDone": recipe.get("dropIfDone", []),
|
||||
"dropIfNot": recipe.get("dropIfNot", []),
|
||||
}
|
||||
except:
|
||||
pass
|
||||
return {}
|
||||
|
||||
def saveStirData(self, playerId, pos, dim, data):
|
||||
pass
|
||||
try:
|
||||
key = self._makeKey(pos, dim)
|
||||
allData = self._loadFileData()
|
||||
allData[key] = {
|
||||
"rtdd_sc": data["count"],
|
||||
"rtdd_slt": data["lastTime"],
|
||||
"rtdd_sf": data["finished"],
|
||||
}
|
||||
self._saveFileData(allData)
|
||||
except:
|
||||
pass
|
||||
|
||||
def clearStirData(self, key, playerId, pos, dim):
|
||||
self.stirData.pop(key, None)
|
||||
try:
|
||||
dataKey = self._makeKey(pos, dim)
|
||||
allData = self._loadFileData()
|
||||
if dataKey in allData:
|
||||
del allData[dataKey]
|
||||
self._saveFileData(allData)
|
||||
except:
|
||||
pass
|
||||
|
||||
# ==================== 拆方块处理 ====================
|
||||
|
||||
@@ -304,6 +372,7 @@ class CookingService(BlueFoxServerSystem):
|
||||
dropItems = data.get("dropIfNot", [])
|
||||
|
||||
for itemName in dropItems:
|
||||
self.giveItem(playerId, itemName)
|
||||
itemDict = {"itemName": itemName, "count": 1, "auxValue": 0}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (x, y + 0.5, z))
|
||||
|
||||
self.clearStirData(key, playerId, (x, y, z), dim)
|
||||
Reference in new issue
Block a user