Difference between revisions of "Rust Custom Query"

(Created page with "The Rust query reports players in queue as connected players. This causes the game monitor to think the max slots setting has been changed and restart the game server if it's...")
 
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:
 
  '''Event:''' Custom Query
 
  '''Event:''' Custom Query
 
  '''Ignore execution errors''' Unchecked
 
  '''Ignore execution errors''' Unchecked
  '''Instructions''' <span style="color:red">After creating this script go to the game's settings and set the query protocol to custom query.</span>
+
  '''Instructions''' <span style="color:red">After creating this script go to the game's settings and set the query protocol to custom script.</span>
  
 
<source lang="python">import clr
 
<source lang="python">import clr
Line 32: Line 32:
 
Players=""
 
Players=""
 
for player in results.Players:
 
for player in results.Players:
     Players=Players+String.Format("<player><name>{0}</name><ping>{1}</ping><score>{2}</score></player>", player.Name, Player.Ping, Player.Score)
+
     Players=Players+String.Format("<player><name>{0}</name><ping>{1}</ping><score>{2}</score></player>", player.Name, player.Ping, player.Score)
  
 
NumPlayers=results.NumPlayers
 
NumPlayers=results.NumPlayers

Latest revision as of 11:09, 12 April 2022

The Rust query reports players in queue as connected players. This causes the game monitor to think the max slots setting has been changed and restart the game server if it's full and players are in queue. The following custom script prevents this by getting connected players from the value of game_tag.

This script is included in the Rust script created by Dennis: https://community.tcadmin.com/files/file/65-rust-automatic-wipeupdate-oxide-plugin-installer/

Operating System: Any
Description: Rust Query
Script Engine: IronPython
Event: Custom Query
Ignore execution errors Unchecked
Instructions After creating this script go to the game's settings and set the query protocol to custom script.
import clr
import System
clr.AddReference("TCAdmin.GameHosting.SDK")
from System import String
from System.Text.RegularExpressions import Regex
from TCAdmin.GameHosting.SDK.GameMonitor import ServerQuery

querydata=ThisServer.GameAdminService.GetQueryResult("a2s",ThisService.IpAddress, ThisService.QueryPort, ThisService.RootDirectory, ThisService.ServiceId)
results=ServerQuery.GetQueryResults(querydata)

XmlFormat="<?xml version=\"1.0\" encoding=\"UTF-8\"?><qstat><server type=\"CUSTOM\" address=\"{0}:{1}\" status=\"{2}\"><hostname>{0}:{1}</hostname><name>{3}</name><gametype>{4}</gametype><map>{5}</map><numplayers>{6}</numplayers><maxplayers>{7}</maxplayers><numspectators>0</numspectators><maxspectators>0</maxspectators><ping>0</ping><retries>0</retries><rules>{8}</rules><players>{9}</players></server></qstat>"
Status="UP"
Name=results.Name
GameType=results.GameType
Map=results.Map

Rules=""
for rule in results.Rules:
    Rules=Rules+String.Format("<rule name=\"{0}\">{1}</rule>", rule.Key, rule.Value)

Players=""
for player in results.Players:
    Players=Players+String.Format("<player><name>{0}</name><ping>{1}</ping><score>{2}</score></player>", player.Name, player.Ping, player.Score)

NumPlayers=results.NumPlayers
MaxPlayers=results.MaxPlayers

if results.Rules.ContainsKey("game_tag") :
  match = Regex.Match(results.Rules["game_tag"], "cp(\d*)")
  if match.Success :
    NumPlayers = match.Value.Substring(2)
  match = Regex.Match(results.Rules["game_tag"], "mp(\d*)")
  if match.Success :
    MaxPlayers = match.Value.Substring(2)

ReturnValue=String.Format(XmlFormat, ThisService.IpAddress, ThisService.QueryPort, Status, Name, GameType, Map, NumPlayers, MaxPlayers, Rules, Players)
Retrieved from "https://help.tcadmin.com/index.php?title=Rust_Custom_Query&oldid=2481"