加入了新的丹药
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
[Xiuxian]
|
||||
enable = true
|
||||
# 指令集合(无需前缀),按核心/经济/信息/社交/门派分类
|
||||
command = ["修仙帮助", "积分购石", "积分换灵石", "注册修仙", "我的状态", "闭关", "出关", "聚灵", "排行榜", "修仙签到", "坊市", "购买", "乾坤袋", "突破", "强行突破", "劫掠", "赠与", "赠送", "创建门派", "加入门派", "退出门派"]
|
||||
command = ["修仙帮助", "积分购石", "积分换灵石", "注册修仙", "我的状态", "闭关", "出关", "聚灵", "排行榜", "修仙签到", "坊市", "购买", "乾坤袋", "使用", "服用", "突破", "强行突破", "劫掠", "赠与", "赠送", "创建门派", "加入门派", "退出门派"]
|
||||
# 用法提示:命令格式错误时的反馈文本
|
||||
command-format = """
|
||||
📜修仙指令:
|
||||
@@ -17,6 +17,8 @@ command-format = """
|
||||
坊市
|
||||
购买
|
||||
乾坤袋
|
||||
使用 物品名
|
||||
服用 回气丹
|
||||
突破 - 需要丹药
|
||||
强行突破 - 不需要丹药
|
||||
劫掠 - 抢劫其他门派弟子
|
||||
@@ -60,7 +62,17 @@ spirit_roots = [
|
||||
# 坊市商品:名称:类型:价格(价格单位为灵石)。类型用于展示与分类,不影响逻辑。
|
||||
[Xiuxian.shop]
|
||||
items = [
|
||||
"筑基丹:丹药:500",
|
||||
"筑基丹:丹药:200",
|
||||
"金元丹:丹药:1000",
|
||||
"结婴丹:丹药:10000",
|
||||
"化神丹:丹药:40000",
|
||||
"合体丹:丹药:200000",
|
||||
"大乘丹:丹药:1000000",
|
||||
"渡劫丹:丹药:2000000",
|
||||
"飞升丹:丹药:10000000",
|
||||
"洗髓丹:丹药:2000",
|
||||
"改灵丹:丹药:20000",
|
||||
"天灵露:丹药:200000",
|
||||
"回气丹:丹药:200",
|
||||
"聚灵符:材料:100"
|
||||
]
|
||||
|
||||
@@ -496,6 +496,8 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return await self._cmd_buy(bot, sender, roomid, content)
|
||||
if cmd == "乾坤袋":
|
||||
return await self._cmd_bag(bot, sender, roomid)
|
||||
if cmd in ("使用", "服用"):
|
||||
return await self._cmd_use(bot, sender, roomid, content)
|
||||
if cmd == "突破":
|
||||
return await self._cmd_breakthrough(bot, sender, roomid)
|
||||
if cmd == "强行突破":
|
||||
@@ -546,7 +548,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
# if self.revoke:
|
||||
# self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "命令格式错误"
|
||||
player = self.redis_db.get_player(sender, roomid or "")
|
||||
player = self._get_player_with_cache(sender, roomid or "")
|
||||
if player:
|
||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "⚠️ 已注册,无需重复注册", sender)
|
||||
# if self.revoke:
|
||||
@@ -591,6 +593,8 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
lines.append("注册修仙 道号")
|
||||
lines.append("聚灵 数量")
|
||||
lines.append("购买 物品 数量")
|
||||
lines.append("使用 物品名")
|
||||
lines.append("服用 回气丹")
|
||||
lines.append("赠与 目标wxid 数量")
|
||||
lines.append("赠送 目标wxid 物品 数量")
|
||||
lines.append("劫掠 目标wxid")
|
||||
@@ -652,7 +656,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return True, "积分购石"
|
||||
|
||||
async def _cmd_status(self, bot: WechatAPIClient, sender: str, roomid: str) -> Tuple[bool, str]:
|
||||
player = self.redis_db.get_player(sender, roomid or "")
|
||||
player = self._get_player_with_cache(sender, roomid or "")
|
||||
if not player:
|
||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "未注册,请先发送:注册修仙 道号", sender)
|
||||
# if self.revoke:
|
||||
@@ -679,7 +683,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return True, "状态展示"
|
||||
|
||||
async def _cmd_cultivate(self, bot: WechatAPIClient, sender: str, roomid: str) -> Tuple[bool, str]:
|
||||
player = self.redis_db.get_player(sender, roomid or "")
|
||||
player = self._get_player_with_cache(sender, roomid or "")
|
||||
if not player:
|
||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "未注册,请先发送:注册修仙 道号", sender)
|
||||
# if self.revoke:
|
||||
@@ -713,7 +717,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return True, "闭关成功"
|
||||
|
||||
async def _cmd_finish_cultivate(self, bot: WechatAPIClient, sender: str, roomid: str) -> Tuple[bool, str]:
|
||||
player = self.redis_db.get_player(sender, roomid or "")
|
||||
player = self._get_player_with_cache(sender, roomid or "")
|
||||
if not player:
|
||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "未注册,请先发送:注册修仙 道号", sender)
|
||||
# if self.revoke:
|
||||
@@ -753,7 +757,7 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
return True, "出关结算"
|
||||
|
||||
async def _cmd_gather(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]:
|
||||
player = self.redis_db.get_player(sender, roomid or "")
|
||||
player = self._get_player_with_cache(sender, roomid or "")
|
||||
if not player:
|
||||
# client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "未注册,请先发送:注册修仙 道号", sender)
|
||||
# if self.revoke:
|
||||
@@ -774,13 +778,18 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
# self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 5)
|
||||
return False, "灵石不足"
|
||||
player["spirit_stone"] = stones - qty
|
||||
player["cultivation_points"] = int(player.get("cultivation_points", 0)) + qty * 10
|
||||
base_gain = qty * 10
|
||||
bonus = float(player.get("gather_bonus", 0.0))
|
||||
gain = int(base_gain * (1.0 + bonus))
|
||||
player["cultivation_points"] = int(player.get("cultivation_points", 0)) + gain
|
||||
if bonus > 0:
|
||||
player["gather_bonus"] = 0.0
|
||||
self._save_player(player)
|
||||
# 自动层级提升(不跨瓶颈)
|
||||
self._auto_layer_up(sender, player)
|
||||
self.redis_db.leaderboard_add(sender, float(player["cultivation_points"]))
|
||||
self._rate_set(sender, roomid or "", "聚灵")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), f"✅ 聚灵成功,消耗灵石{qty},获得修为{qty * 10}", sender)
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), f"✅ 聚灵成功,消耗灵石{qty},获得修为{gain}", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return True, "聚灵成功"
|
||||
@@ -790,8 +799,11 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
lines = ["🏆 修为排行榜 Top10"]
|
||||
rank = 1
|
||||
for uid, score in top:
|
||||
player = self._get_player_with_cache(uid, roomid or "")
|
||||
cp = int(player.get("cultivation_points", int(score))) if player else int(score)
|
||||
nick = (player.get("dao_name") if player else None) or uid
|
||||
mark = "你" if uid == sender else ""
|
||||
lines.append(f"{rank}. {uid} - {int(score)} {mark}")
|
||||
lines.append(f"{rank}. {nick} - 修为 {cp} {mark}")
|
||||
rank += 1
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender), "\n".join(lines), sender)
|
||||
if self.revoke:
|
||||
@@ -1011,6 +1023,100 @@ class XiuxianPlugin(MessagePluginInterface):
|
||||
self._rate_set(sender, roomid or "", "背包")
|
||||
return True, "背包"
|
||||
|
||||
async def _cmd_use(self, bot: WechatAPIClient, sender: str, roomid: str, content: str) -> Tuple[bool, str]:
|
||||
item_name = content.strip()
|
||||
if not item_name:
|
||||
return False, "命令格式错误"
|
||||
player = self._get_player(sender, roomid or "")
|
||||
if not player:
|
||||
return False, "未注册"
|
||||
player = self._check_status_update(player)
|
||||
inv = player.get("inventory") or {}
|
||||
qty = int(inv.get(item_name, 0))
|
||||
if qty <= 0:
|
||||
return False, "物品不足"
|
||||
if item_name == "聚灵符":
|
||||
inv[item_name] = qty - 1
|
||||
player["inventory"] = inv
|
||||
player["gather_bonus"] = float(player.get("gather_bonus", 0.0)) + 0.2
|
||||
if self.xdb:
|
||||
try:
|
||||
self.xdb.remove_item(sender, item_name, 1)
|
||||
except Exception:
|
||||
pass
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "使用")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "✅ 已使用聚灵符,本次聚灵收益提升", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return True, "使用聚灵符"
|
||||
if item_name == "回气丹":
|
||||
status = player.get("status", "Idle")
|
||||
if status not in ("Unstable_Qi", "Injured"):
|
||||
return False, "当前状态无需服用"
|
||||
inv[item_name] = qty - 1
|
||||
player["inventory"] = inv
|
||||
player["status"] = "Idle"
|
||||
player["status_until"] = None
|
||||
if self.xdb:
|
||||
try:
|
||||
self.xdb.remove_item(sender, item_name, 1)
|
||||
except Exception:
|
||||
pass
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "使用")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, "✅ 已服用回气丹,状态已恢复为空闲", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return True, "服用回气丹"
|
||||
# 灵根提升丹药
|
||||
upgrade_map = {
|
||||
"洗髓丹": {"from": "废灵根", "to": "凡灵根", "rate": 0.6, "injured_min": 30},
|
||||
"改灵丹": {"from": "凡灵根", "to": "地灵根", "rate": 0.3, "injured_min": 60},
|
||||
"天灵露": {"from": "地灵根", "to": "天灵根", "rate": 0.1, "injured_min": 120},
|
||||
}
|
||||
if item_name in upgrade_map:
|
||||
cur_root = player.get("spirit_root", "凡灵根")
|
||||
rule = upgrade_map[item_name]
|
||||
if cur_root != rule["from"]:
|
||||
return False, "当前灵根不适用"
|
||||
# 扣减丹药
|
||||
inv[item_name] = qty - 1
|
||||
player["inventory"] = inv
|
||||
if self.xdb:
|
||||
try:
|
||||
self.xdb.remove_item(sender, item_name, 1)
|
||||
except Exception:
|
||||
pass
|
||||
roll = random.random()
|
||||
if roll < rule["rate"]:
|
||||
# 成功,更新灵根与倍率
|
||||
target = rule["to"]
|
||||
player["spirit_root"] = target
|
||||
mult = 1.0
|
||||
for name, m in self.spirit_roots:
|
||||
if name == target:
|
||||
mult = m
|
||||
break
|
||||
player["spirit_root_mult"] = mult
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "使用")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, f"✅ 灵根提升成功,当前灵根:{target}", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return True, "灵根提升成功"
|
||||
else:
|
||||
# 失败,受伤保护
|
||||
player["status"] = "Injured"
|
||||
player["status_until"] = (datetime.now(timezone.utc) + timedelta(minutes=rule["injured_min"])) .isoformat()
|
||||
self._save_player(player)
|
||||
self._rate_set(sender, roomid or "", "使用")
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(roomid or sender, f"❌ 灵根提升失败,灵气反噬,受伤{rule['injured_min']}分钟", sender)
|
||||
if self.revoke:
|
||||
self.revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 10)
|
||||
return False, "灵根提升失败"
|
||||
return False, "不可使用的物品"
|
||||
|
||||
async def _cmd_breakthrough(self, bot: WechatAPIClient, sender: str, roomid: str) -> Tuple[bool, str]:
|
||||
player = self._get_player(sender, roomid or "")
|
||||
if not player:
|
||||
|
||||
Reference in New Issue
Block a user