PcrDuel icon indicating copy to clipboard operation
PcrDuel copied to clipboard

移除贵族决斗CD

Open Lanly109 opened this issue 3 years ago • 6 comments

  • 优化逻辑,移除贵族决斗中,发送接受后需等待30秒的CD。具体实现为:设定WAIT_TIME时间后运行的拒绝函数的定时任务,如果期间接受,则移除设定的拒绝函数的定时任务,并等待1s后执行贵族决斗开始函数。如果未接受,则执行拒绝函数。(其他小游戏的CD也可以通过这个逻辑优化移除)
  • 修正没有女友时的文本
  • 加了个贵族决斗at全体成员的彩蛋(原代码会报错)

Lanly109 avatar Feb 27 '21 15:02 Lanly109

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

viper-sys avatar Feb 28 '21 03:02 viper-sys

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

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

Lanly109 avatar Feb 28 '21 11:02 Lanly109

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

viper-sys avatar Feb 28 '21 14:02 viper-sys

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

viper-sys avatar Feb 28 '21 15:02 viper-sys

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

viper-sys avatar Feb 28 '21 15:02 viper-sys

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

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

Lanly109 avatar Mar 01 '21 15:03 Lanly109