0

这段代码是为了在一个人加入频道时创建一个变量。然后应该每秒钟增加一个人留在频道中的变量。然后它应该检查该变量是否达到 15,这意味着该人已在频道中停留了 15 秒。如果属实,它应该执行不同操作的集合。但这就是代码停止工作的地方。永远不会触发 15 秒代码,我不知道为什么。

on *:JOIN:*: {
        inc -c %timeinchan. $+ $nick
        if (%timeinchan. $+ $nick == 15) {
          set %tempstats. $+ $nick $read(scores.fil, nr, $lower($nick))
          set %temppoints. $+ $nick $gettok(%tempstats. $+ $nick,2,59)
          set %newpoints. $+ $nick $calc(%temppoints. $+ $nick + 5)
          set %newstats $replace(%tempstats. $+ $nick, %temppoints $+ $nick, %newpoints. $+ $nick)
          write -s $+ $nick scorestest.fil %newstats
          msg $chan $Nick has been awarded 5 points for staying in the channel for 15 seconds. }
      }

今天,我想到了使用 while 循环作为一种可能的解决方案。像这样的东西:

on *:JOIN:*: {
  while ($nick ison $chan) && ($nick != $me) { 
    inc -c %timeinchan. $+ $nick
    if (%timeinchan. $+ $nick == 15) {
      set %tempstats. $+ $nick $read(scores.fil, nr, $lower($nick))
      set %temppoints. $+ $nick $gettok(%tempstats. $+ $nick,2,59)
      set %newpoints. $+ $nick $calc(%temppoints. $+ $nick + 5)
      set %newstats $replace(%tempstats. $+ $nick, %temppoints $+ $nick, %newpoints. $+ $nick)
      write -s $+ $nick scorestest.fil %newstats
      msg $chan $Nick has been awarded 5 points for staying in the channel for 15 seconds. }
  }

但这也不起作用。事实上,一旦有人加入频道,脚本就会使 mIRC 停顿、冻结然后崩溃。

所以...

有什么建议么?

4

2 回答 2

0

好多年没在mIRC编程了,不过这里一看就有问题:

set %tempstats. [ $+ [ $1 ] ] Value

[] 括号将 $1 附加到变量。

于 2015-03-25T05:18:44.620 回答
0

首先,加入事件不需要“*”,因为加入事件只会发生在频道中

顺便说一句,加入事件不会发生事件,如果没有人加入,这就是为什么它不起作用
为什么不使用计时器?

用这个替换你的版本

on *:JOIN:#: {
.timer $+ $nick 0 15 checknick $nick $chan
}

alias checknick {
if ($1 ison $2) {
set %tempstats. $+ $1 $read(scores.fil, nr, $lower($1))
set %temppoints. $+ $1 $gettok(%tempstats. $+ $1,2,59)
set %newpoints. $+ $1 $calc(%temppoints. $+ $1 + 5)
set %newstats $replace(%tempstats. $+ $1, %temppoints $+ $1, %newpoints. $+ $1)
write $+(-,w,*,$1,*) scorestest.fil %newstats
msg $2 $1 has been awarded 5 points for staying in the channel for 15 seconds. }
}

所以,每次有人加入频道时,它会在 15 秒后激活一个带有他们名字的计时器,它会检查 nick 是否在频道上,然后将积分应用到他们的 nick

虽然条件需要变量才能起作用,所以

while ($nick ison $chan) && ($nick != $me) { 

因为 $nick 在加入事件时总是在频道上,所以它永远是真的

告诉我这是不是你想要的

于 2014-07-10T00:04:43.673 回答