Quake 2 Server Info — File Browser

Quake2ServerInfov1.0 / Quake2ServerInfov1.0 / q2s / q2s.mrc

q2s.mrc — 14.57 KB — Download this file

menu menubar {
  -
  Quake 2 Server Info: { q2s }
  -
}
alias checkserv {
  var %cs $1
  if ($numtok(%cs,46) != 4) { goto error } | else { goto next }
  :error
  var %g $input(Invalid IP $chr(40) $+ %cs $+ $chr(41),540,Error)
  return error
  :next
  if ($numtok(%cs,58) != 2) { goto error }
  var %cs1 $replace($1,:,$chr(32))
  var %host $gettok($replace(%cs1,:,$chr(32)),1,32)
  var %port $gettok($replace(%cs1,:,$chr(32)),2,32)
  if ((%host) && (%port)) {
    if ((!$regex(%host,\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)) || (%port !isnum)) {
      goto error
    }
    else { return $+(%host,:,%port) }
  }
}
alias getserverinfo1 {
  var %newserv $1-
  ;echo -a %newserv
  if (!%newserv) { goto end1 }
  if ($chr(92) isin %newserv) { goto server }
  if ($chr(34) isin %newserv) { inc $setvar(q2info1.online,%q2info1.check) | goto end1 }
  else { goto end1 }
  :server
  set $setvar(q2info1.hostname,%q2info1.check) $gettok(%newserv, $calc($findtok(%newserv, hostname, 1, 92) + 1), 92)
  set $setvar(q2info1.mapname,%q2info1.check) $gettok(%newserv, $calc($findtok(%newserv, mapname, 1, 92) + 1), 92)
  set $setvar(q2info1.maxclients,%q2info1.check) $gettok(%newserv, $calc($findtok(%newserv, maxclients, 1, 92) + 1), 92)
  if (\game\ isin %newserv) { if ($gettok(%newserv, $calc($findtok(%newserv, game, 1, 92) + 1), 92) ==  baseq2) { set $setvar(q2info1.mod,%q2info1.check) No } | else { set $setvar(q2info1.mod,%q2info1.check) $gettok(%newserv, $calc($findtok(%newserv, game, 1, 92) + 1), 92) } } | else { set $setvar(q2info1.mod,%q2info1.check) No }
  :end1
}
alias loadservers {
  var %a = 1
  while $read($serverlist,%a) {
    var %b = $read($serverlist,%a)
    if ($checkserv($gettok($gettok(%b,1,9),2,33)) == error) { ;echo -a deleting %a line | write -dl %a $serverlist }
    else { did -a q2server.main 2 $gettok($gettok(%b,1,9),2,33) | inc %a }
  }
}
alias refreshserver {
  var %line $1
  var %lines $calc($1 +1)
  if (!$getvar(q2info1.online,%line)) { set $setvar(q2info1.online,%line) 0 }
  if ($getvar(q2info1.mapname,%line) == Timeout) { did -o q2server.main 2 %lines $getvar(q2info1.host,%line) $chr(9) Time Out $chr(9) Time Out $chr(9) Time Out $chr(9) Time Out | goto end2 }
  did -o q2server.main 2 %lines $getvar(q2info1.host,%line) $chr(9) $getvar(q2info1.hostname,%line) $chr(9) $getvar(q2info1.mapname,%line) $chr(9) $getvar(q2info1.online,%line) $+ / $+ $getvar(q2info1.maxclients,%line) $chr(9) $getvar(q2info1.mod,%line)
  :end2
}
alias q2sini { if (!$isfile($+(",$scriptdir,q2s.ini,"))) { write $+(",$scriptdir,q2s.ini,") | return $+(",$scriptdir,q2s.ini,") } | else { return $+(",$scriptdir,q2s.ini,") } }
alias q2sreadini { return $readini($q2sini,$1,$2) }
alias q2swriteini { writeini -n $q2sini $1 $2 $3- }
alias setexe { if ($q2sreadini(Options,Exe) != $NULL) { var %q $input(Your old patch is: " $+ $q2sreadini(Options,Exe) $+ " $+ $crlf $+ Do you want to change it?,392,Found old path) | if (%q == $true) { goto next } | else { return } } | :next | var %exe $sfile(C:/q*.exe,Find your Quake II.exe) | if (%exe) { q2swriteini Options Exe %exe } }
alias mdx { return $+(",$scriptdir,mdx.dll,") }
alias views { return $scriptdirviews.mdx }
alias q2s { dialog $iif($dialog(q2server.main),-v,-m q2server.main) q2server.main }
alias serr { var %g $input(Select server from the list,540,Error) }
alias serverlist { if (!$isfile($+(",$scriptdir,servers.txt,"))) { write $+(",$scriptdir,servers.txt,") | return $+(",$scriptdir,servers.txt,") } | else { return $+(",$scriptdir,servers.txt,") } }
alias setvar { var %a = $1,%b = $2,%c = %a $+ %b | return % $+ %c }
alias getvar { var %a = $1,%b = $2,%c = % $+ %a $+ %b | return $eval(%c,2) }
alias refresh {
  if ($1) { did -o q2server.main 2 $calc($1 +1) $gettok($gettok($read($serverlist,$1),1,9),2,33) $chr(9) ... $chr(9) ... $chr(9) ... $chr(9) ... | q2server.info3 $1 }
  else {
    unset %q2*
    ;clear
    did -r q2server.main 2 | var %a = 1
    while $read($serverlist,%a) {
      var %b = $read($serverlist,%a)
      did -a q2server.main 2 $gettok($gettok(%b,1,9),2,33) $gettok($gettok($read($serverlist,$1),1,9),2,33) $chr(9) ... $chr(9) ... $chr(9) ... $chr(9) ...
      set $setvar(q2info1.host,%a) $gettok($gettok(%b,1,9),2,33)
      inc %a
    }
    ;echo -a $calc(%a -1) servers loaded
    ;echo -a Starting Timers
    q2server.info1
  }
}
alias q2server.info3 {
  unset %q2*
  set $setvar(q2info1.host,$1) $gettok($gettok($read($serverlist,$1),1,9),2,33)
  ;echo -a Timer $+ $1 1 $1 sockudp -k q2server.info $+ $1 $replace($gettok($read($serverlist,$1),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
  ;echo -a $setvar(q2info1.hostname,$1) Timeout 
  set $setvar(q2info1.mapname,$1) Timeout 
  ;.timer $+ $1 1 $1 sockudp -k q2server.info $+ $1 $replace($gettok($read($serverlist,$1),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
  ;.timerq $+ $1 1 $calc($1 *2) refreshserver $1
  sockudp -k q2server.info $+ $1 $replace($gettok($read($serverlist,$1),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
  .timerq $+ $1 1 3 refreshserver $1
}
alias q2server.info1 {
  var %i 1
  while (%i < $calc($lines($serverlist) +1)) {
    set $setvar(q2info1.host,%i) $gettok($gettok($read($serverlist,%i),1,9),2,33)
    ;echo -a Timer $+ %i 1 %i sockudp -k q2server.info $+ %i $replace($gettok($read($serverlist,%i),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
    ;echo -a $setvar(q2info1.hostname,%i) Timeout 
    set $setvar(q2info1.mapname,%i) Timeout 
    ;.timer $+ %i 1 %i sockudp -k q2server.info $+ %i $replace($gettok($read($serverlist,%i),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
    ;.timerq $+ %i 1 $calc(%i *2) refreshserver %i
    sockudp -k q2server.info $+ %i $replace($gettok($read($serverlist,%i),2,33),:,$chr(32)) $chr(255) $+ $chr(255) $+ $chr(255) $+ $chr(255) $+ status
    .timerq $+ %i 1 3 refreshserver %i
    inc %i
  }
}
dialog q2server.main {
  title "Quake II Server Info: Main"
  icon $scriptdirq2.ico, 0
  size -1 -1 300 175
  option dbu
  box "Servers:", 1, 5 5 290 125
  list 2, 10 15 280 110, size
  box "Commands:", 3, 5 135 290 25
  button "Add", 4, 10 145 30 10
  button "Del", 5, 60 145 30 10
  button "Refresh", 6, 110 145 30 10
  button "Info", 7, 160 145 30 10
  button "Set EXE", 8, 210 145 30 10
  button "Join", 9, 260 145 30 10
  text "special thanks to zzattack, sacrilege and dX", 10, 98 164 110 8
}
on *:dialog:q2server.main:*:*:{
  if ($devent == init) {
    dll $mdx SetMircVersion $version
    dll $mdx MarkDialog $dname
    dll $mdx SetControlMDX $dname 2 listview rowselect showsel single report grid > $views
    did -i $dname 2 1 headerdims 130 222 74 65 65
    did -i $dname 2 1 headertext IP $chr(9) Hostname $chr(9) Mapname $chr(9) Players $chr(9) Mod
    unset %q2*
    loadservers
  }
  if ($devent == sclick) {
    if ($did == 4) {
      var %s $input(Ex. 123.456.789.012:12345,437,Enter IP:PORT)
      if (!%s) { halt }
      if ($chr(58) isin %s) {
        if ($checkserv(%s) == error) { goto end3 }
        write $serverlist s! $+ %s
        did -a $dname 2 1 %s
        :end3
      }
      else {
        var %s %s $+ :27910
        if ($checkserv(%s) == error) { goto end4 }
        write $serverlist s! $+ %s
        did -a $dname 2 1 %s
        :end4
      }
    }
    if ($did == 5) { 
      if ($did(q2server.main,2).seltext) { set %sline $calc($did(q2server.main,2).sel -1) }
      if (%sline) {
        did -d $dname 2 $did(q2server.main,2).sel
        write -dl %sline $serverlist
        ;echo -a Deleting %sline Server
        unset %sline
      }
      else { serr }
    }
    if ($did == 6) {
      if ($did(q2server.main,2).seltext) {
        set %sline $calc($did(q2server.main,2).sel -1)
        refresh %sline
        unset %sline
      }
      else { refresh }
    }
    if ($did == 7) {
      if ($did(q2server.main,2).seltext) { set %sline $calc($did(q2server.main,2).sel -1) } | else { unset %sline }
      if (!%sline) { serr } | else { q2server.info $gettok($read($serverlist,%sline),2,33) | unset %sline }
    }
    if ($did == 8) { setexe }
    if ($did == 9) {
      if ($did(q2server.main,2).seltext) {
        var %s $calc($did(q2server.main,2).sel -1)
        var %s1 = $gettok($gettok($read($serverlist,%s),1,9),2,33)
        if ($q2sreadini(Options,Exe) != $NULL) { var %q2start $input( $+ $q2sreadini(Options,Exe) +connect %s1 $+ ,392,Executing Quake II...) | if (%q2start == $true)  { run -p $q2sreadini(Options,Exe) +connect %s1 } }
        else { var %s $input(No exe path found $+ $crlf $+ Press Set EXE first,540,Error)  }      
      }
      else { serr }
    }
  }
  if ($devent == close) { }
}
on *:udpread:q2server.info*: {
  set %q2info1.check $remove($gettok($sockname,2,46),info)
  var %udpread = $setvar(q2s,%q2info1.check)
  sockread %udpread
  $getserverinfo1(%udpread)
  ;echo -a Sockname: %q2info1.check Info: %udpread
}

dialog q2server.info {
  title "Quake 2 Server: Detailed Info"
  icon $scriptdirq2.ico, 0
  size -1 -1 305 220
  option dbu
  box "DMFlags:", 37, 161 112 140 104
  check "No Health", 1, 171 126 34 8, disable
  check "No Items", 2, 171 136 33 8, disable
  check "Weapon Stay", 3, 171 146 43 8, disable
  check "No Falling DMG", 4, 171 156 47 8, disable
  check "Instant Items", 5, 171 166 43 8, disable
  check "Same Level", 6, 171 176 50 8, disable
  check "Skin Teams", 7, 171 186 50 8, disable
  check "Model Teams", 8, 171 196 50 8, disable
  check "No Friendly Fire", 9, 241 126 50 8, disable
  check "Spawn Farthest", 10, 241 136 50 8, disable
  check "Force Respawn", 11, 241 146 50 8, disable
  check "No Armor", 12, 241 156 50 8, disable
  check "Allow Exit", 13, 241 166 50 8, disable
  check "Infinite Ammo", 14, 241 176 50 8, disable
  check "Quad Drop", 15, 241 186 50 8, disable
  check "Fixed FOV", 16, 241 196 50 8, disable
  box "Server Info:", 43, 4 2 150 105
  text "IP:PORT:", 44, 7 12 24 8
  text "Password:", 45, 7 32 26 8
  text "Maxclients:", 46, 7 42 29 8
  text "Timelimit:", 47, 7 52 25 8
  text "Fraglimit:", 48, 7 62 24 8
  text "Hostname:", 49, 7 22 28 8
  text "Website:", 50, 7 72 22 8
  text "Using MOD:", 51, 7 82 29 8
  text "", 52, 37 12 110 8
  text "", 53, 37 22 110 8
  text "", 17, 37 32 110 8
  text "", 18, 37 42 110 8
  text "", 19, 37 52 110 8
  text "", 20, 37 62 110 8
  text "", 21, 37 72 110 8
  text "", 22, 37 82 110 8
  box "Players Info:", 23, 4 112 150 105
  list 24, 9 122 140 90, size
  box "Map Info:", 29, 162 2 140 105
  text "Mapname:", 30, 167 17 26 8
  text "", 31, 195 17 60 8
  icon 32, 167 32 128 64
  text "Q2Admin:", 25, 7 92 25 8
  text "", 26, 37 92 50 8
}
on *:dialog:q2server.info:*:*:{
  if ($devent == init) {
    dll $mdx SetMircVersion $version 
    dll $mdx MarkDialog $dname
    ;dll $mdx SetControlMDX $dname 24 ListView headerdrag report rowselect showsel nosortheader single > $views
    dll $mdx SetControlMDX $dname 24 listview rowselect showsel single report grid > $views
    did -i $dname 24 1 headerdims 150 54 54
    did -i $dname 24 1 headertext Name $chr(9) Frags $chr(9) Ping
  }
  if ($devent == close) {
    unset %q2s %q2smaxclients %players %host
  }
}
alias dmf {
  var %a 1
  while (%a <= 16) {
    if ($isbit($1,%a)) did -c q2server.info %a | else did -u q2server.info %a
    inc %a
  }
}
alias q2server.info {
  if ($1 isalpha) { halt }
  if ($1) {
    if (!$dialog(q2server.info)) { dialog $iif($dialog(q2server.info),-v,-m q2server.info) q2server.info }
    set %host $1
    set %players 0
    unset %q2smaxclients
    did -r q2server.info 24
    bset &packet 1 255 255 255 255 $asc(s) $asc(t) $asc(a) $asc(t) $asc(u) $asc(s) 0
    if ($chr(58) isin %host) { goto check } | else { set %host %host $+ :27910 }
    :check
    sockudp -k q2server.read $replace(%host,$chr(58),$chr(32)) &packet
  }
}
on *:udpread:q2server.read: {
  sockread %q2s
  $getserverinfo2(%q2s)
}
alias getserverinfo2 {
  var %serverinfo $1-
  if (print isin %serverinfo) { goto server }
  else { 
    :server
    if ($chr(34) isin %serverinfo) { 
      did -a q2server.info 24 $remtok($gettok(%serverinfo,3,32),1,1,34) $chr(9) $gettok(%serverinfo,1,32) $chr(9) $remtok($gettok(%serverinfo,2,32),1,1,34)
      inc %players
      goto players 
    }
    if ($gettok(%serverinfo, $calc($findtok(%serverinfo, needpass, 1, 92) + 1), 92) == 1) { did -a q2server.info 17 Yes } | else { did -a q2server.info 17 No }
    did -ra q2server.info 37 DMFlags: $gettok(%serverinfo, $calc($findtok(%serverinfo, dmflags, 1, 92) + 1), 92)
    dmf $gettok(%serverinfo, $calc($findtok(%serverinfo, dmflags, 1, 92) + 1), 92)
    did -a q2server.info 52 %host
    did -a q2server.info 53 $gettok(%serverinfo, $calc($findtok(%serverinfo, hostname, 1, 92) + 1), 92)
    did -a q2server.info 31 $gettok(%serverinfo, $calc($findtok(%serverinfo, mapname, 1, 92) + 1), 92)
    did -a q2server.info 19 $gettok(%serverinfo, $calc($findtok(%serverinfo, timelimit, 1, 92) + 1), 92)
    did -a q2server.info 18 $gettok(%serverinfo, $calc($findtok(%serverinfo, maxclients, 1, 92) + 1), 92)
    set %q2smaxclients $gettok(%serverinfo, $calc($findtok(%serverinfo, maxclients, 1, 92) + 1), 92)
    did -a q2server.info 20 $gettok(%serverinfo, $calc($findtok(%serverinfo, fraglimit, 1, 92) + 1), 92)
    if ($findfile($scriptdir,* $+ $gettok(%serverinfo, $calc($findtok(%serverinfo, mapname, 1, 92) + 1), 92) $+ .jpg*,0) == 0) { did -g q2server.info 32 $chr(34) $+ $scriptdirlevelshots\unknownmap.jpg $+ $chr(34) } | else { did -g q2server.info 32 $chr(34) $+ $scriptdirlevelshots $+ \ $+ $gettok(%serverinfo, $calc($findtok(%serverinfo, mapname, 1, 92) + 1), 92) $+ .jpg $+ $chr(34) }
    if (\game\ isin %serverinfo) { if ($gettok(%serverinfo, $calc($findtok(%serverinfo, game, 1, 92) + 1), 92) == baseq2) { did -ra q2server.info 22 No } | else { did -ra q2server.info 22 $gettok(%serverinfo, $calc($findtok(%serverinfo, game, 1, 92) + 1), 92) $chr(171) $+ $gettok(%serverinfo, $calc($findtok(%serverinfo, gamename, 1, 92) + 1), 92) $+ $chr(187) } } | else { did -ra q2server.info 22 No }
    if (\website\ isin %serverinfo) { did -a q2server.info 21 $gettok(%serverinfo, $calc($findtok(%serverinfo, website, 1, 92) + 1), 92) } | else { did -ra q2server.info 21 N/A }
    if (\Q2Admin\ isin %serverinfo) { did -a q2server.info 26 $gettok(%serverinfo, $calc($findtok(%serverinfo, Q2Admin, 1, 92) + 1), 92) } | else { did -ra q2server.info 26 N/A }
    :players
  }
  did -ra q2server.info 23 Players Info: ( $+ %players $+ / $+ %q2smaxclients Online)
}