All pastes #73103 Raw Edit

Miscellany

public text v1 · immutable
#73103 ·published 2006-06-27 13:30 UTC
rendered paste body
alias -l game.load.lvl {
  if ($1 == -sm) {
    if (!$ini($scriptdirmultiplayer.ini,$2,0)) { echo -a Error, Map $2 not exists | halt }
    var %y = 16
    while (%y) {
      var %x = 1
      var %map = $readini($scriptdirmultiplayer.ini,$2,map $+ %y)
      while (%x <= 16) {
        var %object = $mid(%map,%x,1)
        if ($mid(%map,%x,1)) {
          if (%object == 1) { var %object = 30 }
          elseif (%object == 2) { var %object = 31 }
          elseif (%object == 3) { var %object = 32 }
          hadd game.mp.objects $+(%x,x,%y) %object
        }
        inc %x
      }
      dec %y
    }
    if ($readini($scriptdirmultiplayer.ini,$2,wall) > 0) { game.mp.draw.walls $readini($scriptdirmultiplayer.ini,$2,wall) }
    return
  }
}
alias game.mp.draw.walls {
  ;game.draw.wall xmin xmax ymin ymax (x 1-16 y 1-10)
  ;Sudedam sienos kampus  

  hadd game.mp.objects $+($1,x,$3) 30
  hadd game.mp.objects $+($2,x,$4) 30
  hadd game.mp.objects $+($1,x,$4) 30
  hadd game.mp.objects $+($2,x,$3) 30
  if ($5 == broadcast) {
    game.mp.sendpacket -b 3 1 30 $1 $3
    game.mp.sendpacket -b 3 1 30 $2 $4
    game.mp.sendpacket -b 3 1 30 $1 $4
    game.mp.sendpacket -b 3 1 30 $2 $3
  }
  ;piesiam sienas
  var %xminwall = $calc($1 + 1)
  var %xmaxwall = $2
  while (%xminwall < %xmaxwall) {
    ;1

    hadd game.mp.objects $+(%xminwall,x,$3) 30
    if ($5 == broadcast) { game.mp.sendpacket -b 3 1 %xminwall $3 }
    inc %xminwall
  }
  var %xminwall = $calc($1 + 1)
  var %xmaxwall = $2
  while (%xminwall < %xmaxwall) {
    ;3

    hadd game.mp.objects $+(%xminwall,x,$4) 30
    if ($5 == broadcast) { game.mp.sendpacket -b 3 1 30 %xminwall $4 }
    inc %xminwall
  }
  var %xminwall = $calc($3 + 1)
  var %xmaxwall = $4
  while (%xminwall < %xmaxwall) {
    ;4

    hadd game.mp.objects $+($1,x,%xminwall) 30
    if ($5 == broadcast) { game.mp.sendpacket -b 3 1 30 $1 %xminwall }
    inc %xminwall
  }
  var %xminwall = $calc($3 + 1)
  var %xmaxwall = $4
  while (%xminwall < %xmaxwall) {
    ;2
    hadd game.mp.objects $+($2,x,%xminwall) 30
    if ($5 == broadcast) { game.mp.sendpacket -b 3 1 30 $2 %xminwall }
    inc %xminwall
  }
}
alias game.mp.stop.srv {
  game.mp.sendpacket -bt 9 Server is shuting Down!
  sockclose game.mp.sr
  hfree game.mp.deathpoints
  hfree game.mp.objects
  hfree game.mp.used.balls
  hfree game.mp.balls
  hfree game.mp.boxspawns
  unset -s %game.mp.*
  set %game.mp.no.move 1
  timergame* off
  timer.game* off
  .timer 1 5 sockclose game* $chr(124) unset %game.mp.no.move
}
alias game.mp.load.srv {
  if ($sock(game.mp.sr)) { echo -a Server already running! | return }
  ;game.mp.load.srv mapname
  if ($hget(game.mp.deathpoints)) { hfree game.mp.deathpoints }
  if ($hget(game.mp.objects)) { hfree game.mp.objects }
  if ($hget(game.mp.used.balls)) { hfree game.mp.used.balls }
  if ($hget(game.mp.balls)) { hfree game.mp.balls }
  if ($hget(game.mp.boxspawns)) { hfree game.mp.boxspawns }
  if ($hget(game.mp.nicks)) { hfree game.mp.nicks }
  hmake game.mp.boxspawns
  hmake game.mp.used.balls 10
  hmake game.mp.objects 256
  hmake game.mp.balls 10
  hmake game.mp.nicks 10
  hmake game.mp.deathpoints
  .timer.game.mp.sr.sendping 0 10 game.mp.sr.sendping
  set %game.mp.free.spawns $readini($scriptdirmultiplayer.ini,$1,playerspawnpoints)
  var %x = $numtok(%game.mp.free.spawns,59)
  while (%x) {
    hadd game.mp.objects $replace($gettok(%game.mp.free.spawns,%x,59),$chr(32),x) 31
    dec %x
  }
  set %game.mp.pl.limit $numtok($readini($scriptdirmultiplayer.ini,$1,playerspawnpoints),59)
  game.load.lvl -sm $1
  var %deathpoints = $readini($scriptdirmultiplayer.ini,$1,boxdeathpoints)
  var %x = $numtok(%deathpoints,59)
  while (%x) {
    hadd game.mp.deathpoints $replace($gettok(%deathpoints,%x,59),$chr(32),x) 1
    dec %x
  }
  set %game.mp.boxkilltime $readini($scriptdirmultiplayer.ini,$1,boxkilltime)
  set %game.mp.destroyafterdeathspot $readini($scriptdirmultiplayer.ini,$1,destroyafterdeathspot)
  set %game.mp.respawntime $readini($scriptdirmultiplayer.ini,$1,respawntime) 
  set %game.mp.boxmaxspawns $readini($scriptdirmultiplayer.ini,$1,boxmaxspawns)
  var %boxspawns = $readini($scriptdirmultiplayer.ini,$1,boxspawnpoints)
  set %game.mp.currentspawnpads 0
  set %game.mp.totalboxes.to.spawn $2
  set %game.mp.totalboxes.spawn $2
  set %game.mp.current.map $1
  set %game.mp.totalspawnpads $numtok(%boxspawns,59)
  var %x = $numtok(%boxspawns,59)
  while (%x) {
    hadd game.mp.boxspawns %x $gettok(%boxspawns,%x,59)
    dec %x
  }
  .timergamespawnboxes 0 %game.mp.respawntime game.mp.sr.spawnbox
  .timergamekillidlebox 0 %game.mp.boxkilltime game.mp.sr.killbox
  unset %game.mp.no.move
  socklisten game.mp.sr 696
}
alias game.mp.change.lvl {
  .timergame* off
  if (!$ini($scriptdirmultiplayer.ini,$1,0)) { echo -a Error, Map $1 not exists | halt }
  if ($numtok($readini($scriptdirmultiplayer.ini,$1,playerspawnpoints),59) < $sock(game.mp.sr.player*,0)) {
    echo -s To many players for this map 
    halt
  }
  set %game.mp.totalboxes.to.spawn $2
  unset -s %game.score*
  hdel -w game.mp.objects *
  hdel -w game.mp.deathpoints *
  hdel -w game.mp.boxspawns *
  set %game.mp.currentspawnpads 0
  set %game.mp.respawntime $readini($scriptdirmultiplayer.ini,$1,respawntime) 
  set %game.mp.boxmaxspawns $readini($scriptdirmultiplayer.ini,$1,boxmaxspawns)
  var %boxspawns = $readini($scriptdirmultiplayer.ini,$1,boxspawnpoints)
  set %game.mp.totalspawnpads $numtok(%boxspawns,59)
  var %x = $numtok(%boxspawns,59)
  while (%x) {
    hadd game.mp.boxspawns %x $gettok(%boxspawns,%x,59)
    dec %x
  }
  set %game.mp.destroyafterdeathspot $readini($scriptdirmultiplayer.ini,$1,destroyafterdeathspot)
  set %game.mp.boxkilltime $readini($scriptdirmultiplayer.ini,$1,boxkilltime)
  var %deathpoints = $readini($scriptdirmultiplayer.ini,$1,boxdeathpoints)
  var %x = $numtok(%deathpoints,59)
  while (%x) {
    hadd game.mp.deathpoints $replace($gettok(%deathpoints,%x,59),$chr(32),x) 1
    dec %x
  }
  set %game.mp.free.spawns $readini($scriptdirmultiplayer.ini,$1,playerspawnpoints)
  var %x = $numtok(%game.mp.free.spawns,59)
  while (%x) {
    hadd game.mp.objects $replace($gettok(%game.mp.free.spawns,%x,59),$chr(32),x) 31
    dec %x
  }
  var %x = $numtok(%game.mp.free.spawns,59)
  while (%x) {
    hadd game.mp.objects $replace($gettok(%game.mp.free.spawns,%x,59),$chr(32),x) 31
    dec %x
  }
  set %game.mp.pl.limit $numtok($readini($scriptdirmultiplayer.ini,$1,playerspawnpoints),59)
  var %y = 16
  while (%y) {
    var %x = 1
    var %map = $readini($scriptdirmultiplayer.ini,$1,map $+ %y)
    while (%x <= 16) {
      var %object = $mid(%map,%x,1)
      if ($mid(%map,%x,1)) {
        if (%object == 1) { var %object = 30 }
        elseif (%object == 2) { var %object = 32 }
        elseif (%object == 3) { var %object = 33 }
        hadd game.mp.objects $+(%x,x,%y) %object
        ;game.mp.sendpacket -b 3 1 %object %x %y
      }
      inc %x
    }
    dec %y
  }
  if ($readini($scriptdirmultiplayer.ini,$1,wall) > 0) { game.mp.draw.walls $readini($scriptdirmultiplayer.ini,$1,wall) }
  var %x = $sock(game.mp.sr.player.*,0)
  while (%x) {
    var %tmpspawn = $gettok(%game.mp.free.spawns,1,59)
    var %pid = $sock(game.mp.sr.player.*,%x).mark
    set %game.mp.free.spawns $deltok(%game.mp.free.spawns,1,59)
    hadd game.mp.objects $+($gettok(%tmpspawn,1,32),x,$gettok(%tmpspawn,2,32)) $calc(%pid - 10) 
    hadd game.mp.balls %pid $gettok(%tmpspawn,1,32) $gettok(%tmpspawn,2,32)
    hadd game.mp.used.balls %pid %tmpspawn
    ;game.mp.sendpacket -b 3 1 %pid $gettok(%tmpspawn,1,32) $gettok(%tmpspawn,2,32)
    unset %game.mp.no.move
    dec %x
  }
  set %game.mp.totalboxes.spawn $2
  set %game.mp.current.map $1
  .timergamespawnboxes 0 %game.mp.respawntime game.mp.sr.spawnbox
  .timergamekillidlebox 0 %game.mp.boxkilltime game.mp.sr.killbox
  game.mp.sendpacket -b 0 5
  var %x = $hget(game.mp.objects,0).item
  while (%x) {
    game.mp.sendpacket -b 3 1 $iif($hget(game.mp.objects,$hget(game.mp.objects,%x).item) isnum 10-19,$calc($v1 + 10),$v1) $replace($hget(game.mp.objects,%x).item,x,$chr(32))
    dec %x
  }
  game.mp.sendpacket -b 2 6 1 1
}
alias game.mp.sr.spawnbox {
  ;%game.mp.totalspawnpads
  ;%game.mp.currentspawnpads
  ;%game.mp.boxmaxspawns
  ;%game.mp.totalboxes.to.spawn
  if (%game.mp.totalboxes.to.spawn < 0) {
    .timergame* off
    set %game.mp.no.move 1
    game.mp.calc.results
    return
  }
  if (%game.mp.currentspawnpads >= %game.mp.boxmaxspawns) { return }
  var %spawnloc = $hget(game.mp.boxspawns,$hget(game.mp.boxspawns,$rand(1,%game.mp.totalspawnpads)).item)
  if (!$game.mp.getobj($replace(%spawnloc,$chr(32),x))) {
    game.mp.addobj -t $game.mp.gen.next.box %spawnloc
    dec %game.mp.totalboxes.to.spawn
  }
}
alias game.mp.calc.results {
  var %x = $hget(game.mp.balls,0).item
  while (%x) {
    game.mp.sendpacket -bt 9 $hget(game.mp.nicks,$hget(game.mp.balls,%x).item) Has %game.score [ $+ [ $hget(game.mp.balls,%x).item ] ] Points!
    dec %x
  }
}
alias game.unique.id.gen {
  if (%game.unique.id == 9999999) || (!%game.unique.id) { set %game.unique.id 999999 }
  inc %game.unique.id
  return %game.unique.id
}
on *:socklisten:game.mp.sr: {
  var %id = $game.unique.id.gen
  sockaccept game.mp.sr.playertmp $+ %id
  if ($sock(game.mp.sr.player*,0) >= %game.mp.pl.limit) {
    game.mp.sendpacket -pt game.mp.sr.playertmp $+ %id 9 Server is full! (Player Limit: %game.mp.pl.limit $+ )
    sockclose game.mp.sr.playertmp $+ %id
  }
  else {
    var %x = $hget(game.mp.used.balls,0).item
    while (%x) {
      var %balls = %balls $hget(game.mp.used.balls,%x).item
      dec %x   
    }
    ;jeigu uztenka playerriu, siunciam i klienta paketa kad pasirinktu kamuoliuka, ir siunciam sarasa uzimtu kamuoliuku
    game.mp.sendpacket -p game.mp.sr.playertmp $+ %id $len($remove(%balls,$chr(32))) 12 %balls
  }
}
on *:sockclose:game.mp.sr.player.*: {
  set %game.mp.free.spawns $instok(%game.mp.free.spawns,$hget(game.mp.used.balls,$sock($sockname).mark),-1,59)
  var %obj = $replace($hget(game.mp.balls,$sock($sockname).mark),$chr(32),x)
  ;Jeigu po kamuoliuku nieko ner. tadu darom delete is game.objects ji
  if ($game.mp.getobj(%obj) == $sock($sockname).mark) { hdel game.mp.objects $replace($hget(game.mp.balls,$sock($sockname).mark),$chr(32),x) }
  game.mp.sendpacket -b 3 1 31 $hget(game.mp.used.balls,$sock($sockname).mark)
  hadd game.mp.objects $replace($hget(game.mp.used.balls,$sock($sockname).mark),$chr(32),x) 31
  var %obj.for.ball $game.mp.getobj($replace($hget(game.mp.balls,$sock($sockname).mark),$chr(32),x))
  if ($sock($sockname).mark !== %obj.for.ball) {
    game.mp.sendpacket -b 3 1 $iif(%obj.for.ball == $null,0,$ifmatch) $hget(game.mp.balls,$sock($sockname).mark)
  }
  else {
    game.mp.sendpacket -b 3 1 0 $hget(game.mp.balls,$sock($sockname).mark)
    hdel game.mp.objects $sock($sockname).mark
    hdel game.mp.nicks $sock($sockname).mark
  }
  hdel game.mp.used.balls $sock($sockname).mark
  hdel game.mp.balls $sock($sockname).mark
  unset %game.score $+ $sock($sockname).mark
  unset %game.nick $+ $sock($sockname).mark
}
on *:sockread:game.mp.sr.player*: {
  sockread &packet
  var %tmp = $bvar(&packet,1,$bvar(&packet,0)).text
  ;echo -a ServerRead: %tmp
  ;jeigu paketas gaunamas del kamuoliuko pasirinkimo, tadu entering to the game
  ;ir nusiunciam zaidejui mapa bei jo kamuoliuko id ir spawnloc
  ;taipobi irasom apie ji db ir visa kita sh :) 
  if (bs|* iswm %tmp) {
    if ($gettok(%tmp,2,124) isnum 20-29) {
      ;patikrinant, ar niekas jam neuzbego uz akiu imant kamuoli
      if ($sock(game.mp.sr.player*,0) >= %game.mp.pl.limit) {
        game.mp.sendpacket -pt $sockname 9 To many players! Sorry!
        sockclose $sockname
        return
      }
      if ($hget(game.mp.used.balls,$gettok(%tmp,2,124))) {
        game.mp.sendpacket -pt $sockname 9 Ball already in use! Select another!
        var %x = $hget(game.mp.used.balls,0).item
        while (%x) {
          var %balls = %balls $hget(game.mp.used.balls,%x).item
          dec %x
        }
        game.mp.sendpacket -p $sockname $len($remove(%balls,$chr(32))) 12 %balls
        return
      }
      if ($hfind(game.mp.nicks,$gettok(%tmp,3,124))) {
        game.mp.sendpacket -pt $sockname 9 Nick Already used! Choise another one!
        game.mp.sendpacket -p $sockname 0 13
        return
      }
      if ($gettok(%tmp,3,124) == $null) { 
        game.mp.sendpacket -pt $sockname 9 Wrong nickname
        game.mp.sendpacket -p $sockname 0 13
        return
      }
      hadd game.mp.nicks $gettok(%tmp,2,124) $gettok(%tmp,3,124)
      var %tmpballloc = $gettok(%game.mp.free.spawns,1,59)
      var %tmpspawn = $gettok(%game.mp.free.spawns,1,59)
      set %game.mp.free.spawns $deltok(%game.mp.free.spawns,1,59)
      sockrename $sockname game.mp.sr.player. $+ $gettok(%tmp,2,124)
      sockmark game.mp.sr.player. $+ $gettok(%tmp,2,124) $gettok(%tmp,2,124)
      hadd game.mp.objects $+($gettok(%tmpspawn,1,32),x,$gettok(%tmpspawn,2,32)) $calc($gettok(%tmp,2,124) - 10) 
      hadd game.mp.balls $gettok(%tmp,2,124) $gettok(%tmpspawn,1,32) $gettok(%tmpspawn,2,32)
      hadd game.mp.used.balls $gettok(%tmp,2,124) %tmpspawn
      if ($sock(game.mp.sr.player.*,0) == 2) {
        .timergame* off
        game.mp.sendpacket -bt 9 Game Comencing!
        game.mp.count.comence 5
      }
      .timer $+ $game.unique.id.gen -m 1 1 game.mp.sr.senduserinfo $gettok(%tmp,2,124)
    }
  }
  elseif (p * iswm %tmp) {
    echo -s Player $hget(game.mp.nicks,$sock($sockname).mark) Ping: $calc($ticks - $gettok(%tmp,2,32))
  }
  elseif (%tmp isnum 1-4) {
    game.mp.obj.handler -m $sock($sockname).mark %tmp
  }
}
alias game.mp.sr.senduserinfo {
  ;pradedam sukt cikla apie objektus mape ;)
  game.mp.sendpacket $1 0 5
  var %x = $hget(game.mp.objects,0).item
  while (%x) {
    game.mp.sendpacket $1 3 1 $game.mp.getobj($hget(game.mp.objects,%x).item) $replace($hget(game.mp.objects,%x).item,x,$chr(32))
    dec %x
  }
  var %x = $hget(game.mp.balls,0).item
  while (%x) {
    game.mp.sendpacket $1 3 1 $hget(game.mp.balls,%x).item $hget(game.mp.balls,$hget(game.mp.balls,%x).item)
    dec %x
  }
  game.mp.sendpacket $1 1 8 $1
  game.mp.sendpacket -b 0 6
}
alias game.mp.count.comence {
  var %x = $1
  var %y = 0
  while (%x >= %y) {
    .timergame.mp.comance.msg $+ $game.unique.id.gen 1 %y game.mp.sendpacket -bt 9 .. $+ $calc(%x - %y) $+ !
    inc %y
  }
  timergame.mp.comance.msg $+ $game.unique.id.gen 1 %x game.mp.change.lvl %game.mp.current.map %game.mp.totalboxes.spawn
}
alias -l game.mp.obj.handler {
  ;31 Reserved pad loc
  ;30 - Wall (Not moveble/walkable)
  ;52 - Box (Normal)
  ;53 - SkullBox (TODO)
  ;54 - BonusBox (TODO)
  ;55 - TODO
  ;..59 TODO
  ;20-29 - Balls (Not moveble)
  ;10-19 - PlayerPads not movable/walkable (TODO CFG)
  ;game.mp.obj.handler -m pid move_side
  if ($1 == -m) {
    if (%game.mp.no.move) { game.mp.sendpacket $2 1 11 1 | return }
    ;pasiimam dabartines kamuoliuko koordinates
    var %tmp = $hget(game.mp.balls,$2)
    if (!%tmp) { game.mp.sendpacket $2 1 11 1 | return }
    var %ballx $gettok(%tmp,1,32)
    var %bally $gettok(%tmp,2,32)
    ;paskaiciuojam, i kokia vieta jis nori eit
    ;I kuria puse eina? 1 - Left; 2 - Up; 3 - Right; 4 - Down
    if ($3 == 1) { var %ballx.new = $calc(%ballx - 1) | var %bally.new = %bally }
    elseif ($3 == 2)  { var %bally.new = $calc(%bally - 1) | var %ballx.new = %ballx }
    elseif ($3 == 3) { { var %ballx.new = $calc(%ballx + 1) } | var %bally.new = %bally }
    else { var %bally.new = $calc(%bally + 1) | var %ballx.new = %ballx }
    ;ar sekantis taskas laisvas, jei taip, judam priekin
    var %obj = $game.mp.getobj($+(%ballx.new,x,%bally.new))
    if (%ballx.new !isnum 1-16) || (%bally.new !isnum 1-16) { game.mp.sendpacket $2 1 11 1 | return }
    elseif (%obj == $null) {
      game.mp.sendpacket -b 6 2 $2 %ballx %bally %ballx.new %bally.new $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
      if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) {     
        hdel game.mp.objects $+(%ballx,x,%bally) 
      }
      hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
      hadd game.mp.balls $2 %ballx.new %bally.new
      return
    }
    elseif (%obj isnum 10-32) { game.mp.sendpacket $2 1 11 1 | return }
    elseif (%obj isnum 50-59) {
      ;Jeigu kelio priekyje yra kazkokia deze, ziurim ar uz bus vietos dar toliau dezei pastumt
      ;I kuria puse eina? 1 - Left; 2 - Up; 3 - Right; 4 - Down
      if ($3 == 1) {
        var %nextpos = $calc(%ballx.new - 1)
        var %obj.new = $game.mp.getobj($+(%nextpos,x,%bally))
        if (%obj.new isnum 50-59) || (%obj.new isnum 20-32) || (%nextpos < 1) { game.mp.sendpacket $2 1 11 1 | return }
        if (!%obj.new) { goto left }
        if (%obj.new isnum 10-19)  {
          if ($hget(game.mp.balls,$calc(10 + %obj.new)),$chr(32) == %nextpos %bally) { game.mp.sendpacket $2 1 11 1 | return }  
          ;                               dabartinis loc    naujas location           pado location ir dezes id
          ;###########333333
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }   
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
          var %score = $game.mp.gen.score(%obj)
          set %game.score [ $+ [ $calc(%obj.new + 10) ] ] $calc(%game.score [ $+ [ $calc(%obj.new + 10) ] ] %score)
          game.mp.sendpacket $calc(%obj.new + 10) 2 7 $replace(%score,+,255 $+ $chr(32),-,254 $+ $chr(32))
          ;Sukeista, kad negaidinetu :/ ###########3
          game.mp.sendpacket -b 10 4 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally $calc(%obj - 10) %obj.new $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
          ;pridedam taskus

        }     
        else {
          :left
          if (!$hget(game.mp.deathpoints,$+(%nextpos,x,%bally))) {
            ;                               dabartinis loc    naujas location           naujas obj loc   objid    kas po kojom?
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally %obj $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd game.mp.objects $+(%nextpos,x,%bally) $game.mp.getobj($+(%ballx.new,x,%bally.new)) $ticks
          }
          else {
            ;                                        dabartinis loc    naujas location     naujas objloc    objid          kas po kojom?      
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally 32 $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd -u $+ %game.mp.destroyafterdeathspot game.mp.objects $+(%nextpos,x,%bally) 32
            .timergame.destroybox. $+ $game.unique.id.gen -o 1 %game.mp.destroyafterdeathspot game.mp.sendpacket -b 3 1 0 %nextpos %bally
          }
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) {
            hdel game.mp.objects $+(%ballx,x,%bally)
          }
          hadd game.mp.balls $2 %ballx.new %bally.new
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
        }
      }
      elseif ($3 == 2) {
        var %nextpos = $calc(%bally.new - 1)
        var %obj.new = $game.mp.getobj($+(%ballx,x,%nextpos))
        if (%obj.new isnum 50-59) || (%obj.new isnum 20-32) || (%nextpos < 1) { game.mp.sendpacket $2 1 11 1 | return }
        if (!%obj.new) { goto up }
        if (%obj.new isnum 10-19) {
          if ($hget(game.mp.balls,$calc(10 + %obj.new)),$chr(32) == %ballx %nextpos) { game.mp.sendpacket $2 1 11 1 | return }          
          ;                               dabartinis loc    naujas location           pado location ir dezes id
          ;########33        
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }    
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
          var %score = $game.mp.gen.score(%obj)
          set %game.score [ $+ [ $calc(%obj.new + 10) ] ] $calc(%game.score [ $+ [ $calc(%obj.new + 10) ] ] %score)
          game.mp.sendpacket $calc(%obj.new + 10) 2 7 $replace(%score,+,255 $+ $chr(32),-,254 $+ $chr(32))
          ;###########sukeista vietom, nes kitaip del nezinomu problemu gaidineja        
          game.mp.sendpacket -b 10 4 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos $calc(%obj - 10) %obj.new $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
          ;pridedam taskus
        }     
        else {
          :up
          if (!$hget(game.mp.deathpoints,$+(%ballx,x,%nextpos))) {
            ;                               dabartinis loc    naujas location           naujas obj loc   objid    kas po kojom?
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos %obj $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd game.mp.objects $+(%ballx,x,%nextpos) $game.mp.getobj($+(%ballx.new,x,%bally.new)) $ticks
          }
          else {
            ;                                              dabartinis loc    naujas location           kur zhus deze
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos 32 $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd -u $+ %game.mp.destroyafterdeathspot game.mp.objects $+(%ballx,x,%nextpos) 32
            .timergame.destroybox. $+ $game.unique.id.gen -o 1 %game.mp.destroyafterdeathspot game.mp.sendpacket -b 3 1 0 %ballx %nextpos
          }        
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) {
            hdel game.mp.objects $+(%ballx,x,%bally)
          }
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
          return
        }
      }
      elseif ($3 == 3) {
        var %nextpos = $calc(%ballx.new + 1)
        var %obj.new = $game.mp.getobj($+(%nextpos,x,%bally))
        if (%obj.new isnum 50-59) || (%obj.new isnum 20-32) || (%nextpos > 16) { game.mp.sendpacket $2 1 11 1 | return }
        if (!%obj.new) { goto right }
        if (%obj.new isnum 10-19) {
          if ($hget(game.mp.balls,$calc(10 + %obj.new)),$chr(32) == %nextpos %bally) { game.mp.sendpacket $2 1 11 1 | return }   
          ;                               dabartinis loc    naujas location           pado location ir dezes id
          ;###########sukeista
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
          var %score = $game.mp.gen.score(%obj)
          set %game.score [ $+ [ $calc(%obj.new + 10) ] ] $calc(%game.score [ $+ [ $calc(%obj.new + 10) ] ] %score)
          game.mp.sendpacket $calc(%obj.new + 10) 2 7 $replace(%score,+,255 $+ $chr(32),-,254 $+ $chr(32))
          game.mp.sendpacket -b 10 4 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally $calc(%obj - 10) %obj.new $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
          ;###########sukeista
          ;pridedam taskus
        }     
        else {
          :right
          if (!$hget(game.mp.deathpoints,$+(%nextpos,x,%bally))) {
            ;                               dabartinis loc    naujas location           naujas obj loc   objid    kas po kojom?
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally %obj $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd game.mp.objects $+(%nextpos,x,%bally)  $game.mp.getobj($+(%ballx.new,x,%bally.new)) $ticks
          }
          else {
            ;                                              dabartinis loc    naujas location           kur zhus deze
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %nextpos %bally 32 $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd -u $+ %game.mp.destroyafterdeathspot game.mp.objects $+(%nextpos,x,%bally) 32
            .timergame.destroybox. $+ $game.unique.id.gen -o 1 %game.mp.destroyafterdeathspot game.mp.sendpacket -b 3 1 0 %nextpos %bally
          }
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
        }
      }
      else {
        var %nextpos = $calc(%bally.new + 1)
        var %obj.new = $game.mp.getobj($+(%ballx,x,%nextpos))
        if (%obj.new isnum 50-59) || (%obj.new isnum 20-32) || (%nextpos > 16) { game.mp.sendpacket $2 1 11 1 | return }
        if (!%obj.new) { goto down }
        if (%obj.new isnum 10-19) {
          ;                               dabartinis loc    naujas location           pado location ir dezes id    ir pado id
          if ($hget(game.mp.balls,$calc(10 + %obj.new)),$chr(32) == %ballx %nextpos) { game.mp.sendpacket $2 1 11 1 | return }        
          ;#############sukeista
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }        
          hadd game.mp.balls $2 %ballx.new %bally.new
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          var %score = $game.mp.gen.score(%obj)
          set %game.score [ $+ [ $calc(%obj.new + 10) ] ] $calc(%game.score [ $+ [ $calc(%obj.new + 10) ] ] %score)
          game.mp.sendpacket $calc(%obj.new + 10) 2 7 $replace(%score,+,255 $+ $chr(32),-,254 $+ $chr(32))
          game.mp.sendpacket -b 10 4 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos $calc(%obj - 10) %obj.new $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
          ;#########sukeista

          ;pridedam taskus
        }     
        else {
          :down
          if (!$hget(game.mp.deathpoints,$+(%ballx,x,%nextpos))) {
            ;                               dabartinis loc    naujas location           naujas obj loc   objid    kas po kojom?
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos %obj $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd game.mp.objects $+(%ballx,x,%nextpos) $game.mp.getobj($+(%ballx.new,x,%bally.new)) $ticks  
          }
          else {
            ;                                              dabartinis loc    naujas location           kur zhus deze
            game.mp.sendpacket -b 9 3 $2 %ballx %bally %ballx.new %bally.new %ballx %nextpos 32 $iif($game.mp.getobj($+(%ballx,x,%bally)) !== $2,$ifmatch,0)
            hadd -u $+ %game.mp.destroyafterdeathspot game.mp.objects $+(%ballx,x,%nextpos) 32
            .timergame.destroybox. $+ $game.unique.id.gen -o 1 %game.mp.destroyafterdeathspot game.mp.sendpacket -b 3 1 0 %ballx %nextpos
          } 
          if ($game.mp.getobj($+(%ballx,x,%bally)) == $2) { 
            hdel game.mp.objects $+(%ballx,x,%bally) 
          }   
          hadd game.mp.objects $+(%ballx.new,x,%bally.new) $2
          hadd game.mp.balls $2 %ballx.new %bally.new
        }
      }
    }
  }
  ;return $iif($hget(game.objects,$+($1,x,$2)) == $null,0,$ifmatch)
}
alias game.mp.getobj {
  return $gettok($hget(game.mp.objects,$1),1,32)
}
alias game.mp.getobj.id {
  return $gettok($hget(game.mp.objects,$1),2,32)
}
alias game.mp.sr.killbox {
  var %x = $hfind(game.mp.objects,5? ?*,0,w).data
  while (%x) {
    var %boxloc = $hfind(game.mp.objects,5? ?*,%x,w).data
    if ( $calc($ticks - $gettok($hget(game.mp.objects,%boxloc),2,32)) > 15000) {
      hdel game.mp.objects %boxloc
      game.mp.sendpacket -b 3 1 0 $replace(%boxloc,x,$chr(32))
    }
    dec %x
  }
}
alias game.mp.gen.score {
  if ($1 == 51) { return +1 }
  elseif ($1 == 54) { return +2 }
  elseif ($1 == 52) { return -1 }
  elseif ($1 == 53) { return $iif($rand(0,1),+,-) $+ $rand(0,5) }
  elseif ($1 == 50) { return -5 }
  elseif ($1 == 55) { return +5 }
}
alias game.mp.gen.next.box {
  var %rand = $rand(1,100)
  if (%rand <= 40) {
    ;+1
    return 51
  }
  elseif (%rand <= 70) {
    ;+2
    return 54
  }
  elseif (%rand <= 80) {
    ;-1
    return 52
  }
  elseif (%rand <= 90) {
    ;? -5;5  
    return 53
  }
  elseif (%rand <= 95) {
    ;-5
    return 50
  }
  else {
    ;+5
    return 55
  }
}
alias game.mp.addobj {
  ;game.mp.addobj objid x y
  if (-t == $1) {
    game.mp.sendpacket -b 3 1 $2 $3 $4 
    hadd game.mp.objects $3 $+ x $+ $4 $2 $ticks
    return
  }
  if ($1 !isnum 20-29) {   
    game.mp.sendpacket -b 3 1 $1 $2 $3 
    hadd game.mp.objects $2 $+ x $+ $3 $1
  }
  else {
    hadd game.mp.balls $1 $2 $3
    game.mp.sendpacket -b 3 1 $1 $2 $3
  }
}
alias game.mp.sr.sendping {
  game.mp.sendpacket -bt 10 $ticks
}
alias game.mp.sendpacket {
  ;Broadcastinam plain BINARY
  if ($1 == -b) {
    bset &packet 1 $2-
    var %socks = $sock(game.mp.sr.player.*,0)
    while (%socks) {
      sockwrite $sock(game.mp.sr.player.*,%socks) &packet
      dec %socks
    }
    return
  }
  ;Broadcastinam text->BINARY
  elseif ($1 == -bt) {
    ;INDEX V A L U E S
    bset -t &packet 1 $chr($len($3-)) $+ $chr($2) $+ $3-
    var %socks = $sock(game.mp.sr.player.*,0)
    while (%socks) {
      sockwrite $sock(game.mp.sr.player.*,%socks) &packet
      dec %socks
    }
  }
  ;Privaciai Plain BINARY
  elseif (-p == $1) {
    bset &packet 1 $3-
    sockwrite $2 &packet
  }
  ;Privaciai Text->BINARY
  elseif (-pt == $1) { 
    bset -t &packet 1 $chr($len($4-)) $+ $chr($3) $+ $4-
    sockwrite $2 &packet
  }
  ;X Veikejuij Text->BINARY
  elseif ($1 == -t) {
    bset -t &packet 1 $chr($len($4-)) $+ $chr($3) $+ $4-
    sockwrite game.mp.sr.player. $+ $2 &packet
  }
  ;X Veikejuij Plain BINARY
  else {
    bset &packet 1 $2-
    sockwrite game.mp.sr.player. $+ $1 &packet
  }
  bunset &packet
}
/*
===PACKET INDEX===

Start Objects = 5 </> Variable size: 0Bytes </> Packet size: 2Bytes
5-

End Objects = 6 </> Variable size: 0Bytes </> Packet size: 2Bytes
6-

Add Object = 1 </> Variable size: 3Bytes </> Packet size: 5Bytes
1-ID-X-Y

Move Ball = 2 </> Variable size: 6Bytes </> Packet size: 8Bytes
2-BallID-Old_X-Old_Y-New_X-New_Y-UnderBall

Move Object = 3 </> Variable size: 9Bytes </> Packet size: 11Bytes
3-BallID-Ball_x-Ball_y-New_ball_x-New_ball_y-Obj_x-Obj_y-objID-UnderBall

Move Object To Pad = 4 </> Variable size: 10Bytes </> Packet size: 12Bytes
4-ballid-Ball_X-Ball_Y-New_Ball_X-New_ball_Y-Pad_X-Pad_Y-BoxId-PadId-UnderBall

PING = 10 </> Variable size: ~10Bytes </> Packet size: ~13Bytes
10-readedticks(bvar.text)

Add Score = 7 </> Variable size: 2Bytes </> Packet size: 4Bytes
7-[254:-/255:+]score

Message = 9 </> Variable size: 1-900Bytes </> Packet size: 3-903Bytes
9-MSG

Selected Ball Add = 8  </> Variable size: 1Bytes </> Packet size: 3Bytes
8-BallID

BEEP = 11 </> Variable size: 1Bytes </> Packet size: 3Bytes
11-Times

Please Select Ball = 12 </> Variable size: 0-10Bytes </> Packet size: 2-12Bytes
12-used-ball-ids

Wrong Nickname = 13 </> Variable size: 0Bytes </> Packet size: 2Bytes
13-
*/