加入榨汁机 冰棍盒,炒冰盒 厨具架小bug
This commit is contained in:
1 parent
a7b56aec7d
commit
9d12baf1b2
25 files changed
+354
-227
No files matched your search
+75
@@ -764,6 +764,81 @@ class BlueFoxServerSystem(serverBaseSystem):
|
||||
serverCompFactory.CreateActorMotion(dropItemEntityId).SetMotion((x * 0.3, y * 0.5, z * 0.3))
|
||||
return dropItemEntityId
|
||||
|
||||
def getCarriedItem(self, playerId):
|
||||
"""获取玩家主手物品(统一实现)。子服务可覆写, 缺省走这里"""
|
||||
itemComp = serverCompFactory.CreateItem(playerId)
|
||||
return itemComp.GetPlayerItem(
|
||||
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
|
||||
|
||||
# ============================================================================
|
||||
# 统一"主动获得物品"接口(任务一):
|
||||
# 所有给玩家的物品一律按优先级分发, 而非直接掉落:
|
||||
# 1) 背包(非主手)存在同类可叠加 -> +1 合并
|
||||
# 2) 主手为空 -> 放到主手
|
||||
# 3) 主手有物 -> 放入背包(同类叠加/空位)
|
||||
# 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成)
|
||||
# 死亡生物屠宰 / 稻谷 需要保持"纯掉落"时请勿调用本方法(仍用 CreateEngineItemEntity)。
|
||||
# ============================================================================
|
||||
def giveItemToPlayer(self, playerId, itemName, count=1, pos=None, dim=None, aux=0, userData=None):
|
||||
"""按统一优先级把物品给玩家。pos/dim 只在最终"掉落物"兜底时用(可为空)。
|
||||
返回 True = 已成功放入(合并/主手/背包); False = 最终只能掉落或调用方无上下文。"""
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
if userData:
|
||||
itemDict["userData"] = userData
|
||||
try:
|
||||
# 1) 背包同类合并
|
||||
if self._mergeSameStackInv(playerId, itemName, count):
|
||||
return True
|
||||
# 2) 主手为空 -> 放主手
|
||||
cur = self.getCarriedItem(playerId)
|
||||
hand = (cur or {}).get("newItemName")
|
||||
if not hand or hand == "minecraft:air":
|
||||
try:
|
||||
if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerCarried(
|
||||
itemDict, playerId):
|
||||
return True
|
||||
except Exception:
|
||||
pass
|
||||
# 3) 放入背包(同类叠加/空位)
|
||||
try:
|
||||
if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerInv(
|
||||
itemDict, playerId):
|
||||
return True
|
||||
except Exception:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
# 4) 掉落物兜底
|
||||
if pos and dim:
|
||||
try:
|
||||
self.CreateEngineItemEntity(
|
||||
itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
except Exception:
|
||||
pass
|
||||
return False
|
||||
|
||||
def _mergeSameStackInv(self, playerId, itemName, count=1):
|
||||
"""背包(主手除外)存在可叠加同种物品 -> 数量+count 合并。
|
||||
返回 True=已合并; False=没有可合并的同种堆叠(不新增物品)。"""
|
||||
itemComp = serverCompFactory.CreateItem(playerId)
|
||||
enum = serverApi.GetMinecraftEnum().ItemPosType
|
||||
try:
|
||||
for i in range(0, 36):
|
||||
d = itemComp.GetPlayerItem(enum.INVENTORY, i, True)
|
||||
if not d:
|
||||
continue
|
||||
if d.get("newItemName") == itemName and (d.get("count") or 0) < 64:
|
||||
newCount = (d.get("count") or 0) + count
|
||||
itemComp.SetEntityItem(
|
||||
enum.INVENTORY, i,
|
||||
{"itemName": itemName, "count": newCount,
|
||||
"auxValue": d.get("newAuxValue", 0),
|
||||
"userData": d.get("userData", {})})
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
return False
|
||||
|
||||
@BlueFoxClientListener
|
||||
def RucksackScreenClosed(self, args):
|
||||
"""
|
||||
|
||||
@@ -359,11 +359,10 @@ allCookRecipe = [
|
||||
# 第19页 汤锅·锅底=汤锅(加水) —— 米饭/饭团/碗装
|
||||
# =============================================================
|
||||
{
|
||||
'publicResult': 'rtdd:rawricepot', # 锅底(首产物) = 生米锅
|
||||
'publicResult': 'rtdd:stewedsoupwater', # 锅底(首产物) = 生米锅
|
||||
'publicStep': [
|
||||
{'itemName': 'rtdd:stewedsoup', 'count': 1}, # 汤锅(空)
|
||||
{'itemName': 'minecraft:water_bucket', 'count': 1}, # 水桶
|
||||
{'itemName': 'rtdd:brownrice', 'count': 64}, # 大米
|
||||
{'itemName': 'minecraft:water_bucket', 'count': 1} # 水桶
|
||||
], # 锅底步骤: 汤锅(空)+水桶+大米x64 -> 生米锅 -> 计时 -> 熟米饭
|
||||
'splitStep': [
|
||||
{'result': 'rtdd:ricepot_1', 'items': [{'itemName': 'rtdd:brownrice', 'count': 64}, {}, {}]},
|
||||
|
||||
+5
-19
@@ -372,27 +372,13 @@ class ChaoguoService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None):
|
||||
"""取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手;
|
||||
否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。
|
||||
不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。"""
|
||||
"""取成品/返容器: playerId 给出时走统一优先级(同类合并->主手->背包->掉落);
|
||||
不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物。"""
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, itemName, count, pos, dim)
|
||||
return
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
if playerId is not None:
|
||||
# 1) 主手空 -> 放主手
|
||||
cur = self.getCarriedItem(playerId)
|
||||
handItem = (cur or {}).get("newItemName")
|
||||
if not handItem or handItem == "minecraft:air":
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
# 2) 否则入包(同类叠加/空位); 失败(满)->掉落
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
+15
-13
@@ -340,7 +340,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
|
||||
# 掉落物
|
||||
if recipe.get("dropItem"):
|
||||
self.dropItems(dim, pos, recipe["dropItem"])
|
||||
self.dropItems(dim, pos, recipe["dropItem"], playerId)
|
||||
|
||||
# 给背包物品
|
||||
if recipe.get("giveItem"):
|
||||
@@ -399,7 +399,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
meat = self._readMeat(pos, dim)
|
||||
meatball = MEAT_ITEMS.get(meat) if meat else None
|
||||
if meatball:
|
||||
self.dropItems(dim, pos, [{"name": meatball, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": meatball, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:beater", playerId)
|
||||
return True
|
||||
return False
|
||||
@@ -442,7 +442,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.dropItems(dim, pos, [{"name": CREAM_ITEM, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": CREAM_ITEM, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:beater", playerId)
|
||||
return True
|
||||
if itemName == MILK_ITEM:
|
||||
@@ -471,7 +471,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.dropItems(dim, pos, [{"name": EGG_CUSTARD_ITEM, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": EGG_CUSTARD_ITEM, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:beater", playerId)
|
||||
return True
|
||||
return False
|
||||
@@ -569,7 +569,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
return False
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": FLOUR_ITEM, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": FLOUR_ITEM, "count": 1}], playerId)
|
||||
self._clearMill(dim, pos)
|
||||
return True
|
||||
# 黄豆: + 玻璃罐 -> 油罐
|
||||
@@ -577,7 +577,7 @@ class ChujuService(BlueFoxServerSystem):
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.dropItems(dim, pos, [{"name": OIL_CAN_ITEM, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": OIL_CAN_ITEM, "count": 1}], playerId)
|
||||
self._clearMill(dim, pos)
|
||||
return True
|
||||
return False
|
||||
@@ -708,11 +708,8 @@ class ChujuService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count)
|
||||
|
||||
# ============================================================================
|
||||
# 十、工具方法,消耗物品
|
||||
@@ -755,14 +752,19 @@ class ChujuService(BlueFoxServerSystem):
|
||||
# 十二、工具方法,以掉落物形式生成物品
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
"itemName": d["name"],
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
# 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落)
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 十三、工具方法,冷却检查
|
||||
|
||||
+10
-6
@@ -206,7 +206,7 @@ class AnimalService(BlueFoxServerSystem):
|
||||
# ---- 逆向操作:取东西/清理 ----
|
||||
# 掉落物形式生成(取蛋、取下物品等),优先于 giveItem
|
||||
if recipe.get("dropItem"):
|
||||
self.dropItems(dim, pos, recipe["dropItem"])
|
||||
self.dropItems(dim, pos, recipe["dropItem"], playerId)
|
||||
elif recipe.get("giveItem"):
|
||||
self.giveItem(playerId, recipe["giveItem"], recipe.get("giveCount", 1))
|
||||
|
||||
@@ -274,17 +274,17 @@ class AnimalService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, auxValue=0):
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(
|
||||
{"itemName": itemName, "count": count, "auxValue": auxValue}, playerId)
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count, aux=auxValue)
|
||||
|
||||
# ============================================================================
|
||||
# 九、工具方法:以掉落物形式生成物品(取蛋/取下物品等,符合"获得"体验)
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
"""
|
||||
dropList 格式:[{"name": "minecraft:egg", "count": 5}, ...]
|
||||
在方块上方生成掉落物实体,让它自然掉到地上。
|
||||
playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。
|
||||
"""
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
@@ -292,7 +292,11 @@ class AnimalService(BlueFoxServerSystem):
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 十、工具方法:冷却检查
|
||||
|
||||
+61
-22
@@ -67,6 +67,9 @@ from ..FurnitureData import (FURNITURE_SWITCHES,
|
||||
# ---- 统一分发器 ----
|
||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||
|
||||
# ---- 声音播放(垃圾桶开关, 任务四) ----
|
||||
from ....ModUtil.ServerUtil import PlaySoundToAllClient
|
||||
|
||||
|
||||
class FurnitureService(BlueFoxServerSystem):
|
||||
"""
|
||||
@@ -132,11 +135,15 @@ class FurnitureService(BlueFoxServerSystem):
|
||||
itemDict = self.getCarriedItem(playerId)
|
||||
itemName = itemDict.get("newItemName") if itemDict else None
|
||||
|
||||
# 厨具架: 通用组合逻辑(顺序无关, 后放先取), 单独处理
|
||||
# 厨具架: 通用组合逻辑(点左拿左, 点右拿右), 单独处理
|
||||
if blockName in self.kitchenrackBlockSet:
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self._handleKitchenRack(playerId, pos, dim, itemDict, itemName, blockName)
|
||||
click = {
|
||||
"cx": args.get("clickX"), "cz": args.get("clickZ"),
|
||||
"face": args.get("face"), "aux": args.get("aux"),
|
||||
}
|
||||
self._handleKitchenRack(playerId, pos, dim, itemDict, itemName, blockName, click)
|
||||
return True
|
||||
|
||||
recipe = self.findRecipe(blockName, itemDict)
|
||||
@@ -343,34 +350,53 @@ class FurnitureService(BlueFoxServerSystem):
|
||||
# 四、厨具架通用逻辑(组合由 stack 记录计算, 与放入顺序无关, 取回后放先取)
|
||||
# ============================================================================
|
||||
|
||||
def _handleKitchenRack(self, playerId, pos, dim, itemDict, itemName, blockName):
|
||||
def _handleKitchenRack(self, playerId, pos, dim, itemDict, itemName, blockName, click=None):
|
||||
"""
|
||||
厨具架:放入/取回通用处理。
|
||||
厨具架:放入/取回通用处理(任务五: 点哪边拿哪个)。
|
||||
放入: 手持 锅铲/锅勺/菜刀/炒锅 右键空架/单件架 -> 按组合(顺序无关)成型
|
||||
取回: 空手右键 -> 弹出最后放入的厨具并返还, 形态退回剩余单件/空
|
||||
无记录时(如创造模式直接放置带厨具的厨具架)按方块状态推断厨具。
|
||||
取回: 空手右键 -> 按点击位置(clickX/clickZ/face)判断点在左槽还是右槽,
|
||||
取下该槽对应厨具, 形态退回剩余单件/空。
|
||||
槽位固定布局: 组合块模型的左槽 = KITCHENRACK_BLOCK_ITEMS[blockName][0],
|
||||
右槽 = [1] (与放入顺序无关, 以方块固态布局为准)。
|
||||
[注意] 左右判定依赖朝向, 若实测相反, 调 _rackSideFlip 即可翻转。
|
||||
"""
|
||||
click = click or {}
|
||||
# 槽位固定布局(左=index0, 右=index1); 单件=1个
|
||||
layout = list(KITCHENRACK_BLOCK_ITEMS.get(blockName, []))
|
||||
record = self._loadRecord(pos, dim)
|
||||
if record and record.get("stack"):
|
||||
stack = record["stack"] # 有记录: 物品对象列表
|
||||
stackNames = [s.get("itemName") for s in stack]
|
||||
else:
|
||||
stack = [] # 无记录: 按方块状态推断
|
||||
stackNames = list(KITCHENRACK_BLOCK_ITEMS.get(blockName, []))
|
||||
stackNames = list(layout)
|
||||
|
||||
# ---- 取回: 空手 ----
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not stackNames:
|
||||
return
|
||||
poppedName = stackNames.pop() # 后放先取, 弹最后一件
|
||||
if stack:
|
||||
topItem = stack.pop()
|
||||
self._dropItemObj(dim, pos, topItem) # 掉落物返还(根因C)
|
||||
# 点左/点右 决定取哪个厨具(单件时无论点左右都取那一个)
|
||||
side = self._rackSideByClick(click.get("face"), click.get("cx"), click.get("cz"))
|
||||
if len(layout) >= 2:
|
||||
idx = 0 if side == "left" else 1
|
||||
else:
|
||||
self._dropItemDict(dim, pos,
|
||||
{"itemName": poppedName, "count": 1, "auxValue": 0})
|
||||
# 计算剩余 -> 目标方块, 并保存剩余记录(保证后续取回一致)
|
||||
idx = 0
|
||||
picked = layout[idx] if idx < len(layout) else stackNames[-1]
|
||||
if picked not in stackNames:
|
||||
picked = stackNames[-1] # 槽位与记录不一致时兜底取最后一件
|
||||
idx = stackNames.index(picked)
|
||||
# 移除被取走的那件, 计算剩余 -> 目标方块, 并保存剩余记录
|
||||
stackNames.remove(picked)
|
||||
target = self._rackTarget(stackNames)
|
||||
pickedObj = None
|
||||
for _s in stack:
|
||||
if _s.get("itemName") == picked:
|
||||
pickedObj = _s
|
||||
break
|
||||
if pickedObj is not None:
|
||||
self.giveItemObj(playerId, pickedObj) # 按持久化对象给(附魔保留)
|
||||
else:
|
||||
self.giveItemToPlayer(playerId, picked, 1, pos, dim, aux=0)
|
||||
self.replaceBlock(pos, dim, target, playerId)
|
||||
if stackNames:
|
||||
self._saveRecordDelayed(pos, dim, {"stack": self._namesToObjs(stackNames)})
|
||||
@@ -396,6 +422,17 @@ class FurnitureService(BlueFoxServerSystem):
|
||||
self.replaceBlock(pos, dim, target, playerId)
|
||||
self._saveRecordDelayed(pos, dim, {"stack": self._namesToObjs(stackNames)})
|
||||
|
||||
def _rackSideByClick(self, face, cx, cz):
|
||||
"""根据点击的面 + 命中比例位置, 判断点的是左槽还是右槽。
|
||||
顶面/南北面(法线沿Z): 沿X分左右; 东西面(法线沿X): 沿Z分左右。
|
||||
返回 'left' / 'right'。若实测与实际相反, 直接翻转本方法即可。"""
|
||||
if face in (4, 5): # 东/西面: 沿 Z 分
|
||||
v = cz
|
||||
else: # 顶/北/南面(默认): 沿 X 分
|
||||
v = cx
|
||||
v = float(v) if v is not None else 0
|
||||
return "left" if v < 0.5 else "right"
|
||||
|
||||
def _rackTarget(self, itemNames):
|
||||
"""根据厨具物品名列表计算厨具架目标方块(0件=空, 1件=单件, 2件=组合, 顺序无关)"""
|
||||
if not itemNames:
|
||||
@@ -451,6 +488,14 @@ class FurnitureService(BlueFoxServerSystem):
|
||||
if recipe.get("target"):
|
||||
self.replaceBlock(pos, dim, recipe["target"], playerId)
|
||||
|
||||
# ---- 垃圾桶开关声音(任务四) ----
|
||||
_src = recipe.get("source")
|
||||
_tgt = recipe.get("target")
|
||||
if _tgt == "rtdd:rubbish_bin_2" and _src == "rtdd:storage_buckets":
|
||||
PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "block.barrel.open", 1.0)
|
||||
elif _tgt == "rtdd:storage_buckets" and _src in ("rtdd:rubbish_bin_2", "rtdd:b_160"):
|
||||
PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "block.barrel.close", 1.0)
|
||||
|
||||
# ---- 替换后把堆栈写回新方块(此时写才不会被清掉) ----
|
||||
if bookStack is not None:
|
||||
if bookStack:
|
||||
@@ -700,14 +745,8 @@ class FurnitureService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0, userData=None):
|
||||
"""往玩家背包塞一个物品, 背包满则掉地上"""
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
if userData:
|
||||
itemDict["userData"] = userData
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count, aux=aux, userData=userData)
|
||||
|
||||
def giveItemObj(self, playerId, itemObj):
|
||||
"""按持久化物品对象给玩家(厨具架取回; 附魔书按扁平ench重建附魔)"""
|
||||
|
||||
+16
-15
@@ -196,7 +196,7 @@ class MianshiService(BlueFoxServerSystem):
|
||||
if not self.checkCooldown(key, 0.4):
|
||||
return True
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItem(dim, pos, blockName)
|
||||
self.dropItem(dim, pos, blockName, playerId=playerId)
|
||||
return True
|
||||
|
||||
# ---- 空手右键"蒸笼计时源"(蒸X_生): 计时已改自动(tick 判定下方点燃炉灶),
|
||||
@@ -339,7 +339,7 @@ class MianshiService(BlueFoxServerSystem):
|
||||
action = recipe.get("action")
|
||||
# 掉落物(切分/递减/取出) —— 无特殊动作时才走通用掉落
|
||||
if recipe.get("dropItem") and not action:
|
||||
self.dropItem(dim, pos, recipe["dropItem"])
|
||||
self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId)
|
||||
# 给背包物品(水桶变空桶/擀面杖返还)
|
||||
if recipe.get("give"):
|
||||
self.giveItem(playerId, recipe["give"])
|
||||
@@ -347,33 +347,33 @@ class MianshiService(BlueFoxServerSystem):
|
||||
if action == "chop_smalldough":
|
||||
self.clearBlock(pos, dim)
|
||||
for _ in range(8):
|
||||
self.dropItem(dim, pos, "rtdd:smalldough_0")
|
||||
self.dropItem(dim, pos, "rtdd:smalldough_0", playerId=playerId)
|
||||
elif action == "chop_noodles":
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItem(dim, pos, "rtdd:noodles")
|
||||
self.dropItem(dim, pos, "rtdd:noodles", playerId=playerId)
|
||||
elif action == "drop_dumpling_skin":
|
||||
# 擀好的小面团压成饺子皮: 面团消失, 掉落1个饺子皮物品(地上不留方块)
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItem(dim, pos, recipe["dropItem"])
|
||||
self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId)
|
||||
elif action == "drop_result":
|
||||
# 捏合/塑形完成(生饺子/生肉包子): 方块消失, 成品以掉落物形式出现
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItem(dim, pos, recipe["dropItem"])
|
||||
self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId)
|
||||
elif action == "unmold_cake":
|
||||
# 蛋糕面糊(烤熟) 脱模 -> 蛋糕胚(方块) + 掉落 1 木碗
|
||||
self.replaceBlock(pos, dim, "rtdd:cakebase", playerId)
|
||||
self.dropItem(dim, pos, BOWL)
|
||||
self.dropItem(dim, pos, BOWL, playerId=playerId)
|
||||
elif action == "split_cake":
|
||||
# 半块蛋糕 菜刀拆分: 半块消失 -> 掉落两个对应小块
|
||||
self.clearBlock(pos, dim)
|
||||
for _ in range(2):
|
||||
self.dropItem(dim, pos, recipe["dropItem"])
|
||||
self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId)
|
||||
elif action == "take_steamer":
|
||||
# 蒸笼取出: 蒸食物块 -> 变回空蒸笼 + 掉落成品(数量按 dropCount, 默认1)
|
||||
self.replaceBlock(pos, dim, "rtdd:steamer", playerId)
|
||||
if recipe.get("dropItem"):
|
||||
for _ in range(recipe.get("dropCount", 1)):
|
||||
self.dropItem(dim, pos, recipe["dropItem"])
|
||||
self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId)
|
||||
# 转换后启动计时(发酵等, 记录玩家以便完成提示送达)
|
||||
if recipe.get("startTimer"):
|
||||
FeatureDispatcher.startTimerFor(recipe["startTimer"], dim, pos, playerId)
|
||||
@@ -432,11 +432,8 @@ class MianshiService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count)
|
||||
|
||||
# ============================================================================
|
||||
# 八、工具方法,消耗物品
|
||||
@@ -463,7 +460,11 @@ class MianshiService(BlueFoxServerSystem):
|
||||
# 九、工具方法,以掉落物形式生成物品
|
||||
# ============================================================================
|
||||
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0):
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None):
|
||||
if playerId is not None:
|
||||
# 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落)
|
||||
self.giveItemToPlayer(playerId, itemName, count, pos, dim, aux=aux)
|
||||
return
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
+10
@@ -52,6 +52,9 @@ from ..siwangshengwu.service.DeadmobGeneratorService import DeadmobGeneratorServ
|
||||
# ---- 钓鱼掉落: 螃蟹/龙虾(普通逻辑类, 由本分发器转发 PlayerFishingServerEvent) ----
|
||||
from ..yuanbanfangzhi.service.YuanbanFishing import YuanbanFishingService
|
||||
|
||||
# ---- 右键摆动动画(任务二): 服务器广播给该玩家客户端 -> Swing() ----
|
||||
from ...ModUtil.ServerUtil import PlayAttackToClient
|
||||
|
||||
# ---- 乡野自然·水稻: 踩踏耕地等下方方块变化时 清理作物+掉稻谷 ----
|
||||
from ..ziran.NaturalData import RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM
|
||||
|
||||
@@ -358,6 +361,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
args['cancel'] = True
|
||||
# 记录时间戳(带窗口), 只取消同一右键配套的放置/吃; 过期残留自动放行
|
||||
self._cancelItemUse[playerId] = time.time()
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
print "[FD-BlockUse-DONE]", "player:", playerId, "hand:", _handItem, "block:", blockName, "svc:", service.__class__.__name__, "-> cancel=True, _cancelItemUse=ts"
|
||||
return
|
||||
print "[FD-BlockUse-NOMATCH]", "player:", playerId, "hand:", _handItem, "block:", blockName, "-> 无匹配规则, 放行"
|
||||
@@ -437,6 +441,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
args['ret'] = True
|
||||
# 时间戳(带窗口): itemUseOn 转换成功后, 同右手的后续 TryUse/放置也取消
|
||||
self._cancelItemUse[playerId] = time.time()
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
return
|
||||
|
||||
# ============================================================================
|
||||
@@ -516,6 +521,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
# 在客户端吞掉, 服务端不再设 _cancelItemUse(否则标记残留会吞掉玩家
|
||||
# 下一次真实的 ServerItemUseOnEvent, 影响其它操作)。
|
||||
service.handleTakeoutRequest(playerId, blockName, itemName, dim, (x, y, z))
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
return
|
||||
print "[FD-TakeoutRequest-NO-HANDLER]", blockName
|
||||
|
||||
@@ -549,6 +555,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
# 因此不设 _cancelItemUse —— 否则标记残留会吞掉玩家下一次真实的 itemUseOn.
|
||||
handled = service.handleItemUseOn(useOnArgs)
|
||||
if handled:
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
return
|
||||
print "[FD-GaifanRequest-NO-HANDLER]", itemName
|
||||
|
||||
@@ -585,6 +592,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
if hasattr(service, "handleItemUseOn"):
|
||||
handled = service.handleItemUseOn(useOnArgs)
|
||||
if handled:
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
return
|
||||
print "[FD-ItemUseOnRequest-NO-HANDLER]", itemName
|
||||
|
||||
@@ -618,6 +626,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
if hasattr(service, "handleBlockUse"):
|
||||
handled = service.handleBlockUse(useArgs)
|
||||
if handled:
|
||||
PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动
|
||||
return
|
||||
print "[FD-BlockUseRequest-NO-HANDLER]", blockName
|
||||
|
||||
@@ -644,6 +653,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
service = self.tryUseOwner.get(itemName)
|
||||
if service and service.handleItemTryUse(args):
|
||||
args['cancel'] = True
|
||||
PlayAttackToClient(playerId) # 任务二: 手持右键动作播放摆动
|
||||
|
||||
# ============================================================================
|
||||
# 主入口4:计时方块 tick → 按 timerOwner 路由到计时服务(持久化计时)
|
||||
|
||||
+10
-6
@@ -225,7 +225,7 @@ class BarbecueService(BlueFoxServerSystem):
|
||||
# ---- 逆向操作 ----
|
||||
# 掉落物形式生成(取下整只成品等),优先于 giveItem
|
||||
if recipe.get("dropItem"):
|
||||
self.dropItems(dim, pos, recipe["dropItem"])
|
||||
self.dropItems(dim, pos, recipe["dropItem"], playerId)
|
||||
elif recipe.get("giveItem"):
|
||||
self.giveItem(playerId, recipe["giveItem"], recipe.get("giveCount", 1))
|
||||
|
||||
@@ -310,17 +310,17 @@ class BarbecueService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, auxValue=0):
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(
|
||||
{"itemName": itemName, "count": count, "auxValue": auxValue}, playerId)
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count, aux=auxValue)
|
||||
|
||||
# ============================================================================
|
||||
# 十、工具方法:以掉落物形式生成物品(取下烤鸡/烤乳猪等)
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
"""
|
||||
dropList 格式:[{"name": "xxx", "count": N}, ...]
|
||||
在方块上方生成掉落物实体,让它自然掉到地上。
|
||||
playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。
|
||||
"""
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
@@ -328,7 +328,11 @@ class BarbecueService(BlueFoxServerSystem):
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 十一、工具方法:冷却检查
|
||||
|
||||
+10
-5
@@ -245,7 +245,7 @@ class ShicaiService(BlueFoxServerSystem):
|
||||
else:
|
||||
# 最后一级再切 -> 掉碎 + 变空气
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItems(dim, pos, [chain["drop"]])
|
||||
self.dropItems(dim, pos, [chain["drop"]], playerId)
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
@@ -261,7 +261,7 @@ class ShicaiService(BlueFoxServerSystem):
|
||||
n = self.garlicChop.get(gkey, 0) + 1
|
||||
if n >= GARLIC_CHOP_COUNT:
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItems(dim, pos, [GARLIC_DROP])
|
||||
self.dropItems(dim, pos, [GARLIC_DROP], playerId)
|
||||
self.garlicChop.pop(gkey, None)
|
||||
else:
|
||||
self.garlicChop[gkey] = n
|
||||
@@ -284,7 +284,7 @@ class ShicaiService(BlueFoxServerSystem):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, need)
|
||||
self.clearBlock(pos, dim)
|
||||
self.dropItems(dim, pos, [rule["drop"]])
|
||||
self.dropItems(dim, pos, [rule["drop"]], playerId)
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
@@ -343,14 +343,19 @@ class ShicaiService(BlueFoxServerSystem):
|
||||
# 八、工具方法:以掉落物形式生成物品
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
"itemName": d["name"],
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
# 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落)
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 九、工具方法:冷却检查
|
||||
|
||||
+8
-4
@@ -156,7 +156,7 @@ class MarketService(BlueFoxServerSystem):
|
||||
|
||||
# ---- 取出:掉落物 ----
|
||||
if recipe.get("dropItem"):
|
||||
self.dropItems(dim, pos, recipe["dropItem"])
|
||||
self.dropItems(dim, pos, recipe["dropItem"], playerId)
|
||||
|
||||
# ---- 替换方块 ----
|
||||
if recipe.get("target"):
|
||||
@@ -232,10 +232,10 @@ class MarketService(BlueFoxServerSystem):
|
||||
# 八、工具方法:以掉落物形式生成物品(取出)
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
"""
|
||||
dropList 格式:[{"name": "xxx", "count": N}, ...]
|
||||
在方块上方生成掉落物实体, 让它自然掉到地上。
|
||||
playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。
|
||||
"""
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
@@ -243,7 +243,11 @@ class MarketService(BlueFoxServerSystem):
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 九、工具方法:冷却检查
|
||||
|
||||
+16
-3
@@ -26,6 +26,9 @@ comp = serverApi.GetEngineCompFactory() # 组件工厂
|
||||
from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
||||
from ..ShiyongfoodData import EAT_RULE_MAP, TRY_USE_RULES
|
||||
|
||||
# ---- 吃的声音 random.eat(任务三) ----
|
||||
from ....ModUtil.ServerUtil import PlaySoundToAllClient
|
||||
|
||||
|
||||
class ShiyongfoodService(BlueFoxServerSystem):
|
||||
"""总食用服务: 所有成品右键吃(方块吃 + 手持物品直接吃)"""
|
||||
@@ -85,11 +88,14 @@ class ShiyongfoodService(BlueFoxServerSystem):
|
||||
# 方块转换成下一级(半份/下一份)
|
||||
self._replaceBlock(playerId, pos, dim, target)
|
||||
else:
|
||||
# 完全消耗消失 + 掉落容器
|
||||
self._clearBlock(playerId, pos, dim)
|
||||
# 任务三: 不再掉落容器, 而是把容器(脏盘子/木碗/玻璃杯/支杆)原地留在方块位置
|
||||
drop = rule.get("drop")
|
||||
if drop:
|
||||
self.dropItem(dim, pos, drop)
|
||||
self._replaceBlock(playerId, pos, dim, drop)
|
||||
else:
|
||||
self._clearBlock(playerId, pos, dim)
|
||||
# 吃的声音(任务三)
|
||||
PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "random.eat", 1.0)
|
||||
return True
|
||||
|
||||
# ====================================================================
|
||||
@@ -133,6 +139,13 @@ class ShiyongfoodService(BlueFoxServerSystem):
|
||||
"auxValue": itemDict.get("newAuxValue", 0),
|
||||
"userData": itemDict.get("userData", {})})
|
||||
self._applyFood(playerId, rule.get("hunger", 0), rule.get("effects", []))
|
||||
# 吃的声音(任务三, 手持吃)
|
||||
try:
|
||||
_fp = comp.CreatePos(playerId).GetFootPos()
|
||||
_fd = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||
PlaySoundToAllClient((_fp[0], _fp[1], _fp[2], _fd), "random.eat", 1.0)
|
||||
except Exception:
|
||||
pass
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
|
||||
+8
-4
@@ -134,7 +134,7 @@ class ShoubanService(BlueFoxServerSystem):
|
||||
# 盒子变为"开过"
|
||||
self.replaceBlock(pos, dim, BLIND_BOX_TARGET, playerId)
|
||||
# 掉落手办
|
||||
self.dropItems(dim, pos, [{"name": fig, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": fig, "count": 1}], playerId)
|
||||
# 提示开出内容
|
||||
name = FIGURINE_NAMES.get(fig, "手办")
|
||||
|
||||
@@ -174,10 +174,10 @@ class ShoubanService(BlueFoxServerSystem):
|
||||
# 五、工具方法:以掉落物形式生成物品(开出/取下等)
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
"""
|
||||
dropList 格式:[{"name": "xxx", "count": N}, ...]
|
||||
在方块上方生成掉落物实体, 让它自然掉到地上。
|
||||
playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。
|
||||
"""
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
@@ -185,7 +185,11 @@ class ShoubanService(BlueFoxServerSystem):
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 六、工具方法:冷却检查
|
||||
|
||||
+6
-2
@@ -270,7 +270,7 @@ class ShousiService(BlueFoxServerSystem):
|
||||
self.replaceBlock(pos, dim, recipe["target"], playerId)
|
||||
# 递减取走: 以掉落物形式返还卷寿司
|
||||
if recipe.get("drop"):
|
||||
self.dropItem(dim, pos, recipe["drop"])
|
||||
self.dropItem(dim, pos, recipe["drop"], playerId=playerId)
|
||||
|
||||
# ============================================================================
|
||||
# 四、切块(手持菜刀右键卷寿司两次 -> 寿司块(三个))
|
||||
@@ -301,7 +301,11 @@ class ShousiService(BlueFoxServerSystem):
|
||||
# 六、工具方法:以掉落物形式生成物品(递减取走返还)
|
||||
# ============================================================================
|
||||
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0):
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None):
|
||||
if playerId is not None:
|
||||
# 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落)
|
||||
self.giveItemToPlayer(playerId, itemName, count, pos, dim, aux=aux)
|
||||
return
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
+5
-21
@@ -316,11 +316,8 @@ class TangguoService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count)
|
||||
|
||||
# ============================================================================
|
||||
# 五、工具方法,消耗物品
|
||||
@@ -351,24 +348,11 @@ class TangguoService(BlueFoxServerSystem):
|
||||
"""取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手;
|
||||
否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。
|
||||
不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。"""
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, itemName, count, pos, dim)
|
||||
return
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
if playerId is not None:
|
||||
# 1) 主手空 -> 放主手
|
||||
cur = self.getCarriedItem(playerId)
|
||||
handItem = (cur or {}).get("newItemName")
|
||||
if not handItem or handItem == "minecraft:air":
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
# 2) 否则入包(同类叠加/空位); 失败(满)->掉落
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
+12
-8
@@ -204,7 +204,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
return False # 无水果记录(创造直接放置的完成态) → 不反应
|
||||
juiceBlock, juiceName = juiceInfo
|
||||
self.consumeItem(playerId, itemDict, 1) # 消耗玻璃杯(果汁成品自带杯)
|
||||
self.dropItems(dim, pos, [{"name": juiceBlock, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": juiceBlock, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:juicer", playerId) # 还原空, 记录随方块清除
|
||||
return True
|
||||
|
||||
@@ -254,7 +254,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
_fruit, popsicle, flavor = info
|
||||
self.dropItems(dim, pos, [{"name": popsicle, "count": 2}])
|
||||
self.dropItems(dim, pos, [{"name": popsicle, "count": 2}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:icelollybox_1", playerId) # 还原未定型
|
||||
return True
|
||||
|
||||
@@ -296,7 +296,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
return False
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": icecream, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": icecream, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, "rtdd:frytheicebox", playerId) # 还原空
|
||||
return True
|
||||
|
||||
@@ -333,7 +333,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_SINGLE_MELON, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_SINGLE_MELON, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, POPSICLE_SINGLE_ORANGE, playerId)
|
||||
return True
|
||||
return False
|
||||
@@ -344,7 +344,7 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}])
|
||||
self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}], playerId)
|
||||
self.replaceBlock(pos, dim, POPSICLE_PILE_2, playerId)
|
||||
return True
|
||||
return False
|
||||
@@ -441,10 +441,10 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
# 十、工具方法:以掉落物形式生成物品(取果汁/冰棍/冰沙)
|
||||
# ============================================================================
|
||||
|
||||
def dropItems(self, dim, pos, dropList):
|
||||
def dropItems(self, dim, pos, dropList, playerId=None):
|
||||
"""
|
||||
dropList 格式:[{"name": "xxx", "count": N}, ...]
|
||||
在方块上方生成掉落物实体, 让它自然掉到地上。
|
||||
playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。
|
||||
"""
|
||||
for d in dropList:
|
||||
itemDict = {
|
||||
@@ -452,7 +452,11 @@ class YinliaoService(BlueFoxServerSystem):
|
||||
"count": d.get("count", 1),
|
||||
"auxValue": d.get("aux", 0),
|
||||
}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim,
|
||||
aux=d.get("aux", 0))
|
||||
else:
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
|
||||
# ============================================================================
|
||||
# 十一、工具方法:冷却检查
|
||||
|
||||
+5
-21
@@ -277,11 +277,8 @@ class YouguoService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count)
|
||||
|
||||
# ============================================================================
|
||||
# 六、工具方法,消耗物品
|
||||
@@ -312,24 +309,11 @@ class YouguoService(BlueFoxServerSystem):
|
||||
"""取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手;
|
||||
否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。
|
||||
不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。"""
|
||||
if playerId is not None:
|
||||
self.giveItemToPlayer(playerId, itemName, count, pos, dim)
|
||||
return
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
if playerId is not None:
|
||||
# 1) 主手空 -> 放主手
|
||||
cur = self.getCarriedItem(playerId)
|
||||
handItem = (cur or {}).get("newItemName")
|
||||
if not handItem or handItem == "minecraft:air":
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
# 2) 否则入包(同类叠加/空位); 失败(满)->掉落
|
||||
try:
|
||||
if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId):
|
||||
return
|
||||
except Exception:
|
||||
pass
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
+2
-5
@@ -207,11 +207,8 @@ class NaturalService(BlueFoxServerSystem):
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId)
|
||||
except Exception:
|
||||
pass
|
||||
""""给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)"""
|
||||
self.giveItemToPlayer(playerId, itemName, count, aux=aux)
|
||||
|
||||
# ============================================================================
|
||||
# 六、工具方法:消耗物品
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"minecraft:block": {
|
||||
"description": {
|
||||
"identifier": "rtdd:fruitjuice_0",
|
||||
"register_to_creative_menu": false,
|
||||
"category": "xy_drink"
|
||||
"register_to_creative_menu": true,
|
||||
"category": "xy_kitchenware"
|
||||
},
|
||||
"components": {
|
||||
"netease:aabb": {
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"minecraft:block": {
|
||||
"description": {
|
||||
"identifier": "rtdd:frytheicebox",
|
||||
"register_to_creative_menu": false,
|
||||
"category": "xy_drink"
|
||||
"register_to_creative_menu": true,
|
||||
"category": "xy_kitchenware"
|
||||
},
|
||||
"components": {
|
||||
"netease:aabb": {
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"minecraft:block": {
|
||||
"description": {
|
||||
"identifier": "rtdd:icelollybox_1",
|
||||
"register_to_creative_menu": false,
|
||||
"category": "xy_drink"
|
||||
"register_to_creative_menu": true,
|
||||
"category": "xy_kitchenware"
|
||||
},
|
||||
"components": {
|
||||
"netease:aabb": {
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"minecraft:block": {
|
||||
"description": {
|
||||
"identifier": "rtdd:juicer",
|
||||
"register_to_creative_menu": false,
|
||||
"category": "xy_drink"
|
||||
"register_to_creative_menu": true,
|
||||
"category": "xy_kitchenware"
|
||||
},
|
||||
"components": {
|
||||
"netease:aabb": {
|
||||
|
||||
@@ -22,12 +22,20 @@
|
||||
"item": "minecraft:stick",
|
||||
"data": 0
|
||||
},
|
||||
"7": {
|
||||
"8": {
|
||||
"item": "minecraft:stick",
|
||||
"data": 0
|
||||
},
|
||||
"8": {
|
||||
"item": "minecraft:stick",
|
||||
"1": {
|
||||
"item": "rtdd:b_34",
|
||||
"data": 0
|
||||
},
|
||||
"4": {
|
||||
"item": "rtdd:b_34",
|
||||
"data": 0
|
||||
},
|
||||
"7": {
|
||||
"item": "rtdd:b_34",
|
||||
"data": 0
|
||||
}
|
||||
},
|
||||
@@ -35,9 +43,9 @@
|
||||
"identifier": "rtdd:xy_b_57"
|
||||
},
|
||||
"pattern": [
|
||||
"0 2",
|
||||
"3 5",
|
||||
"678"
|
||||
"010",
|
||||
"343",
|
||||
"636"
|
||||
],
|
||||
"result": {
|
||||
"data": 0,
|
||||
|
||||
@@ -5,7 +5,7 @@ tile.rtdd:juicer_4.name=榨汁机(完成)
|
||||
tile.rtdd:chickencoop_4.name=鸡窝_5(4蛋)
|
||||
tile.rtdd:juicer_3.name=榨汁机(榨汁中3)
|
||||
tile.rtdd:juicer_2.name=榨汁机(榨汁中2)
|
||||
tile.rtdd:trayracks_1.name=盘子架_1(空)
|
||||
tile.rtdd:trayracks_1.name=盘子架
|
||||
tile.rtdd:chickencoop_1.name=鸡窝_2(1蛋)
|
||||
tile.rtdd:chickencoop_0.name=鸡窝_1(0蛋)
|
||||
tile.rtdd:trayracks_3.name=盘子架_3(俩个)
|
||||
@@ -54,7 +54,7 @@ tile.rtdd:manger_1.name=饲料槽_4(少量小麦)
|
||||
tile.rtdd:manger_0.name=饲料槽_1(空)
|
||||
tile.rtdd:b_3.name=鲑鱼架_禁用
|
||||
|
||||
tile.rtdd:peachbarrel.name=货桶(桃子)
|
||||
tile.rtdd:peachbarrel.name=桃子货桶
|
||||
tile.rtdd:b_4.name=摊位台
|
||||
|
||||
tile.rtdd:carrotlegoflamb.name=炒锅_13(胡萝卜羊腿_生)
|
||||
@@ -173,7 +173,7 @@ tile.rtdd:plate_19.name=辣炒兔肉(全份)
|
||||
tile.rtdd:plate_10.name=胡萝卜炒羊里脊(全份)
|
||||
tile.rtdd:dead_villagera.name=烤村民
|
||||
tile.rtdd:vegetablesstew_2.name=汤锅_110(蔬菜乱炖_八分熟)
|
||||
tile.rtdd:fishingnet.name=网(渔网)
|
||||
tile.rtdd:fishingnet.name=渔网
|
||||
tile.rtdd:vegetablesstew_1.name=汤锅_109(蔬菜乱炖_四分熟)
|
||||
tile.rtdd:plate_13.name=胡萝卜炒猪排骨(全份)
|
||||
tile.rtdd:plate_14.name=炒土豆
|
||||
@@ -181,13 +181,13 @@ tile.rtdd:vegetablesstew_3.name=汤锅_111(蔬菜乱炖_熟)
|
||||
tile.rtdd:plate_11.name=胡萝卜炒羊排
|
||||
tile.rtdd:plate_12.name=小炒五花肉(全份)
|
||||
tile.rtdd:cookingpotato.name=炒锅_47(炒土豆_生)
|
||||
tile.rtdd:orangebox.name=售卖盒(橘子)
|
||||
tile.rtdd:orangebox.name=橙子售卖盒
|
||||
|
||||
|
||||
tile.rtdd:bowlaeggcodsoup.name=蛋花鳕鱼汤
|
||||
tile.rtdd:hot_water_bucket.name=热水
|
||||
tile.rtdd:wok.name=炒锅(空)
|
||||
tile.rtdd:stewedsoup.name=汤锅(空锅)
|
||||
tile.rtdd:wok.name=炒锅
|
||||
tile.rtdd:stewedsoup.name=汤锅
|
||||
tile.rtdd:mushroom_fried_chicken_1.name=炒锅_68(香菇滑鸡_生)
|
||||
tile.rtdd:fishmonsushi_6.name=热带鱼寿司块(三个)
|
||||
tile.rtdd:roastpignew_5.name=烤乳猪(2/6只)
|
||||
@@ -202,7 +202,7 @@ tile.rtdd:sunshade_cloth_yellow.name=淡黄色遮阳布
|
||||
|
||||
tile.rtdd:sunshade_cloth_lime.name=深绿色遮阳布
|
||||
tile.rtdd:brown_norieggsoup.name=瘦肉蛋花汤
|
||||
tile.rtdd:sales_box_cod.name=售卖盒(鳕鱼盒)
|
||||
tile.rtdd:sales_box_cod.name=鳕鱼售卖盒
|
||||
tile.rtdd:cookingmeat.name=炒锅_44(炒碎肉_生)
|
||||
tile.rtdd:plate_40a.name=章鱼小丸子_半份
|
||||
tile.rtdd:bread_2b.name=吐司3(3份)
|
||||
@@ -244,7 +244,7 @@ tile.rtdd:b_102.name=烟囱
|
||||
tile.rtdd:carrotandbeef.name=炒锅_1(黑椒牛排_生)
|
||||
tile.rtdd:b_103.name=烟道
|
||||
tile.rtdd:cod_pile.name=鳕鱼堆
|
||||
tile.rtdd:b_108.name=古式唱片机(无碟)
|
||||
tile.rtdd:b_108.name=古式唱片机
|
||||
tile.rtdd:balance.name=天平
|
||||
tile.rtdd:b_109.name=古式唱片机(有碟)
|
||||
tile.rtdd:plate_53.name=胡萝卜炒猪肉
|
||||
@@ -291,7 +291,7 @@ tile.rtdd:lotion_1.name=药水架_2(药水_一瓶)
|
||||
tile.rtdd:lotion_2.name=药水架_3(药水_两瓶)
|
||||
tile.rtdd:rollingpin.name=擀面杖
|
||||
tile.rtdd:plate_24.name=炒碎肉
|
||||
tile.rtdd:lotion_0.name=药水架_1(药水_空)
|
||||
tile.rtdd:lotion_0.name=药水架
|
||||
|
||||
tile.rtdd:wheel.name=车轮
|
||||
tile.rtdd:plate_25.name=煎鲑鱼
|
||||
@@ -312,7 +312,7 @@ tile.rtdd:coverthepan.name=炒锅(盖锅)
|
||||
tile.rtdd:plate_1a.name=清炒猪排(半份)
|
||||
tile.rtdd:cookedanymeat.name=炒锅_16(小炒鸡肉_熟)
|
||||
tile.rtdd:plate_39.name=盘装炸鱼
|
||||
tile.rtdd:cabinet.name=橱柜(盘子+调料瓶)
|
||||
tile.rtdd:cabinet.name=餐具橱柜
|
||||
tile.rtdd:cake_2a.name=浆果蛋糕(3/4块)
|
||||
tile.rtdd:plate_37.name=炸薯条
|
||||
tile.rtdd:plate_38.name=盘装鸡块
|
||||
@@ -357,9 +357,9 @@ tile.rtdd:peach_popsicleplace.name=桃子冰棍
|
||||
tile.rtdd:roastpig_1.name=烤乳猪(熟)
|
||||
tile.rtdd:fishtank.name=鱼缸_禁用
|
||||
tile.rtdd:carrotandpotatosoup.name=汤锅_8(胡萝卜土豆汤)
|
||||
tile.rtdd:bountypaper_2.name=悬赏纸_2
|
||||
tile.rtdd:bountypaper_2.name=悬赏纸
|
||||
|
||||
tile.rtdd:bountypaper_1.name=悬赏纸_1
|
||||
tile.rtdd:bountypaper_1.name=公告
|
||||
tile.rtdd:plate_33a.name=炒蟹(半份)
|
||||
tile.rtdd:vegetableleanbroth_3.name=汤锅_105(蔬菜瘦肉汤_熟)
|
||||
tile.rtdd:vegetableleanbroth_2.name=汤锅_104(蔬菜瘦肉汤_八分熟)
|
||||
@@ -403,7 +403,7 @@ tile.rtdd:b_127.name=地图台
|
||||
tile.rtdd:cooking_pepper.name=炒锅_19(炒胡萝卜_熟)
|
||||
tile.rtdd:noodle_soup.name=熟面条
|
||||
|
||||
tile.rtdd:sales_box_carrot.name=售卖盒(胡萝卜)
|
||||
tile.rtdd:sales_box_carrot.name=胡萝卜售卖盒
|
||||
tile.rtdd:apple_fruit_1.name=苹果(形态1)_自然
|
||||
tile.rtdd:apple_fruit_3.name=苹果(形态2)_自然
|
||||
|
||||
@@ -426,18 +426,18 @@ tile.rtdd:bookcase_4.name=书柜_10(9本)
|
||||
tile.rtdd:egg_pile.name=鸡蛋堆
|
||||
tile.rtdd:bookcase_3.name=书柜_12(11本)
|
||||
tile.rtdd:sellingboxes.name=售卖盒
|
||||
tile.rtdd:flag_red_orange_oblique.name=红橙旗子(斜向)
|
||||
tile.rtdd:flag_red_orange_oblique.name=斜向红橙旗子
|
||||
tile.rtdd:plate_12a.name=小炒五花肉(半份)
|
||||
tile.rtdd:cupboard_2.name=碗柜(两个碗)
|
||||
tile.rtdd:cupboard_3.name=碗柜(三个碗)
|
||||
tile.rtdd:cupboard_0.name=碗柜(空)
|
||||
tile.rtdd:cupboard_0.name=碗柜
|
||||
tile.rtdd:cupboard_1.name=碗柜(一个碗)
|
||||
tile.rtdd:squid_sushi.name=手握鱿鱼寿司(一个)
|
||||
tile.rtdd:fishsushicubes_2.name=热带鱼寿司块(两个)
|
||||
tile.rtdd:fishsushicubes_1.name=热带鱼寿司块(一个)
|
||||
tile.rtdd:bamboo_7.name=蒸笼(竹筒饭_熟)
|
||||
tile.rtdd:bamboo_6.name=蒸笼(竹筒饭_生)
|
||||
tile.rtdd:bountypaper.name=农贸清单(悬赏纸)
|
||||
tile.rtdd:bountypaper.name=农贸清单
|
||||
tile.rtdd:bamboo_5.name=熟竹筒饭
|
||||
tile.rtdd:bamboo_4.name=竹筒(加入肉)
|
||||
tile.rtdd:nigirisushisalnom_2.name=手握鲑鱼寿司(两个)
|
||||
@@ -554,7 +554,7 @@ tile.rtdd:nigirisushicod_3.name=手握鳕鱼寿司(三个)
|
||||
tile.rtdd:spicy_fish_0.name=炒锅_90(辣炒鲑鱼_生)
|
||||
tile.rtdd:spicy_fish_1.name=炒锅_91(辣炒鲑鱼_熟)
|
||||
tile.rtdd:plate_19a.name=辣炒兔肉(半份)
|
||||
tile.rtdd:wine_barrel.name=酒桶!
|
||||
tile.rtdd:wine_barrel.name=酒桶
|
||||
tile.rtdd:cookingsheeploin.name=炒锅_52(胡萝卜炒羊里脊_生)
|
||||
tile.rtdd:cow_3.name=挂肉钩(牛_去肉)
|
||||
tile.rtdd:cow_2.name=挂肉钩(牛_去四肢)
|
||||
@@ -587,7 +587,7 @@ tile.rtdd:beater_custard_2.name=搅拌器(蛋_3)
|
||||
tile.rtdd:beater_custard_1.name=搅拌器(蛋_2)
|
||||
tile.rtdd:beater_custard_0.name=搅拌器(蛋_1)
|
||||
tile.rtdd:medicinetank.name=玻璃罐
|
||||
tile.rtdd:storage_buckets.name=垃圾桶(关闭)
|
||||
tile.rtdd:storage_buckets.name=垃圾桶
|
||||
tile.rtdd:jewelrybox_1.name=盲盒(开过)
|
||||
tile.rtdd:jewelrybox_0.name=盲盒
|
||||
tile.rtdd:oilpotporkchop.name=油锅(禁用)
|
||||
@@ -595,7 +595,7 @@ tile.rtdd:rubbish_bin_2.name=垃圾桶(打开)
|
||||
tile.rtdd:peachpile.name=土豆堆_3(桃子堆)_禁用
|
||||
tile.rtdd:vegetableleanbroth.name=汤锅_102(蔬菜瘦肉汤_生)
|
||||
tile.rtdd:warehousebox.name=Warehousebox(仓库箱)
|
||||
tile.rtdd:oilpot_0.name=油锅(空锅)
|
||||
tile.rtdd:oilpot_0.name=油锅
|
||||
tile.rtdd:baozilong_2.name=蒸笼(包子_熟)
|
||||
tile.rtdd:baozilong_1.name=蒸笼(包子_生)
|
||||
tile.rtdd:appleicebox.name=炒冰盒_1(苹果炒冰盒)
|
||||
@@ -609,7 +609,7 @@ tile.rtdd:killcod_0.name=死鳕鱼
|
||||
tile.rtdd:killcod_1.name=死鳕鱼(切一刀)
|
||||
tile.rtdd:killcod_2.name=死鳕鱼(切两刀)
|
||||
tile.rtdd:lambstew_2.name=汤锅_52(土豆胡萝卜炖羊肉_八分熟)
|
||||
tile.rtdd:sales_box_bread.name=售卖盒(面包)
|
||||
tile.rtdd:sales_box_bread.name=面包售卖盒
|
||||
tile.rtdd:lambstew_1.name=汤锅_51(土豆胡萝卜炖羊肉_四分熟)
|
||||
tile.rtdd:mug.name=酒杯_10(酒杯)
|
||||
tile.rtdd:lambstew_3.name=汤锅_53(土豆胡萝卜炖羊肉_熟)
|
||||
@@ -632,8 +632,8 @@ tile.rtdd:roujiamo_1.name=馍(切开)
|
||||
tile.rtdd:carrotbeefsoup_2.name=汤锅_11(胡萝卜牛肉汤_八分熟)
|
||||
tile.rtdd:carrotbeefsoup_3.name=汤锅_12(胡萝卜牛肉汤_熟)
|
||||
tile.rtdd:bowlofmushroomsoup.name=蘑菇炖鸡
|
||||
tile.rtdd:cabinet_1.name=橱柜(仅调料瓶)
|
||||
tile.rtdd:peachbox.name=售卖盒(桃子)
|
||||
tile.rtdd:cabinet_1.name=调料瓶橱柜
|
||||
tile.rtdd:peachbox.name=桃子售卖盒
|
||||
tile.rtdd:bowlofrice.name=米饭_1(熟米饭_形态1)
|
||||
tile.rtdd:bowlabeefbonebroth.name=胡萝卜土豆牛骨汤
|
||||
tile.rtdd:carrotandbeef_1.name=炒锅_2(黑椒牛排_熟)
|
||||
@@ -644,24 +644,24 @@ tile.rtdd:dead_squid_1.name=死鱿鱼(切掉鱿鱼须)
|
||||
tile.rtdd:cookedeggsoup.name=汤锅_32(煮鸡蛋_熟)
|
||||
tile.rtdd:oven.name=烤炉
|
||||
tile.rtdd:ingotpile.name=铁锭堆_禁用
|
||||
tile.rtdd:sales_box_pumpkin.name=售卖盒(南瓜)
|
||||
tile.rtdd:sales_box_pumpkin.name=南瓜售卖盒
|
||||
tile.rtdd:carrotribs_3.name=汤锅_24(胡萝卜排骨汤_熟)
|
||||
tile.rtdd:mushroomnoodles.name=香菇面
|
||||
tile.rtdd:carrotribs_1.name=汤锅_22(胡萝卜排骨汤_四分熟)
|
||||
tile.rtdd:carrotribs_2.name=汤锅_23(胡萝卜排骨汤_八分熟)
|
||||
tile.rtdd:menus.name=餐牌(菜单)
|
||||
tile.rtdd:menus.name=餐牌
|
||||
tile.rtdd:carrotandmutton_1.name=炒锅_8(清炒羊肉_熟)
|
||||
tile.rtdd:stonemill.name=石磨
|
||||
tile.rtdd:cloth_red.name=淡红色布料
|
||||
tile.rtdd:meathook.name=挂肉钩(空钩)
|
||||
tile.rtdd:meathook.name=挂肉钩
|
||||
tile.rtdd:meathookcoddry.name=鳕鱼干挂肉钩(两条)
|
||||
tile.rtdd:woodenbox_0.name=条箱
|
||||
tile.rtdd:woodenbox_3.name=条箱(土豆)
|
||||
tile.rtdd:woodenbox_3.name=土豆条箱
|
||||
tile.rtdd:tent.name=帐篷_1(帐篷)禁用
|
||||
tile.rtdd:woodenbox_4.name=条箱(桃子)
|
||||
tile.rtdd:woodenbox_4.name=桃子条箱
|
||||
tile.rtdd:steamermilkandegg.name=蒸笼(蒸牛奶鸡蛋_生)_禁用
|
||||
tile.rtdd:woodenbox_1.name=条箱(苹果)
|
||||
tile.rtdd:woodenbox_2.name=条箱(胡萝卜)
|
||||
tile.rtdd:woodenbox_1.name=苹果条箱
|
||||
tile.rtdd:woodenbox_2.name=胡萝卜条箱
|
||||
tile.rtdd:breaddough_4d.name=甜甜圈胚(生)
|
||||
tile.rtdd:chickenstewwithmushrooms_3.name=汤锅_29(蘑菇炖鸡_熟)
|
||||
tile.rtdd:chickenstewwithmushrooms_1.name=汤锅_27(蘑菇炖鸡_四分熟)
|
||||
@@ -738,7 +738,7 @@ tile.rtdd:cakebatterblock_0.name=蛋糕面糊(生)
|
||||
tile.rtdd:salmonsushi_1.name=鲑鱼寿司(加鲑鱼)
|
||||
tile.rtdd:soybeanseedling_0.name=豆苗_1(豆苗_0)
|
||||
tile.rtdd:soybeanseedling_1.name=豆苗_2(豆苗_1)
|
||||
tile.rtdd:barbecuegrill_0.name=烧烤架_1(烧烤架无火)
|
||||
tile.rtdd:barbecuegrill_0.name=烧烤架
|
||||
tile.rtdd:codsushi_1.name=鳕鱼寿司(加鳕鱼)
|
||||
tile.rtdd:cookingscallions.name=炒锅_51(葱花锅底)
|
||||
tile.rtdd:codsushi_6.name=鳕鱼寿司块(三个)
|
||||
@@ -747,10 +747,10 @@ tile.rtdd:codsushi_5.name=鳕鱼寿司(卷_4)
|
||||
tile.rtdd:barbecuegrill_1.name=烧烤架_2(烧烤架点燃)
|
||||
tile.rtdd:codsushi_2.name=鳕鱼寿司(卷_1)
|
||||
tile.rtdd:codsushi_3.name=鳕鱼寿司(卷_2)
|
||||
tile.rtdd:fishbucket_1.name=货桶(鳕鱼)
|
||||
tile.rtdd:fishbucket_1.name=鳕鱼货桶
|
||||
tile.rtdd:fishbucket_0.name=货桶
|
||||
tile.rtdd:salmon_pile.name=鲑鱼堆
|
||||
tile.rtdd:carrotbarrel.name=货桶(胡萝卜)
|
||||
tile.rtdd:carrotbarrel.name=胡萝卜货桶
|
||||
tile.rtdd:bread_1.name=法棍
|
||||
tile.rtdd:meathookcod_2.name=鳕鱼挂肉钩(两条)
|
||||
tile.rtdd:meathookcod_1.name=鳕鱼挂肉钩(一条)
|
||||
@@ -759,7 +759,7 @@ tile.rtdd:roujiamosoup_1.name=汤锅_78(羊肉泡馍汤_熟)
|
||||
tile.rtdd:bandage_2.name=绷带
|
||||
|
||||
tile.rtdd:orange_leaves.name=橘树树叶
|
||||
tile.rtdd:potatobarrel.name=货桶(土豆)
|
||||
tile.rtdd:potatobarrel.name=土豆货桶
|
||||
tile.rtdd:pepperplant_3.name=辣椒(辣椒_3)
|
||||
tile.rtdd:pepperplant_1.name=辣椒苗_1(辣椒_1)
|
||||
tile.rtdd:pepperplant_2.name=辣椒苗_2(辣椒_2)
|
||||
@@ -782,7 +782,7 @@ tile.rtdd:statueofadeity.name=神像
|
||||
tile.rtdd:popsiclepile_3.name=冰棍堆2(橙子+西瓜+苹果)
|
||||
tile.rtdd:popsiclepile_2.name=冰棍堆(橙子+西瓜)
|
||||
tile.rtdd:b_225.name=浴缸_1
|
||||
tile.rtdd:fishbucket_2.name=货桶(鲑鱼)
|
||||
tile.rtdd:fishbucket_2.name=鲑鱼货桶
|
||||
tile.rtdd:bowlacarrotribs.name=胡萝卜排骨汤
|
||||
tile.rtdd:squidwhiskersincooking_0.name=炒锅_92(炒鱿鱼须_生)
|
||||
tile.rtdd:ricepot_1.name=汤锅_74(熟米饭_形态1)
|
||||
@@ -794,12 +794,12 @@ tile.rtdd:cookingpotato_1.name=炒锅_48(炒土豆_熟)
|
||||
tile.rtdd:browncarrotfishsoupsoup.name=胡萝卜鲑鱼汤
|
||||
tile.rtdd:dough_1.name=生面团(擀面_1)
|
||||
|
||||
tile.rtdd:dough_0.name=生面团(发酵后)
|
||||
tile.rtdd:dough_0.name=发酵后的生面团
|
||||
tile.rtdd:plate_30a.name=美味饺子(全份)盘装
|
||||
tile.rtdd:cloth_orange.name=橙色布料
|
||||
|
||||
tile.rtdd:fried_porkwith_carrots.name=炒锅_63(胡萝卜炒猪肉_生)
|
||||
tile.rtdd:sales_box_potato.name=售卖盒(土豆)
|
||||
tile.rtdd:sales_box_potato.name=土豆售卖盒
|
||||
tile.rtdd:roasted_vegetables_1.name=烤蔬菜串(半熟)
|
||||
tile.rtdd:carrotfishsoup_1.name=汤锅_18(胡萝卜鲑鱼汤_三分熟)
|
||||
tile.rtdd:roasted_vegetables_0.name=烤蔬菜串(生)
|
||||
@@ -837,7 +837,7 @@ tile.rtdd:pig_2.name=挂肉钩(猪_去四肢)
|
||||
tile.rtdd:pig_1.name=挂肉钩(猪_去皮)
|
||||
tile.rtdd:pig_0.name=挂肉钩(整只猪)
|
||||
tile.rtdd:arrowbarrel_1.name=箭桶_1(箭桶有箭)
|
||||
tile.rtdd:arrowbarrel_0.name=箭桶_0(箭桶无箭)
|
||||
tile.rtdd:arrowbarrel_0.name=箭桶
|
||||
tile.rtdd:cutvegetable_3.name=切青菜(切三刀)
|
||||
tile.rtdd:cutvegetable_2.name=切青菜(切两刀)
|
||||
tile.rtdd:cutvegetable_1.name=切青菜(切一刀)
|
||||
@@ -874,10 +874,10 @@ tile.rtdd:vegetablefishsoup_3.name=汤锅_97(蔬菜鱼片汤_熟)
|
||||
tile.rtdd:melon_popsicleplace.name=西瓜冰棍
|
||||
tile.rtdd:plate_46a.name=鸡肉番茄意面(半份)
|
||||
tile.rtdd:b_241.name=深绿色布料
|
||||
tile.rtdd:firewood.name=柴火_1(柴火)
|
||||
tile.rtdd:firewood.name=柴火
|
||||
tile.rtdd:flume_2.name=水槽_3(水槽_一个脏盘子)
|
||||
tile.rtdd:flume_1.name=水槽_2(水槽_满水)
|
||||
tile.rtdd:flume_0.name=水槽_1(水槽_空)
|
||||
tile.rtdd:flume_0.name=水槽
|
||||
tile.rtdd:flume_5.name=水槽_6(水槽_四个脏盘子)
|
||||
tile.rtdd:flume_4.name=水槽_5(水槽_三个脏盘子)
|
||||
tile.rtdd:cookingsheeprack_1.name=炒锅_55(胡萝卜炒羊排_熟)
|
||||
@@ -965,7 +965,7 @@ tile.rtdd:b_40.name=胡萝卜堆
|
||||
tile.rtdd:goldingotpile.name=金锭堆_禁用
|
||||
|
||||
|
||||
tile.rtdd:bookcase.name=书柜_1(空)
|
||||
tile.rtdd:bookcase.name=书柜
|
||||
tile.rtdd:cookingbeeftenderloin1.name=炒锅_24(胡萝卜牛里脊_熟)
|
||||
tile.rtdd:red_mushroomsoup.name=汤锅_73(红蘑菇汤)
|
||||
tile.rtdd:carrotandsalmon.name=炒锅_11(胡萝卜鲑鱼_生)
|
||||
@@ -988,9 +988,9 @@ tile.rtdd:lambstew.name=汤锅_50(土豆胡萝卜炖羊肉_生)
|
||||
tile.rtdd:deadsquida.name=死鱿鱼
|
||||
tile.rtdd:friedchicken.name=炒锅_66(小炒鸡肉_半熟)
|
||||
itemGroup.tabrfood=乡野-市场与农业
|
||||
tile.rtdd:woodenbox_7.name=条箱(鲑鱼)
|
||||
tile.rtdd:woodenbox_5.name=条箱(橘子)
|
||||
tile.rtdd:woodenbox_6.name=条箱(鳕鱼)
|
||||
tile.rtdd:woodenbox_7.name=鲑鱼条箱
|
||||
tile.rtdd:woodenbox_5.name=橙子条箱
|
||||
tile.rtdd:woodenbox_6.name=鳕鱼条箱
|
||||
tile.rtdd:plate_2.name=黑椒牛排(全份)
|
||||
tile.rtdd:plate_3.name=清炒羊肉
|
||||
tile.rtdd:plate_0.name=盘子
|
||||
@@ -1003,7 +1003,7 @@ tile.rtdd:carrotbeefsoup.name=汤锅_9(胡萝卜牛肉汤_生)
|
||||
|
||||
|
||||
|
||||
tile.rtdd:applebox.name=货桶(苹果)
|
||||
tile.rtdd:applebox.name=苹果货桶
|
||||
tile.rtdd:kitchenwarerackb_2.name=厨具架(双锅勺)
|
||||
tile.rtdd:kitchenwarerackb_1.name=厨具架(单锅勺)
|
||||
tile.rtdd:plate_6.name=胡萝卜牛排骨
|
||||
@@ -1019,12 +1019,12 @@ tile.rtdd:b_68.name=吊锅_14
|
||||
tile.rtdd:b_67.name=吊锅_13
|
||||
tile.rtdd:plate_8.name=胡萝卜牛里脊
|
||||
tile.rtdd:plate_9.name=胡萝卜羊腿(全份)
|
||||
tile.rtdd:flag_brown_blue.name=橙蓝旗子(正向)
|
||||
tile.rtdd:sales_box_apple.name=售卖盒(苹果)
|
||||
tile.rtdd:flag_brown_blue.name=正向橙蓝旗子
|
||||
tile.rtdd:sales_box_apple.name=苹果售卖盒
|
||||
tile.rtdd:cloth_blue.name=淡蓝色布料
|
||||
tile.rtdd:sales_box_watermelon.name=售卖盒(西瓜)
|
||||
tile.rtdd:sales_box_watermelon.name=西瓜售卖盒
|
||||
tile.rtdd:rawnoodlesoup.name=汤锅_65(生面汤)
|
||||
tile.rtdd:stove.name=炉灶(空)
|
||||
tile.rtdd:stove.name=炉灶
|
||||
tile.rtdd:b_16.name=土豆盒_1_禁用
|
||||
tile.rtdd:b_15.name=木条
|
||||
|
||||
@@ -1039,7 +1039,7 @@ tile.rtdd:norieggsoup_3.name=汤锅_59(瘦肉蛋花汤_熟)
|
||||
tile.rtdd:norieggsoup_2.name=汤锅_58(瘦肉蛋花汤_全熟)
|
||||
tile.rtdd:cookingcookedporkloin_1.name=炒锅_31(小炒五花肉_熟)
|
||||
tile.rtdd:b_31.name=稻草人1
|
||||
tile.rtdd:b_30.name=售卖盒(鲑鱼)
|
||||
tile.rtdd:b_30.name=鲑鱼售卖盒
|
||||
tile.rtdd:cookingdought.name=炒锅_38(煎面饼_生)_禁用
|
||||
|
||||
tile.rtdd:b_35.name=双人床
|
||||
@@ -1047,12 +1047,12 @@ tile.rtdd:b_34.name=支杆
|
||||
tile.rtdd:cream_caramel.name=焦糖布丁
|
||||
tile.rtdd:creampastry_0.name=舒芙蕾半成品
|
||||
tile.rtdd:carrotandporkchop_1.name=炒锅_10(清炒猪排_熟)
|
||||
tile.rtdd:flag.name=黄绿旗子(正向)
|
||||
tile.rtdd:flag.name=正向黄绿旗子
|
||||
|
||||
tile.rtdd:raweggsoup.name=汤锅_62(煮鸡蛋_生)
|
||||
tile.rtdd:icelollybox_2.name=冰棍盒(冰棍定型)
|
||||
tile.rtdd:kitchenwarerackd_4.name=厨具架(菜刀+锅勺)
|
||||
tile.rtdd:flag_blue_lime_oblique.name=蓝绿旗子(斜向)
|
||||
tile.rtdd:flag_blue_lime_oblique.name=斜向蓝绿旗子
|
||||
tile.rtdd:kitchenwarerackd_3.name=厨具架(双菜刀)
|
||||
tile.rtdd:kitchenwarerackd_2.name=厨具架(菜刀+锅铲)
|
||||
tile.rtdd:wokcarrot_1.name=炒锅_95(炒胡萝卜_半熟)
|
||||
@@ -1067,10 +1067,10 @@ tile.rtdd:icelollybox_1.name=冰棍盒(冰棍未定型)
|
||||
|
||||
|
||||
tile.rtdd:roastedmushrooms_0.name=烤香菇串(生)
|
||||
tile.rtdd:orangebarrel.name=货桶(橘子)
|
||||
tile.rtdd:orangebarrel.name=橙子货桶
|
||||
tile.rtdd:roastedmushrooms_3.name=烤香菇串(熟)
|
||||
tile.rtdd:tonkotsu_ramen.name=猪排蔬菜面加水煮蛋
|
||||
tile.rtdd:flag_red_orange.name=红橙旗子(正向)
|
||||
tile.rtdd:flag_red_orange.name=正向红橙旗子
|
||||
tile.rtdd:roastedmushrooms_1.name=烤香菇串(半熟)
|
||||
itemGroup.name.tangguo_01_basic=基础工具
|
||||
itemGroup.name.tangguo_02_ingredients=食材汤锅
|
||||
|
||||
+3
-3
@@ -415,9 +415,9 @@ todo 补充
|
||||
木棍 木棍 木棍
|
||||
【空】 木棍 【空】
|
||||
● 梯子(b_57)【有序】
|
||||
木棍 【空】 木棍
|
||||
木棍 【空】 木棍
|
||||
木棍 木棍 木棍
|
||||
木棍 支杆 木棍
|
||||
木棍 支杆 木棍
|
||||
木棍 支杆 木棍
|
||||
● 木尖桩(b_215)【有序】
|
||||
【设计】木尖桩(b_215)【有序】
|
||||
木棍 【空】 木棍
|
||||
|
||||
Reference in new issue
Block a user