xiaoqidaov2 / game

chatgpt-on-wechat的游戏娱乐插件,支持钓鱼,外出探险,经济系统,等级系统。
7 stars 1 forks source link

求婚 异常, 好像是查询被艾特人时候传的是 用户昵称,不是 user id #9

Open wang-zhibo opened 4 days ago

wang-zhibo commented 4 days ago

如题

workholmes commented 4 days ago

更新日志 V0.2.1 (2024-11-25)

重构用户系统为ID绑定机制 修复强制攻击装备显示异常 修复大富翁租金计算问题

这一版逆更新了

@xiaoqidaov2

  1. [ERROR][2024-11-25 06:13:44][chat_channel.py:303] - Worker return exception: name 'attacker_total_attack' is not defined 直接攻击不了了 2.虽然你更新思路和我想的一样把onwer的又用户名改成了user_id, 但是这个一连串的反应又bug了.租金依然异常 image image

@Sakura7301 魔改哥也来看下.,

wang-zhibo commented 4 days ago

已经是最新代码 [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 "求婚": lambda i, n: self.propose_marriage(i, content, msg), File "/home/ubuntu/work/chatgpt-on-wechat-2/plugins/game/game.py", line 1183, in propose_marriage self._update_player_data(target.nickname, { File "/home/ubuntu/work/chatgpt-on-wechat-2/plugins/game/game.py", line 1510, in _update_player_data raise ValueError(f"找不到玩家: {user_id}") ValueError: 找不到玩家: xdeek

workholmes commented 4 days ago

@wang-zhibo 看代码它求婚原来用的是nickname

xiaoqidaov2 commented 4 days ago

因为时间有限没改完,如果旧版本能用就先用旧版。平常比较忙,今天中午再修一次 。攻击那个错误,我也很纳闷,我刚刚检查过了,确实是有个变量没有定义,这个bug,怎么说呢,就很有意思,chatgpt-on-wechat 的问题,加载插件的形式,似乎不会删除上一次正常运行定义的变量。这导致我变量丢失了都不知道。之后的测试我会避免使用@bot #scanp去重载插件,

xiaoqidaov2 commented 4 days ago

已修复

workholmes commented 3 days ago

已修复

[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 "攻击": lambda i, n: self.attack_player(i, content, msg), File "/app/plugins/game/game.py", line 1359, in attack_player if target.equipped_armor and target.equipped_armor in items_info: NameError: name 'items_info' is not defined 攻击修复了吗,租金还没试

xiaoqidaov2 commented 3 days ago

啊?我在我的测试环境中是没问题的,莫非我代码变更少了一部分?Screenshot_20241127_000745.jpg

xiaoqidaov2 commented 3 days ago

发现问题了,确实是变量未定义,真离谱啊。这插件变量少了第二次了,居然不提示我,还不报错。这下我得好好检查下了,太坑人了点

xiaoqidaov2 commented 3 days ago

Reference

更新试试

workholmes commented 2 days ago

@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度

现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.

xiaoqidaov2 commented 2 days ago

@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度

现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.

这个很简单,毕竟群也有群ID,之后再看看吧。大富翁的问题也简单啊,大富翁的地图是能自己更新的。你只需要改配置文件,定期删除下地图数据就行了。为了游戏性你就只能选择扩大地图或者定时删除。只是我没有写详细的配置文件说明,后面我会重构一次代码,把配置文件整合。

workholmes commented 1 day ago

@xiaoqidaov2 可以,基本没有问题了,强啊这debug速度 现在改成id后,如果是不同的群里,会是同一个id,然后改不了名,不能串群玩是一个问题. 另外就是大富翁,如果所有地都被买下来后,就没什么玩法了.有点无聊.

这个很简单,毕竟群也有群ID,之后再看看吧。大富翁的问题也简单啊,大富翁的地图是能自己更新的。你只需要改配置文件,定期删除下地图数据就行了。为了游戏性你就只能选择扩大地图或者定时删除。只是我没有写详细的配置文件说明,后面我会重构一次代码,把配置文件整合。

哈哈哈是蛮简单的,其实可拓展性还蛮容易的,再搞个天黑请闭眼的都行,

workholmes commented 1 day ago

@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**