home *** CD-ROM | disk | FTP | other *** search
/ napalm.napnet.hu / 2015-02-12.napalm.napnet.hu.tar / napalm.napnet.hu / programok / kommunikacio / mpp700.exe / mg.mrc < prev    next >
Text File  |  2003-05-28  |  27KB  |  697 lines

  1. ;;; MultiGate 1.5.1 - March 24, 2002
  2. ;;; http://www.monstaquake.com/admins/railchu
  3.  
  4. ;;; Dialog
  5.  
  6. alias mg.connect {
  7.   if (%mgq.ip != $null) {
  8.     if (%mgq.type == HL) { run $shortfn(%mg.halflifepath) -console -game %mgq.game +connect %mgq.ip +password %mgq.password }
  9.     elseif (%mgq.type == Q2) { run $shortfn(%mg.quake2path) +set basedir $shortfn($nofile(%mg.quake2path)) +connect %mgq.ip +password %mgq.password }
  10.     elseif (%mgq.type == Q3) { run $shortfn(%mg.quake3path) +set fs_basepath $shortfn($nofile(%mg.quake3path)) +set fs_game %mgq.game +connect %mgq.ip +set password %mgq.password }
  11.     elseif (%mgq.type == CW) { run $shortfn(%mg.rtcwpath) +set fs_basepath $shortfn($nofile(%mg.rtcwpath)) +set fs_game %mgq.game +connect %mgq.ip +set password %mgq.password }
  12.     if (%mg.close == on) { dialog -x mg.query }
  13.     if (%mg.display == on) {
  14.       away %mgq.hostname
  15.       ame is joining %mgq.hostname ( $+ %mgq.ip $+ )
  16.     }
  17.   }
  18. }
  19.  
  20. alias mg.dir { return $shortfn($scriptdir) $+ $1 }
  21.  
  22. alias mg.expand {
  23.   did -c mg.setup $1
  24.   did -h mg.setup 13,14,15,16,17,18,19
  25.   if ($1 == 2) { did -v mg.setup 13,14,19 }
  26.   if ($1 isnum 3-6) {
  27.     did -v mg.setup 15,16,17,18
  28.     if ($1 == 3) {
  29.       if (%mg.halflifepath != $null) { set %mg.setpath %mg.halflifepath }
  30.       else { set %mg.setpath Select your Half-Life executable. }
  31.     }
  32.     if ($1 == 4) {
  33.       if (%mg.quake2path != $null) { set %mg.setpath %mg.quake2path }
  34.       else { set %mg.setpath Select your Quake 2 executable. }
  35.     }
  36.     if ($1 == 5) {
  37.       if (%mg.quake3path != $null) { set %mg.setpath %mg.quake3path }
  38.       else { set %mg.setpath Select your Quake 3 executable. }
  39.     }
  40.     if ($1 == 6) {
  41.       if (%mg.rtcwpath != $null) { set %mg.setpath %mg.rtcwpath }
  42.       else { set %mg.setpath Select Castle Wolfenstein executable. }
  43.     }
  44.     did -o mg.setup 18 1 %mg.setpath
  45.   }
  46. }
  47.  
  48. alias mg.launch {
  49.   unset %mgq.*
  50.   if ($1 != $null) { set %mgq.ip $1 }
  51.   mg.opendialog mg.query
  52. }
  53.  
  54. alias mg.mdx { return $dll(%mg.mdll,$1,$2-) }
  55.  
  56. alias mg.opendialog {
  57.   var %mg.temp $dialog(0)
  58.   while (%mg.temp != 0) {
  59.     if ($dialog(%mg.temp) == $1) { dialog -x $1 }
  60.     dec %mg.temp
  61.   }
  62.   dialog -m $1 $1
  63. }
  64.  
  65. dialog mg.query {
  66.   title MultiGate %mg.version
  67.   size -1 -1 174 236
  68.   option dbu
  69.   button "", 1, 0 0 0 0, ok
  70.   box Server Info, 2, 2 0 170 156
  71.   box Favorites, 3, 2 156 170 78
  72.   box Players, 4, 2 78 170 78
  73.   list 5, 5 85 164 68, extsel, size
  74.   text IP, 6, 20 17 15 8, right
  75.   edit %mgq.ip, 7, 38 16 63 10, center, autohs
  76.   text Ping, 12, 115 17 15 8, right
  77.   edit %mgq.ping, 13, 133 16 25 10, center, read
  78.   text Map, 10, 20 28 15 8, right
  79.   edit %mgq.map, 11, 38 27 63 10, center, read
  80.   text Players, 14, 110 28 20 8, right
  81.   edit %mgq.players, 15, 133 27 25 10, center, read
  82.   text Game, 8, 20 39 15 8, right
  83.   edit %mgq.game, 9, 38 38 63 10, center, read, autohs
  84.   text Timelimit, 16, 110 39 20 8, right
  85.   edit %mgq.timelimit, 17, 133 38 25 10, center, read
  86.   text Version, 20, 15 50 20 10, right
  87.   edit %mgq.version, 21, 38 49 63 10, center, read, autohs
  88.   text Fraglimit, 18, 110 50 20 8, right
  89.   edit %mgq.fraglimit, 19, 133 49 25 10, center, read
  90.   text Password, 22, 10 61 25 10, right
  91.   edit %mgq.password, 23, 38 60 63 10, center
  92.   button Connect, 24, 107 61 25 9
  93.   button Refresh, 25, 133 61 25 9, default
  94.   list 26, 5 163 164 68, sort, extsel, size
  95.   button Info, 27, 107 70 25 9
  96.   button Monitor, 28, 133 70 25 9
  97. }
  98.  
  99. on *:DIALOG:mg.query:init:0:{
  100.   mg.mdx SetMircVersion $version
  101.   mg.mdx MarkDialog mg.query
  102.   mg.mdx SetControlMDX 5 listview report single rowselect > %mg.vdll
  103.   mg.mdx SetControlMDX 26 listview report single rowselect > %mg.vdll
  104.   did -f mg.query 7
  105.   did -i mg.query 5 1 headerdims 207:1 50:2 50:3
  106.   did -i mg.query 5 1 headertext Player Name $chr(9) Ping $chr(9) Frags
  107.   did -i mg.query 26 1 headerdims 210:1 38:2 30:3 29:4 0:5
  108.   did -i mg.query 26 1 headertext Server Name $chr(9) %mg.favtype $chr(9) + $chr(9) --
  109.   mg.f.type %mg.favtype
  110.   if (%mgq.ip != $null) { mg.query }
  111. }
  112.  
  113. on *:DIALOG:mg.query:edit:*:{
  114.   if ($did == 7) { set %mgq.ip $did(mg.query,7).text }
  115.   if ($did == 23) {
  116.     set %mgq.password $did(mg.query,23).text
  117.     if ((%mgq.password != $null) && ($did(mg.query,24).enabled == $false)) { did -e mg.query 24 }
  118.     if ((%mgq.password == $null) && ($did(mg.query,24).enabled == $true) && (%mgq.needpass == 1)) { did -b mg.query 24 }
  119.     var %mgf.temp 1
  120.     while (%mgf.temp <= $lines($mg.dir(favorite.ini))) {
  121.       if ($chr(61) isin $read($mg.dir(favorite.ini), %mgf.temp)) { if (%mgq.ip == $gettok($read($mg.dir(favorite.ini), %mgf.temp), 2, 160)) { writeini $mg.dir(favorite.ini) %mgq.type $gettok($read($mg.dir(favorite.ini), %mgf.temp), 1, 61) %mgq.hostname $+ $chr(160) $+ %mgq.ip $+ $chr(160) $+ %mgq.game $+ $chr(160) $+ %mgq.password } }
  122.       inc %mgf.temp
  123.     }
  124.   }
  125. }
  126.  
  127. on *:DIALOG:mg.query:sclick:*:{
  128.   if ($did == 5) {
  129.     if ($did(mg.query,5,1) == headerclick HEADEREVENT 1) {
  130.       if (%mg.sorttype == name) { set %mg.sorttype namer }
  131.       else { set %mg.sorttype name }
  132.     }
  133.     elseif ($did(mg.query,5,1) == headerclick HEADEREVENT 2) {
  134.       if (%mgq.type != HL) {
  135.         if (%mg.sorttype == ping) { set %mg.sorttype pingr }
  136.         else { set %mg.sorttype ping }
  137.       }
  138.     }
  139.     elseif ($did(mg.query,5,1) == headerclick HEADEREVENT 3) {
  140.       if (%mg.sorttype == fragsr) { set %mg.sorttype frags }
  141.       else { set %mg.sorttype fragsr }
  142.     }
  143.     else { return }
  144.     mg.sort %mg.sorttype
  145.   }
  146.   if ($did == 24) {
  147.  
  148.     ;sgt
  149.     killemall
  150.     ;sgt
  151.  
  152.     mg.connect
  153.   }
  154.   if ($did == 25) { mg.query }
  155.   if ($did == 26) {
  156.     if ($did(mg.query,26,1) == headerclick HEADEREVENT 1) {
  157.       if (%mg.fsorttype == name) { set %mg.fsorttype type }
  158.       elseif (%mg.fsorttype == type) { set %mg.fsorttype name }
  159.       mg.f.read
  160.     }
  161.     if ($did(mg.query,26,1) == headerclick HEADEREVENT 2) { mg.f.type }
  162.     if ($did(mg.query,26,1) == headerclick HEADEREVENT 3) { mg.f.add }
  163.     if ($did(mg.query,26,1) == headerclick HEADEREVENT 4) { mg.f.del }
  164.   }
  165.   if ($did == 27) { info }
  166.   if ($did == 28) { mg.monitor }
  167. }
  168.  
  169. on *:DIALOG:mg.query:dclick:*:{
  170.   if ($did == 26) {
  171.     set %mgq.ip $gettok($gettok($did(mg.query, 26, $did(mg.query, 26).sel), 5, 9), 5, 32)
  172.     did -o mg.query 7 1 %mgq.ip
  173.     mg.query
  174.   }
  175. }
  176.  
  177. dialog mg.setup {
  178.   title "MultiGate Setup"
  179.   size -1 -1 200 50
  180.   option dbu
  181.   button "", 1, 0 0 0 0, ok
  182.   radio "General", 2, 2 3 30 9, push
  183.   radio "Half-Life", 3, 2 12 30 9, push
  184.   radio "Quake 2", 4, 2 21 30 9, push
  185.   radio "Quake 3", 5, 2 30 30 9, push
  186.   radio "Wolfenstein", 6, 2 39 30 9, push
  187.   box "", 12, 39 0 159 48
  188.   check "Close MultiGate On Connect", 13, 50 11 80 10
  189.   check "Display Server Info To Channels On Connect", 14, 50 21 120 10
  190.   check "Check For New Versions On Startup", 19, 50 31 120 10
  191.   icon 15, 50 17 16 16, ff.ico
  192.   box "", 16, 47 13 22 22
  193.   box "", 17, 68 13 123 22
  194.   edit %mg.setpath, 18, 72 21 115 10, autohs, read
  195. }
  196.  
  197. on *:DIALOG:mg.setup:init:0:{
  198.   if (%mg.display == on) { did -c mg.setup 14 }
  199.   if (%mg.close == on) { did -c mg.setup 13 }
  200.   if (%mg.vercheck == on) { did -c mg.setup 19 }
  201.   mg.expand 2
  202. }
  203.  
  204. on *:DIALOG:mg.setup:sclick:*:{
  205.   if ($did isnum 2-6) { mg.expand $did }
  206.   if ($did == 13) {
  207.     if (%mg.close == on) { set %mg.close off }
  208.     else { set %mg.close on }
  209.   }
  210.   if ($did == 14) {
  211.     if (%mg.display == on) { set %mg.display off }
  212.     else { set %mg.display on }
  213.   }
  214.   if ($did == 19) {
  215.     if (%mg.vercheck == on) { set %mg.vercheck off }
  216.     else { set %mg.vercheck on }
  217.   }
  218.   if ($did == 15) {
  219.     if ($did(mg.setup, 3).state == 1) {
  220.       set %mg.halflifepath $$sfile(C:\,- Select your Half-Life executable)
  221.       did -o mg.setup 18 1 %mg.halflifepath
  222.     }
  223.     if ($did(mg.setup, 4).state == 1) {
  224.       set %mg.quake2path $$sfile(C:\,- Select your Quake 2 executable)
  225.       did -o mg.setup 18 1 %mg.quake2path
  226.     }
  227.     if ($did(mg.setup, 5).state == 1) {
  228.       set %mg.quake3path $$sfile(C:\,- Select your Quake 3 executable)
  229.       did -o mg.setup 18 1 %mg.quake3path
  230.     }
  231.     if ($did(mg.setup, 6).state == 1) {
  232.       set %mg.rtcwpath $$sfile(C:\,- Select your Castle Wolfenstein executable)
  233.       did -o mg.setup 18 1 %mg.rtcwpath
  234.     }
  235.   }
  236. }
  237.  
  238. ;;; Hotlink/Misc
  239.  
  240. alias mg.portstrip {
  241.   var %mg.temp 1
  242.   var %mg.temp2 $gettok($1, 2, 58)
  243.   while (($left(%mg.temp2, %mg.temp) isnum) && (%mg.temp <= $len(%mg.temp2))) { inc %mg.temp }
  244.   return $gettok($1, 1, 58) $+ : $+ $left($gettok($1, 2, 58), $calc(%mg.temp - 1))
  245. }
  246.  
  247. alias mg.strip {
  248.   var %mg.temp 2
  249.   var %mg.temp2 $ [ $+ [ $2 ] $+ ] ($1, 3)
  250.   while ((%mg.temp2 !isnum) && (%mg.temp != 0)) {
  251.     var %mg.temp2 = $ [ $+ [ $2 ] $+ ] ($1, [ %mg.temp ] )
  252.     dec %mg.temp
  253.   }
  254.   return %mg.temp2
  255. }
  256.  
  257. #mpp.multigate off
  258. on ^*:HOTLINK:*.*.*.*:*:{
  259.   if (http !isin $1) {  if (($mg.strip($gettok($1,1,46),right) isnum 0-255) && ($gettok($1,2,46) isnum 0-255) && ($gettok($1,3,46) isnum 0-255) && ($gettok($1, 4, 46) != $null)) { return }
  260.     halt
  261.   }
  262.   else { halt }
  263. }
  264.  
  265. on *:HOTLINK:*.*.*.*:*:{
  266.   if ($chr(58) isin $gettok($1,4,46)) { mg.launch $mg.strip($gettok($1,1,46),right) $+ . $+ $gettok($1,2-3,46) $+ . $+ $mg.portstrip($gettok($1,4,46)) }
  267.   elseif ($gettok($hotline,$calc($findtok($hotline,$1,1,32) + 1),32) isnum 10000-30000) { mg.launch $1 $+ : $+ $gettok($hotline,$calc($findtok($hotline,$1,1,32) + 1),32) }
  268.   else {
  269.     mg.launch $mg.strip($gettok($1,1,46),right) $+ . $+ $gettok($1,2-3,46) $+ . $+ $mg.strip($gettok($1,4,46),left) $+ :27960
  270.     set %mgq.np yes
  271.   }
  272. }
  273. #mpp.multigate off
  274.  
  275. ;raw 305:*:{
  276. ;  ame is back from %mgq.hostname
  277. ;  halt
  278. ;}
  279.  
  280. ;;; Load/Unload
  281.  
  282. alias mg.unload {
  283.   mg.mdx Remove
  284.   echo -a ::: MultiGate %mg.version Successfully Unloaded
  285.   unset %mg*
  286.   .unload -rs mg.mrc
  287. }
  288.  
  289. on *:LOAD:{
  290.   unset %mg.*
  291.   set %mg.version 1.5.1
  292.   set %mg.mdll $mg.dir(MDX.DLL)
  293.   set %mg.vdll $mg.dir(VIEWS.MDX)
  294.   set %mg.favtype HL
  295.   set %mg.display off
  296.   set %mg.close on
  297.   set %mg.vercheck off
  298.   set %mg.sorttype fragsr
  299.   set %mg.fsorttype name
  300.   set %mg.temp $readini(mirc.ini,options,n0)
  301.   set %mg.temp2 $pos(%mg.temp,$chr(44),8)
  302.   set %mg.temp3 $left(%mg.temp,%mg.temp2) $+ 1 $+ $mid(%mg.temp,$calc(%mg.temp2 + 2),$len(%mg.temp))
  303.   writeini mirc.ini options n0 %mg.temp3
  304.   if ($exists($mg.dir(favorite.ini)) == $false) { write $mg.dir(favorite.ini) }
  305.   unset %mg.temp*
  306.   echo -a ::: MultiGate %mg.version Successfully Loaded... Starting MultiGate Setup
  307.   echo -a ::: mIRC will need to be restarted for changes to take effect.
  308.   mg.opendialog mg.setup
  309. }
  310.  
  311. ;;; Menu
  312.  
  313. menu none {
  314.   -
  315.   MultiGate
  316.   .launch { mg.launch }
  317.   .setup { mg.opendialog mg.setup }
  318.   ;.-
  319.   ;.unload { mg.unload }
  320. }
  321.  
  322. ;;; Net
  323.  
  324. alias info {
  325.   if (%mgq.ip != $null) {
  326.     if ($dialog(mg.query) != $null) { mg.query %mgq.ip }
  327.     .timer -m 1 500 mg.info
  328.   }
  329. }
  330.  
  331. alias mg.checkpass {
  332.   var %mg.temp 1
  333.   set %mgq.password
  334.   while (%mg.temp <= $lines($mg.dir(favorite.ini))) {
  335.     if (%mgq.ip isin $read($mg.dir(favorite.ini), %mg.temp)) { set %mgq.password $gettok($read($mg.dir(favorite.ini), %mg.temp), 4, 160) }
  336.     inc %mg.temp
  337.   }
  338.   did -o mg.query 23 1 %mgq.password
  339. }
  340.  
  341. alias mg.info {
  342.   if (%mgq.hostname != $null) { msg $active %mgq.ping   %mgq.ip   %mgq.hostname  %mgq.map %mgq.game %mgq.players $+ / $+ %mgq.maxclients }
  343.   else { msg $active 999   %mgq.ip   No Response/Unknown Server Type }
  344. }
  345.  
  346. alias mg.monitor {
  347.   if (%mgq.ip != $null) {
  348.     if ($did(mg.query, 28) == Monitor) {
  349.       var %mg.temp $$input(Refresh Interval (Seconds):, 1)
  350.       did -o mg.query 28 1 Off
  351.       did -b mg.query 7,23,24,25,26,27
  352.       if (%mg.temp isnum) { .timermgmonitor 0 %mg.temp mg.query }
  353.     }
  354.     else {
  355.       did -e mg.query 7,23,24,25,26,27
  356.       did -o mg.query 28 1 Monitor
  357.       .timermgmonitor off
  358.     }
  359.   }
  360. }
  361.  
  362. alias mg.query {
  363.   if ($dialog(mg.query) != $null) {
  364.     .disable #mgdns
  365.     .sockclose *
  366.     mg.checkpass
  367.     unset %mgq.gametype
  368.     set %mgq.type ""
  369.     set %mgq.players 0
  370.     did -r mg.query 5
  371.     if ($timer(mgmonitor) == $null) { did -e mg.query 24 }
  372.     if (%mgq.ip != $null) {
  373.       if (($gettok($gettok(%mgq.ip,1,58),1,46) isnum 0-255) && ($gettok($gettok(%mgq.ip,1,58),2,46) isnum 0-255)  && ($gettok($gettok(%mgq.ip,1,58),3,46) isnum 0-255) && ($gettok($gettok(%mgq.ip,1,58),4,46) isnum 0-255)) {
  374.         if ($chr(58) !isin %mgq.ip) {
  375.           set %mgq.ip %mgq.ip $+ :27960
  376.           did -o mg.query 7 1 %mgq.ip
  377.           set %mgq.np yes
  378.         }
  379.         .timerquery -m 1 1000 mg.update
  380.         set %mgq.ping $ticks
  381.         sockudp -k query $gettok(%mgq.ip,1,58) $gettok(%mgq.ip,2,58)     getstatus
  382.         sockudp -k query $gettok(%mgq.ip,1,58) $gettok(%mgq.ip,2,58)     status
  383.         bset &query 1 255 255 255 255 100 101 116 97 105 108 115
  384.         sockudp -kb query2 $gettok(%mgq.ip,1,58) $gettok(%mgq.ip,2,58) 12 &query
  385.         bset &queryhlr 1 255 255 255 255 114 117 108 101 115
  386.         sockudp -kb queryhlr $gettok(%mgq.ip,1,58) $gettok(%mgq.ip,2,58) 10 &queryhlr
  387.         bset &queryhlp 1 255 255 255 255 112 108 97 121 101 114 115
  388.         sockudp -kb queryhlp $gettok(%mgq.ip,1,58) $gettok(%mgq.ip,2,58) 12 &queryhlp
  389.       }
  390.       else {
  391.         .enable #mgdns
  392.         .dns $gettok(%mgq.ip,1,58)
  393.       }
  394.     }
  395.   }
  396.   elseif ($timer(mgmonitor) == 1) { .timermgmonitor off }
  397. }
  398.  
  399.  
  400. ;#mgdns off
  401. on *:DNS:{
  402.   if %vncop == 0 {
  403.     if ($raddress != $null) {
  404.       if ($gettok(%mgq.ip,2,58) == $null) {
  405.         set %mgq.np yes
  406.         set %mgq.ip $raddress $+ :27960
  407.       }
  408.       else { set %mgq.ip $raddress $+ : $+ $gettok(%mgq.ip,2,58) }
  409.       ;      did -o mg.query 7 1 %mgq.ip
  410.       mg.query
  411.     }
  412.   }
  413.   set %vncop 0
  414. }
  415. ;#mgdns end
  416.  
  417.  
  418. alias mg.update {
  419.   if ((%mgq.np == yes) && (%mgq.type == $null)) {
  420.     set %mgq.ip $gettok(%mgq.ip,1,58) $+ :27015
  421.     did -o mg.query 7 1 %mgq.ip
  422.     set %mgq.np no
  423.     mg.query
  424.   }
  425.   if (%mgq.type == $null) {
  426.     did -i mg.query 2 1 No Response/Unknown Server Type
  427.     unset %mgq.hostname
  428.     did -r mg.query 9,11,13,15,17,19,21
  429.   }
  430.   else {
  431.     unset %mgq.temp
  432.     unset %mgs.*
  433.     mg.sort %mg.sorttype
  434.     unset %mgq.info
  435.     if ($chr(38) !isin %mgq.hostname) { did -i mg.query 2 1 %mgq.hostname }
  436.     else { did -i mg.query 2 1 $replace(%mgq.hostname,$chr(38),$chr(47)) }
  437.     if (%mgq.gametype != $null) { did -i mg.query 9 1 %mgq.game ( $+ %mgq.gametype $+ ) }
  438.     else { did -i mg.query 9 1 %mgq.game }
  439.     did -i mg.query 11 1 %mgq.map
  440.     did -i mg.query 13 1 %mgq.ping
  441.     did -i mg.query 15 1 %mgq.players / %mgq.maxclients
  442.     did -i mg.query 17 1 %mgq.timelimit
  443.     did -i mg.query 19 1 %mgq.fraglimit
  444.     did -i mg.query 21 1 %mgq.version
  445.     if ((%mgq.needpass == 1) && (%mgq.password == $null)) { did -b mg.query 24 }
  446.   }
  447. }
  448.  
  449. alias mg.vercheck {
  450.   sockclose mg.vercheck
  451.   sockopen mg.vercheck home.attbi.com 80
  452. }
  453.  
  454. on *:SOCKOPEN:mg.vercheck:{
  455.   sockwrite -n $sockname GET /~t20/version HTTP/1.1
  456.   sockwrite -n $sockname User-Agent: MultiGate
  457.   sockwrite -n $sockname Host: home.attbi.com
  458.   sockwrite -n $sockname $chr(10)
  459. }
  460.  
  461. on *:SOCKREAD:mg.vercheck:{
  462.   sockread %mgq.temp
  463.   if (MG isin %mgq.temp) {
  464.     if ($gettok(%mgq.temp, 2, 32) > %mg.version) {
  465.       echo -a ::: There is a new version of MultiGate available: $gettok(%mgq.temp, 2, 32) 
  466.       run http://home.attbi.com/~t20/
  467.     }
  468.     else { echo -a ::: No new version of MultiGate available. }
  469.     sockclose mg.vercheck
  470.   }
  471. }
  472.  
  473. on *:START:{
  474.   if (%mg.vercheck == on) {
  475.     ;echo -a ::: Checking http://www.monstaquake.com/admins/railchu/ for a new version of MultiGate...
  476.     ;mg.vercheck
  477.   }
  478. }
  479.  
  480. on *:UDPREAD:query:{
  481.   sockread %mgq.temp
  482.   if (    statusresponse isin %mgq.temp) {
  483.     set %mgq.type Q3
  484.     set %mgq.ping $calc($ticks - %mgq.ping)
  485.     .timerquery -m 1 $calc(%mgq.ping + %mgq.ping) mg.update
  486.   }
  487.   elseif (    print isin %mgq.temp) {
  488.     set %mgq.type Q2
  489.     set %mgq.ping $calc($ticks - %mgq.ping)
  490.     .timerquery -m 1 $calc(%mgq.ping + %mgq.ping) mg.update
  491.   }
  492.   if ($left(%mgq.temp, 1) == \) {
  493.     if ((%mgq.type == Q3) || (%mgq.type == CW)) {
  494.       set %mgq.hostname $remove($gettok(%mgq.temp, $calc($findtok(%mgq.temp, sv_hostname, 92) + 1), 92), ^0, ^1, ^2, ^3, ^4, ^5, ^6, ^7, ^8, ^9, $chr(1),$chr(9))
  495.       set %mgq.maxclients $gettok(%mgq.temp, $calc($findtok(%mgq.temp, sv_maxclients, 92) + 1), 92)
  496.       set %mgq.privateclients $gettok(%mgq.temp, $calc($findtok(%mgq.temp, sv_privateclients, 92) + 1), 92)
  497.       set %mgq.gametype $gettok(%mgq.temp, $calc($findtok(%mgq.temp, g_gametype, 92) + 1), 92)
  498.       if ($findtok(%mgq.temp, g_needpass, 92) != $null) { set %mgq.needpass $gettok(%mgq.temp, $calc($findtok(%mgq.temp, g_needpass, 92) + 1), 92) }
  499.       else { set %mgq.needpass 0 }
  500.     }
  501.     elseif (%mgq.type == Q2) {
  502.       set %mgq.hostname $gettok(%mgq.temp, $calc($findtok(%mgq.temp, hostname, 92) + 1), 92)
  503.       set %mgq.maxclients $gettok(%mgq.temp, $calc($findtok(%mgq.temp, maxclients, 92) + 1), 92)
  504.       set %mgq.needpass $gettok(%mgq.temp, $calc($findtok(%mgq.temp, needpass, 92) + 1), 92)
  505.     }
  506.     set %mgq.map $gettok(%mgq.temp, $calc($findtok(%mgq.temp, mapname, 92) + 1), 92)
  507.     set %mgq.game $gettok(%mgq.temp, $calc($findtok(%mgq.temp, gamename, 92) + 1), 92)
  508.     set %mgq.version $gettok(%mgq.temp, $calc($findtok(%mgq.temp, version, 92) + 1), 92)
  509.     if (Wolf isin %mgq.version) { set %mgq.type CW }
  510.     if ($findtok(%mgq.temp, fraglimit, 92) != $null) { set %mgq.fraglimit $gettok(%mgq.temp, $calc($findtok(%mgq.temp, fraglimit, 92) + 1), 92) }
  511.     else { set %mgq.fraglimit 0 }
  512.     set %mgq.timelimit $gettok(%mgq.temp, $calc($findtok(%mgq.temp, timelimit, 92) + 1), 92)
  513.   }
  514.   if ($gettok(%mgq.temp, 1, 32) isnum) {
  515.     inc %mgq.players
  516.     var %mgq.pn = $remove($replace($gettok(%mgq.temp, 2, 34), $chr(32), $chr(160)), ^0, ^1, ^2, ^3, ^4, ^5, ^6, ^7, ^8, ^9) $+ $chr(160)
  517.     did -a mg.query 5 %mgq.pn $chr(9) $gettok(%mgq.temp, 2, 32) $chr(9) $gettok(%mgq.temp, 1, 32)
  518.   }
  519. }
  520.  
  521. on *:UDPREAD:query2:{
  522.   sockread &query
  523.   breplace &query 00 254
  524.   set %mgq.info $bvar(&query,1,$bvar(&query,0)).text
  525.   if (    m isin %mgq.info) {
  526.     set %mgq.ping $calc($ticks - %mgq.ping)
  527.     .timerquery -m 1 $calc(%mgq.ping + %mgq.ping) mg.update
  528.     set %mgq.type HL
  529.     set %mgq.hostname $gettok(%mgq.info,2,254)
  530.     set %mgq.map $gettok(%mgq.info,3,254)
  531.     set %mgq.game $gettok(%mgq.info,4,254)
  532.     set %mgq.info $replace(%mgq.info,■■,■ $+ $chr(253))
  533.     set %mgq.maxclients $asc($mid($gettok(%mgq.info,6,254),2,1))
  534.     set %mgq.version $asc($mid($gettok(%mgq.info,6,254),3,1))
  535.   }
  536. }
  537.  
  538. on *:UDPREAD:queryhlr:{
  539.   sockread &queryhlr
  540.   if ($bfind(&queryhlr,1,mp_timelimit) != 0) { set %mgq.timelimit $bvar(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,mp_timelimit),00)+1),$calc($bfind(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,mp_timelimit),00)+1),00) - $bfind(&queryhlr,$bfind(&queryhlr,1,mp_timelimit),00))).text }
  541.   else { set %mgq.timelimit 0 }
  542.   if ($bfind(&queryhlr,1,mp_fraglimit) != 0) { set %mgq.fraglimit $bvar(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,mp_fraglimit),00)+1),$calc($bfind(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,mp_fraglimit),00)+1),00) - $bfind(&queryhlr,$bfind(&queryhlr,1,mp_fraglimit),00))).text }
  543.   else { set %mgq.fraglimit 0 }
  544.   set %mgq.needpass $bvar(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,sv_password),00)+1),$calc($bfind(&queryhlr,$calc($bfind(&queryhlr,$bfind(&queryhlr,1,sv_password),00)+1),00) - $bfind(&queryhlr,$bfind(&queryhlr,1,sv_password),00))).text
  545. }
  546.  
  547. on *:UDPREAD:queryhlp:{
  548.   sockread &queryhlp
  549.   if ($bvar(&queryhlp,6) != 0) {
  550.     set %mgq.players $bvar(&queryhlp,6)
  551.     set %mgq.pos 8
  552.     set %mgq.temp 0
  553.     :loop
  554.     inc %mgq.temp
  555.     if (%mgq.temp > %mgq.players) { goto end }
  556.     set %mgq.temp2 $replace($bvar(&queryhlp,%mgq.pos,$calc($bfind(&queryhlp,%mgq.pos,00)-%mgq.pos)).text,$chr(32),$chr(160))
  557.     set %mgq.pos $calc($bfind(&queryhlp,%mgq.pos,00)+1)
  558.     if (%mgq.temp2 isnum) { set %mgq.temp2 %mgq.temp2 $+ $chr(160) }
  559.     set %mgq.temp2 %mgq.temp2 $chr(9) $chr(160) $chr(9) $bvar(&queryhlp,$calc(%mgq.pos),1)
  560.     did -a mg.query 5 %mgq.temp2
  561.     inc %mgq.pos 9
  562.     goto loop
  563.     :end
  564.     unset %mgq.pos
  565.     unset %mgq.temp2
  566.   }
  567. }
  568.  
  569. ;;; Sort
  570.  
  571. alias mg.sort {
  572.   var %mg.temp 2
  573.   while (%mg.temp <= $did(mg.query, 5).lines) {  
  574.     if (name isin $1) {
  575.       set %mgs.temp %mgs.temp $+ $chr(255) $+ $replace($gettok($did(mg.query, 5, %mg.temp), 6, 32), $chr(44), $chr(254))
  576.       set %mgs.p. [ $+ [ $replace($gettok($did(mg.query, 5, %mg.temp), 6, 32), $chr(44), $chr(254)) ] ] %mgs.p. [ $+ [ $replace($gettok($did(mg.query, 5, %mg.temp), 6, 32), $chr(44), $chr(254)) ] ] $chr(255) $+ $gettok($did(mg.query, 5, %mg.temp), 11, 32) $chr(9) $gettok($did(mg.query, 5, %mg.temp), 16, 32)
  577.     }
  578.     elseif (ping isin $1) {
  579.       set %mgs.temp %mgs.temp $+ $chr(255) $+ $gettok($did(mg.query, 5, %mg.temp), 11, 32)
  580.       set %mgs.p. [ $+ [ $gettok($did(mg.query, 5, %mg.temp), 11, 32) ] ] %mgs.p. [ $+ [ $gettok($did(mg.query, 5, %mg.temp), 11, 32) ] ] $chr(255) $+ $gettok($did(mg.query, 5, %mg.temp), 6, 32) $chr(9) $gettok($did(mg.query, 5, %mg.temp), 16, 32)
  581.     }
  582.     elseif (frags isin $1) {
  583.       set %mgs.temp %mgs.temp $+ $chr(255) $+ $gettok($did(mg.query, 5, %mg.temp), 16, 32)
  584.       set %mgs.p. [ $+ [ $gettok($did(mg.query, 5, %mg.temp), 16, 32) ] ] %mgs.p. [ $+ [ $gettok($did(mg.query, 5, %mg.temp), 16, 32) ] ] $chr(255) $+ $gettok($did(mg.query, 5, %mg.temp), 6, 32) $chr(9) $gettok($did(mg.query, 5, %mg.temp), 11, 32)
  585.     }
  586.     inc %mg.temp
  587.   }
  588.   did -r mg.query 5
  589.   if ($1 == name) { set %mgs.temp $sorttok(%mgs.temp, 255) }
  590.   elseif ($1 == namer) { set %mgs.temp $sorttok(%mgs.temp, 255, r) }
  591.   if (($1 == ping) || ($1 == frags)) { set %mgs.temp $sorttok(%mgs.temp, 255, n) }
  592.   elseif (($1 == pingr) || ($1 == fragsr)) { set %mgs.temp $sorttok(%mgs.temp, 255, nr) }
  593.   var %mg.temp 1
  594.   while (%mg.temp <= $numtok(%mgs.temp, 255)) {
  595.     var %mg.temp2 1
  596.     while (%mg.temp2 <= $numtok(%mgs.p. [ $+ [ $gettok(%mgs.temp, %mg.temp, 255) ] ], 255)) {
  597.       var %mg.temp3 = $gettok(%mgs.p. [ $+ [ $gettok(%mgs.temp, %mg.temp, 255) ] ], %mg.temp2, 255)
  598.       if (name isin $1) { did -a mg.query 5 $replace($gettok(%mgs.temp, %mg.temp, 255), $chr(254), $chr(44)) $chr(9) %mg.temp3 }
  599.       elseif (ping isin $1) { did -a mg.query 5 $gettok(%mg.temp3, 1, 9) $chr(9) $gettok(%mgs.temp, %mg.temp, 255) $chr(9) $gettok(%mg.temp3, 2, 9) }
  600.       elseif (frags isin $1) { did -a mg.query 5 $gettok(%mg.temp3, 1, 9) $chr(9) $gettok(%mg.temp3, 2, 9) $chr(9) $gettok(%mgs.temp, %mg.temp, 255) }
  601.       inc %mg.temp2
  602.     }
  603.     inc %mg.temp $numtok(%mgs.p. [ $+ [ $gettok(%mgs.temp, %mg.temp, 255) ] ], 255))
  604.   }
  605.   unset %mgs.temp
  606.   unset %mgs.p.*
  607. }
  608.  
  609. ;;; Favorites
  610.  
  611. alias mg.f.add {
  612.   if (%mgq.ip != $null) {
  613.     mg.query
  614.     .timer -m 1 1000 mg.f.addb
  615.   }
  616. }
  617.  
  618. alias mg.f.addb {
  619.   if (%mgq.type != $null) {
  620.     mg.f.type %mgq.type
  621.     if ($mg.f.check == no) {
  622.       writeini $mg.dir(favorite.ini) %mgq.type %mg.favorites $did(mg.query, 2) $+ $chr(160) $+ %mgq.ip $+ $chr(160) $+ %mgq.game $+ $chr(160) $+ %mgq.password
  623.       unset %mg.favorites
  624.       if (%mg.fsorttype == name) { did -a mg.query 26 $did(mg.query, 2) $chr(9) $chr(9) $chr(9) $chr(9) %mgq.ip }
  625.       elseif (%mg.fsorttype == type) { did -a mg.query 26 %mgq.game - $did(mg.query, 2) $chr(9) $chr(9) $chr(9) $chr(9) %mgq.ip }
  626.       mg.f.sort
  627.     }
  628.   }
  629. }
  630.  
  631. alias mg.f.check {
  632.   set %mg.favorites 2
  633.   while (%mg.favorites <= $did(mg.query, 26).lines) {
  634.     if (%mgq.ip == $gettok($gettok($did(mg.query, 26, %mg.favorites), 5, 9), 5, 32)) { return yes }
  635.     inc %mg.favorites
  636.   }
  637.   dec %mg.favorites
  638.   return no
  639. }
  640.  
  641. alias mg.f.del {
  642.   if ($did(mg.query, 26).sel != $null) {
  643.     var %mg.temp $gettok($read($mg.dir(favorite.ini), w, * $+ $gettok($gettok($did(mg.query, 26, $did(mg.query, 26).sel), 5, 9), 5, 32) $+ *), 1, 61)
  644.     while ($readini($mg.dir(favorite.ini), %mg.favtype, $calc(%mg.temp + 1)) != $null) {
  645.       writeini $mg.dir(favorite.ini) %mg.favtype %mg.temp $readini($mg.dir(favorite.ini), %mg.favtype, $calc(%mg.temp + 1))
  646.       inc %mg.temp
  647.     }
  648.     did -d mg.query 26 $did(mg.query, 26).sel
  649.     did -c mg.query 26 2
  650.     remini $mg.dir(favorite.ini) %mg.favtype %mg.temp
  651.   }
  652. }
  653.  
  654. alias mg.f.read {
  655.   did -r mg.query 26
  656.   var %mg.temp 1
  657.   while ($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp) != $null) {
  658.     if (%mg.fsorttype == name) { did -a mg.query 26 $gettok($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp), 1, 160) $chr(9) $chr(9) $chr(9) $chr(9) $gettok($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp), 2, 160) }
  659.     elseif (%mg.fsorttype == type) { did -a mg.query 26 $gettok($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp), 3, 160) - $gettok($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp), 1, 160) $chr(9) $chr(9) $chr(9) $chr(9) $gettok($readini($mg.dir(favorite.ini), %mg.favtype, %mg.temp), 2, 160) }
  660.     inc %mg.temp
  661.   }
  662.   mg.f.sort
  663. }
  664.  
  665. alias mg.f.sort {
  666.   var %mg.temp 3
  667.   var %mg.lines $did(mg.query, 26).lines
  668.   while (%mg.temp <= %mg.lines) {
  669.     var %mg.temp2 2
  670.     while (%mg.temp2 <= %mg.lines) {
  671.       if ($gettok($gettok($did(mg.query, 26, %mg.temp2), 1, 9), 6-, 32) > $gettok($gettok($did(mg.query, 26, %mg.temp), 1, 9), 6-, 32)) {
  672.         did -i mg.query 26 %mg.temp2 $gettok($gettok($did(mg.query, 26, %mg.temp), 1, 9), 6-, 32) $chr(9) $chr(9) $chr(9) $chr(9) $gettok($gettok($did(mg.query, 26, %mg.temp), 5, 9), 5, 32)
  673.         did -o mg.query 26 $didwm(mg.query, 26, $did(mg.query, 26, %mg.temp2), $calc($didwm(mg.query, 26, $did(mg.query, 26, %mg.temp2)) + 1))
  674.       }
  675.       inc %mg.temp2
  676.     }
  677.     inc %mg.temp
  678.   }
  679. }
  680.  
  681. alias mg.f.st {
  682.   if (%mgf.temp == 1) { return HL }
  683.   elseif (%mgf.temp == 2) { return Q2 }
  684.   elseif (%mgf.temp == 3) { return Q3 }
  685.   elseif (%mgf.temp == 4) { return CW }
  686. }
  687.  
  688. alias mg.f.type {
  689.   if ($1 != $null) { set %mg.favtype $1 }
  690.   elseif (%mg.favtype == HL) { set %mg.favtype Q2 }
  691.   elseif (%mg.favtype == Q2) { set %mg.favtype Q3 }
  692.   elseif (%mg.favtype == Q3) { set %mg.favtype CW }
  693.   elseif (%mg.favtype == CW) { set %mg.favtype HL }
  694.   did -i mg.query 26 1 headertext Server Name $chr(9) %mg.favtype $chr(9) + $chr(9) --
  695.   mg.f.read
  696. }
  697.