Difference between revisions of "Test2"
From Scriptwiki
m (just a test damnit) |
m |
||
Line 11: | Line 11: | ||
; the alias that opens a new socket if you want to get general information about a running CS-server | ; the alias that opens a new socket if you want to get general information about a running CS-server | ||
− | alias hlinfo { | + | [[alias]] hlinfo { |
[[If-Then-Else|if]] (!$2) tokenize 58 $1 | [[If-Then-Else|if]] (!$2) tokenize 58 $1 | ||
; using a dynamic socket name so we can use multiple instances at once | ; using a dynamic socket name so we can use multiple instances at once | ||
− | var %sock = $+(hlinfo-,$ticks) | + | [[Local_Variables|var]] %sock = $+(hlinfo-,$ticks) |
; construct the query to send to the server | ; construct the query to send to the server | ||
[[bset]] &t 1 255 255 255 255 | [[bset]] &t 1 255 255 255 255 | ||
Line 21: | Line 21: | ||
[[bset]] &t 25 0 | [[bset]] &t 25 0 | ||
; actually open the socket, and send the query | ; actually open the socket, and send the query | ||
− | sockudp -k %sock $1-2 &t | + | [[sockudp]] -k %sock $1-2 &t |
; closing the socket after 60seconds if there is no response (else it will be closed by another event (see below)) | ; closing the socket after 60seconds if there is no response (else it will be closed by another event (see below)) | ||
− | [[timer]] $+ %sock 1 60 sockclose %sock | + | .[[timer]] $+ %sock 1 60 sockclose %sock |
} | } | ||
Line 29: | Line 29: | ||
on *:UDPREAD:hlinfo-*:{ | on *:UDPREAD:hlinfo-*:{ | ||
; save it in a binary variable | ; save it in a binary variable | ||
− | sockread -f &reply | + | [[sockread]] -f &reply |
; set some local variables that we will use below | ; set some local variables that we will use below | ||
− | var %offset, %name, %map, %game, %num, %max, %ip, %dir | + | [[Local_Variables|var]] %offset, %name, %map, %game, %num, %max, %ip, %dir |
; following the protocol, this "m" shows us that we queried a Half-Life 1 server | ; following the protocol, this "m" shows us that we queried a Half-Life 1 server | ||
Line 95: | Line 95: | ||
; and turn off the timer closing the socket | ; and turn off the timer closing the socket | ||
− | [[timer]] $+ $sockname off | + | .[[timer]] $+ $sockname off |
; as we can close it now manually | ; as we can close it now manually | ||
− | sockclose $sockname | + | [[sockclose]] $sockname |
} | } | ||
; this is the alias that will be called from hlplay to open the socket | ; this is the alias that will be called from hlplay to open the socket | ||
− | alias hlchal { | + | [[alias]] hlchal { |
; $1 = ip, $2 = port, $3- = what to call when received | ; $1 = ip, $2 = port, $3- = what to call when received | ||
; use dynamic socket name as above | ; use dynamic socket name as above | ||
− | var %sock = $+(hlchal-,$ticks) | + | [[Local_Variables|var]] %sock = $+(hlchal-,$ticks) |
; construct the query to send to the server | ; construct the query to send to the server | ||
[[bset]] &t 1 255 255 255 255 85 255 255 255 255 | [[bset]] &t 1 255 255 255 255 85 255 255 255 255 | ||
; open the socket, and ask for a player challenge number | ; open the socket, and ask for a player challenge number | ||
− | sockudp -k %sock $1-2 &t | + | [[sockudp]] -k %sock $1-2 &t |
; mark it with the ip and port (and the query we want to call when we've received something from the server) | ; mark it with the ip and port (and the query we want to call when we've received something from the server) | ||
− | sockmark %sock $3- $1-2 | + | [[sockmark]] %sock $3- $1-2 |
; and make a new timer to close it after 60 seconds | ; and make a new timer to close it after 60 seconds | ||
− | [[timer]] $+ %sock 1 60 sockclose %sock | + | .[[timer]] $+ %sock 1 60 sockclose %sock |
} | } | ||
Line 119: | Line 119: | ||
on *:UDPREAD:hlchal-*:{ | on *:UDPREAD:hlchal-*:{ | ||
; and save it in the binary variable called &reply | ; and save it in the binary variable called &reply | ||
− | sockread -f &reply | + | [[sockread]] -f &reply |
; actually call the alias saved in the sockmark (hlplay_query) | ; actually call the alias saved in the sockmark (hlplay_query) | ||
$sock($sockname).mark $bvar(&reply,6,4) | $sock($sockname).mark $bvar(&reply,6,4) | ||
; and turn the timer off because we can close it manually | ; and turn the timer off because we can close it manually | ||
− | [[timer]] $+ $sockname off | + | .[[timer]] $+ $sockname off |
− | sockclose $sockname | + | [[sockclose]] $sockname |
} | } | ||
; the alias we can call to make everything easier | ; the alias we can call to make everything easier | ||
; it will call other aliases to open sockets etc. | ; it will call other aliases to open sockets etc. | ||
− | alias hlplay { | + | [[alias]] hlplay { |
[[If-Then-Else|if]] (!$2) tokenize 58 $1 | [[If-Then-Else|if]] (!$2) tokenize 58 $1 | ||
hlchal $1-2 hlplay_query | hlchal $1-2 hlplay_query | ||
Line 135: | Line 135: | ||
; the alias that opens the _real_ socket to receive data (everything before was just to challenge the server (read the website mentioned above)) | ; the alias that opens the _real_ socket to receive data (everything before was just to challenge the server (read the website mentioned above)) | ||
− | alias hlplay_query { | + | [[alias]] hlplay_query { |
; set a binary variable | ; set a binary variable | ||
[[bset]] &query 1 255 255 255 255 85 $3- | [[bset]] &query 1 255 255 255 255 85 $3- | ||
; use dynamic socket names again | ; use dynamic socket names again | ||
− | var %sock = $+(hlplay-,$ticks) | + | [[Local_Variables|var]] %sock = $+(hlplay-,$ticks) |
; open the socket | ; open the socket | ||
− | sockudp -k %sock $1-2 &query | + | [[sockudp]] -k %sock $1-2 &query |
; and turn on the timer closing the socket after 60seconds | ; and turn on the timer closing the socket after 60seconds | ||
− | [[timer]] $+ %sock 1 60 sockclose %sock | + | .[[timer]] $+ %sock 1 60 sockclose %sock |
} | } | ||
Line 149: | Line 149: | ||
on *:UDPREAD:hlplay-*:{ | on *:UDPREAD:hlplay-*:{ | ||
; we save it in &reply | ; we save it in &reply | ||
− | sockread -f &reply | + | [[sockread]] -f &reply |
; set some local variables we will use later | ; set some local variables we will use later | ||
− | var %i = 1, %num = $bvar(&reply,6), %offset = 7 | + | [[Local_Variables|var]] %i = 1, %num = $bvar(&reply,6), %offset = 7 |
− | var %count = 0, %name, %kills | + | [[Local_Variables|var]] %count = 0, %name, %kills |
; and echo the number of players | ; and echo the number of players | ||
Line 187: | Line 187: | ||
; turn off the timer | ; turn off the timer | ||
− | [[timer]] $+ $sockname off | + | .[[timer]] $+ $sockname off |
; and close the socket manually | ; and close the socket manually | ||
− | sockclose $sockname | + | [[sockclose]] $sockname |
} | } |
Revision as of 19:30, 30 January 2011
; HL server query snippet by Saturn ; ; 16-04-2009: update to protocol version 48 by NaNg ; 29-01-2011: update to fix UTF8 problem in mIRC 7.* and fixed name problems if last char is space by NaNg ; ; usage: ; /hlinfo <ip> <port> ; or: /hlinfo <ip>:<port> ; /hlplay <ip> <port> ; or: /hlplay <ip>:<port> ; the alias that opens a new socket if you want to get general information about a running CS-server alias hlinfo { if (!$2) tokenize 58 $1 ; using a dynamic socket name so we can use multiple instances at once var %sock = $+(hlinfo-,$ticks) ; construct the query to send to the server bset &t 1 255 255 255 255 bset -t &t 5 TSource Engine Query bset &t 25 0 ; actually open the socket, and send the query sockudp -k %sock $1-2 &t ; closing the socket after 60seconds if there is no response (else it will be closed by another event (see below)) .timer $+ %sock 1 60 sockclose %sock } ; this event will get all data sent back from the server on *:UDPREAD:hlinfo-*:{ ; save it in a binary variable sockread -f &reply ; set some local variables that we will use below var %offset, %name, %map, %game, %num, %max, %ip, %dir ; following the protocol, this "m" shows us that we queried a Half-Life 1 server if ($chr($bvar(&reply,5)) == m) { ; Half-Life 1 info reply %offset = 6 ; save the ip %ip = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; the same %name = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; the current map %map = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; the game directory %dir = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; the name of the game %game = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; current and maximum players %num = $bvar(&reply,%offset) %max = $bvar(&reply,$calc(%offset + 1)) } ; else we get data for a CS:Source game else { ; Source info reply ; we do the same as above %offset = 7 %name = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) %map = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) %dir = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) %game = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) %num = $bvar(&reply,$calc(%offset + 2)) %max = $bvar(&reply,$calc(%offset + 3)) } ; now we echo all stored details to the active window echo -a Info for $sock($sockname).saddr $+ : $+ $sock($sockname).sport echo -a Name: %name echo -a Map: %map echo -a Game: %game echo -a Players: %num $+ / $+ %max ; and turn off the timer closing the socket .timer $+ $sockname off ; as we can close it now manually sockclose $sockname } ; this is the alias that will be called from hlplay to open the socket alias hlchal { ; $1 = ip, $2 = port, $3- = what to call when received ; use dynamic socket name as above var %sock = $+(hlchal-,$ticks) ; construct the query to send to the server bset &t 1 255 255 255 255 85 255 255 255 255 ; open the socket, and ask for a player challenge number sockudp -k %sock $1-2 &t ; mark it with the ip and port (and the query we want to call when we've received something from the server) sockmark %sock $3- $1-2 ; and make a new timer to close it after 60 seconds .timer $+ %sock 1 60 sockclose %sock } ; read everything that comes back from the hlchal-* query on *:UDPREAD:hlchal-*:{ ; and save it in the binary variable called &reply sockread -f &reply ; actually call the alias saved in the sockmark (hlplay_query) $sock($sockname).mark $bvar(&reply,6,4) ; and turn the timer off because we can close it manually .timer $+ $sockname off sockclose $sockname } ; the alias we can call to make everything easier ; it will call other aliases to open sockets etc. alias hlplay { if (!$2) tokenize 58 $1 hlchal $1-2 hlplay_query } ; the alias that opens the _real_ socket to receive data (everything before was just to challenge the server (read the website mentioned above)) alias hlplay_query { ; set a binary variable bset &query 1 255 255 255 255 85 $3- ; use dynamic socket names again var %sock = $+(hlplay-,$ticks) ; open the socket sockudp -k %sock $1-2 &query ; and turn on the timer closing the socket after 60seconds .timer $+ %sock 1 60 sockclose %sock } ; this event will receive all data from the server as response to our query on *:UDPREAD:hlplay-*:{ ; we save it in &reply sockread -f &reply ; set some local variables we will use later var %i = 1, %num = $bvar(&reply,6), %offset = 7 var %count = 0, %name, %kills ; and echo the number of players echo -a Players on $sock($sockname).saddr $+ : $+ $sock($sockname).sport ; now we can loop through all player and save some details about them while (%i <= %num) { inc %offset ; the name %name = $bvar(&reply,%offset,128).text inc %offset $calc($len($bvar(&reply,%offset,128).text) + 1) ; the kills %kills = $bvar(&reply,%offset).long if ($isbit(%kills,32)) dec %kills $calc(2^32) inc %offset 8 ; and if there was a player if (%name != $null) { ; increase the variable that shows us the number of the player inc %count ; and echo it to the active window with the kills saved above echo -a %count $+ . %name - %kills } ; increase %i so we go on with the next player inc %i } ; if there are no players online, echo it aswell if (%count == 0) echo -a No players found! ; turn off the timer .timer $+ $sockname off ; and close the socket manually sockclose $sockname }