rendered paste body;Rogue Server :DDDD
alias restart {
hfree -sw *
sockclose *
rstart
}
alias rstart {
window @daemon
set %rogue.defaultmap nethack
set %rogue.port 23
set %rogue.count 1
socklisten rogue %rogue.port
aline @daemon Started up!
}
alias fixcursor {
if (!$hget($1,cursor) || $hget($1,cursor) == self) {
sockwrite $1 $chr(27) $+ [ $+ $calc($hget($1,y) + 2) $+ ; $+ $hget($1,x) $+ H $+ $chr(27) $+ [s
}
elseif ($hget($1,cursor) == prompt) {
if (!$hget($1,inputpos)) {
var %inputpos = 1
}
else {
var %inputpos = $hget($1,inputpos)
}
sockwrite $1 $chr(27) $+ [21; $+ $calc(1 + %inputpos) $+ H
}
else {
aline @daemon Error: Unknown cursor return value, check function fixcursor and $sockname,state
}
}
alias debugmap {
var %limit $hget($1 $+ .map,0).item
var %count 1
while (%count < %limit) {
aline @daemon $hget($1 $+ .map,%count)
inc %count
}
}
alias testhash {
var %limit $calc($hget($1,0).item + 1)
var %count 1
while (%count < %limit) {
aline @daemon $hget($1,%count).item = $hget($1,$hget($1,%count).item)
inc %count
}
}
alias sendmap {
hfree -w $1 $+ .tmp
hmake $1 $+ .tmp 100
set %countf 1
set %limitf $calc($hget($1 $+ .map,0).item + 1)
while (%countf < %limitf) {
hadd $1 $+ .tmp %countf $hget($1 $+ .map,%countf)
inc %countf
}
set %count 1
set %limit $calc($hget($1 $+ .objn,0).item + 1)
while (%count < %limit) {
set %x $gettok($hget($1 $+ .objn,$hget($1 $+ .objn,%count).item),2,32)
set %y $gettok($hget($1 $+ .objn,$hget($1 $+ .objn,%count).item),3,32)
set %glyph $gettok($hget($1 $+ .objn,$hget($1 $+ .objn,%count).item),1,32)
if ($calc(%x - 1) > 0) {
hadd $1 $+ .tmp %y $mid($hget($1 $+ .tmp,%y),0,$calc(%x - 1)) $+ %glyph $+ $mid($hget($1 $+ .tmp,%y),$calc(%x + 1),$calc($len($hget($1 $+ .tmp,%y)) + %x))}
}
else {
hadd $1 $+ .tmp %y %glyph $+ $mid($hget($1 $+ .tmp,%y),$calc(%x + 1),$calc($len($hget($1 $+ .tmp,%y)) + %x))}
}
inc %count
}
if ($2 != all) {
set %countm 1
set %limitm $calc($hget($1 $+ .users,0).item + 1)
while (%countm < %limitm) {
sockwrite $hget($1 $+ .users,%countm).item $chr(27) $+ [ $+ $calc($2 + 2) $+ ; $+ 1 $+ H $+ $replace($hget($1 $+ .tmp,$2),$chr(160),$chr(27) $+ [1C)
sockwrite $hget($1 $+ .users,%countm).item $chr(27) $+ [ $+ $calc($3 + 2) $+ ; $+ 1 $+ H $+ $replace($hget($1 $+ .tmp,$3),$chr(160),$chr(27) $+ [1C)
sockwrite $hget($1 $+ .users,%countm).item $chr(27) $+ [ $+ u
inc %countm
}
}
elseif ($2 == all) {
set %countx 1
set %limitx $calc($hget($1 $+ .tmp,0).item + 1)
while (%countx < %limitx) {
sockwrite $3 $chr(27) $+ [ $+ $calc(%countx + 2) $+ ; $+ 1 $+ H $+ $replace($hget($1 $+ .tmp,%countx),$chr(160),$chr(27) $+ [1C)
inc %countx
}
}
inc %map.count
}
alias loadup {
if (!$hget($1 $+ .map,0).item) {
hmake $1 $+ .objx 50
hmake $1 $+ .objy 50
hmake $1 $+ .objn 50
hmake $1 $+ .map 100
var %count 1
while (%count < $calc($lines(maps/ $+ $1 $+ .map) + 1)) {
hadd $1 $+ .map %count $replace($read(maps/ $+ $1 $+ .map,%count),$chr(32),$chr(160))
;hmake $1 $+ l $+ %count 5
inc %count
}
hmake $1 $+ .boundries 100
var %count2 1
while (%count2 < $calc($lines(maps/ $+ $1 $+ .boundries) + 1)) {
;hadd $1 $+ .boundries %count2 $replace($read(maps/ $+ $1 $+ .boundries,%count2),$chr(32),$chr(160))
var %line = $replace($read(maps/ $+ $1 $+ .boundries,%count2),$chr(32),$chr(160))
var %limitnig $count(%line,$chr(35))
var %countnig 1
while (%countnig < %limitnig) {
hadd $1 $+ .boundries $pos(%line,$chr(35),%countnig) $+ , $+ %count2 $chr(35)
inc %countnig
}
inc %count2
}
hmake $1 $+ .users 100
hmake $1 $+ .meta 10
hadd $1 $+ .meta mapname $gettok($read(maps/ $+ $1 $+ .meta,1),1,44)
; hadd $1 $+ .meta version $gettok($read(maps/ $+ $1 $+ .meta,1),2,44)
hadd $1 $+ .meta version $crc(maps/ $+ $1 $+ .map)
hadd $1 $+ .meta startx $gettok($read(maps/ $+ $1 $+ .meta,1),3,44)
hadd $1 $+ .meta starty $gettok($read(maps/ $+ $1 $+ .meta,1),4,44)
hadd $1 $+ .meta maxx $gettok($read(maps/ $+ $1 $+ .meta,1),5,44)
hadd $1 $+ .meta maxy $gettok($read(maps/ $+ $1 $+ .meta,1),6,44)
}
}
on *:SOCKLISTEN:rogue*:{
var %sockname rogue $+ %rogue.count
sockaccept %sockname
bset &out1 1 255 252 34
bset &out2 1 255 251 1
bset &out3 1 255 251 3
bset &out4 1 255 253 3
bset &out5 1 255 253 1
sockwrite %sockname &out1
sockwrite %sockname &out2
sockwrite %sockname &out3
sockwrite %sockname &out4
sockwrite %sockname &out5
loadup %rogue.defaultmap
hmake %sockname 10
hadd %sockname glyph @
hadd %sockname map %rogue.defaultmap
hadd %rogue.defaultmap $+ .users %sockname %sockname
aline @daemon %sockname joined
var %count 1
var %limit $calc($hget($hget(%sockname,map) $+ .users,0).item + 1)
while (%count < %limit) {
sockwrite -n $hget($hget(%sockname,map) $+ .users,%count).item $chr(27) $+ [H $+ $chr(27) $+ [0K %sockname joins
inc %count
}
; sockwrite -n %sockname NEWMAP $hget(%rogue.defaultmap $+ .meta,mapname)
;sockwrite -n %sockname NEWMAP %rogue.defaultmap $hget(%rogue.defaultmap $+ .meta,version)
; sockwrite -n %sockname MAPVER $hget(%rogue.defaultmap $+ .meta,version)
inc %rogue.count
hadd %sockname x $hget($hget(%sockname,map) $+ .meta,startx)
hadd %sockname y $hget($hget(%sockname,map) $+ .meta,starty)
sockwrite -n %sockname $chr(27) $+ [21;1H> $chr(27) $+ [f
;hadd $hget(%sockname,map) $+ l $+ $hget(%sockname,y) %sockname %sockname
;sockwrite -n %sockname UPDATE $calc($hget(%sockname,y) + 2) $mid($hget($hget(%sockname,map),$hget(%sockname,y)),0,$calc($hget(%sockname,x) - 1)) $+ 4@ $+ $mid($hget($hget(%sockname,map),$hget(%sockname,y)),$calc($hget(%sockname,x) + 1),$calc($len($hget($hget(%sockname,map),$hget(%sockname,y))) + $hget(%sockname,x)))
;aline @daemon sockwrite -n %sockname $calc($hget(%sockname,y) + 2) $mid($hget($hget(%sockname,map),$hget(%sockname,y)),0,$calc($hget(%sockname,x) - 1)) $+ 4@ $+ $mid($hget($hget(%sockname,map),$hget(%sockname,y)),$calc($hget(%sockname,x) + 1),$calc($len($hget($hget(%sockname,map),$hget(%sockname,y))) + $hget(%sockname,x)))
hadd $hget(%sockname,map) $+ .objy $hget($hget(%sockname,map) $+ .meta,defaulty) %sockname
hadd $hget(%sockname,map) $+ .objx $hget($hget(%sockname,map) $+ .meta,defaultx) %sockname
hadd $hget(%sockname,map) $+ .objn %sockname @ $hget(%sockname,x) $hget(%sockname,y)
hadd %sockname cursor self
sendmap $hget(%sockname,map) all %sockname
fixcursor
}
on *:sockclose:rogue*:{
hdel $hget($sockname,map) $+ .users $sockname
hdel $hget($sockname,map) $+ .objn $sockname
hfree $sockname
aline @daemon $sockname quit
}
on *:sockread:rogue*:{
if ($sockerr > 0) return
:nextread
sockread &temp
if ($sockbr == 0) return
; tokenize 32 %temp
var %char = $bvar(&temp,1-)
aline @daemon read f %char
sockwrite $sockname $chr(27) $+ [ $+ $calc($hget($sockname,y) + 2) $+ ; $+ $hget($sockname,x) $+ H $+ $chr(27) $+ [s
if ($hget($sockname,state) != prompt) {
if (%char == 116) {
hadd $sockname state prompt
hadd $sockname prompt talk
; sockwrite $sockname $chr(27) $+ [21;2H
hadd $sockname cursor prompt
fixcursor $sockname
hadd $sockname input $null
hadd $sockname inputpos 1
}
if (%char == 27 91 65 || %char == 27 91 67 || %char == 27 91 66 || %char == 27 91 68) {
var %oldx $hget($sockname,x)
var %oldy $hget($sockname,y)
hdel $hget($sockname,map) $+ .boundries $hget($sockname,x) $+ , $+ $hget($sockname,y)
if (%char == 27 91 65) {
hadd $sockname y $calc($hget($sockname,y) - 1)
}
if (%char == 27 91 66) {
hadd $sockname y $calc($hget($sockname,y) + 1)
}
if (%char == 27 91 67) {
hadd $sockname x $calc($hget($sockname,x) + 1)
}
if (%char == 27 91 68) {
hadd $sockname x $calc($hget($sockname,x) - 1)
}
aline @daemon $sockname is trying to move to a square marked $hget($hget($sockname,map) $+ .boundries,$hget($sockname,x) $+ $chr(44) $+ $hget($sockname,y)) at coordinates $hget($sockname,x) $+ , $+ $hget($sockname,y)
if ($hget($hget($sockname,map) $+ .boundries, $hget($sockname,x) $+ $chr(44) $+ $hget($sockname,y)) == $chr(35) || $hget($hget($sockname,map) $+ .boundries, $hget($sockname,x) $+ $chr(44) $+ $hget($sockname,y)) == @ || $hget($sockname,x) < 1 || $hget($sockname,y) < 1) {
hadd $sockname x %oldx
hadd $sockname y %oldy
}
else {
hadd $hget($sockname,map) $+ .objn $sockname $hget($sockname,glyph) $hget($sockname,x) $hget($sockname,y)
aline @daemon sendmap $hget($sockname,map) %oldy $hget($sockname,y)
sendmap $hget($sockname,map) %oldy $hget($sockname,y)
}
hadd $hget($sockname,map) $+ .boundries $hget($sockname,x) $+ , $+ $hget($sockname,y) @
hadd $sockname cursor self
;sockwrite $sockname $chr(27) $+ [ $+ $calc($hget($sockname,y) + 2) $+ ; $+ $hget($sockname,x) $+ H $+ $chr(27) $+ [s
fixcursor $sockname
}
}
else {
if (%char == 127) {
hadd $sockname input $left($hget($sockname,input),-1)
hadd $sockname inputpos $calc($hget($sockname,inputpos) - 1)
fixcursor $sockname
sockwrite $sockname $chr(27) $+ [0K
}
else {
hadd $sockname input $hget($sockname,input) $+ $chr(%char)
hadd $sockname inputpos $calc($hget($sockname,inputpos) + 1)
fixcursor $sockname
if (%char == 32) {
sockwrite $sockname $chr(27) $+ [1C
}
else {
sockwrite $sockname $chr(%char)
}
}
}
; fixcursor $sockname
goto nextread
}