Rs794613 / PcrDuel

创建贵族进行俄罗斯转盘决斗,提升贵族等级,争夺pcr女友的小游戏。
GNU General Public License v3.0
53 stars 26 forks source link

移除贵族决斗CD #15

Open Lanly109 opened 3 years ago

Lanly109 commented 3 years ago
viper-sys commented 3 years ago

你好,我想根据这个逻辑修改一下猜头像,但发现猜头像里是通过game对象判断游戏是否正在进行的,如果删掉sleep而是改成发起计划任务的话,game对象里关于游戏正在进行的判定就乱了,想问下关于这里可以怎么修改

Lanly109 commented 3 years ago

你好,我想根据这个逻辑修改一下猜头像,但发现猜头像里是通过game对象判断游戏是否正在进行的,如果删掉sleep而是改成发起计划任务的话,game对象里关于游戏正在进行的判定就乱了,想问下关于这里可以怎么修改

猜头像是GameMaster类来控制群游戏,每一个群游戏用Game类表示。代码里是用上下文管理器来实现一个游戏的开始与结束,也就是说,with gm.start_game(ev.group_id) as game这个上下文管理器结束后,游戏就结束了,具体的实现是__init__.py里Game类的__enter____exit__函数。要修改的话,就不要采用原来的上下文管理器的形式,自己手动控制游戏的开始与结束,也就是调用GameMaster类里的start_gameexit_game函数。具体实现可以参考我改的这个代码

viper-sys commented 3 years ago

十分感谢,已经参考代码实现了猜立绘和猜头像成功后取消cd,但又发现用start_game和exit_game进行游戏控制会导致反并发插件识别失效,反并发功能无法正常实现。但反并发源码有点看不懂,不知道应该改哪里...

viper-sys commented 3 years ago

思考了一下感觉是取消cd的逻辑导致的,触发器触发后启动一个计划任务就结束了,不会引起反并发。这时候就会导致先执行猜头像后并不会保护猜头像,还能执行其他指令。但先执行其他指令后会保护该指令,无法执行猜头像。目前还不知道要怎么解决...

viper-sys commented 3 years ago

目前先用while每秒遍历一次状态实现了...不知道有没有更好的方法

Lanly109 commented 3 years ago

思考了一下感觉是取消cd的逻辑导致的,触发器触发后启动一个计划任务就结束了,不会引起反并发。这时候就会导致先执行猜头像后并不会保护猜头像,还能执行其他指令。但先执行其他指令后会保护该指令,无法执行猜头像。目前还不知道要怎么解决...

确实,反并发是根据触发器对应的函数是否结束来判断的。这种写法确实会使反并发失效。我想了下,可以所有游戏共用一个GameMaster类的实例。这样也能实现反并发,因为一个群是否正在进行游戏是GameMaster判断的。