0

このコードは、人がチャンネルに参加したときに変数を作成するためのものです。次に、人がチャンネルにとどまっている間、その変数を毎秒増加させることになっています。次に、その変数が 15 に達したかどうかを確認する必要があります。これは、その人が 15 秒間チャネルに留まったことを意味します。true の場合、さまざまなアクションの集合体を実行する必要があります。しかし、ここでコードが機能しなくなります。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 秒後にその名前のタイマーがアクティブになり、ニックがチャンネルにいるかどうかがチェックされ、ニックにポイントが適用されます。

条件が機能するには変数が必要ですが、

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

$nick は常に参加イベントのチャンネルにいるため、常に true になります

それがあなたが望むものかどうか教えてください

于 2014-07-10T00:04:43.673 に答える