钓鱼获得龙虾/螃蟹 改小bug(可用版本)
This commit is contained in:
1 parent
23598ed3dd
commit
a647878ac1
12 files changed
+373
-36
No files matched your search
+74
@@ -0,0 +1,74 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
================================================================================
|
||||
原版放置·钓鱼掉落(螃蟹/龙虾)
|
||||
================================================================================
|
||||
给"螃蟹(rtdd:crab)/龙虾(rtdd:lobster)"提供钓鱼获取渠道:
|
||||
玩家收杆时(PlayerFishingServerEvent, 掉落物生成前)触发本类:
|
||||
- 尝试把本次钓鱼的默认掉落取消(cancel=True), 避免原版鱼再出现;
|
||||
- 直接在鱼钩位置生成 1 只 螃蟹/龙虾, 让"钓上来的是什么就是什么"。
|
||||
|
||||
【为什么是普通逻辑类、不监听事件】
|
||||
全模组只有 FeatureDispatcher 监听游戏事件。本类不监听, 由 FeatureDispatcher
|
||||
实例化并在 PlayerFishingServerEvent 时把事件转发给本类 OnFishing。
|
||||
(与 siwangshengwu/DeadmobGeneratorService 同架构。)
|
||||
|
||||
【概率】
|
||||
现为测试用 100%(50/50 螃蟹/龙虾); 测试通过后请改回正式概率。
|
||||
================================================================================
|
||||
"""
|
||||
import random
|
||||
import mod.server.extraServerApi as serverApi
|
||||
|
||||
comp = serverApi.GetEngineCompFactory()
|
||||
|
||||
# ---- 只有方块/游戏相关才用 LevelId(这里 CreateItem 用玩家 id, 不依赖 LevelId) ----
|
||||
from ....BlueFoxTools.ToolsConfig import LevelId
|
||||
|
||||
|
||||
class YuanbanFishingService(object):
|
||||
"""
|
||||
钓鱼掉落·螃蟹/龙虾(逻辑类, 由 FeatureDispatcher 实例化并转发事件)
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
print "===== YuanbanFishingService 钓鱼掉落(螃蟹/龙虾)已挂载 ====="
|
||||
|
||||
def OnFishing(self, args):
|
||||
"""
|
||||
PlayerFishingServerEvent(收杆时、掉落物生成前):
|
||||
取消默认钓物 + 在鱼钩位置生成螃蟹/龙虾。
|
||||
args 关键字段: playerId(玩家) / hookEntity(鱼钩实体id)。
|
||||
"""
|
||||
try:
|
||||
playerId = args.get("playerId")
|
||||
if not playerId:
|
||||
return
|
||||
# 正式概率: 螃蟹 10% / 龙虾 6%
|
||||
roll = random.random()
|
||||
if roll < 0.10:
|
||||
sea = "rtdd:crab"
|
||||
elif roll < 0.16:
|
||||
sea = "rtdd:lobster"
|
||||
else:
|
||||
return # 未命中: 不取消默认, 保持原版钓鱼出原版物品
|
||||
# 命中才取消默认鱼/杂物掉落, 避免"原版鱼+螃蟹"两只
|
||||
args["cancel"] = True
|
||||
pos = self._spawnPos(playerId, args.get("hookEntity"))
|
||||
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||
comp.CreateItem(playerId).SpawnItemToLevel(
|
||||
{"itemName": sea, "count": 1, "auxValue": 0}, dim, pos)
|
||||
print "[YBFishing] 钓到 %s at %s" % (sea, pos)
|
||||
except Exception as e:
|
||||
print "[YBFishing-ERR]", e
|
||||
|
||||
def _spawnPos(self, playerId, hookId):
|
||||
"""生成位置: 优先鱼钩位置, 取不到再用玩家脚下"""
|
||||
if hookId:
|
||||
try:
|
||||
p = comp.CreatePos(hookId).GetFootPos()
|
||||
return (p[0], p[1], p[2])
|
||||
except Exception:
|
||||
pass
|
||||
foot = comp.CreatePos(playerId).GetFootPos()
|
||||
return (foot[0], foot[1] + 0.5, foot[2])
|
||||
Reference in new issue
Block a user