2014-01-11 46 views
0

我一直在試圖修改一些代碼,我已經找到了一組我的,但我一直充斥着一些缺陷,主要與現在的文字顯示正確mIRC的代碼變更不工作按計劃

on *:start:{ 
    hmake uno 50 
    if ($isfile(uno.dat)) hload uno uno.dat 
} 
on *:exit: hsave uno uno.dat 
on *:nick:{ 
    var %i = $hget(0), %c 
    while (%i) { 
    if ($newnick ison $hget(%i)) { 
     %c = $v2 
     break 
    } 
    dec %i 
    } 
    if ($hget(%c,$nick)) { 
    hadd %c $newnick $v1 
    hadd %c $hfind(%c,$nick).data $newnick 
    } 
} 
on *:quit:{ 
    var %i = $hget(0), %c 
    while (%i) { 
    if ($me ison $hget(%i)) && ($hget($hget(%i),$nick)) remplayer %c $nick $nick has been removed from the current game. 
    dec %i 
    } 
} 
on *:part:#:{ 
    if (!$hget(#)) return 
    if ($hget(#,$nick)) remplayer # $nick $nick was removed from the current game. 
    elseif ($nick == $me) hfree # 
} 
on *:kick:#:{ 
    if (!$hget(#)) return 
    if ($hget(#,$nick)) remplayer # $nick $nick was removed from the current game. 
    elseif ($nick == $me) hfree # 
} 
on $*:text:/^[@!.](uno)?score/Si:#:{ 
    var %u = $iif($2,$2,$nick) 
    $iif($left($1,1) == @,msg #,notice $nick) %u has $bytes($iif($hget(uno,%u),$v1,0),b) wins. 
} 
on $*:text:/^[@!.](uno)?top10$/Si:#:{ 
    var %x, %i = $hget(uno,0).item, %o 
    while (%i) { 
    %x = $instok(%x,$hget(uno,$hget(uno,%i).item),0,32) 
    dec %i 
    } 
    %x = $sorttok(%x,32,nr) 
    %i = 1 
    while (%i <= 10) { 
    if (!$hget(uno,%i).item) break 
    %o = $addtok(%o,$ord(%i) $+ : $hfind(uno,$gettok(%x,%i,32),$calc($findtok(%o,$gettok(%x,%i,32),0,32) +1)).data - $bytes($gettok(%x,%i,32),b) |,32) 
    inc %i 
    } 
    $iif($left($1,1) == @,msg #,notice $nick) $left(%o,-1) 
} 
on $*:text:/^[@!.]uno$/Si:#:{ 
    if ($hget(#,players)) notice $nick There is already a PokéUNO game in progress in # $+ . 
    else { 
    if ($hget(#)) hfree # 
    hmake # 
    hadd # p1 $nick 
    hadd # $nick $cards(7) 
    hinC# players 
    msg # $nick has started Poké3U04N12O v1.0 by BrAndo and AuroVee. Type !join to join the game. 
    notice $nick Type !deal to start the game. 
    } 
} 
on $*:text:/^[@!.]?join$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif ($hget(#,$nick)) notice $nick You are already playing! 
    else { 
    hinC# players 
    hadd # p $+ $hget(#,players) $nick 
    hadd # $nick $cards(7) 
    msg # $nick will be player $hget(#,players) $+ . 
    } 
} 
on $*:text:/^[@!.](deal|start(?game)?|play|begin)$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    elseif ($hget(#,turn)) notice $nick The game has already started. 
    elseif ($nick != $hget(#,p1)) msg # Only $v2 can start the game. 
    elseif ($hget(#,players) !> 1) msg # You need atleast two people to play. 
    else { 
    var %c = 01 
    while (01* iswm %c) %c = $cards(1) 
    hadd # top %c 
    hadd # turn 1 
    hadd # rev $true 
    msg # $hget(#,p1) $+ 's turn. 
    msg # Top card: $hget(#,top) 
    notice $nick Your cards: $hget(#,$nick) 
    } 
} 
on $*:text:/^[@!.](endgame|uno(stop|end))$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif ($nick != $hget(#,p1)) msg # Only $v2 can end the game. 
    else { 
    hfree # 
    msg # Game ended by $nick $+ . 
    } 
} 
on $*:text:/^[@!.]quit$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    else remplayer # $nick $nick has left the game. 
} 
on $*:text:/^[@!.]kickplayer (.+)$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif ($nick != $hget(#,p1)) msg # Only $v1 can kick people from the game. 
    elseif (!$hget(#,$regml(1))) msg # $regml(1) is not in this game. 
    else remplayer # $regml(1) $regml(1) has been kicked from the game by $nick $+ . 
} 
on $*:text:/^[@!.](show)?(hand|cards?)$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    else notice $nick Your cards: $hget(#,$nick) 
} 
on $*:text:/^[@!.](uno)?count$/Si:#:{ 
    if (!$hget(#,p1)) return 
    else { 
    $iif($left($1,1) == @,msg #,notice $nick) Current score: $regsubex($str(.,$hget(#,players)),/./g,$+($hget(#,p\n),:,$chr(32),$numtok($hget(#,$hget(#,p\n)),32),$chr(32))) 
    $iif($left($1,1) == @,msg #,notice $nick) Its $hget(#,p $+ $hget(#,turn)) $+ 's turn. 
    } 
} 
on $*:text:/^[@!.]topcard$/Si:#:{ 
    if (!$hget(#,p1)) return 
    msg # Top card: $hget(#,top) 
} 
on $*:text:/^[@!.]draw ?(card)?$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn. 
    else { 
    var %c = $cards(1) 
    hadd # $nick $instok($hget(#,$nick),%c,0,32) 
    notice $nick You drew: %c 
    hadd # pass $nick 
    } 
} 
on $*:text:/^[@!.]pass$/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn. 
    elseif ($hget(#,pass) != $nick) notice $nick You have to draw once first. 
    else { 
    nextturn 
    var %nnick = $hget(#,p $+ $hget(#,turn)) 
    msg # %nnick $+ 's turn 
    msg # Top card: $hget(#,top) 
    notice %nnick Your cards: $hget(#,%nnick) 
    hdel # pass 
    } 
} 
on $*:text:/^[@!.]play/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn. 
    elseif (!$iscard($2-)) notice $nick Syntax: !play <color> <card> or !play WD4/W <color> 
    elseif (!$hascard($2-,$nick)) notice $nick You don't have that card. 
    else { 
    noop $regex($iscard($2-),/^\x03(\d{2})(\[.+?\])$/) 
    var %co = $regml(1), %c = $regml(2) 
    if (%co isin $hget(#,top)) || (%c == $strip($hget(#,top))) || (%c == [*]) { 
     delcard $nick $2- 
     hadd # top $iscard($2-) 
     if (%c == [D2]) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     hadd # %snick $instok($hget(#,%snick),$cards(2),0,32) 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%co == 12) { 
      %msg = %snick is hit by Hydro Pump $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else if (%co == 09) { 
      %msg = %snick is hit by Seed Flare $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else if (%co == 08) { 
      %msg = %snick is hit by Thunder $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else { 
      %msg = %snick is hit by Fire Blast $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     } 
     elseif (%c == [S]) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     %if (%co == 12) { 
      %msg = %snick is hit by Surf! %nnick $+ 's turn. 
     } 
     else if (%co == 09) { 
      %msg = %snick is hit by Energy Ball! %nnick $+ 's turn. 
     } 
     else if (%co == 08) { 
      %msg = %snick is hit by Thunderbolt! %nnick $+ 's turn. 
     } 
     else { 
      %msg = %snick is hit by Flamethrower! %nnick $+ 's turn. 
     } 
     } 
     elseif (%c == [R]) { 
     hadd # rev $iif($hget(#,rev),$false,$true) 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%co == 08) { 
      %msg = $nick used Volt Switch! %nnick $+ 's turn. 
     } 
     else 
     { 
      %msg = $nick used U Turn! %nnick $+ 's turn. 
     } 
     } 
     elseif (%c == [*]) && (4 isin $2-) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     hadd # %snick $instok($hget(#,%snick),$cards(4),0,32) 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%co == 12) { 
      %msg = %snick is hit by Hydro Cannon $+ $chr(44) and draws 4! %nnick $+ 's turn. 
     } 
     else if (%co == 09) { 
      %msg = %snick is hit by Frenzy Plant $+ $chr(44) and draws 4! %nnick $+ 's turn. 
     } 
     else if (%co == 08) { 
      %msg = %snick is hit by Bolt Strike $+ $chr(44) and draws 4! %nnick $+ 's turn. 
     } 
     else { 
      %msg = %snick is hit by Blast Burn $+ $chr(44) and draws 4! %nnick $+ 's turn. 
     }  } 
     elseif (%c == [*]) { 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%co == 12) { 
      %msg = Deck Type is now Water! %nnick $+ 's turn. 
     } 
     else if (%co == 09) { 
      %msg = Deck Type is now Grass! %nnick $+ 's turn. 
     } 
     else if (%co == 08) { 
      %msg = Deck Type is now Electric! %nnick $+ 's turn. 
     } 
     else { 
      %msg = Deck Type is now Fire! %nnick $+ 's turn. 
     } 
     } 
     else { 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)), %msg = %nnick $+ 's turn. 
     } 
     if ($numtok($hget(#,$nick),32) == 1) msg # $nick has 3U04N12O! 
     elseif (!$v1) { 
     msg # Congratulations $nick - you won the match!!! 
     hfree # 
     hinc uno $nick 
     return 
     } 
     msg # %msg 
     msg # Top card: $hget(#,top) 
     notice %nnick Your cards: $hget(#,%nnick) 
     hdel # pass 
    } 
    else notice $nick That card doesn't play. 
    } 
} 
alias cards { 
    var %c = 12[1] 12[2] 12[3] 12[4] 12[5] 12[6] 12[7] 12[8] 12[9] 09[1] 09[2] 09[3] 09[4] 09[5] 09[6] 09[7] 09[8] 09[9] $& 
    08[1] 08[2] 08[3] 08[4] 08[5] 08[6] 08[7] 08[8] 08[9] 04[1] 04[2] 04[3] 04[4] 04[5] 04[6] 04[7] 04[8] 04[9] 01[WD4] $& 
    01[WD4] 01[WD4] 01[WD4] 12[D2] 12[D2] 09[D2] 09[D2] 08[D2] 08[D2] 04[D2] 04[D2] 12[S] 12[S] 09[S] 09[S] 08[S] 08[S] $& 
    04[S] 04[S] 12[R] 12[R] 09[R] 09[R] 08[R] 08[R] 04[R] 04[R] 01[W] 01[W] 01[W] 01[W] 
    var %i = $1, %o 
    while (%i) { 
    %o = $instok(%o,$gettok(%c,$r(1,68),32),0,32) 
    dec %i 
    } 
    return %o 
} 
alias iscard { 
    if ($regex($1,/^([bgyr])\w* (\d)$/i)) return $+($col($regml(1)),[,$regml(2),]) 
    elseif ($regex($1,/^w(?:ild)? ?d?(?:raw)? ?4? ([bgyr])/i)) return $col($regml(1)) $+ [*] 
    elseif ($regex($1,/^([bgyr])\w* d(?:raw)?2$/i)) return $col($regml(1)) $+ [D2] 
    elseif ($regex($1,/^([bgyr])\w* ([sr])\w*$/i)) return $+($col($regml(1)),[,$upper($regml(2)),]) 
} 
alias col { 
    if ($1 == b) return 12 
    elseif ($1 == g) return 09 
    elseif ($1 == y) return 08 
    else return 04 
} 
alias nextturn { 
    var %c = $iif(#,#,$1) 
    $iif($hget(%c,rev),hinc,hdec) %c turn 
    if (!$hget(%c,p $+ $hget(%c,turn))) hadd %c turn $iif($hget(%c,rev),1,$hget(%c,players)) 
} 
alias hascard { 
    var %c = $iscard($1) 
    if ($strip(%c) == [*]) { 
    if (4 isin $1) return $istok($hget(#,$2),01[wd4],32) 
    else return $istok($hget(#,$2),01[W],32) 
    } 
    else return $istok($hget(#,$2),%c,32) 
} 
alias delcard { 
    var %c = $iscard($2-), %o 
    if ($strip(%c) == [*]) %o = $iif(4 isin $2-,01[wd4],01[W]) 
    else %o = %c 
    hadd # $1 $remtok($hget(#,$1),%o,1,32) 
} 
alias remplayer { 
    var %p = $hfind($1,$2).data, %i = $right(%p,-1) 
    hdel $1 $2 
    hdel $1 %p 
    hdec $1 players 
    msg $1 $3- 
    if ($hget($1,players) == 1) { 
    msg $1 Game ended, you need atleast two people to uno. 
    hfree $1 
    } 
    else { 
    if (!$hget($1,p $+ $hget($1,turn))) { 
     if (!$hget($1,top)) return 
     nextturn $1 
     var %nnick = $hget($1,p $+ $hget($1,turn)) 
     msg $1 %nnick $+ 's turn. 
     msg $1 Top card: $hget($1,top) 
     notice %nnick Your cards: $hget($1,%nnick) 
    } 
    while (%i <= $hget($1,players)) { 
     hadd $1 p $+ %i $hget($1,p $+ $calc(%i +1)) 
     hdel $1 p $+ $calc(%i +1) 
     inc %i 
    } 
    } 
} 

我想我可能已經發現有關跳過通知沒有顯示的問題之一,但我不太確定其他語句。我在這裏做錯了什麼,我該如何糾正它,以便我能夠正確顯示這些陳述?

+0

更新:我已經發現了什麼問題是與「反向」之一,並固定它,所以剩下的就是顏色問題。 – Auro

+0

你不能說像「我有問題」這樣的語句你需要準確解釋什麼是問題,什麼時候發生以及你的預期。此外,必須的時候,你不會只獲得創作者的第三方代碼的幫助(如果你會與他們聯繫..也不能肯定)。給我們一堆代碼,並期望我們爲您解決它,並猜測問題是瘋狂的,不切實際的和不尊重的。給我們更多的細節。 –

回答

1

事實證明,%co變量並不是我認爲會變成這樣的結果。所以我所做的是暫時在塊的末尾使用了一條msg線,問題是找出%co出來的位置,並且我注意到前兩個字符確定了卡的顏色。因此,在使用$ left(%co,2)獲取%col中的兩個字符後,我所要做的就是檢查%col與四個顏色代碼,併發布該行的正確信息。

作爲對一些抱怨卡片顏色的人的迴應,我也會稍微改變顏色,但在完全解決顯示錯誤的卡片問題之前,我已經這樣做了。

這裏是我曾經必要的固定代碼段,但現在已經完全固定:

on $*:text:/^[~]play/Si:#:{ 
    if (!$hget(#,p1)) return 
    elseif (!$hget(#,$nick)) notice $nick You aren't in this game. 
    elseif ($hget(#,p $+ $hget(#,turn)) != $nick) notice $nick It is not your turn. 
    elseif (!$iscard($2-)) notice $nick Syntax: ~play <color>/<type> <card> or ~play WD4/W <color>/<type> 
    elseif (!$hascard($2-,$nick)) notice $nick You don't have that card. 
    else { 
    noop $regex($iscard($2-),/^\x03(\d{2})(\[.+?\])$/) 
    var %co = $regml(1), %c = $regml(2) 
    if (%co isin $hget(#,top)) || (%c == $strip($hget(#,top))) || (%c == [*]) { 
     delcard $nick $2- 
     hadd # top $iscard($2-) 
     var %col = $left(%co,2) 
     if (%c == [D2]) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     hadd # %snick $instok($hget(#,%snick),$cards(2),0,32) 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%col == 12) { 
      %msg = %snick is hit by Hydro Pump $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else if (%col == 03) { 
      %msg = %snick is hit by Seed Flare $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else if (%col == 07) { 
      %msg = %snick is hit by Thunder $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     else { 
      %msg = %snick is hit by Fire Blast $+ $chr(44) and draws 2! %nnick $+ 's turn. 
     } 
     } 
     elseif (%c == [S]) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     %msg = %snick is hit by Fake Out! %nnick $+ 's turn. 
     } 
     elseif (%c == [R]) { 
     hadd # rev $iif($hget(#,rev),$false,$true) 
     var %unick = $hget(#,p $+ $hget(#,turn)) 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)) 
     %msg = %unick used U Turn! %nnick $+ 's turn. 
     } 
     elseif (%c == [*]) && (4 isin $2-) { 
     nextturn 
     var %snick = $hget(#,p $+ $hget(#,turn)), %nnick, %msg 
     hadd # %snick $instok($hget(#,%snick),$cards(4),0,32) 
     nextturn 
     %nnick = $hget(#,p $+ $hget(#,turn)) 
     %msg = %snick is hit by Judgement $+ $chr(44) and draws 4! %nnick $+ 's turn. 
     } 
     elseif (%c == [*]) { 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)) 
     if (%col == 12) { 
      %msg = Deck Type is now Water! %nnick $+ 's turn. 
     } 
     else if (%col == 03) { 
      %msg = Deck Type is now Grass! %nnick $+ 's turn. 
     } 
     else if (%col == 07) { 
      %msg = Deck Type is now Electric! %nnick $+ 's turn. 
     } 
     else { 
      %msg = Deck Type is now Fire! %nnick $+ 's turn. 
     } 
     } 
     else { 
     nextturn 
     var %nnick = $hget(#,p $+ $hget(#,turn)), %msg = %nnick $+ 's turn. 
     } 
     if ($numtok($hget(#,$nick),32) == 1) msg # $nick has 3U04N12O! 
     elseif (!$v1) { 
     msg # Congratulations $nick - you won the match!!! 
     hfree # 
     hinc uno $nick 
     return 
     } 
     msg # %msg 
     msg # Top card: $hget(#,top) 
     notice %nnick Your cards: $hget(#,%nnick) 
     hdel # pass 
    } 
    else notice $nick That card doesn't play. 
    } 
} 
alias cards { 
    var %c = 12[1] 12[2] 12[3] 12[4] 12[5] 12[6] 12[7] 12[8] 12[9] 03[1] 03[2] 03[3] 03[4] 03[5] 03[6] 03[7] 03[8] 03[9] $& 
    07[1] 07[2] 07[3] 07[4] 07[5] 07[6] 07[7] 07[8] 07[9] 04[1] 04[2] 04[3] 04[4] 04[5] 04[6] 04[7] 04[8] 04[9] 01[WD4] $& 
    01[WD4] 01[WD4] 01[WD4] 12[D2] 12[D2] 03[D2] 03[D2] 07[D2] 07[D2] 04[D2] 04[D2] 12[S] 12[S] 03[S] 03[S] 07[S] 07[S] $& 
    04[S] 04[S] 12[R] 12[R] 03[R] 03[R] 07[R] 07[R] 04[R] 04[R] 01[W] 01[W] 01[W] 01[W] 
    var %i = $1, %o 
    while (%i) { 
    %o = $instok(%o,$gettok(%c,$r(1,68),32),0,32) 
    dec %i 
    } 
    return %o 
}