Open wang-zhibo opened 4 days ago
更新日志 V0.2.1 (2024-11-25)
重构用户系统为ID绑定机制 修复强制攻击装备显示异常 修复大富翁租金计算问题
这一版逆更新了
@xiaoqidaov2
@Sakura7301 魔改哥也来看下.,
已经是最新代码 [INFO][2024-11-25 19:24:08][game.py:458] - player_file: /home/ubuntu/work/chatgpt-on-wechat-2/plugins/game/data/players.csv, user_id: xdeek
未找到用户ID为 xdeek 的玩家数据
[INFO][2024-11-25 19:24:08][game.py:460] - player: None
[ERROR][2024-11-25 19:24:08][game.py:1509] - 找不到玩家: xdeek
[ERROR][2024-11-25 19:24:08][game.py:1527] - 更新玩家数据出错: 找不到玩家: xdeek
[ERROR][2024-11-25 19:24:08][chat_channel.py:303] - Worker return exception: 找不到玩家: xdeek
Traceback (most recent call last):
File "/home/ubuntu/.pyenv/versions/3.10.10/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, *self.kwargs)
File "/home/ubuntu/work/chatgpt-on-wechat-2/channel/chat_channel.py", line 170, in _handle
reply = self._generate_reply(context)
File "/home/ubuntu/work/chatgpt-on-wechat-2/channel/chat_channel.py", line 182, in _generate_reply
e_context = PluginManager().emit_event(
File "/home/ubuntu/work/chatgpt-on-wechat-2/plugins/plugin_manager.py", line 191, in emit_event
instance.handlers[e_context.event](e_context, args, **kwargs)
File "/home/ubuntu/work/chatgpt-on-wechat-2/plugins/game/game.py", line 343, in on_handle_context
reply = cmd_handlers[cmd](current_id, nickname)
File "/home/ubuntu/work/chatgpt-on-wechat-2/plugins/game/game.py", line 322, in
@wang-zhibo 看代码它求婚原来用的是nickname
因为时间有限没改完,如果旧版本能用就先用旧版。平常比较忙,今天中午再修一次 。攻击那个错误,我也很纳闷,我刚刚检查过了,确实是有个变量没有定义,这个bug,怎么说呢,就很有意思,chatgpt-on-wechat 的问题,加载插件的形式,似乎不会删除上一次正常运行定义的变量。这导致我变量丢失了都不知道。之后的测试我会避免使用@bot #scanp去重载插件,
已修复
已修复
[ERROR][2024-11-26 12:59:44][chat_channel.py:303] - Worker return exception: name 'items_info' is not defined
Traceback (most recent call last):
File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, *self.kwargs)
File "/app/channel/chat_channel.py", line 170, in _handle
reply = self._generate_reply(context)
File "/app/channel/chat_channel.py", line 182, in _generate_reply
e_context = PluginManager().emit_event(
File "/app/plugins/plugin_manager.py", line 191, in emit_event
instance.handlers[e_context.event](e_context, args, **kwargs)
File "/app/plugins/game/game.py", line 343, in on_handle_context
reply = cmd_handlers[cmd](current_id, nickname)
File "/app/plugins/game/game.py", line 326, in
啊?我在我的测试环境中是没问题的,莫非我代码变更少了一部分?
发现问题了,确实是变量未定义,真离谱啊。这插件变量少了第二次了,居然不提示我,还不报错。这下我得好好检查下了,太坑人了点
Reference
更新试试
@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度
现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.
@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度
现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.
这个很简单,毕竟群也有群ID,之后再看看吧。大富翁的问题也简单啊,大富翁的地图是能自己更新的。你只需要改配置文件,定期删除下地图数据就行了。为了游戏性你就只能选择扩大地图或者定时删除。只是我没有写详细的配置文件说明,后面我会重构一次代码,把配置文件整合。
@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度 现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.
这个很简单,毕竟群也有群ID,之后再看看吧。大富翁的问题也简单啊,大富翁的地图是能自己更新的。你只需要改配置文件,定期删除下地图数据就行了。为了游戏性你就只能选择扩大地图或者定时删除。只是我没有写详细的配置文件说明,后面我会重构一次代码,把配置文件整合。
哈哈哈是蛮简单的,其实可拓展性还蛮容易的,再搞个天黑请闭眼的都行,
@xiaoqidaov2 大哥你看看这个代码逻辑OK的吗?我我不好测试,主要目的就是加人抢劫事件,路过会随机丢失一块地产.
def _init_events_config(self): """初始化事件配置""" if not os.path.exists(self.events_file): default_events = { "good_events": [
],
"bad_events": [
# 其他事件
**{
"id": "robbery",
"name": "被抢劫",
"description": "经过特定地块,丢失了一个地产。",
"effect": {"gold": -100, "property_loss": True} # 事件增加地产丢失的标记
}**
]
}
self._save_json(self.events_file, default_events)
**def trigger_random_event(self, player_id: str) -> dict: """触发随机事件""" event_type = random.choice(["good_events", "bad_events"]) events = self.events_data[event_type] event = random.choice(events)
if event["id"] == "robbery":
# 检查玩家是否有地产
player_properties = self.get_player_properties(player_id)
if player_properties:
lost_property = random.choice(player_properties)
self._lose_property(player_id, lost_property) # 处理丢失地产
event["lost_property"] = lost_property
else:
event["description"] = "你没有任何地产,逃过一劫。"
return event
def get_block_info(self, position: int) -> dict: """获取指定位置的地块信息""" position = position % self.map_data["total_blocks"] block_info = self.map_data["blocks"].get(str(position), self.map_data["default_block"])
# 如果地块是抢劫事件触发地块,设置标记
if block_info["type"] == "机遇" and random.random() < 0.2: # 20% 触发几率
block_info["event"] = "robbery"
return block_info**
如题