Connect4 v2.0 — File Browser

Connect4v2.0 / Connect4v2.0 / connect4.mrc

connect4.mrc — 16.97 KB — Download this file

alias -l row4.sound {
  var %row4.sound.play
  if ($1 == request) { %row4.sound.play = beepbeep.wav }
  if ($1 == start) { %row4.sound.play = rumble.wav }
  if ($1 == chip) { %row4.sound.play = click.wav }
  if ($1 == win) { %row4.sound.play = applause.wav }
  if ($1 == loose) { %row4.sound.play = idiot.wav }
  if (%row4.sound != $null) { splay -q $scriptdir $+ sound\ $+ %row4.sound.play }
}

on *:START:{
  unset %row4.ip.refuse.*
  unset %row4.coord*
}

on 1:LOAD:{
  set %row4.sound [ on ]
  set %row4.skin [ alien ]
  set %row4.colour [ 11 ]
  echo $colour(normal) -se To start a game, go to the nicklist or private chat popup, item "Connect4" >> Start Connect4 game
  echo $colour(normal) -se Or type 3/connect4 <nickname>
  echo $colour(normal) -se 4Note : your opponent must have the same add-on in order to play !!
}

alias uninstall {
  if ($1 == connect4) { 
    unset %row4*
    unset %sock.row4*
    echo $colour(info) -se *** Connect4 successfully uninstalled
  }
  .unload -rs $scriptdir $+ connect4.mrc
}

menu query,nicklist {
  Connect4 
  .start Connect4 game:connect4 $1
  .$row4.request:$row4.request.action
}


