我一直在尝试编辑我为一组我发现的一些代码,但是我已经遇到了一些错误,主要是文本现在正确显示
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 :(得分: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
}