alias -l row4.request {
  if ($group(#row4) == on) { var %row4.request.msg = disable game requests  } 
  else { var %row4.request.msg = enable game requests }
  return %row4.request.msg
}

alias -l row4.request.action {
  if ($group(#row4) == on) { .disable #row4  } 
  else { .enable #row4 }
}


#row4 on
on *:NOTICE:Connect4*:?:{
  if ((%row4.ip.refuse. [ $+ [ $gettok($1-,4,32) ] ] == $null) && ($longip($gettok($1-,4,32) isnum)) && ($gettok($1-,5,32) isnum)) {
    if (($dialog(row4DialogAccept) == $null) && ($dialog(row4Dialog) == $null)) { 
      row4.sound request
      dialog -m row4DialogAccept row4DialogAccept 
      did -ra row4DialogAccept 1258 $gettok($1-,4-,32)
      var %row4.request = $nick requested to play a game of connect 4 :
      did -ra row4DialogAccept 1302 %row4.request
    } 
    else {  .notice $nick Already playing the game, try later please, thanks }
  }
}
#row4 end

alias connect4.window  {
  if ($window(@Connect4).state == $null) {
    window -bk[O]p @Connect4  0  0 315 235
    titlebar @Connect4 game - www.armathan.cjb.net
    drawpic @Connect4 0 0 $scriptdir $+ connectskins\ $+ %row4.skin $+ \connect4.png
    drawpic -c @Connect4 177 46 $scriptdir $+ connectskins\ $+ %row4.skin $+ \rd.png
    drawtext @connect4 %row4.colour 202 49 You
    drawpic -c @Connect4 177 74 $scriptdir $+ connectskins\ $+ %row4.skin $+ \bl.png
    drawtext @connect4 %row4.colour 202 75 %row4.nick
  }
  elseif (($window(@Connect4).state == minimized) || ($window(@Connect4).state == normal)) { window -a @Connect4 }
}

on *:CLOSE:@Connect4:{
  sockclose row4* 
  unset %row4.coord.*
  unset %row4.turn
  unset %row4.sock*
  unset %sock.row4*
  unset %row4.nick
  splay stop
  drawpic -c
}

menu @Connect4 {
  ;mouse:echo 4 -s ( $mouse.x , $mouse.y )
  sclick:row4.column $mouse.x $mouse.y
  $row4.menu($mouse.x,$mouse.y,replay):row4.replay
  $row4.sound.menu.off($mouse.x,$mouse.y,sound off):unset %row4.sound | splay stop
  $row4.sound.menu.on($mouse.x,$mouse.y,sound on):set %row4.sound [ on ]
  skins
  .$row4.menu($mouse.x,$mouse.y,alien):row4.skin alien 11
  .$row4.menu($mouse.x,$mouse.y,blue stain):row4.skin bluestain 0
  .$row4.menu($mouse.x,$mouse.y,dune):row4.skin dune 15
  .$row4.menu($mouse.x,$mouse.y,infrared):row4.skin infrared 9
  .$row4.menu($mouse.x,$mouse.y,lady violet):row4.skin violet 6
  .$row4.menu($mouse.x,$mouse.y,spooky):row4.skin spooky 15
  .$row4.menu($mouse.x,$mouse.y,virus):row4.skin virus 8
}

alias -l row4.menu {
  if ($inrect($1,$2,202,115,57,23) == $true) { return $3- }
}

alias row4.sound.menu.off {
  if (($inrect($1,$2,202,115,57,23) == $true) && (%row4.sound != $null)) { return $3- }
}

alias row4.sound.menu.on {
  if (($inrect($1,$2,202,115,57,23) == $true) && (%row4.sound == $null)) { return $3- }
}

alias -l  row4.win.msg {
  drawpic -c @Connect4 11 158 $scriptdir $+ connectskins\ $+ %row4.skin $+ \cover.png
  drawtext @connect4 %row4.colour 18 168 $1-
}

alias -l row4.column {
  if (%row4.turn != me) { return }
  if ($inrect($1,$2,11,28,19,116) == $true) { row4.choose.my.token 1 }
  if ($inrect($1,$2,32,28,19,116) == $true) { row4.choose.my.token 2 }
  if ($inrect($1,$2,53,28,19,116) == $true) { row4.choose.my.token 3 }
  if ($inrect($1,$2,74,28,19,116) == $true) { row4.choose.my.token 4 }
  if ($inrect($1,$2,95,28,19,116) == $true) { row4.choose.my.token 5 }
  if ($inrect($1,$2,116,28,19,116) == $true) { row4.choose.my.token 6 }
  if ($inrect($1,$2,137,28,19,116) == $true) { row4.choose.my.token 7 }
}


alias -l init.row4 {
  var %row.i = 1
  var %row.j 
  while (%row.i <= 7) {
    %row.j = 1
    while (%row.j <= 7) {
      var %coord.ij = %row.i $+ %row.j 
      set %row4.coord. [ $+ [ %coord.ij ] ] [ neutral ]
      inc %row.j 1
    }
    inc %row.i 1
  }
}

alias -l row4.replay {
  if (%row4.turn != winner) { echo $colour(info) -se **** Current game isn't finished yet ... are you going to loose or what ??? }
  else {
    splay stop
    unset %row4.coord*
    init.row4
    row4.redraw.partial
    row4.win.msg Opponent to crush : %row4.nick
    row4.sound start
    set %row4.turn [ you ]
    sockwrite -tn %sock.row4.play replay
    sockwrite -tn %sock.row4.play dice $rand(1,10)
  }
}

alias -l row4.redraw.partial {
  drawpic @Connect4 0 0 $scriptdir $+ connectskins\ $+ %row4.skin $+ \connect4.png
  drawpic -c @Connect4 177 46 $scriptdir $+ connectskins\ $+ %row4.skin $+ \rd.png
  drawtext @connect4 %row4.colour 202 49 You
  drawpic -c @Connect4 177 74 $scriptdir $+ connectskins\ $+ %row4.skin $+ \bl.png
  drawtext @connect4 %row4.colour 202 75 %row4.nick
}


alias -l row4.skin {
  drawpic -c
  set %row4.skin [ $1 ]
  set %row4.colour [ $2 ]
  row4.redraw.partial 
  if (%row4.turn == me) {  drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \green.png }
  else { drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png }
  var %row4.skin.i = 1
  var %row4.skin.j  = 1
  var %row4.skin.coord
  while (%row4.skin.i <= 7) {
    %row4.skin.j  = 1
    while (%row4.skin.j <= 7) {
      %row4.skin.coord = %row4.coord. [ $+ [ [ %row4.skin.i ] $+ [ %row4.skin.j ] ] ]
      if (%row4.skin.coord == me) { row4.draw.token %row4.skin.j %row4.skin.i rd.png }
      elseif (%row4.skin.coord  == opponent) { row4.draw.token %row4.skin.j %row4.skin.i bl.png }
      inc %row4.skin.j 1
    }
    inc %row4.skin.i 1
  }
  if (%row4.turn != winner) { row4.win.msg Opponent to crush : %row4.nick }
  else { row4.win.msg  Game over }
}

alias -l  row4.draw.token {
  drawpic -c @Connect4  $calc(11 + ( $1 - 1 ) * 21))  $calc(28 + (($2 - 1) * 20))  $scriptdir $+ connectskins\ $+ %row4.skin $+ \ $+ $3
}

;connect4 <nick>
alias connect4 {
  if (($dialog(row4DialogAccept) == $null) && ($window(@Connect4).state == $null)) {
    init.row4
    set %row4.nick [ $1 ]
    var %port.row4 = $rand(1024,9999)
    while ($portfree(%port.row4) == $false) { %port.row4 = $rand(1024,9999) }
    var %row4.sock.listen = row4.listen. $+ $1
    sockclose %row4.sock.listen
    socklisten %row4.sock.listen %port.row4
    .notice $1 Connect4 game request $ip %port.row4
    connect4.window
    row4.win.msg Waiting aknowlegdement request .... 
    drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png
  }
  else { echo $colour(info) -se *** Close first either the current game window or the acknowlegdment window, please   }
}


on *:SOCKLISTEN:row4.listen.*:{
  set %sock.row4.play [ row4.play. [ $+ [ $ticks ] ] ]
  sockaccept %sock.row4.play
  row4.win.msg Opponent to crush : %row4.nick
  var %row4.dice = dice $rand(1,10)
  sockwrite -tn %sock.row4.play %row4.dice
  sockclose $sockname
  row4.sound start
}


on *:SOCKREAD:row4.play.*:{
  if ($sockerr > 0) { return }
  :nextreadrow4
  var %read.row4
  sockread %read.row4
  if ($sockbr == 0) { return } 
  if (%read.row4) {

    var %row4.cmd = $gettok(%read.row4,1,32)
    var %row4.par = $gettok(%read.row4,2,32)

    if (%row4.cmd == replay) { init.row4 | row4.redraw.partial }

    if (%row4.cmd == dice) { 
      var %dice = %row4.par
      while (%dice == %row4.par) { %dice = $rand(1,10) }
      if (%dice > %row4.par) { 
        set %row4.turn [ me ]
        drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \green.png
        sockwrite -tn $sockname me
      }
      else { 
        drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png
        set %row4.turn [ you ]
        sockwrite -tn $sockname you
      }
      row4.sound start
      goto nextreadrow4
    } 

    if (%row4.cmd == me) { 
      set %row4.turn [ you ]
      drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png
      goto nextreadrow4
    }

    if ((%row4.cmd == you) && (%row4.turn != winner)) { 
      set %row4.turn [ me ]
      drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \green.png
      goto nextreadrow4
    }

    if (%row4.cmd == coord) { 
      row4.draw.token $right(%row4.par,-1) $left(%row4.par,1) bl.png
      row4.sound chip
      set %row4.coord. [ $+ [ %row4.par ] ] [ opponent ] 
      row4.check.winner 
      goto nextreadrow4
    }

  }
  goto nextreadrow4
}


on *:SOCKCLOSE:row4.play.*:{
  window -c @Connect4
  echo $colour(info) -se *** Other side closed the Connect4 game 
  unset %row4.coord.*
  sockclose row4*
}


alias row4.choose.my.token {
  row4.check.winner 
  if (%row4.turn != me) { return }
  var %row4.count.token = 0
  var %row4.i = 6
  var %row4.stop.count.i
  var %row4.coord 
  while (%row4.i >= 1) {
    %row4.coord =  %row4.i $+ $1
    if (%row4.coord. [ $+ [ %row4.coord ] ] == neutral) { %row4.stop.count.i = %row4.i | break }
    dec %row4.i 1
  }

  if (%row4.stop.count.i  != $null) {
    %row4.coord =  %row4.stop.count.i  $+ $1  
    set %row4.coord. [ $+ [ %row4.coord ] ] [ me ]
    row4.draw.token  $1  %row4.stop.count.i  rd.png
    row4.sound chip
    sockwrite -tn %sock.row4.play  coord %row4.coord
    sockwrite -tn %sock.row4.play you
    set %row4.turn [ you ]
    drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png
    row4.check.winner
  }
  else { return }
}



alias row4.check.winner {
  var %row.i
  var %row.j
  var %row.k
  var %row.l
  var %coord.first
  var %coord.var
  var %coord.type
  var %is.same.type
  var %row4.game.result 
  var %row4.type
  %row.i = 1
  %row.j = 1
  while (%row.j <= 7) {
    %row.i = 1
    while (%row.i <= 3) {
      %coord.var = %row.i $+ %row.j
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.k = 0
        while (%row.k <= 3) {
          %coord.var = $calc(%row.k + %row.i) $+ %row.j
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.k 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win  }
          else  { %row4.game.result = loose  }
          goto endrow4 
        }
      }
      inc %row.i 1
    }
    inc %row.j 1
  }

  %row.i = 1
  %row.j = 1
  while (%row.i <= 7) {
    %row.j = 1
    while (%row.j <= 4) {
      %coord.var = %row.i $+ %row.j
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.k = 0
        while (%row.k <= 3) {
          %coord.var = %row.i $+ $calc(%row.k + %row.j)
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.k 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win    }
          else  { %row4.game.result = loose   }
          goto endrow4
        }
      }
      inc %row.j 1
    }
    inc %row.i 1
  }

  %row.i = 1 
  while (%row.i <= 3) {
    %row.j = 1
    %row.k = %row.i
    while (%row.k <= 3) {
      %coord.var = %row.k $+ %row.j
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.l = 0
        while (%row.l <= 3) {
          %coord.var = $calc(%row.k + %row.l) $+ $calc(%row.j + %row.l)
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.l 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win   }
          else  { %row4.game.result = loose   }
          goto endrow4
        }

      }
      inc %row.j 1
      inc %row.k 1
    }
    inc %row.i 1
  }


  %row.j = 2 
  while (%row.j <= 4) {
    %row.i = 1
    %row.k = %row.i
    while (%row.k <= 3) {
      %coord.var = %row.k $+ %row.j
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.l = 0
        while (%row.l <= 3) {
          %coord.var = $calc(%row.k + %row.l) $+ $calc(%row.j + %row.l)
          ;scripted by a_d ude at w w w. ar ma than . c j b. n e t
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.l 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win  }
          else  { %row4.game.result = loose    }
          goto endrow4
        }

      }
      inc %row.i 1
      inc %row.k 1
    }
    inc %row.j 1
  }


  %row.j = 4 
  while (%row.j <= 7) {
    %row.i = 1
    %row.k = %row.j
    while (%row.k >= 4) {
      %coord.var = %row.i $+ %row.k
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.l = 0
        while (%row.l <= 3) {
          %coord.var = $calc(%row.i + %row.l) $+ $calc(%row.k - %row.l)
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.l 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win    }
          else  { %row4.game.result = loose  }
          goto endrow4
        }
      }
      inc %row.i 1
      dec %row.k 1
    }
    inc %row.j 1
  }

  %row.i = 1 
  while (%row.i <= 3) {
    %row.j = 7
    %row.k = %row.i
    while (%row.k <= 3) {
      %coord.var = %row.k $+ %row.j
      %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
      if (%coord.type != neutral) {
        %is.same.type = 0
        %row4.type = %coord.type
        %row.l = 0
        while (%row.l <= 3) {
          %coord.var = $calc(%row.k + %row.l) $+ $calc(%row.j - %row.l)
          if (%row4.coord. [ $+ [ %coord.var ] ] == %row4.type) { inc %is.same.type 1 }
          inc %row.l 1
        }
        if (%is.same.type == 4) {
          %coord.type = %row4.coord. [ $+ [ %coord.var ] ]
          if (%row4.type == me) { %row4.game.result = win  }
          else  { %row4.game.result = loose   }
          goto endrow4
        }
      }
      dec %row.j 1
      inc %row.k 1
    }
    inc %row.i 1
  }

  :endrow4
  if (%row4.game.result != $null) { 
    if (%row4.game.result  = win) { row4.sound win | %row4.game.result = you won ... you are da man, eh ? }
    if (%row4.game.result  = loose) { row4.sound loose | %row4.game.result = weak, man .. LOOOOOOSER !!!! }
    set %row4.turn [ winner ]
    row4.win.msg %row4.game.result 
    drawpic -c @Connect4 177 9 $scriptdir $+ connectskins\ $+ %row4.skin $+ \red.png
  }
}


dialog row4DialogAccept {
  title "Game - Connect 4 "
  size -1 -1 150 45
  option dbu
  text "",1302,10 5 140 10
  text "Play or ignore game request during 60 secs ?",1303,10 15 140 10
  text "",1258,1 1 1 1
  button "Play",1304, 40 30 30 12,ok
  button "Ignore",1305,80 30 30 12
  button "",1274,1 1 1 1,cancel 
}

;play button
ON *:DIALOG:row4DialogAccept:SCLICK:1304:{
  unset %row4.coord.*
  init.row4
  set %sock.row4.play [ row4.play. [ $+ [ $ticks ] ] ]
  sockopen %sock.row4.play $did(1258).text
  set %row4.nick [ $gettok($did(1302).text,1,32) ]
  connect4.window
  row4.win.msg Opponent to crush : $gettok($did(1302).text,1,32)
}

;Ignore button
ON *:DIALOG:row4DialogAccept:SCLICK:1305:{ 
  sockclose row4* 
  set -u60 %row4.ip.refuse. [ $+ [ $gettok($did(1258).text,1,32) ] ] [ on ]
  dialog -x row4DialogAccept
}

;"x" button
ON *:DIALOG:row4DialogAccept:SCLICK:1274:sockclose row4*