info_game.sh 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472
  1. #!/bin/bash
  2. # LinuxGSM info_game.sh module
  3. # Author: Daniel Gibbs
  4. # Contributors: http://linuxgsm.com/contrib
  5. # Website: https://linuxgsm.com
  6. # Description: Gathers various game server information.
  7. # shellcheck disable=SC2317
  8. moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  9. # Config Type: ini
  10. # Comment: ; or #
  11. # Note: this ini filter does not filter by section. Can cause issues with some games that have multiple sections with the same variable name.
  12. fn_info_game_ini() {
  13. # sed is used to process the file.
  14. # -n: Suppresses automatic printing of pattern space.
  15. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  16. # { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  17. # - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
  18. # - .*: Matches any characters before the equals sign.
  19. # - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
  20. # - \([^"]*\): Captures any characters that are not double quotes.
  21. # - "\?: Matches an optional double quote.
  22. # - /1: Replaces the entire matched pattern with the captured value.
  23. # - p: Prints the modified line.
  24. # - q: Quits processing after modifying and printing the line.
  25. if [ -n "${3}" ]; then
  26. servercfgparse="${3}"
  27. else
  28. servercfgparse="${servercfgfullpath}"
  29. fi
  30. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  31. configtype="ini"
  32. }
  33. # Config Type: Key Value Pairs (Equals Delimited)
  34. # Comment: ; or #
  35. fn_info_game_keyvalue_pairs_equals() {
  36. # sed is used to process the file.
  37. # -n: Suppresses automatic printing of pattern space.
  38. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  39. # { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  40. # - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
  41. # - .*: Matches any characters before the equals sign.
  42. # - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
  43. # - \([^"]*\): Captures any characters that are not double quotes.
  44. # - "\?: Matches an optional double quote.
  45. # - /1: Replaces the entire matched pattern with the captured value.
  46. # - p: Prints the modified line.
  47. # - q: Quits processing after modifying and printing the line.
  48. if [ -n "${3}" ]; then
  49. servercfgparse="${3}"
  50. else
  51. servercfgparse="${servercfgfullpath}"
  52. fi
  53. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  54. configtype="keyvalue_pairs"
  55. }
  56. # Config Type: Key Value Pairs (Space Delimited)
  57. # Comment: ; or #
  58. fn_info_game_keyvalue_pairs_space() {
  59. # sed is used to process the file.
  60. # -n: Suppresses automatic printing of pattern space.
  61. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  62. # { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  63. # - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an space ( ), possibly surrounded by optional double quotes.
  64. # - .*: Matches any characters before the space.
  65. # - = *"\?: Matches the space and any optional spaces before an optional double quote.
  66. # - \([^"]*\): Captures any characters that are not double quotes.
  67. # - "\?: Matches an optional double quote.
  68. # - /1: Replaces the entire matched pattern with the captured value.
  69. # - p: Prints the modified line.
  70. # - q: Quits processing after modifying and printing the line.
  71. if [ -n "${3}" ]; then
  72. servercfgparse="${3}"
  73. else
  74. servercfgparse="${servercfgfullpath}"
  75. fi
  76. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.* *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  77. configtype="keyvalue_pairs"
  78. }
  79. # Config Type: QuakeC
  80. # Comment: // or /* */
  81. fn_info_game_quakec() {
  82. # -n: Suppresses automatic printing of pattern space.
  83. # /^[[:space:]]*\<'"${2}"'\>/: Matches lines starting with optional leading whitespace and the word provided as the second argument ($2), considering it as a whole word.
  84. # { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  85. # - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after any number of spaces, possibly surrounded by optional double quotes.
  86. # - .*: Matches any characters before the spaces.
  87. # - *: Matches any number of spaces.
  88. # - "\?: Matches an optional double quote.
  89. # - \([^"]*\): Captures any characters that are not double quotes.
  90. # - "\?: Matches an optional double quote.
  91. # - /1: Replaces the entire matched pattern with the captured value.
  92. # - p: Prints the modified line.
  93. # - q: Quits processing after modifying and printing the line.
  94. if [ -n "${3}" ]; then
  95. servercfgparse="${3}"
  96. else
  97. servercfgparse="${servercfgfullpath}"
  98. fi
  99. eval "${1}=\"$(sed -n '/[[:space:]]\<'"${2}"'\>/ { s/.* *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  100. configtype="quakec"
  101. }
  102. # Config Type: json
  103. # Comment: // or /* */
  104. fn_info_game_json() {
  105. if [ -n "${3}" ]; then
  106. servercfgparse="${3}"
  107. else
  108. servercfgparse="${servercfgfullpath}"
  109. fi
  110. eval "${1}=\"$(jq -r "${2}" "${servercfgparse}")\""
  111. configtype="json"
  112. }
  113. # Config Type: SQF
  114. # Comment: // or /* */
  115. fn_info_game_sqf() {
  116. # sed is the command itself, indicating that we want to use the sed utility.
  117. # -n: Suppresses automatic printing of pattern space.
  118. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  119. # { s/.*= *"\?\([^"]*\)"\?/\1/;s/;$//p;q }: Command block executed for lines that match the pattern.
  120. # - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
  121. # - .*: Matches any characters before the equals sign.
  122. # - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
  123. # - \([^"]*\): Captures any characters that are not double quotes.
  124. # - "\?: Matches an optional double quote.
  125. # - /1: Replaces the entire matched pattern with the captured value.
  126. # - s/;$//: Removes a semicolon (;) at the end of the line, if present.
  127. # - p: Prints the modified line.
  128. # - q: Quits processing after modifying and printing the line.
  129. if [ -n "${3}" ]; then
  130. servercfgparse="${3}"
  131. else
  132. servercfgparse="${servercfgfullpath}"
  133. fi
  134. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *"\?\([^"]*\)"\?/\1/;s/;$//p;q }' "${servercfgparse}" | tr -d '\r')\""
  135. configtype="sqf"
  136. }
  137. # Config Type: XML
  138. # Comment: <!-- -->
  139. fn_info_game_xml() {
  140. if [ -n "${3}" ]; then
  141. servercfgparse="${3}"
  142. else
  143. servercfgparse="${servercfgfullpath}"
  144. fi
  145. eval "${1}=\"$(xmllint --xpath "string(${2})" "${servercfgparse}")\""
  146. configtype="xml"
  147. }
  148. # Config Type: Valve KeyValues
  149. # Comment: //
  150. fn_info_game_valve_keyvalues() {
  151. # sed is used to process the file.
  152. # -n: Suppresses automatic printing of pattern space.
  153. # /^[[:space:]]*\<'"${2}"'\>/: Matches lines starting with optional leading whitespace and the word provided as the second argument ($2), considering it as a whole word.
  154. # { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  155. # - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after any number of spaces, possibly surrounded by optional double quotes.
  156. # - .*: Matches any characters before the spaces.
  157. # - *: Matches any number of spaces.
  158. # - "\?: Matches an optional double quote.
  159. # - \([^"]*\): Captures any characters that are not double quotes.
  160. # - "\?: Matches an optional double quote.
  161. # - /1: Replaces the entire matched pattern with the captured value.
  162. # - p: Prints the modified line.
  163. # - q: Quits processing after modifying and printing the line.
  164. if [ -n "${3}" ]; then
  165. servercfgparse="${3}"
  166. else
  167. servercfgparse="${servercfgfullpath}"
  168. fi
  169. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.* *"\([^"]*\)".*/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  170. configtype="valve_keyvalues"
  171. }
  172. # Config Type: Java properties
  173. # Comment: # or !
  174. fn_info_game_java_properties() {
  175. # sed is used to process the file.
  176. # -n: Suppresses automatic printing of pattern space.
  177. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  178. # { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  179. # - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
  180. # - .*: Matches any characters before the equals sign.
  181. # - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
  182. # - \([^"]*\): Captures any characters that are not double quotes.
  183. # - "\?: Matches an optional double quote.
  184. # - /1: Replaces the entire matched pattern with the captured value.
  185. # - p: Prints the modified line.
  186. # - q: Quits processing after modifying and printing the line.
  187. if [ -n "${3}" ]; then
  188. servercfgparse="${3}"
  189. else
  190. servercfgparse="${servercfgfullpath}"
  191. fi
  192. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  193. configtype="java"
  194. }
  195. # Config Type: ini
  196. # Comment: ; or #
  197. # Note: this ini filter does not filter by section. Can cause issues with some games that have multiple sections with the same variable name.
  198. fn_info_game_lua() {
  199. # - The '-n' option suppresses automatic printing of pattern space.
  200. # - The pattern '/^[[:space:]]*\<'"${2}"'\>/' matches lines that begin with optional whitespace characters,
  201. # followed by the exact word specified by the second argument.
  202. # - If the pattern matches, the following actions are performed within the curly braces:
  203. # - 's/.*= *"\?\([^"]*\)"\?/\1/' extracts the value within double quotes after an equal sign (if present),
  204. # removing any leading or trailing spaces.
  205. # - 's#,.*##' removes everything after the first comma encountered.
  206. # - 'p' prints the modified pattern space.
  207. # - 'q' quits processing after printing the modified pattern space.
  208. if [ -n "${3}" ]; then
  209. servercfgparse="${3}"
  210. else
  211. servercfgparse="${servercfgfullpath}"
  212. fi
  213. eval "${1}=\"$(sed -n '/^[[:space:]]*\<'"${2}"'\>/ { s/.*= *"\?\([^"]*\)"\?/\1/;s#,.*##;p;q }' "${servercfgparse}" | tr -d '\r')\""
  214. configtype="lua"
  215. }
  216. # Config Type: custom (Project Cars)
  217. # Comment: //
  218. fn_info_game_pc_config() {
  219. # sed is used to process the file.
  220. # -n: Suppresses automatic printing of pattern space.
  221. # /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
  222. # { s/.*: *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
  223. # - s/.*: *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
  224. # - .*: Matches any characters before the equals sign.
  225. # - : *"\?: Matches the : sign and any optional spaces before an optional double quote.
  226. # - \([^"]*\): Captures any characters that are not double quotes.
  227. # - "\?: Matches an optional double quote.
  228. # - /1: Replaces the entire matched pattern with the captured value.
  229. # - p: Prints the modified line.
  230. # - q: Quits processing after modifying and printing the line.
  231. if [ -n "${3}" ]; then
  232. servercfgparse="${3}"
  233. else
  234. servercfgparse="${servercfgfullpath}"
  235. fi
  236. eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*: *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
  237. configtype="pc_config"
  238. }
  239. # Config Type: ini
  240. # Parameters: false
  241. # Comment: ; or #
  242. # Example: NAME=SERVERNAME
  243. # Filetype: ini
  244. fn_info_game_ac() {
  245. if [ -f "${servercfgfullpath}" ]; then
  246. fn_info_game_ini "adminpassword" "ADMIN_PASSWORD"
  247. fn_info_game_ini "httpport" "HTTP_PORT"
  248. fn_info_game_ini "port" "TCP_PORT"
  249. fn_info_game_ini "servername" "NAME"
  250. fn_info_game_ini "serverpassword" "PASSWORD"
  251. fi
  252. adminpassword="${adminpassword:-NOT SET}"
  253. httpport="${httpport:-0}"
  254. port="${port:-0}"
  255. queryport="${httpport:-0}"
  256. servername="${servername:-NOT SET}"
  257. serverpassword="${serverpassword:-NOT SET}"
  258. }
  259. # Config Type: ini
  260. # Parameters: true
  261. # Comment: ; or #
  262. # Example: SessionName=SERVERNAME
  263. # Filetype: ini
  264. fn_info_game_ark() {
  265. if [ -f "${servercfgfullpath}" ]; then
  266. fn_info_game_ini "adminpassword" "ServerAdminPassword"
  267. fn_info_game_ini "servername" "SessionName"
  268. fn_info_game_ini "serverpassword" "ServerPassword"
  269. fi
  270. adminpassword="${adminpassword:-"NOT SET"}"
  271. maxplayers="${maxplayers:-"0"}"
  272. port="${port:-"0"}"
  273. queryport="${queryport:-"0"}"
  274. rawport="$((port + 1))"
  275. rconport="${rconport:-"0"}"
  276. servername="${servername:-"NOT SET"}"
  277. serverpassword="${serverpassword:-"NOT SET"}"
  278. }
  279. # Config Type: SQF
  280. # Parameters: true
  281. # Comment: // or /* */
  282. # Example: serverName = "SERVERNAME";
  283. # Filetype: cfg
  284. fn_info_game_arma3() {
  285. if [ -f "${servercfgfullpath}" ]; then
  286. fn_info_game_sqf "adminpassword" "passwordAdmin"
  287. fn_info_game_sqf "maxplayers" "maxPlayers"
  288. fn_info_game_sqf "servername" "hostname"
  289. fn_info_game_sqf "serverpassword" "password"
  290. fi
  291. adminpassword="${adminpassword:-"NOT SET"}"
  292. battleeyeport="$((port + 4))"
  293. maxplayers="${maxplayers:-"0"}"
  294. port="${port:-"0"}"
  295. queryport="$((port + 1))"
  296. servername="${servername:-"NOT SET"}"
  297. serverpassword="${serverpassword:-"NOT SET"}"
  298. steamport="$((port + 2))"
  299. voiceport="${port:-"0"}"
  300. voiceunusedport="$((port + 3))"
  301. }
  302. # Config Type: ini
  303. # Parameters: true
  304. # Comment: ; or #
  305. # Example: serverName=SERVERNAME
  306. # Filetype: ini
  307. fn_info_game_av() {
  308. if [ -f "${servercfgfullpath}" ]; then
  309. fn_info_game_ini "maxplayers" "maxPlayers"
  310. fn_info_game_ini "port" "port"
  311. fn_info_game_ini "rconport" "rconPort"
  312. fn_info_game_ini "servername" "name"
  313. fn_info_game_ini "serverpassword" "password"
  314. fn_info_game_ini "rconpassword" "rconPassword"
  315. if [ -n "${rconpassword}" ]; then
  316. rconenabled="true"
  317. fi
  318. fi
  319. maxplayers="${maxplayers:-"0"}"
  320. port="${port:-"0"}"
  321. rconenabled="${rconenabled:-"false"}"
  322. rconpassword="${rconpassword:-"NOT SET"}"
  323. rconport="${rconport:-"0"}"
  324. # queryport doesnt respond to any queries, using session only.
  325. queryport=""$((port + 3))""
  326. servername="${servername:-"NOT SET"}"
  327. serverpassword="${serverpassword:-"NOT SET"}"
  328. steamport="$((port + 21))"
  329. steamworksport="$((port + 20))"
  330. }
  331. # Config Type: ini unknown (Source?)
  332. # Parameters: true
  333. # Comment: # or //
  334. # Example: ServerName=SERVERNAME
  335. # Filetype: txt
  336. fn_info_game_bo() {
  337. if [ -f "${servercfgfullpath}" ]; then
  338. fn_info_game_ini "maxplayers" "MaxPlayers"
  339. fn_info_game_ini "port" "ServerPort"
  340. fn_info_game_ini "servername" "ServerName"
  341. fn_info_game_ini "serverpassword" "Password"
  342. fi
  343. maxplayers="${maxplayers:-"0"}"
  344. port="${port:-"0"}"
  345. queryport="$((port + 1))"
  346. servername="${servername:-"NOT SET"}"
  347. serverpassword="${serverpassword:-"NOT SET"}"
  348. }
  349. # Config Type: ini
  350. # Parameters: true
  351. # Comment: ; or #
  352. # Example: ServerName=SERVERNAME
  353. # Filetype: ini
  354. fn_info_game_btl() {
  355. if [ -f "${servercfgfullpath}" ]; then
  356. fn_info_game_ini "adminpassword" "AdminPassword"
  357. fn_info_game_ini "servername" "ServerName"
  358. fi
  359. adminpassword="${adminpassword:-"NOT SET"}"
  360. port="${port:-"0"}"
  361. queryport="${queryport:-"0"}"
  362. rconport="$((port + 2))"
  363. servername="${servername:-"NOT SET"}"
  364. }
  365. # Config Type: ini
  366. # Parameters: true
  367. # Comment: ; or #
  368. # Example: ServerName=SERVERNAME
  369. # Filetype: ini
  370. fn_info_game_cmw() {
  371. if [ -f "${servercfgfullpath}" ]; then
  372. fn_info_game_ini "maxplayers" "MaxPlayers"
  373. fn_info_game_ini "servername" "ServerName"
  374. fn_info_game_ini "serverpassword" "GamePassword"
  375. fn_info_game_ini "rconport" "RConPort" "${servercfgdir}/DefaultGame.ini"
  376. fi
  377. defaultmap="${defaultmap:-"NOT SET"}"
  378. maxplayers="${maxplayers:-"0"}"
  379. port="${port:-"0"}"
  380. queryport="${queryport:-"0"}"
  381. rconport="${rconport:-"0"}"
  382. servername="${servername:-"NOT SET"}"
  383. serverpassword="${serverpassword:-"NOT SET"}"
  384. }
  385. # Config Type: ini
  386. # Parameters: true
  387. # Comment: ; or #
  388. # Example: iMaxClanMembers=1024
  389. # Filetype: ini
  390. fn_info_game_dodr() {
  391. if [ -f "${servercfgfullpath}" ]; then
  392. fn_info_game_ini "maxplayers" "iMaxPlayers"
  393. fi
  394. maxplayers="${maxplayers:-"0"}"
  395. port="${port:-"0"}"
  396. queryport="${queryport:-"0"}"
  397. servername="${servername:-"NOT SET"}"
  398. }
  399. # Config Type: ini
  400. # Parameters: true
  401. # Comment: ; or #
  402. # Example: cluster_name = SERVERNAME
  403. # Filetype: ini
  404. fn_info_game_dst() {
  405. if [ -f "${servercfgfullpath}" ]; then
  406. fn_info_game_ini "port" "server_port" "${servercfgfullpath}"
  407. fn_info_game_ini "shard" "name" "${servercfgfullpath}"
  408. fn_info_game_ini "steamauthport" "authentication_port" "${servercfgfullpath}"
  409. fn_info_game_ini "steamport" "master_server_port" "${servercfgfullpath}"
  410. fi
  411. if [ -f "${clustercfgfullpath}" ]; then
  412. fn_info_game_ini "configip" "bind_ip" "${clustercfgfullpath}"
  413. fn_info_game_ini "gamemode" "game_mode" "${clustercfgfullpath}"
  414. fn_info_game_ini "masterport" "master_port" "${clustercfgfullpath}"
  415. fn_info_game_ini "maxplayers" "max_players" "${clustercfgfullpath}"
  416. fn_info_game_ini "servername" "cluster_name" "${clustercfgfullpath}"
  417. fn_info_game_ini "serverpassword" "cluster_password" "${clustercfgfullpath}"
  418. fn_info_game_ini "tickrate" "tick_rate" "${clustercfgfullpath}"
  419. fi
  420. cave="${cave:-"NOT SET"}"
  421. cluster="${cluster:-"NOT SET"}"
  422. configip="${configip:-"0.0.0.0"}"
  423. gamemode="${gamemode:-"NOT SET"}"
  424. master="${master:-"NOT SET"}"
  425. masterport="${masterport:-"0"}"
  426. maxplayers="${maxplayers:-"0"}"
  427. port="${port:-"0"}"
  428. servername="${servername:-"NOT SET"}"
  429. serverpassword="${serverpassword:-"NOT SET"}"
  430. shard="${shard:-"NOT SET"}"
  431. sharding="${sharding:-"NOT SET"}"
  432. steamauthport="${steamauthport:-"0"}"
  433. steamport="${steamport:-"0"}"
  434. tickrate="${tickrate:-"0"}"
  435. }
  436. # Config Type: parameters
  437. # Parameters: true
  438. # Comment: ; or #
  439. # Example: SessionName=SERVERNAME
  440. # Filetype: ini
  441. fn_info_game_hcu() {
  442. defaultmap="${defaultmap:-"NOT SET"}"
  443. maxplayers="${maxplayers:-"0"}"
  444. port="${port:-"0"}"
  445. queryport="${queryport:-"0"}"
  446. servername="${servername:-"NOT SET"}"
  447. }
  448. # Config Type: ini
  449. # Parameters: true
  450. # Comment: ; or #
  451. # Example: ServerName=SERVERNAME
  452. # Filetype: ini
  453. fn_info_game_kf() {
  454. if [ -f "${servercfgfullpath}" ]; then
  455. fn_info_game_ini "adminpassword" "AdminPassword"
  456. fn_info_game_ini "httpenabled" "bEnabled"
  457. fn_info_game_ini "httppassword" "httppasswordword"
  458. fn_info_game_ini "httpport" "ListenPort"
  459. fn_info_game_ini "httpuser" "AdminName"
  460. fn_info_game_ini "lanport" "LANServerPort"
  461. fn_info_game_ini "maxplayers" "MaxPlayers"
  462. fn_info_game_ini "port" "Port"
  463. fn_info_game_ini "queryportgs" "QueryPort"
  464. fn_info_game_ini "servername" "ServerName"
  465. fn_info_game_ini "serverpassword" "GamePassword"
  466. fi
  467. adminpassword="${adminpassword:-"NOT SET"}"
  468. defaultmap="${defaultmap:-"NOT SET"}"
  469. httpenabled="${httpenabled:-"NOT SET"}"
  470. httppassword="${adminpassword}"
  471. httpport="${httpport:-"0"}"
  472. httpuser="${httpuser:-"NOT SET"}"
  473. lanport="${lanport:-"0"}"
  474. maxplayers="${maxplayers:-"0"}"
  475. port="${port:-"0"}"
  476. queryport="$((port + 1))"
  477. queryportgs="${queryportgs:-"0"}"
  478. servername="${servername:-"NOT SET"}"
  479. serverpassword="${serverpassword:-"NOT SET"}"
  480. steamport="28852"
  481. steamworksport="20560"
  482. }
  483. # Config Type: ini
  484. # Parameters: true
  485. # Comment: ; or #
  486. # Example: ServerName=SERVERNAME
  487. # Filetype: ini
  488. fn_info_game_kf2() {
  489. if [ -f "${servercfgfullpath}" ]; then
  490. fn_info_game_ini "adminpassword" "AdminPassword"
  491. fn_info_game_ini "httpport" "ListenPort" "${servercfgdir}/KFWeb.ini"
  492. fn_info_game_ini "port" "Port"
  493. fn_info_game_ini "servername" "ServerName"
  494. fn_info_game_ini "serverpassword" "GamePassword"
  495. fn_info_game_ini "httpenabled" "bEnabled"
  496. fn_info_game_ini "httppassword" "httppasswordword"
  497. fi
  498. adminpassword="${adminpassword:-"NOT SET"}"
  499. defaultmap="${defaultmap:-"NOT SET"}"
  500. httpport="${httpport:-"0"}"
  501. port="${port:-"0"}"
  502. queryport="${queryport:-"0"}"
  503. servername="${servername:-"NOT SET"}"
  504. serverpassword="${serverpassword:-"NOT SET"}"
  505. httpenabled="${httpenabled:-"NOT SET"}"
  506. httppassword="${httppassword:-"NOT SET"}"
  507. httpuser="Admin"
  508. }
  509. # Config Type: ini
  510. # Parameters: true
  511. # Comment: ; or #
  512. # Example: ServerName=SERVERNAME
  513. # Filetype: ini
  514. fn_info_game_mh() {
  515. if [ -f "${servercfgfullpath}" ]; then
  516. fn_info_game_ini "servername" "ServerName"
  517. fn_info_game_ini "serverpassword" "ServerPassword"
  518. fn_info_game_ini "rconpassword" "AdminPassword"
  519. fn_info_game_ini "maxplayers" "MaxSlots"
  520. fi
  521. servername="${servername:-"NOT SET"}"
  522. serverpassword="${serverpassword:-"NOT SET"}"
  523. rconpassword="${rconpassword:-"NOT SET"}"
  524. maxplayers="${maxplayers:-"0"}"
  525. port="${port:-"0"}"
  526. queryport="${queryport:-"0"}"
  527. beaconport="${beaconport:-"0"}"
  528. }
  529. # Config Type: ini
  530. # Parameters: true
  531. # Comment: ; or #
  532. # Example: ServerName="SERVERNAME"
  533. # Filetype: cfg
  534. fn_info_game_ps() {
  535. if [ -f "${servercfgfullpath}" ]; then
  536. fn_info_game_ini "servername" "ServerName"
  537. fn_info_game_ini "maxplayers" "MaxPlayers"
  538. fn_info_game_ini "reservedslots" "NumReservedSlots"
  539. fn_info_game_ini "serverpassword" "ServerPassword"
  540. fi
  541. if [ -f "${servercfgdir}/Rcon.cfg" ]; then
  542. fn_info_game_ini "rconpassword" "Password" "${servercfgdir}/Rcon.cfg"
  543. fn_info_game_ini "rconport" "Port" "${servercfgdir}/Rcon.cfg"
  544. fi
  545. maxplayers="${maxplayers:-"0"}"
  546. port="${port:-"0"}"
  547. if [ -z "${queryport}" ]; then
  548. queryport="${port:-"0"}"
  549. fi
  550. randommap="${randommap:-"NOT SET"}"
  551. if [ -z "${rconpassword}" ] || [ "${#rconpassword}" == 1 ]; then
  552. rconpassword="NOT SET"
  553. fi
  554. rconport="${rconport:-"0"}"
  555. reservedslots="${reservedslots:-"0"}"
  556. servername="${servername:-"NOT SET"}"
  557. serverpassword="${serverpassword:-"NOT SET"}"
  558. tickrate="${tickrate:-"0"}"
  559. }
  560. # Config Type: ini
  561. # Parameters: false
  562. # Comment: ; or #
  563. # Example: ServerName=SERVERNAME
  564. # Filetype: cfg
  565. fn_info_game_pvr() {
  566. if [ -f "${servercfgfullpath}" ]; then
  567. fn_info_game_ini "servername" "ServerName"
  568. fn_info_game_ini "maxplayers" "MaxPlayers"
  569. fi
  570. maxplayers="${maxplayers:-"0"}"
  571. port="${port:-"0"}"
  572. port401="$((port + 400))"
  573. queryport="${port:-"0"}"
  574. servername="${servername:-"NOT SET"}"
  575. }
  576. # Config Type: ini
  577. # Parameters: true
  578. # Comment: ; or #
  579. # Example: PublicName=SERVERNAME
  580. # Filetype: ini
  581. fn_info_game_pz() {
  582. if [ -f "${servercfgfullpath}" ]; then
  583. fn_info_game_ini "maxplayers" "MaxPlayers"
  584. fn_info_game_ini "port" "DefaultPort"
  585. fn_info_game_ini "rconpassword" "RCONPassword"
  586. fn_info_game_ini "servername" "PublicName"
  587. fn_info_game_ini "serverpassword" "Password"
  588. fn_info_game_ini "worldname" "Map"
  589. fi
  590. adminpassword="${adminpassword:-"NOT SET"}"
  591. maxplayers="${maxplayers:-"0"}"
  592. port="${port:-"0"}"
  593. queryport="${port:-"0"}"
  594. rconpassword="${rconpassword:-"NOT SET"}"
  595. servername="${servername:-"NOT SET"}"
  596. serverpassword="${serverpassword:-"NOT SET"}"
  597. worldname="${worldname:-"NOT SET"}"
  598. }
  599. # Config Type: xml
  600. # Comment: <!-- -->
  601. # Example: <ServerName>SERVERNAME</ServerName>
  602. # Filetype: xml
  603. fn_info_game_st() {
  604. if [ -f "${servercfgfullpath}" ]; then
  605. fn_info_game_xml "adminpassword" "/SettingData/AdminPassword"
  606. fn_info_game_xml "maxplayers" "/SettingData/ServerMaxPlayers"
  607. fn_info_game_xml "port" "/SettingData/GamePort"
  608. fn_info_game_xml "queryport" "/SettingData/UpdatePort"
  609. fn_info_game_xml "saveinterval" "/SettingData/SaveInterval"
  610. fn_info_game_xml "servername" "/SettingData/ServerName"
  611. fn_info_game_xml "serverpassword" "/SettingData/ServerPassword"
  612. fi
  613. adminpassword="${adminpassword:-"NOT SET"}"
  614. maxplayers="${maxplayers:-"0"}"
  615. port="${port:-"0"}"
  616. queryport="${queryport:-"0"}"
  617. saveinterval="${saveinterval:-"0"}"
  618. servername="${servername:-"NOT SET"}"
  619. serverpassword="${serverpassword:-"NOT SET"}"
  620. worldname="${worldname:-"NOT SET"}"
  621. worldtype="${worldtype:-"NOT SET"}"
  622. }
  623. # Config Type: ini
  624. # Parameters: true
  625. # Comment: ; or #
  626. # Example: ServerName=SERVERNAME
  627. # Filetype: ini
  628. fn_info_game_stn() {
  629. if [ -f "${servercfgfullpath}" ]; then
  630. fn_info_game_ini "configip" "ServerIP"
  631. fn_info_game_ini "port" "ServerPort"
  632. fn_info_game_ini "servername" "ServerName"
  633. fn_info_game_ini "serverpassword" "ServerPassword"
  634. fi
  635. configip="${configip:-"0.0.0.0"}"
  636. maxplayers="${maxplayers:-"0"}"
  637. port="${port:-"0"}"
  638. queryport="$((port + 1))"
  639. servername="${servername:-"NOT SET"}"
  640. serverpassword="${serverpassword:-"NOT SET"}"
  641. }
  642. # Config Type: ini
  643. # Parameters: true
  644. # Comment: ; or #
  645. # Example: ServerName=ServerName
  646. # Filetype: ini
  647. fn_info_game_ti() {
  648. if [ -f "${servercfgfullpath}" ]; then
  649. fn_info_game_ini "maxplayers" "MaxPlayerCount"
  650. fn_info_game_ini "queueenabled" "bQueueEnabled"
  651. fn_info_game_ini "queueport" "QueuePort"
  652. fn_info_game_ini "rconenabled" "bRconEnabled"
  653. fn_info_game_ini "rconpassword" "RconPassword"
  654. fn_info_game_ini "rconport" "RconPort"
  655. fn_info_game_ini "servername" "ServerName"
  656. fn_info_game_ini "serverpassword" "ServerPassword"
  657. fn_info_game_ini "serverpasswordenabled" "bServerPassword"
  658. fi
  659. maxplayers="${maxplayers:-"0"}"
  660. queueenabled="${queueenabled:-"NOT SET"}"
  661. queueport="${queueport:-"0"}"
  662. rconenabled="${rconenabled:-"NOT SET"}"
  663. rconpassword="${rconpassword:-"NOT SET"}"
  664. rconport="${rconport:-"0"}"
  665. servername="${servername:-"NOT SET"}"
  666. serverpassword="${serverpassword:-"NOT SET"}"
  667. serverpasswordenabled="${serverpasswordenabled:-"NOT SET"}"
  668. }
  669. # Config Type: ini
  670. # Parameters: false
  671. # Comment: ; or #
  672. # Example: default_voice_port=9987
  673. # Filetype: ini
  674. fn_info_game_ts3() {
  675. if [ -f "${servercfgfullpath}" ]; then
  676. fn_info_game_ini "configip" "voice_ip"
  677. fn_info_game_ini "dbplugin" "dbplugin"
  678. fn_info_game_ini "fileport" "filetransfer_port"
  679. fn_info_game_ini "port" "default_voice_port"
  680. fn_info_game_ini "queryhttpport" "query_http_port"
  681. fn_info_game_ini "queryhttpsport" "query_https_port"
  682. fn_info_game_ini "queryport" "query_port"
  683. fn_info_game_ini "querysshport" "query_ssh_port"
  684. fi
  685. configip="${configip:-"0.0.0.0"}"
  686. dbplugin="${dbplugin:-"NOT SET"}"
  687. fileport="${fileport:-"0"}"
  688. port="${port:-"0"}"
  689. queryhttpport="${queryhttpport:-"0"}"
  690. queryhttpsport="${queryhttpsport:-"0"}"
  691. queryport="${queryport:-"0"}"
  692. querysshport="${querysshport:-"0"}"
  693. telnetport="${queryport}"
  694. }
  695. # Config Type: ini
  696. # Parameters: true
  697. # Comment: ; or #
  698. # Example: ServerTitle=SERVERNAME
  699. # Filetype: ini
  700. fn_info_game_tu() {
  701. if [ -f "${servercfgfullpath}" ]; then
  702. fn_info_game_ini "maxplayers" "MaxPlayers"
  703. fn_info_game_ini "servername" "ServerTitle"
  704. fi
  705. maxplayers="${maxplayers:-"0"}"
  706. port="${port:-"0"}"
  707. queryport="${queryport:-"0"}"
  708. servername="${servername:-"NOT SET"}"
  709. steamport="$((port + 1))"
  710. }
  711. # Config Type: ini
  712. # Parameters: true
  713. # Comment: ; or #
  714. # Example: ServerName=SERVERNAME
  715. # Filetype: ini
  716. fn_info_game_ut99() {
  717. if [ -f "${servercfgfullpath}" ]; then
  718. fn_info_game_ini "adminpassword" "AdminPassword"
  719. fn_info_game_ini "beaconport" "ServerBeaconPort"
  720. fn_info_game_ini "port" "Port"
  721. fn_info_game_ini "queryportgs" "OldQueryPortNumber"
  722. fn_info_game_ini "servername" "ServerName"
  723. fn_info_game_ini "serverpassword" "GamePassword"
  724. fn_info_game_ini "httpenabled" "bEnabled"
  725. fn_info_game_ini "httppassword" "AdminPassword"
  726. fn_info_game_ini "httpport" "ListenPort"
  727. fn_info_game_ini "httpuser" "AdminUserName"
  728. fi
  729. adminpassword="${adminpassword:-"NOT SET"}"
  730. beaconport="${beaconport:-"0"}"
  731. defaultmap="${defaultmap:-"NOT SET"}"
  732. httpport="${httpport:-"0"}"
  733. port="${port:-"0"}"
  734. queryport="$((port + 1))"
  735. queryportgs="${queryportgs:-"0"}"
  736. servername="${servername:-"NOT SET"}"
  737. serverpassword="${serverpassword:-"NOT SET"}"
  738. httpenabled="${httpenabled:-"0"}"
  739. httppassword="${httppassword:-"NOT SET"}"
  740. httpuser="${httpuser:-"NOT SET"}"
  741. }
  742. # Config Type: ini
  743. # Parameters: true
  744. # Comment: ; or #
  745. # Example: ServerName=SERVERNAME
  746. # Filetype: ini
  747. fn_info_game_ut3() {
  748. if [ -f "${servercfgfullpath}" ]; then
  749. fn_info_game_ini "adminpassword" "AdminPassword"
  750. fn_info_game_ini "maxplayers" "MaxPlayers"
  751. fn_info_game_ini "servername" "ServerName"
  752. fn_info_game_ini "serverpassword" "GamePassword"
  753. fn_info_game_ini "httpenabled" "bEnabled"
  754. fn_info_game_ini "httppassword" "AdminPassword"
  755. fn_info_game_ini "httpport" "ListenPort"
  756. fi
  757. adminpassword="${adminpassword:-"NOT SET"}"
  758. defaultmap="${defaultmap:-"NOT SET"}"
  759. httpport="${httpport:-"0"}"
  760. maxplayers="${maxplayers:-"0"}"
  761. port="${port:-"0"}"
  762. queryport="${queryport:-"0"}"
  763. servername="${servername:-"NOT SET"}"
  764. serverpassword="${serverpassword:-"NOT SET"}"
  765. httpenabled="${httpenabled:-"0"}"
  766. httppassword="${httppassword:-"NOT SET"}"
  767. httpuser="Admin"
  768. }
  769. # Config Type: ini
  770. # Parameters: true
  771. # Comment: ; or #
  772. # Example: ServerName=SERVERNAME
  773. # Filetype: ini
  774. fn_info_game_unreal2() {
  775. if [ -f "${servercfgfullpath}" ]; then
  776. fn_info_game_ini "adminpassword" "AdminPassword"
  777. fn_info_game_ini "httpport" "ListenPort"
  778. fn_info_game_ini "port" "Port"
  779. fn_info_game_ini "queryportgs" "OldQueryPortNumber"
  780. fn_info_game_ini "servername" "ServerName"
  781. fn_info_game_ini "serverpassword" "GamePassword"
  782. fn_info_game_ini "httpenabled" "bEnabled"
  783. fn_info_game_ini "httpuser" "AdminName"
  784. fi
  785. adminpassword="${adminpassword:-"NOT SET"}"
  786. defaultmap="${defaultmap:-"NOT SET"}"
  787. httpport="${httpport:-"0"}"
  788. port="${port:-"0"}"
  789. queryport="$((port + 1))"
  790. queryportgs="${queryportgs:-"0"}"
  791. servername="${servername:-"NOT SET"}"
  792. serverpassword="${serverpassword:-"NOT SET"}"
  793. httpenabled="${httpenabled:-"0"}"
  794. httppassword="${adminpassword:-"NOT SET"}"
  795. httpuser="${httpuser:-"NOT SET"}"
  796. }
  797. # Config Type: ini
  798. # Parameters: true
  799. # Comment: ; or #
  800. # Example: ServerName="SERVERNAME"
  801. # Filetype: ini
  802. fn_info_game_ut() {
  803. if [ -f "${servercfgfullpath}" ]; then
  804. fn_info_game_ini "servername" "ServerName"
  805. fi
  806. defaultmap="${defaultmap:-"NOT SET"}"
  807. gametype="${gametype:-"NOT SET"}"
  808. port="${port:-"0"}"
  809. queryport="$((port + 1))"
  810. }
  811. # Config Type: ini
  812. # Parameters: true
  813. # Comment: ; or #
  814. # Example: ServerName=SERVERNAME
  815. # Filetype: ini
  816. fn_info_game_ut2k4() {
  817. if [ -f "${servercfgfullpath}" ]; then
  818. fn_info_game_ini "adminpassword" "AdminPassword"
  819. fn_info_game_ini "httpport" "ListenPort"
  820. fn_info_game_ini "lanport" "LANServerPort"
  821. fn_info_game_ini "port" "Port"
  822. fn_info_game_ini "queryportgs" "OldQueryPortNumber"
  823. fn_info_game_ini "servername" "ServerName"
  824. fn_info_game_ini "serverpassword" "GamePassword"
  825. fn_info_game_ini "httpenabled" "bEnabled"
  826. fn_info_game_ini "httpuser" "AdminName"
  827. fi
  828. adminpassword="${adminpassword:-"NOT SET"}"
  829. defaultmap="${defaultmap:-"NOT SET"}"
  830. httpport="${httpport:-"0"}"
  831. lanport="${lanport:-"0"}"
  832. port="${port:-"0"}"
  833. queryport="$((port + 1))"
  834. queryportgs="${queryportgs:-"0"}"
  835. servername="${servername:-"NOT SET"}"
  836. serverpassword="${serverpassword:-"NOT SET"}"
  837. httpenabled="${httpenabled:-"0"}"
  838. httppassword="${adminpassword}"
  839. httpuser="${httpuser:-"NOT SET"}"
  840. }
  841. # Config Type: json
  842. # Parameters: true
  843. # Comment: // or /* */
  844. # Example: "name": "SERVERNAME",
  845. # Filetype: json
  846. fn_info_game_armar() {
  847. if [ -f "${servercfgfullpath}" ]; then
  848. fn_info_game_json "adminpassword" ".game.passwordAdmin"
  849. fn_info_game_json "configip" ".bindAddress"
  850. fn_info_game_json "maxplayers" ".game.maxPlayers"
  851. fn_info_game_json "port" ".bindPort"
  852. fn_info_game_json "queryport" ".a2s.port"
  853. fn_info_game_json "servername" ".game.name"
  854. fn_info_game_json "serverpassword" ".game.password"
  855. fi
  856. adminpassword="${adminpassword:-"NOT SET"}"
  857. battleeyeport="$((port + 4))"
  858. configip="${configip:-"0.0.0.0"}"
  859. maxplayers="${maxplayers:-"0"}"
  860. port="${port:-"0"}"
  861. queryport="${queryport:-"0"}"
  862. servername="${servername:-"NOT SET"}"
  863. serverpassword="${serverpassword:-"NOT SET"}"
  864. }
  865. # Config Type: con
  866. # Parameters: true
  867. # Comment: # or //
  868. # Example: game.serverName "SERVERNAME"
  869. # Filetype: con
  870. fn_info_game_bf1942() {
  871. if [ -f "${servercfgfullpath}" ]; then
  872. fn_info_game_keyvalue_pairs_space "configip" "game.serverIP"
  873. fn_info_game_keyvalue_pairs_space "maxplayers" "game.serverMaxPlayers"
  874. fn_info_game_keyvalue_pairs_space "port" "game.serverPort"
  875. fn_info_game_keyvalue_pairs_space "servername" "game.serverName"
  876. fn_info_game_keyvalue_pairs_space "serverpassword" "game.serverPassword"
  877. fi
  878. configip="${configip:-"0.0.0.0"}"
  879. maxplayers="${maxplayers:-"0"}"
  880. port="${port:-"0"}"
  881. queryport="22000"
  882. servername="${servername:-"NOT SET"}"
  883. serverpassword="${serverpassword:-"NOT SET"}"
  884. }
  885. # Config Type: con
  886. # Parameters: true
  887. # Comment: # or //
  888. # Example: game.serverName "SERVERNAME"
  889. # Filetype: con
  890. fn_info_game_bfv() {
  891. if [ -f "${servercfgfullpath}" ]; then
  892. fn_info_game_keyvalue_pairs_space "configip" "game.serverIp"
  893. fn_info_game_keyvalue_pairs_space "maxplayers" "game.serverMaxPlayers"
  894. fn_info_game_keyvalue_pairs_space "port" "game.serverPort"
  895. fn_info_game_keyvalue_pairs_space "servername" "game.serverName"
  896. fn_info_game_keyvalue_pairs_space "serverpassword" "game.serverPassword"
  897. fi
  898. configip="${configip:-"0.0.0.0"}"
  899. maxplayers="${maxplayers:-"0"}"
  900. port="${port:-"0"}"
  901. queryport="22000"
  902. servername="${servername:-"NOT SET"}"
  903. serverpassword="${serverpassword:-"NOT SET"}"
  904. }
  905. # Config Type: XML
  906. # Parameters: false
  907. # Comment: <!-- -->
  908. # Example: <serversettings name="SERVERNAME" />
  909. # Filetype: xml
  910. fn_info_game_bt() {
  911. if [ -f "${servercfgfullpath}" ]; then
  912. fn_info_game_xml "maxplayers" "/serversettings/@MaxPlayers"
  913. fn_info_game_xml "port" "/serversettings/@port"
  914. fn_info_game_xml "queryport" "/serversettings/@queryport"
  915. fn_info_game_xml "servername" "/serversettings/@name"
  916. fn_info_game_xml "serverpassword" "/serversettings/@password"
  917. fn_info_game_xml "tickrate" "/serversettings/@TickRate"
  918. fi
  919. maxplayers="${maxplayers:-"0"}"
  920. port="${port:-"0"}"
  921. queryport="${queryport:-"0"}"
  922. servername="${servername:-"NOT SET"}"
  923. serverpassword="${serverpassword:-"NOT SET"}"
  924. tickrate="${tickrate:-"0"}"
  925. }
  926. # Config Type: json
  927. # Parameters: false
  928. # Comment: // or /* */
  929. # Example: "game_title":"SERVERNAME"
  930. # Filetype: json
  931. fn_info_game_cd() {
  932. if [ -f "${servercfgfullpath}" ]; then
  933. fn_info_game_json "maxplayers" ".player_count"
  934. fn_info_game_json "port" ".game_port"
  935. fn_info_game_json "rconenabled" ".rcon"
  936. fn_info_game_json "rconpassword" ".rcon_password"
  937. fn_info_game_json "rconport" ".rcon_port"
  938. fn_info_game_json "servername" ".game_title"
  939. fn_info_game_json "steamport" ".steam_port_messages"
  940. fi
  941. maxplayers="${maxplayers:-"0"}"
  942. port="${port:-"0"}"
  943. rconenabled="${rconenabled:-"NOT SET"}"
  944. rconpassword="${rconpassword:-"NOT SET"}"
  945. rconport="${rconport:-"0"}"
  946. servername="${servername:-"NOT SET"}"
  947. steamport="${steamport:-"0"}"
  948. }
  949. # Config Type: json
  950. # Parameters: true
  951. # Comment: // or /* */
  952. # Example: "worldName":"SERVERNAME"
  953. # Filetype: json
  954. fn_info_game_ck() {
  955. if [ -f "${servercfgfullpath}" ]; then
  956. fn_info_game_json "servername" ".worldName"
  957. fn_info_game_json "maxplayers" ".maxNumberPlayers"
  958. fi
  959. maxplayers="${maxplayers:-"0"}"
  960. port="${port:-"0"}"
  961. queryport="$((port + 1))"
  962. servername="${servername:-"NOT SET"}"
  963. }
  964. # Config Type: QuakeC
  965. # Parameters: true
  966. # Comment: // or /* */
  967. # Example: set sv_hostname "SERVERNAME"
  968. # Filetype: cfg
  969. fn_info_game_cod() {
  970. if [ -f "${servercfgfullpath}" ]; then
  971. fn_info_game_quakec "rconpassword" "rconpassword"
  972. fn_info_game_quakec "servername" "sv_hostname"
  973. fi
  974. defaultmap="${defaultmap:-"NOT SET"}"
  975. maxplayers="${maxplayers:-"0"}"
  976. port="${port:-"0"}"
  977. queryport="${port}"
  978. rconpassword="${rconpassword:-"NOT SET"}"
  979. servername="${servername:-"NOT SET"}"
  980. }
  981. # Config Type: QuakeC
  982. # Parameters: true
  983. # Comment: // or /* */
  984. # Example: set sv_hostname "SERVERNAME"
  985. # Filetype: cfg
  986. fn_info_game_coduo() {
  987. if [ -f "${servercfgfullpath}" ]; then
  988. fn_info_game_quakec "rconpassword" "rconpassword"
  989. fn_info_game_quakec "servername" "sv_hostname"
  990. fi
  991. defaultmap="${defaultmap:-"NOT SET"}"
  992. maxplayers="${maxplayers:-"0"}"
  993. port="${port:-"0"}"
  994. queryport="${port}"
  995. rconpassword="${rconpassword:-"NOT SET"}"
  996. servername="${servername:-"NOT SET"}"
  997. }
  998. # Config Type: QuakeC
  999. # Parameters: true
  1000. # Comment: // or /* */
  1001. # Example: set sv_hostname "SERVERNAME"
  1002. # Filetype: cfg
  1003. fn_info_game_cod2() {
  1004. if [ -f "${servercfgfullpath}" ]; then
  1005. fn_info_game_quakec "rconpassword" "rconpassword"
  1006. fn_info_game_quakec "servername" "sv_hostname"
  1007. fi
  1008. defaultmap="${defaultmap:-"NOT SET"}"
  1009. maxplayers="${maxplayers:-"0"}"
  1010. port="${port:-"0"}"
  1011. queryport="${port}"
  1012. rconpassword="${rconpassword:-"NOT SET"}"
  1013. servername="${servername:-"NOT SET"}"
  1014. }
  1015. # Config Type: QuakeC
  1016. # Parameters: true
  1017. # Comment: // or /* */
  1018. # Example: set sv_hostname "SERVERNAME"
  1019. # Filetype: cfg
  1020. fn_info_game_cod4() {
  1021. if [ -f "${servercfgfullpath}" ]; then
  1022. fn_info_game_quakec "rconpassword" "rcon_password"
  1023. fn_info_game_quakec "servername" "sv_hostname"
  1024. fi
  1025. defaultmap="${defaultmap:-"NOT SET"}"
  1026. maxplayers="${maxplayers:-"0"}"
  1027. port="${port:-"0"}"
  1028. queryport="${port}"
  1029. rconpassword="${rconpassword:-"NOT SET"}"
  1030. servername="${servername:-"NOT SET"}"
  1031. }
  1032. # Config Type: QuakeC
  1033. # Parameters: true
  1034. # Comment: // or /* */
  1035. # Example: set sv_hostname "SERVERNAME"
  1036. # Filetype: cfg
  1037. fn_info_game_codwaw() {
  1038. if [ -f "${servercfgfullpath}" ]; then
  1039. fn_info_game_quakec "rconpassword" "rcon_password"
  1040. fn_info_game_quakec "servername" "sv_hostname"
  1041. fi
  1042. defaultmap="${defaultmap:-"NOT SET"}"
  1043. maxplayers="${maxplayers:-"0"}"
  1044. port="${port:-"0"}"
  1045. queryport="${port}"
  1046. rconpassword="${rconpassword:-"NOT SET"}"
  1047. servername="${servername:-"NOT SET"}"
  1048. }
  1049. # Config Type: json
  1050. # Parameters: false
  1051. # Comment: // or /* */
  1052. # Example: "ServerName": "SERVERNAME"
  1053. # Filetype: json
  1054. fn_info_game_col() {
  1055. if [ -f "${servercfgfullpath}" ]; then
  1056. fn_info_game_json "configip" ".ServerSettings.ServerIP"
  1057. fn_info_game_json "maxplayers" ".ServerSettings.MaxPlayerCount"
  1058. fn_info_game_json "port" ".ServerSettings.ServerGamePort"
  1059. fn_info_game_json "rconpassword" ".ServerSettings.RCONPassword"
  1060. fn_info_game_json "servername" ".ServerSettings.ServerName"
  1061. fn_info_game_json "serverpassword" ".ServerSettings.ServerPassword"
  1062. fn_info_game_json "steamport" ".ServerSettings.ServerSteamPort"
  1063. fi
  1064. configip="${configip:-"0.0.0.0"}"
  1065. maxplayers="${maxplayers:-"0"}"
  1066. port="${port:-"0"}"
  1067. queryport="${port:-"0"}"
  1068. rcpassword="${rconpassword:-"NOT SET"}"
  1069. servername="${servername:-"NOT SET"}"
  1070. serverpassword="${serverpassword:-"NOT SET"}"
  1071. steamport="${steamport:-"0"}"
  1072. }
  1073. # Config Type: ini
  1074. # Parameters: true
  1075. # Comment: ; or #
  1076. # Example: ServerName=SERVERNAME
  1077. # Filetype: ini
  1078. fn_info_game_ct() {
  1079. if [ -f "${servercfgfullpath}" ]; then
  1080. fn_info_game_ini "configip" "bindAddress"
  1081. fn_info_game_ini "gamemode" "gameMode"
  1082. fn_info_game_ini "maxplayers" "maxPlayerNumber"
  1083. fn_info_game_ini "port" "port"
  1084. fn_info_game_ini "saveinterval" "autoSaveSec"
  1085. fn_info_game_ini "servername" "name"
  1086. fn_info_game_ini "serverpassword" "serverPassword"
  1087. fn_info_game_ini "serverpasswordenabled" "usePassword"
  1088. fi
  1089. configip="${configip:-"0.0.0.0"}"
  1090. gamemode="${gamemode:-"NOT SET"}"
  1091. maxplayers="${maxplayers:-"0"}"
  1092. port="${port:-"0"}"
  1093. saveinterval="${saveinterval:-"0"}"
  1094. servername="${servername:-"NOT SET"}"
  1095. serverpassword="${serverpassword:-"NOT SET"}"
  1096. serverpasswordenabled="${serverpasswordenabled:-"NOT SET"}"
  1097. }
  1098. # Config Type: SQF
  1099. # Parameters: true
  1100. # Comment: // or /* */
  1101. # Example: serverName = "SERVERNAME";
  1102. # Filetype: cfg
  1103. fn_info_game_dayz() {
  1104. if [ -f "${servercfgfullpath}" ]; then
  1105. fn_info_game_sqf "adminpassword" "passwordAdmin"
  1106. fn_info_game_sqf "maxplayers" "maxPlayers"
  1107. fn_info_game_sqf "queryport" "steamQueryPort"
  1108. fn_info_game_sqf "servername" "hostname"
  1109. fn_info_game_sqf "serverpassword" "password"
  1110. fi
  1111. adminpassword="${adminpassword:-"NOT SET"}"
  1112. battleeyeport="$((port + 4))"
  1113. maxplayers="${maxplayers:-"0"}"
  1114. port="${port:-"0"}"
  1115. queryport="${queryport:-"0"}"
  1116. servername="${servername:-"NOT SET"}"
  1117. serverpassword="${serverpassword:-"NOT SET"}"
  1118. steamport="$((port + 2))"
  1119. }
  1120. # Config Type: json
  1121. # Parameters: false
  1122. # Comment: // or /* */
  1123. # Example: "Description": "SERVERNAME"
  1124. # Filetype: json
  1125. fn_info_game_eco() {
  1126. if [ -f "${servercfgfullpath}" ]; then
  1127. fn_info_game_json "configip" ".IPAddress"
  1128. fn_info_game_json "httpport" ".WebServerPort"
  1129. fn_info_game_json "maxplayers" ".MaxConnections"
  1130. fn_info_game_json "port" ".GameServerPort"
  1131. fn_info_game_json "servername" ".Description"
  1132. fn_info_game_json "serverpassword" ".Password"
  1133. fn_info_game_json "tickrate" ".Rate"
  1134. fi
  1135. configip="${configip:-"0.0.0.0"}"
  1136. httpport="${httpport:-"0"}"
  1137. maxplayers="${maxplayers:-"0"}"
  1138. port="${port:-"0"}"
  1139. servername="${servername:-"NOT SET"}"
  1140. serverpassword="${serverpassword:-"NOT SET"}"
  1141. tickrate="${tickrate:-"0"}"
  1142. }
  1143. # Config Type: QuakeC
  1144. # Parameters: true
  1145. # Comment: // or /* */
  1146. # Example: set sv_hostname "SERVERNAME"
  1147. # Filetype: cfg
  1148. fn_info_game_etl() {
  1149. if [ -f "${servercfgfullpath}" ]; then
  1150. fn_info_game_quakec "configip" "net_ip"
  1151. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1152. fn_info_game_quakec "port" "net_port"
  1153. fn_info_game_quakec "rconpassword" "rconpassword"
  1154. fn_info_game_quakec "servername" "sv_hostname"
  1155. fn_info_game_quakec "serverpassword" "g_password"
  1156. fi
  1157. configip="${configip:-"0.0.0.0"}"
  1158. maxplayers="${maxplayers:-"0"}"
  1159. port="${port:-"0"}"
  1160. queryport="${port}"
  1161. rconpassword="${rconpassword:-"NOT SET"}"
  1162. servername="${servername:-"NOT SET"}"
  1163. serverpassword="${serverpassword:-"NOT SET"}"
  1164. }
  1165. # Config Type: json
  1166. # Parameters: true
  1167. # Comment: // or /* */
  1168. # Example: "name": "SERVERNAME"
  1169. # Filetype: json
  1170. fn_info_game_fctr() {
  1171. if [ -f "${servercfgfullpath}" ]; then
  1172. fn_info_game_json "authtoken" ".token"
  1173. fn_info_game_json "maxplayers" ".max_players"
  1174. fn_info_game_json "savegameinterval" ".autosave_interval"
  1175. fn_info_game_json "servername" ".name"
  1176. fn_info_game_json "serverpassword" ".game_password"
  1177. fn_info_game_json "versioncount" ".autosave_slots"
  1178. fi
  1179. authtoken="${authtoken:-"NOT SET"}"
  1180. maxplayers="${maxplayers:-"0"}"
  1181. port="${port:-"0"}"
  1182. rconpassword="${rconpassword:-"NOT SET"}"
  1183. rconport="${rconport:-"0"}"
  1184. savegameinterval="${savegameinterval:-"0"}"
  1185. servername="${servername:-"NOT SET"}"
  1186. serverpassword="${serverpassword:-"NOT SET"}"
  1187. versioncount="${versioncount:-"0"}"
  1188. # get server version if installed.
  1189. local factoriobin="${executabledir}${executable:1}"
  1190. if [ -f "${factoriobin}" ]; then
  1191. serverversion="$(${factoriobin} --version | grep "Version:" | awk '{print $2}')"
  1192. fi
  1193. }
  1194. # Config Type: parameters (json possibly supported)
  1195. # Parameters: true
  1196. # Comment:
  1197. # Example: -serverName="SERVERNAME"
  1198. # Filetype: parameters
  1199. fn_info_game_hw() {
  1200. servername="${servername:-"NOT SET"}"
  1201. port="${port:-"0"}"
  1202. queryport="${queryport:-"0"}"
  1203. maxplayers="${maxplayers:-"0"}"
  1204. # #4189 option setting can be blank
  1205. # defaultmap="${defaultmap:-"NOT SET"}"
  1206. creativemode="${creativemode:-"NOT SET"}"
  1207. }
  1208. # Config Type: parameters
  1209. # Parameters: true
  1210. # Comment:
  1211. # Example: -hostname='SERVERNAME'
  1212. # Filetype: parameters
  1213. fn_info_game_inss() {
  1214. port="${port:-"0"}"
  1215. queryport="${queryport:-"0"}"
  1216. rconport="${rconport:-"0"}"
  1217. servername="${servername:-"NOT SET"}"
  1218. serverpassword="${serverpassword:-"NOT SET"}"
  1219. defaultmap="${defaultmap:-"NOT SET"}"
  1220. defaultscenario="${defaultscenario:-"NOT SET"}"
  1221. maxplayers="${maxplayers:-"0"}"
  1222. }
  1223. # Config Type: lua (Custom)
  1224. # Parameters: false
  1225. # Comment: --
  1226. # Example: Name = "SERVERNAME",
  1227. # Filetype: lua
  1228. fn_info_game_jc2() {
  1229. if [ -f "${servercfgfullpath}" ]; then
  1230. fn_info_game_lua "configip" "BindIP"
  1231. fn_info_game_lua "maxplayers" "MaxPlayers"
  1232. fn_info_game_lua "port" "BindPort"
  1233. fn_info_game_lua "serverdescription" "Description"
  1234. fn_info_game_lua "servername" "Name"
  1235. fn_info_game_lua "serverpassword" "Password"
  1236. fi
  1237. configip="${configip:-"0.0.0.0"}"
  1238. maxplayers="${maxplayers:-"0"}"
  1239. queryport="${port}"
  1240. queryport="${queryport:-"0"}"
  1241. serverdescription="${serverdescription:-"NOT SET"}"
  1242. servername="${servername:-"NOT SET"}"
  1243. serverpassword="${serverpassword:-"NOT SET"}"
  1244. }
  1245. # Config Type: json
  1246. # Parameters: false
  1247. # Comment: // or /* */
  1248. # Example: "name": "SERVERNAME"
  1249. # Filetype: json
  1250. fn_info_game_jc3() {
  1251. if [ -f "${servercfgfullpath}" ]; then
  1252. fn_info_game_json "configip" ".host"
  1253. fn_info_game_json "httpport" ".httpPort"
  1254. fn_info_game_json "maxplayers" ".maxPlayers"
  1255. fn_info_game_json "port" ".port"
  1256. fn_info_game_json "queryport" ".queryPort"
  1257. fn_info_game_json "serverdescription" ".description"
  1258. fn_info_game_json "servername" ".name"
  1259. fn_info_game_json "serverpassword" ".password"
  1260. fn_info_game_json "steamport" ".steamPort"
  1261. fn_info_game_json "tickrate" ".maxTickRate"
  1262. fi
  1263. configip="${configip:-"0.0.0.0"}"
  1264. httpport="${httpport:-"0"}"
  1265. maxplayers="${maxplayers:-"0"}"
  1266. port="${port:-"0"}"
  1267. queryport="${queryport:-"0"}"
  1268. serverdescription="${serverdescription:-"NOT SET"}"
  1269. servername="${servername:-"NOT SET"}"
  1270. serverpassword="${serverpassword:-"NOT SET"}"
  1271. steamport="${steamport:-"0"}"
  1272. tickrate="${tickrate:-"0"}"
  1273. }
  1274. # Config Type: QuakeC
  1275. # Parameters: true
  1276. # Comment: // or /* */
  1277. # Example: set sv_hostname "SERVERNAME"
  1278. # Filetype: cfg
  1279. fn_info_game_jk2() {
  1280. if [ -f "${servercfgfullpath}" ]; then
  1281. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1282. fn_info_game_quakec "rconpassword" "rconpassword"
  1283. fn_info_game_quakec "servername" "sv_hostname"
  1284. fn_info_game_quakec "serverpassword" "g_password"
  1285. fn_info_game_quakec "serverversion" "mv_serverversion"
  1286. fi
  1287. defaultmap="${defaultmap:-"NOT SET"}"
  1288. maxplayers="${maxplayers:-"0"}"
  1289. port="${port:-"0"}"
  1290. queryport="${port}"
  1291. rconpassword="${rconpassword:-"NOT SET"}"
  1292. servername="${servername:-"NOT SET"}"
  1293. serverpassword="${serverpassword:-"NOT SET"}"
  1294. serverversion="${serverversion:-"NOT SET"}"
  1295. }
  1296. # Config Type: unknown
  1297. fn_info_game_lo() {
  1298. servername="${servername:-"NOT SET"}"
  1299. port="${port:-"0"}"
  1300. queryport="${queryport:-"0"}"
  1301. maxplayers="${slots:-"0"}"
  1302. }
  1303. # Config Type: Java properties
  1304. # Comment: # or !
  1305. # Example: motd=SERVERNAME
  1306. # Filetype: properties
  1307. fn_info_game_mc() {
  1308. if [ -f "${servercfgfullpath}" ]; then
  1309. fn_info_game_java_properties "configip" "server-ip"
  1310. fn_info_game_java_properties "gamemode" "gamemode"
  1311. fn_info_game_java_properties "maxplayers" "max-players"
  1312. fn_info_game_java_properties "port" "server-port"
  1313. fn_info_game_java_properties "queryenabled" "enable-query"
  1314. fn_info_game_java_properties "queryport" "query.port"
  1315. fn_info_game_java_properties "rconpassword" "rcon.password"
  1316. fn_info_game_java_properties "rconport" "rcon.port"
  1317. fn_info_game_java_properties "servername" "motd"
  1318. fn_info_game_java_properties "worldname" "level-name"
  1319. fi
  1320. configip="${configip:-"0.0.0.0"}"
  1321. gamemode="${gamemode:-"NOT SET"}"
  1322. maxplayers="${maxplayers:-"0"}"
  1323. port="${port:-"0"}"
  1324. queryenabled="${queryenabled:-"NOT SET"}"
  1325. if [ -z "${queryport}" ]; then
  1326. queryport="${port}"
  1327. fi
  1328. rconpassword="${rconpassword:-"NOT SET"}"
  1329. rconport="${rconport:-"0"}"
  1330. servername="${servername:-"NOT SET"}"
  1331. worldname="${worldname:-"NOT SET"}"
  1332. }
  1333. # Config Type: Java properties
  1334. # Comment: # or !
  1335. # Example: server-name=SERVERNAME
  1336. # Filetype: properties
  1337. fn_info_game_mcb() {
  1338. if [ -f "${servercfgfullpath}" ]; then
  1339. fn_info_game_java_properties "gamemode" "gamemode"
  1340. fn_info_game_java_properties "maxplayers" "max-players"
  1341. fn_info_game_java_properties "port" "server-port"
  1342. fn_info_game_java_properties "portv6" "server-portv6"
  1343. fn_info_game_java_properties "servername" "server-name"
  1344. fn_info_game_java_properties "worldname" "level-name"
  1345. fi
  1346. gamemode="${gamemode:-"NOT SET"}"
  1347. maxplayers="${maxplayers:-"0"}"
  1348. portipv6="${portipv6:-"NOT SET"}"
  1349. queryport="${port}"
  1350. servername="${servername:-"NOT SET"}"
  1351. worldname="${worldname:-"NOT SET"}"
  1352. }
  1353. # Config Type: QuakeC
  1354. # Comment: // or /* */
  1355. # Example: set sv_hostname "SERVERNAME"
  1356. # Filetype: cfg
  1357. fn_info_game_mohaa() {
  1358. if [ -f "${servercfgfullpath}" ]; then
  1359. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1360. fn_info_game_quakec "rconpassword" "rconPassword"
  1361. fn_info_game_quakec "servername" "sv_hostname"
  1362. fn_info_game_quakec "serverpassword" "g_password"
  1363. fi
  1364. defaultmap="${defaultmap:-"NOT SET"}"
  1365. maxplayers="${maxplayers:-"0"}"
  1366. port="${port:-"0"}"
  1367. queryport="${port:-"0"}"
  1368. rconpassword="${rconpassword:-"NOT SET"}"
  1369. servername="${servername:-"NOT SET"}"
  1370. serverpassword="${serverpassword:-"NOT SET"}"
  1371. }
  1372. # Config Type: json
  1373. # Parameters: true
  1374. # Comment: // or /* */
  1375. fn_info_game_mom() {
  1376. if [ -f "${servercfgfullpath}" ]; then
  1377. fn_info_game_json "defaultmap" ".MapName"
  1378. fn_info_game_json "maxplayers" ".MaxPlayers"
  1379. fn_info_game_json "servername" ".ServerName"
  1380. fn_info_game_json "serverpassword" ".ServerPassword"
  1381. fi
  1382. beaconport="${beaconport:-"0"}"
  1383. defaultmap="${defaultmap:-"NOT SET"}"
  1384. maxplayers="${maxplayers:-"0"}"
  1385. port="${port:-"0"}"
  1386. servername="${servername:-"NOT SET"}"
  1387. serverpassword="${serverpassword:-"NOT SET"}"
  1388. }
  1389. # Config Type: xml
  1390. # Comment: <!-- -->
  1391. # Example: <servername>Default MTA Server</servername>
  1392. # Filetype: conf
  1393. fn_info_game_mta() {
  1394. if [ -f "${servercfgfullpath}" ]; then
  1395. fn_info_game_xml "port" "/config/serverport"
  1396. fn_info_game_xml "httpport" "/config/httpport"
  1397. fn_info_game_xml "servername" "/config/servername"
  1398. fn_info_game_xml "maxplayers" "/config/maxplayers"
  1399. fn_info_game_xml "ase" "/config/ase"
  1400. fi
  1401. if [ "${ase}" == "1" ]; then
  1402. ase="Enabled"
  1403. else
  1404. ase="Disabled"
  1405. fi
  1406. port="${port:-"0"}"
  1407. queryport="$((port + 123))"
  1408. httpport="${httpport:-"0"}"
  1409. ase="${ase:-"Disabled"}"
  1410. servername="${servername:-"NOT SET"}"
  1411. serverpassword="${serverpassword:-"NOT SET"}"
  1412. maxplayers="${maxplayers:-"0"}"
  1413. }
  1414. # Config Type: custom
  1415. # Comment: //
  1416. # Example: port = 14159,
  1417. # Filetype: cfg
  1418. fn_info_game_nec() {
  1419. if [ -f "${servercfgfullpath}" ]; then
  1420. fn_info_game_lua "maxplayers" "slots"
  1421. fn_info_game_lua "port" "port"
  1422. fn_info_game_lua "serverpassword" "password"
  1423. fi
  1424. maxplayers="${maxplayers:-"0"}"
  1425. port="${port:-"0"}"
  1426. servername="Necesse Port ${port}"
  1427. serverpassword="${serverpassword:-"NOT SET"}"
  1428. }
  1429. # Config Type: ini
  1430. # Parameters: true
  1431. # Comment: ; or #
  1432. # Example: ServerName=SERVERNAME
  1433. # Filetype: ini
  1434. fn_info_game_ohd() {
  1435. if [ -f "${servercfgfullpath}" ]; then
  1436. fn_info_game_ini rconenabled "bEnabled"
  1437. fn_info_game_ini rconport "ListenPort"
  1438. fn_info_game_ini rconpassword "Password"
  1439. fi
  1440. rconenabled="${rconenabled:-"false"}"
  1441. rconport="${rconport:-"0"}"
  1442. rconpassword="${rconpassword:-"NOT SET"}"
  1443. }
  1444. # Config Type: json
  1445. # Parameters: false
  1446. # Comment: // or /* */
  1447. fn_info_game_onset() {
  1448. if [ -f "${servercfgfullpath}" ]; then
  1449. fn_info_game_json "maxplayers" ".maxplayers"
  1450. fn_info_game_json "port" ".port"
  1451. fn_info_game_json "servername" ".servername_short"
  1452. fn_info_game_json "serverpassword" ".password"
  1453. fi
  1454. maxplayers="${maxplayers:-"0"}"
  1455. port="${port:-"0"}"
  1456. httpport="$((port - 2))"
  1457. queryport="$((port - 1))"
  1458. servername="${servername:-"NOT SET"}"
  1459. }
  1460. # Config Type: custom
  1461. # Parameters: false
  1462. # Comment: //
  1463. # Filetype: cfg
  1464. fn_info_game_pc() {
  1465. if [ -f "${servercfgfullpath}" ]; then
  1466. fn_info_game_pc_config "apiport" "httpApiPort"
  1467. fn_info_game_pc_config "httpenabled" "enableHttpApi"
  1468. fn_info_game_pc_config "httpport" "httpApiPort"
  1469. fn_info_game_pc_config "maxplayers" "maxPlayerCount"
  1470. fn_info_game_pc_config "port" "hostPort"
  1471. fn_info_game_pc_config "queryport" "queryPort"
  1472. fn_info_game_pc_config "servername" "name"
  1473. fn_info_game_pc_config "serverpassword" "password"
  1474. fn_info_game_pc_config "steamport" "steamPort"
  1475. fi
  1476. apiport="${apiport:-"0"}"
  1477. httpenabled="${httpenabled:-"0"}"
  1478. httpport="${httpport:-"0"}"
  1479. maxplayers="${maxplayers:-"0"}"
  1480. port="${port:-"0"}"
  1481. queryport="${queryport:-"0"}"
  1482. servername="${servername:-"NOT SET"}"
  1483. serverpassword="${serverpassword:-"NOT SET"}"
  1484. steamport="${steamport:-"0"}"
  1485. }
  1486. fn_info_game_pc2() {
  1487. if [ -f "${servercfgfullpath}" ]; then
  1488. fn_info_game_pc_config "apiport" "httpApiPort"
  1489. fn_info_game_pc_config "httpenabled" "enableHttpApi"
  1490. fn_info_game_pc_config "httpport" "httpApiPort"
  1491. fn_info_game_pc_config "maxplayers" "maxPlayerCount"
  1492. fn_info_game_pc_config "port" "hostPort"
  1493. fn_info_game_pc_config "queryport" "queryPort"
  1494. fn_info_game_pc_config "servername" "name"
  1495. fn_info_game_pc_config "serverpassword" "password"
  1496. fn_info_game_pc_config "steamport" "steamPort"
  1497. fi
  1498. apiport="${apiport:-"0"}"
  1499. httpenabled="${httpenabled:-"0"}"
  1500. httpport="${httpport:-"0"}"
  1501. maxplayers="${maxplayers:-"0"}"
  1502. port="${port:-"0"}"
  1503. queryport="${queryport:-"0"}"
  1504. servername="${servername:-"NOT SET"}"
  1505. serverpassword="${serverpassword:-"NOT SET"}"
  1506. steamport="${steamport:-"0"}"
  1507. }
  1508. # Config Type: SiiNunit
  1509. # Comment: //
  1510. # Example: lobby_name: "SERVERNAME"
  1511. # Filetype: ssi
  1512. fn_info_game_prism3d() {
  1513. # Config
  1514. if [ ! -f "${servercfgfullpath}" ]; then
  1515. maxplayers="${unavailable}"
  1516. port="${zero}"
  1517. queryport="${zero}"
  1518. servername="${unavailable}"
  1519. serverpassword="${unavailable}"
  1520. else
  1521. maxplayers=$(sed -nr 's/^\s*max_players\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
  1522. port=$(sed -nr 's/^\s*connection_dedicated_port\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
  1523. queryport=$(sed -nr 's/^\s*query_dedicated_port\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
  1524. servername=$(sed -nr 's/^\s*lobby_name\s*:\s*"?([^"\r\n]+)"?/\1/p' "${servercfgfullpath}")
  1525. serverpassword=$(sed -nr 's/^\s*password\s*:\s*"(.*)"/\1/p' "${servercfgfullpath}")
  1526. # Not set
  1527. maxplayers="${maxplayers:-"0"}"
  1528. port="${port:-"27015"}"
  1529. queryport="${queryport:-"27016"}"
  1530. servername="${servername:-"NOT SET"}"
  1531. serverpassword="${serverpassword:-"NOT SET"}"
  1532. fi
  1533. }
  1534. # Config Type: QuakeC
  1535. # Comment: // or /* */
  1536. # Example: set hostname "SERVERNAME"
  1537. # Filetype: cfg
  1538. fn_info_game_q2() {
  1539. if [ -f "${servercfgfullpath}" ]; then
  1540. fn_info_game_quakec "maxplayers" "maxclients"
  1541. fn_info_game_quakec "rconpassword" "rcon_password"
  1542. fn_info_game_quakec "servername" "hostname"
  1543. fi
  1544. defaultmap="${defaultmap:-"NOT SET"}"
  1545. maxplayers="${maxplayers:-"0"}"
  1546. port="${port:-"0"}"
  1547. queryport="${port}"
  1548. rconpassword="${rconpassword:-"NOT SET"}"
  1549. servername="${servername:-"NOT SET"}"
  1550. }
  1551. # Config Type: QuakeC
  1552. # Comment: // or /* */
  1553. # Example: set sv_hostname "SERVERNAME"
  1554. # Filetype: cfg
  1555. fn_info_game_q3() {
  1556. if [ -f "${servercfgfullpath}" ]; then
  1557. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1558. fn_info_game_quakec "rconpassword" "rconpassword"
  1559. fn_info_game_quakec "servername" "sv_hostname"
  1560. fi
  1561. maxplayers="${maxplayers:-"0"}"
  1562. rconpassword="${rconpassword:-"NOT SET"}"
  1563. servername="${servername:-"NOT SET"}"
  1564. port="${port:-"0"}"
  1565. queryport="${port}"
  1566. defaultmap="${defaultmap:-"NOT SET"}"
  1567. }
  1568. # Config Type: QuakeC
  1569. # Comment: // or /* */
  1570. # Example: set sv_hostname "SERVERNAME"
  1571. # Filetype: cfg
  1572. fn_info_game_ql() {
  1573. if [ -f "${servercfgfullpath}" ]; then
  1574. fn_info_game_quakec "configip" "net_ip"
  1575. fn_info_game_quakec "maxplayers" "sv_maxClients"
  1576. fn_info_game_quakec "port" "net_port"
  1577. fn_info_game_quakec "rconpassword" "zmq_rcon_password"
  1578. fn_info_game_quakec "rconport" "zmq_rcon_port"
  1579. fn_info_game_quakec "servername" "sv_hostname"
  1580. fn_info_game_quakec "serverpassword" "g_password"
  1581. fn_info_game_quakec "statsport" "zmq_stats_port"
  1582. fi
  1583. configip="${configip:-"0.0.0.0"}"
  1584. maxplayers="${maxplayers:-"0"}"
  1585. port="${port:-"0"}"
  1586. queryport="${port}"
  1587. rconpassword="${rconpassword:-"NOT SET"}"
  1588. rconport="${rconport:-"0"}"
  1589. servername="${servername:-"NOT SET"}"
  1590. serverpassword="${serverpassword:-"NOT SET"}"
  1591. statsport="${statsport:-"0"}"
  1592. }
  1593. # Config Type: QuakeC
  1594. # Comment: // or /* */
  1595. # Example: hostname "SERVERNAME"
  1596. # Filetype: cfg
  1597. fn_info_game_qw() {
  1598. if [ -f "${servercfgfullpath}" ]; then
  1599. fn_info_game_quakec "maxplayers" "maxclients"
  1600. fn_info_game_quakec "rconpassword" "rcon_password"
  1601. fn_info_game_quakec "servername" "hostname"
  1602. fi
  1603. maxplayers="${maxplayers:-"0"}"
  1604. port="${port:-"0"}"
  1605. queryport="${port}"
  1606. rconpassword="${rconpassword:-"NOT SET"}"
  1607. servername="${servername:-"NOT SET"}"
  1608. }
  1609. fn_info_game_ro() {
  1610. if [ -f "${servercfgfullpath}" ]; then
  1611. fn_info_game_ini "adminpassword" "AdminPassword"
  1612. fn_info_game_ini "httpenabled" "bEnabled"
  1613. fn_info_game_ini "httppassword" "httppasswordword"
  1614. fn_info_game_ini "httpport" "ListenPort"
  1615. fn_info_game_ini "httpuser" "AdminName"
  1616. fn_info_game_ini "lanport" "LANServerPort"
  1617. fn_info_game_ini "maxplayers" "MaxPlayers"
  1618. fn_info_game_ini "port" "Port"
  1619. fn_info_game_ini "queryportgs" "QueryPort"
  1620. fn_info_game_ini "servername" "ServerName"
  1621. fn_info_game_ini "serverpassword" "GamePassword"
  1622. fi
  1623. adminpassword="${adminpassword:-"NOT SET"}"
  1624. defaultmap="${defaultmap:-"NOT SET"}"
  1625. httpenabled="${httpenabled:-"NOT SET"}"
  1626. httppassword="${adminpassword}"
  1627. httpport="${httpport:-"0"}"
  1628. httpuser="${httpuser:-"NOT SET"}"
  1629. lanport="${lanport:-"0"}"
  1630. maxplayers="${maxplayers:-"0"}"
  1631. port="${port:-"0"}"
  1632. queryport="$((port + 1))"
  1633. queryportgs="${queryportgs:-"0"}"
  1634. servername="${servername:-"NOT SET"}"
  1635. serverpassword="${serverpassword:-"NOT SET"}"
  1636. steamport="28902"
  1637. steamworksport="20610"
  1638. }
  1639. # Config Type: QuakeC
  1640. # Comment: // or /* */
  1641. # Example: set sv_hostname "SERVERNAME"
  1642. # Filetype: cfg
  1643. fn_info_game_rtcw() {
  1644. if [ -f "${servercfgfullpath}" ]; then
  1645. fn_info_game_quakec "rconpassword" "rconpassword"
  1646. fn_info_game_quakec "servername" "sv_hostname"
  1647. fn_info_game_quakec "serverpassword" "g_password"
  1648. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1649. fi
  1650. rconpassword="${rconpassword:-"NOT SET"}"
  1651. servername="${servername:-"NOT SET"}"
  1652. serverpassword="${serverpassword:-"NOT SET"}"
  1653. maxplayers="${maxplayers:-"0"}"
  1654. port="${port:-"0"}"
  1655. queryport="${port:-"0"}"
  1656. defaultmap="${defaultmap:-"NOT SET"}"
  1657. }
  1658. # Config Type: Parameters (mostly)
  1659. fn_info_game_rust() {
  1660. # Parameters
  1661. servername="${servername:-"NOT SET"}"
  1662. port="${port:-"0"}"
  1663. queryport="${queryport:-"0"}"
  1664. appport="${appport:-"0"}"
  1665. rconport="${rconport:-"0"}"
  1666. gamemode="${gamemode:-"NOT SET"}"
  1667. maxplayers="${maxplayers:-"0"}"
  1668. rconpassword="${rconpassword:-"NOT SET"}"
  1669. rconweb="${rconweb:-"NOT SET"}"
  1670. tickrate="${tickrate:-"0"}"
  1671. saveinterval="${saveinterval:-"0"}"
  1672. serverlevel="${serverlevel:-"NOT SET"}"
  1673. customlevelurl="${customlevelurl:-"NOT SET"}"
  1674. worldsize="${worldsize:-"0"}"
  1675. if [ -n "${seed}" ]; then
  1676. seed="${seed:-"0"}"
  1677. elif [ -f "${datadir}/${selfname}-seed.txt" ]; then
  1678. seed=$(cat "${datadir}/${selfname}-seed.txt")
  1679. fi
  1680. salt="${salt:-"0"}"
  1681. }
  1682. fn_info_game_rw() {
  1683. if [ -f "${servercfgfullpath}" ]; then
  1684. fn_info_game_keyvalue_pairs_equals "configip" "Server_IP"
  1685. fn_info_game_keyvalue_pairs_equals "gamemode" "World_GameMode"
  1686. fn_info_game_keyvalue_pairs_equals "maxplayers" "Server_MaxPlayers"
  1687. fn_info_game_keyvalue_pairs_equals "port" "Server_Port"
  1688. fn_info_game_keyvalue_pairs_equals "rconport" "RCON_Port"
  1689. fn_info_game_keyvalue_pairs_equals "seed" "World_Seed"
  1690. fn_info_game_keyvalue_pairs_equals "servername" "Server_Name"
  1691. fn_info_game_keyvalue_pairs_equals "worldname" "World_Name"
  1692. fi
  1693. configip="${configip:-"0.0.0.0"}"
  1694. gamemode="${gamemode:-"NOT SET"}"
  1695. maxplayers="${maxplayers:-"0"}"
  1696. port="${port:-"0"}"
  1697. queryport="$((port - 1))"
  1698. rconport="${rconport:-"0"}"
  1699. seed="${seed:-"0"}"
  1700. servername="${servername:-"NOT SET"}"
  1701. worldname="${worldname:-"NOT SET"}"
  1702. }
  1703. # Config Type: custom
  1704. # Comment: // or /* */
  1705. # example: hostname "SERVERNAME"
  1706. # filetypes: cfg
  1707. fn_info_game_samp() {
  1708. # Config
  1709. if [ ! -f "${servercfgfullpath}" ]; then
  1710. servername="unnamed server"
  1711. rconpassword="${unavailable}"
  1712. port="7777"
  1713. rconport="${port}"
  1714. maxplayers="50"
  1715. else
  1716. servername=$(grep "hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
  1717. rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/^rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
  1718. port=$(grep "port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
  1719. queryport="${port}"
  1720. rconport="${port}"
  1721. maxplayers=$(grep "maxplayers" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
  1722. # Not set
  1723. servername="${servername:-"NOT SET"}"
  1724. rconpassword="${rconpassword:-"NOT SET"}"
  1725. port="${port:-"7777"}"
  1726. queryport="${port:-"7777"}"
  1727. rconport="${rconport:-"7777"}"
  1728. maxplayers="${maxplayers:-"12"}"
  1729. fi
  1730. }
  1731. # Config Type: json
  1732. # Parameters: false
  1733. # Comment: // or /* */
  1734. fn_info_game_sb() {
  1735. if [ -f "${servercfgfullpath}" ]; then
  1736. fn_info_game_json "maxplayers" ".maxPlayers"
  1737. fn_info_game_json "port" ".gameServerPort"
  1738. fn_info_game_json "queryenabled" ".runQueryServer"
  1739. fn_info_game_json "queryport" ".queryServerPort"
  1740. fn_info_game_json "rconenabled" ".runRconServer"
  1741. fn_info_game_json "rconpassword" ".rconServerPassword"
  1742. fn_info_game_json "rconport" ".rconServerPort"
  1743. fn_info_game_json "servername" ".serverName"
  1744. fi
  1745. maxplayers="${maxplayers:-"0"}"
  1746. port="${port:-"0"}"
  1747. queryenabled="${queryenabled:-"NOT SET"}"
  1748. queryport="${queryport:-"0"}"
  1749. rconenabled="${rconenabled:-"NOT SET"}"
  1750. rconpassword="${rconpassword:-"NOT SET"}"
  1751. rconport="${rconport:-"0"}"
  1752. servername="${servername:-"NOT SET"}"
  1753. }
  1754. # Config Type: Parameters
  1755. fn_info_game_sbots() {
  1756. port="${port:-"0"}"
  1757. queryport="${queryport:-"0"}"
  1758. servername="${servername:-"NOT SET"}"
  1759. serverpassword="${serverpassword:-"NOT SET"}"
  1760. defaultmap="${defaultmap:-"NOT SET"}"
  1761. maxplayers="${maxplayers:-"0"}"
  1762. }
  1763. # Config Type: custom (possibly YAML)
  1764. # Comment: #
  1765. # Example: server_name: SERVERNAME
  1766. # Filetype: txt
  1767. fn_info_game_scpsl() {
  1768. if [ -f "${servercfgfullpath}" ]; then
  1769. fn_info_game_pc_config "adminpassword" "administrator_query_password"
  1770. fn_info_game_pc_config "configip" "ipv4_bind_ip"
  1771. fn_info_game_pc_config "maxplayers" "max_players"
  1772. fn_info_game_pc_config "servername" "server_name"
  1773. fn_info_game_pc_config "tickrate" "server_tickrate"
  1774. fi
  1775. adminpassword="${adminpassword:-"NOT SET"}"
  1776. configip="${configip:-"0.0.0.0"}"
  1777. maxplayers="${maxplayers:-"0"}"
  1778. port="${port:-"0"}"
  1779. queryport="${port}"
  1780. servername="${servername:-"NOT SET"}"
  1781. tickrate="${tickrate:-"NOT SET"}"
  1782. }
  1783. # Config Type: xml
  1784. # Comment: <!-- -->
  1785. # Example: <property name="ServerName" value="My Game Host"/>
  1786. # Filetype: xml
  1787. fn_info_game_sdtd() {
  1788. if [ -f "${servercfgfullpath}" ]; then
  1789. fn_info_game_xml "gamemode" "/ServerSettings/property[@name='GameMode']/@value"
  1790. fn_info_game_xml "httpenabled" "/ServerSettings/property[@name='ControlPanelEnabled']/@value"
  1791. fn_info_game_xml "httppassword" "/ServerSettings/property[@name='ControlPanelPassword']/@value"
  1792. fn_info_game_xml "httpport" "/ServerSettings/property[@name='ControlPanelPort']/@value"
  1793. fn_info_game_xml "maxplayers" "/ServerSettings/property[@name='ServerMaxPlayerCount']/@value"
  1794. fn_info_game_xml "servername" "/ServerSettings/property[@name='ServerName']/@value"
  1795. fn_info_game_xml "serverpassword" "/ServerSettings/property[@name='ServerPassword']/@value"
  1796. fn_info_game_xml "port" "/ServerSettings/property[@name='ServerPort']/@value"
  1797. fn_info_game_xml "telnetenabled" "/ServerSettings/property[@name='TelnetEnabled']/@value"
  1798. fn_info_game_xml "telnetpass" "/ServerSettings/property[@name='TelnetPassword']/@value"
  1799. fn_info_game_xml "telnetport" "/ServerSettings/property[@name='TelnetPort']/@value"
  1800. fn_info_game_xml "worldname" "/ServerSettings/property[@name='GameWorld']/@value"
  1801. fi
  1802. gamemode="${gamemode:-"NOT SET"}"
  1803. httpenabled="${httpenabled:-"NOT SET"}"
  1804. httppassword="${httppassword:-"NOT SET"}"
  1805. httpport="${httpport:-"0"}"
  1806. maxplayers="${maxplayers:-"0"}"
  1807. port="${port:-"0"}"
  1808. port3="$((port + 2))"
  1809. queryport="${port:-"0"}"
  1810. servername="${servername:-"NOT SET"}"
  1811. serverpassword="${serverpassword:-"NOT SET"}"
  1812. telnetenabled="${telnetenabled:-"NOT SET"}"
  1813. # Telnet IP will be localhost if no password is set
  1814. # check_ip will set the IP first. This will overwrite it.
  1815. if [ -z "${telnetpass}" ]; then
  1816. telnetip="127.0.0.1"
  1817. fi
  1818. telnetpass="${telnetpass:-"NOT SET"}"
  1819. telnetport="${telnetport:-"0"}"
  1820. worldname="${worldname:-"NOT SET"}"
  1821. }
  1822. # Config Type: Parameters (with an ini)
  1823. fn_info_game_sf() {
  1824. # Parameters
  1825. servername="${selfname:-"NOT SET"}"
  1826. port="${port:-"0"}"
  1827. queryport="${queryport:-"0"}"
  1828. beaconport="${beaconport:-"0"}"
  1829. }
  1830. # Config Type: QuakeC
  1831. # Comment: // or /* */
  1832. # Example: set sv_hostname "SERVERNAME"
  1833. # Filetype: cfg
  1834. fn_info_game_sof2() {
  1835. if [ -f "${servercfgfullpath}" ]; then
  1836. fn_info_game_quakec "rconpassword" "rconpassword"
  1837. fn_info_game_quakec "servername" "sv_hostname"
  1838. fn_info_game_quakec "serverpassword" "g_password"
  1839. fn_info_game_quakec "maxplayers" "sv_maxclients"
  1840. fi
  1841. rconpassword="${rconpassword:-"NOT SET"}"
  1842. servername="${servername:-"NOT SET"}"
  1843. serverpassword="${serverpassword:-"NOT SET"}"
  1844. maxplayers="${maxplayers:-"0"}"
  1845. port="${port:-"0"}"
  1846. queryport="${port}"
  1847. defaultmap="${defaultmap:-"NOT SET"}"
  1848. }
  1849. # Config Type: ini
  1850. # Parameters: true
  1851. # Comment: ; or #
  1852. # Server_Name=SERVERNAME
  1853. # Filetype: ini
  1854. fn_info_game_sol() {
  1855. if [ -f "${servercfgfullpath}" ]; then
  1856. fn_info_game_ini "adminpassword" "Admin_Password"
  1857. fn_info_game_ini "maxplayers" "Max_Players"
  1858. fn_info_game_ini "port" "Port"
  1859. fn_info_game_ini "servername" "Server_Name"
  1860. fn_info_game_ini "serverpassword" "Game_Password"
  1861. fi
  1862. adminpassword="${adminpassword:-"NOT SET"}"
  1863. maxplayers="${maxplayers:-"0"}"
  1864. port="${port:-"0"}"
  1865. filesport="$((port + 10))"
  1866. queryport="${filesport}"
  1867. servername="${servername:-"NOT SET"}"
  1868. serverpassword="${serverpassword:-"NOT SET"}"
  1869. }
  1870. # Config Type: Valve KeyValues
  1871. # Comment: //
  1872. # Example: hostname "SERVERNAME"
  1873. # Filetype: cfg
  1874. fn_info_game_source() {
  1875. if [ -f "${servercfgfullpath}" ]; then
  1876. fn_info_game_valve_keyvalues "rconpassword" "rcon_password"
  1877. fn_info_game_valve_keyvalues "servername" "hostname"
  1878. fn_info_game_valve_keyvalues "serverpassword" "sv_password"
  1879. fi
  1880. # Steamport can be between 26901-26910 and is normally automatically set.
  1881. # Some servers might support -steamport parameter to set
  1882. if [ "${steamport}" == "0" ] || [ -v "${steamport}" ]; then
  1883. steamport="$(echo "${ssinfo}" | grep "${srcdslinuxpid}" | awk '{print $5}' | grep ":269" | cut -d ":" -f2)"
  1884. fi
  1885. clientport="${clientport:-"0"}"
  1886. defaultmap="${defaultmap:-"NOT SET"}"
  1887. maxplayers="${maxplayers:-"0"}"
  1888. port="${port:-"0"}"
  1889. queryport="${port:-"0"}"
  1890. rconpassword="${rconpassword:-"NOT SET"}"
  1891. rconport="${port:-"0"}"
  1892. servername="${servername:-"NOT SET"}"
  1893. serverpassword="${serverpassword:-"NOT SET"}"
  1894. # steamport="${steamport:-"0"}" Steamport is optional so we dont want it to show as not set.
  1895. }
  1896. fn_info_game_spark() {
  1897. defaultmap="${defaultmap:-"NOT SET"}"
  1898. maxplayers="${maxplayers:-"0"}"
  1899. port="${port:-"0"}"
  1900. queryport="$((port + 1))"
  1901. servername="${servername:-"NOT SET"}"
  1902. serverpassword="${serverpassword:-"NOT SET"}"
  1903. httpuser="${httpuser:-"NOT SET"}"
  1904. httppassword="${httppassword:-"NOT SET"}"
  1905. httpport="${httpport:-"0"}"
  1906. }
  1907. # Config Type: Custom (key-value pairs)
  1908. # Parameters: true
  1909. # Comment: # or //
  1910. # Example: ServerName="SERVERNAME"
  1911. # Filetype: cfg
  1912. fn_info_game_squad() {
  1913. if [ -f "${servercfgfullpath}" ]; then
  1914. fn_info_game_keyvalue_pairs_equals "servername" "ServerName"
  1915. fn_info_game_keyvalue_pairs_equals "maxplayers" "MaxPlayers"
  1916. fi
  1917. if [ -f "${servercfgdir}/Rcon.cfg" ]; then
  1918. fn_info_game_keyvalue_pairs_equals "rconport" "Port" "${servercfgdir}/Rcon.cfg"
  1919. fn_info_game_keyvalue_pairs_equals "rconpassword" "Password" "${servercfgdir}/Rcon.cfg"
  1920. fi
  1921. maxplayers="${maxplayers:-"0"}"
  1922. port="${port:-"0"}"
  1923. queryport="${queryport:-"0"}"
  1924. rconport="${rconport:-"0"}"
  1925. servername="${servername:-"NOT SET"}"
  1926. if [ -z "${rconpassword}" ] || [ ${#rconpassword} == 1 ]; then
  1927. rconpassword="NOT SET"
  1928. fi
  1929. }
  1930. # Config Type: Custom (key-value pairs)
  1931. # Comment: # or //
  1932. # Example: ServerName="SERVERNAME"
  1933. # Filetype: cfg
  1934. fn_info_game_terraria() {
  1935. if [ -f "${servercfgfullpath}" ]; then
  1936. fn_info_game_keyvalue_pairs_equals "maxplayers" "maxplayers"
  1937. fn_info_game_keyvalue_pairs_equals "port" "port"
  1938. fn_info_game_keyvalue_pairs_equals "servername" "worldname"
  1939. fn_info_game_keyvalue_pairs_equals "worldname" "world"
  1940. fi
  1941. queryport="${port:-"0"}"
  1942. servername="${servername:-"NOT SET"}"
  1943. port="${port:-"0"}"
  1944. queryport="${queryport:-"0"}"
  1945. worldname="${worldname:-"NOT SET"}"
  1946. maxplayers="${maxplayers:-"0"}"
  1947. }
  1948. # Config Type: QuakeC (custom)
  1949. # Comment: // or /* */
  1950. # Example: set sv_hostname "SERVERNAME"
  1951. # Filetype: cfg
  1952. fn_info_game_tw() {
  1953. if [ -f "${servercfgfullpath}" ]; then
  1954. fn_info_game_keyvalue_pairs_space "servername" "sv_name"
  1955. fn_info_game_keyvalue_pairs_space "serverpassword" "password"
  1956. fn_info_game_keyvalue_pairs_space "rconpassword" "sv_rcon_password"
  1957. fn_info_game_keyvalue_pairs_space "port" "sv_port"
  1958. fn_info_game_keyvalue_pairs_space "maxplayers" "sv_max_clients"
  1959. fi
  1960. queryport="${port}"
  1961. servername="${servername:-"NOT SET"}"
  1962. serverpassword="${serverpassword:-"NOT SET"}"
  1963. rconpassword="${rconpassword:-"NOT SET"}"
  1964. port="${port:-"0"}"
  1965. maxplayers="${maxplayers:-"0"}"
  1966. }
  1967. # Config Type: Parameters
  1968. fn_info_game_unt() {
  1969. servername="${selfname:-"NOT SET"}"
  1970. port="${port:-"0"}"
  1971. queryport="${port}"
  1972. steamport="$((port + 1))"
  1973. }
  1974. # Config Type: Parameters
  1975. fn_info_game_vh() {
  1976. port="${port:-"0"}"
  1977. # Query port only enabled if public server
  1978. if [ "${public}" != "0" ]; then
  1979. queryport="$((port + 1))"
  1980. else
  1981. querymode="1"
  1982. fi
  1983. worldname="${worldname:-"NOT SET"}"
  1984. serverpassword="${serverpassword:-"NOT SET"}"
  1985. servername="${servername:-"NOT SET"}"
  1986. }
  1987. # Config Type: json
  1988. # Parameters: false
  1989. # Comment: // or /* */
  1990. fn_info_game_vints() {
  1991. if [ -f "${servercfgfullpath}" ]; then
  1992. fn_info_game_json "configip" "select(.Ip != null) | .Ip"
  1993. fn_info_game_json "maxplayers" ".MaxClients"
  1994. fn_info_game_json "port" ".Port"
  1995. fn_info_game_json "servername" ".ServerName"
  1996. fn_info_game_json "serverpassword" "select(.Password != null) | .Password"
  1997. fi
  1998. configip="${configip:-"0.0.0.0"}"
  1999. maxplayers="${maxplayers:-"0"}"
  2000. port="${port:-"0"}"
  2001. queryport="${port:-"0"}"
  2002. servername="${servername:-"NOT SET"}"
  2003. serverpassword="${serverpassword:-"NOT SET"}"
  2004. }
  2005. # Config Type: Java properties
  2006. # Comment: # or !
  2007. # Example: motd=SERVERNAME
  2008. # Filetype: properties
  2009. fn_info_game_vpmc() {
  2010. if [ -f "${servercfgfullpath}" ]; then
  2011. fn_info_game_java_properties "servername" "motd"
  2012. fn_info_game_java_properties "bindaddress" "bind"
  2013. fi
  2014. configip="$(echo "${bindaddress}" | cut -d ':' -f 1)"
  2015. port="$(echo "${bindaddress}" | cut -d ':' -f 2)"
  2016. queryport="${port:-"0"}"
  2017. servername="${servername:-"NOT SET"}"
  2018. }
  2019. # Config Type: QuakeC
  2020. # Comment: // or /* */
  2021. # Example: set sv_hostname "SERVERNAME"
  2022. # Filetype: cfg
  2023. fn_info_game_wet() {
  2024. if [ -f "${servercfgfullpath}" ]; then
  2025. fn_info_game_quakec "configip" "net_ip"
  2026. fn_info_game_quakec "maxplayers" "sv_maxclients"
  2027. fn_info_game_quakec "port" "net_port"
  2028. fn_info_game_quakec "rconpassword" "zmq_rcon_password"
  2029. fn_info_game_quakec "servername" "sv_hostname"
  2030. fn_info_game_quakec "serverpassword" "g_password"
  2031. fi
  2032. configip="${configip:-"0.0.0.0"}"
  2033. maxplayers="${maxplayers:-"0"}"
  2034. port="${port:-"0"}"
  2035. queryport="${port}"
  2036. rconpassword="${rconpassword:-"NOT SET"}"
  2037. servername="${servername:-"NOT SET"}"
  2038. serverpassword="${serverpassword:-"NOT SET"}"
  2039. }
  2040. # Config Type: QuakeC
  2041. # Comment: // or /* */
  2042. # Example: set sv_hostname "SERVERNAME"
  2043. # Filetype: cfg
  2044. fn_info_game_wf() {
  2045. if [ -f "${servercfgfullpath}" ]; then
  2046. fn_info_game_quakec "maxplayers" "sv_maxclients"
  2047. fn_info_game_quakec "rconpassword" "rcon_password"
  2048. fn_info_game_quakec "servername" "sv_hostname"
  2049. fi
  2050. httpport="${httpport:-"0"}"
  2051. maxplayers="${maxplayers:-"0"}"
  2052. port="${port:-"0"}"
  2053. queryport="${port:-"0"}"
  2054. rconpassword="${rconpassword:-"NOT SET"}"
  2055. servername="${servername:-"NOT SET"}"
  2056. }
  2057. fn_info_game_wmc() {
  2058. if [ ! -f "${servercfgfullpath}" ]; then
  2059. servername="${unavailable}"
  2060. maxplayers="${zero}"
  2061. port="${zero}"
  2062. queryport="${zero}"
  2063. queryenabled="${unavailable}"
  2064. else
  2065. servername=$(sed -e '/^listeners:/,/^[a-z]/!d' "${servercfgfullpath}" | sed -nr 's/^[ ]+motd: (.*)$/\1/p' | tr -d "'" | sed 's/&1//')
  2066. queryport=$(sed -nr 's/^[ -]+query_port: ([0-9]+)/\1/p' "${servercfgfullpath}")
  2067. queryenabled=$(sed -nr 's/^[ ]+query_enabled: (.*)$/\1/p' "${servercfgfullpath}")
  2068. port=$(sed -nr 's/^[ ]+host: [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:([0-9]+)/\1/p' "${servercfgfullpath}")
  2069. # the normal max_players does only show in on the client side and has no effect how many players can connect.
  2070. maxplayers=$(sed -nr 's/^player_limit: ([-]*[0-9])/\1/p' "${servercfgfullpath}")
  2071. configip=$(sed -nr 's/^[ ]+host: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):[0-9]+/\1/p' "${servercfgfullpath}")
  2072. if [ "${maxplayers}" == "-1" ] || [ "${maxplayers}" == "0" ]; then
  2073. maxplayers="UNLIMITED"
  2074. fi
  2075. # Not set
  2076. servername="${servername:-"NOT SET"}"
  2077. queryport="${queryport:-"25577"}"
  2078. maxplayers="${maxplayers:-"0"}"
  2079. configip="${configip:-"0.0.0.0"}"
  2080. fi
  2081. }
  2082. # Config Type: parameters
  2083. # Parameters: true
  2084. # Comment:
  2085. # Example: hostname='SERVERNAME'
  2086. # Filetype: parameters
  2087. fn_info_game_wurm() {
  2088. gamemode="${gamemode:-"NOT SET"}"
  2089. homekingdom="${homekingdom:-"0"}"
  2090. adminpassword="${adminpassword:-"NOT SET"}"
  2091. epicsettings="${epicsettings:-"NOT SET"}"
  2092. homeserver="${homeserver:-"NOT SET"}"
  2093. loginserver="${loginserver:-"NOT SET"}"
  2094. rmiport="${rmiport:-"0"}"
  2095. rmiregport="${rmiregport:-"0"}"
  2096. maxplayers="${maxplayers:-"0"}"
  2097. servername="${servername:-"NOT SET"}"
  2098. # serverpassword="${serverpassword:-"NOT SET"}"
  2099. port="${port:-"0"}"
  2100. queryport="${queryport:-"0"}"
  2101. }
  2102. unavailable="${red}UNAVAILABLE${default}"
  2103. zero="${red}0${default}"
  2104. if [ "${shortname}" == "ac" ]; then
  2105. fn_info_game_ac
  2106. elif [ "${shortname}" == "ark" ]; then
  2107. fn_info_game_ark
  2108. elif [ "${shortname}" == "arma3" ]; then
  2109. fn_info_game_arma3
  2110. elif [ "${shortname}" == "armar" ]; then
  2111. fn_info_game_armar
  2112. elif [ "${shortname}" == "av" ]; then
  2113. fn_info_game_av
  2114. elif [ "${shortname}" == "bf1942" ]; then
  2115. fn_info_game_bf1942
  2116. elif [ "${shortname}" == "bfv" ]; then
  2117. fn_info_game_bfv
  2118. elif [ "${shortname}" == "bo" ]; then
  2119. fn_info_game_bo
  2120. elif [ "${shortname}" == "bt" ]; then
  2121. fn_info_game_bt
  2122. elif [ "${shortname}" == "btl" ]; then
  2123. fn_info_game_btl
  2124. elif [ "${shortname}" == "cd" ]; then
  2125. fn_info_game_cd
  2126. elif [ "${shortname}" == "ck" ]; then
  2127. fn_info_game_ck
  2128. elif [ "${shortname}" == "cmw" ]; then
  2129. fn_info_game_cmw
  2130. elif [ "${shortname}" == "cod" ]; then
  2131. fn_info_game_cod
  2132. elif [ "${shortname}" == "coduo" ]; then
  2133. fn_info_game_cod
  2134. elif [ "${shortname}" == "cod2" ]; then
  2135. fn_info_game_cod2
  2136. elif [ "${shortname}" == "cod4" ]; then
  2137. fn_info_game_cod4
  2138. elif [ "${shortname}" == "codwaw" ]; then
  2139. fn_info_game_codwaw
  2140. elif [ "${shortname}" == "col" ]; then
  2141. fn_info_game_col
  2142. elif [ "${shortname}" == "ct" ]; then
  2143. fn_info_game_ct
  2144. elif [ "${shortname}" == "dayz" ]; then
  2145. fn_info_game_dayz
  2146. elif [ "${shortname}" == "dodr" ]; then
  2147. fn_info_game_dodr
  2148. elif [ "${shortname}" == "dst" ]; then
  2149. fn_info_game_dst
  2150. elif [ "${shortname}" == "eco" ]; then
  2151. fn_info_game_eco
  2152. elif [ "${shortname}" == "etl" ]; then
  2153. fn_info_game_etl
  2154. elif [ "${shortname}" == "fctr" ]; then
  2155. fn_info_game_fctr
  2156. elif [ "${shortname}" == "hw" ]; then
  2157. fn_info_game_hw
  2158. elif [ "${shortname}" == "inss" ]; then
  2159. fn_info_game_inss
  2160. elif [ "${shortname}" == "jc2" ]; then
  2161. fn_info_game_jc2
  2162. elif [ "${shortname}" == "jc3" ]; then
  2163. fn_info_game_jc3
  2164. elif [ "${shortname}" == "jk2" ]; then
  2165. fn_info_game_jk2
  2166. elif [ "${shortname}" == "kf" ]; then
  2167. fn_info_game_kf
  2168. elif [ "${shortname}" == "kf2" ]; then
  2169. fn_info_game_kf2
  2170. elif [ "${shortname}" == "lo" ]; then
  2171. fn_info_game_lo
  2172. elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ]; then
  2173. fn_info_game_mc
  2174. elif [ "${shortname}" == "mcb" ]; then
  2175. fn_info_game_mcb
  2176. elif [ "${shortname}" == "mh" ]; then
  2177. fn_info_game_mh
  2178. elif [ "${shortname}" == "mohaa" ]; then
  2179. fn_info_game_mohaa
  2180. elif [ "${shortname}" == "mom" ]; then
  2181. fn_info_game_mom
  2182. elif [ "${shortname}" == "mta" ]; then
  2183. fn_info_game_mta
  2184. elif [ "${shortname}" == "nec" ]; then
  2185. fn_info_game_nec
  2186. elif [ "${shortname}" == "ohd" ]; then
  2187. fn_info_game_ohd
  2188. elif [ "${shortname}" == "onset" ]; then
  2189. fn_info_game_onset
  2190. elif [ "${shortname}" == "pc" ]; then
  2191. fn_info_game_pc
  2192. elif [ "${shortname}" == "pc2" ]; then
  2193. fn_info_game_pc2
  2194. elif [ "${shortname}" == "ps" ]; then
  2195. fn_info_game_ps
  2196. elif [ "${shortname}" == "pvr" ]; then
  2197. fn_info_game_pvr
  2198. elif [ "${shortname}" == "pz" ]; then
  2199. fn_info_game_pz
  2200. elif [ "${shortname}" == "q2" ]; then
  2201. fn_info_game_q2
  2202. elif [ "${shortname}" == "q3" ]; then
  2203. fn_info_game_q3
  2204. elif [ "${shortname}" == "ql" ]; then
  2205. fn_info_game_ql
  2206. elif [ "${shortname}" == "qw" ]; then
  2207. fn_info_game_qw
  2208. elif [ "${shortname}" == "ro" ]; then
  2209. fn_info_game_ro
  2210. elif [ "${shortname}" == "rtcw" ]; then
  2211. fn_info_game_rtcw
  2212. elif [ "${shortname}" == "rust" ]; then
  2213. fn_info_game_rust
  2214. elif [ "${shortname}" == "rw" ]; then
  2215. fn_info_game_rw
  2216. elif [ "${shortname}" == "samp" ]; then
  2217. fn_info_game_samp
  2218. elif [ "${shortname}" == "sb" ]; then
  2219. fn_info_game_sb
  2220. elif [ "${shortname}" == "sbots" ]; then
  2221. fn_info_game_sbots
  2222. elif [ "${shortname}" == "scpsl" ] || [ "${shortname}" == "scpslsm" ]; then
  2223. fn_info_game_scpsl
  2224. elif [ "${shortname}" == "sdtd" ]; then
  2225. fn_info_game_sdtd
  2226. elif [ "${shortname}" == "sf" ]; then
  2227. fn_info_game_sf
  2228. elif [ "${shortname}" == "sof2" ]; then
  2229. fn_info_game_sof2
  2230. elif [ "${shortname}" == "sol" ]; then
  2231. fn_info_game_sol
  2232. elif [ "${engine}" == "spark" ]; then
  2233. fn_info_game_spark
  2234. elif [ "${shortname}" == "squad" ]; then
  2235. fn_info_game_squad
  2236. elif [ "${shortname}" == "st" ]; then
  2237. fn_info_game_st
  2238. elif [ "${shortname}" == "stn" ]; then
  2239. fn_info_game_stn
  2240. elif [ "${shortname}" == "terraria" ]; then
  2241. fn_info_game_terraria
  2242. elif [ "${shortname}" == "ti" ]; then
  2243. fn_info_game_ti
  2244. elif [ "${shortname}" == "ts3" ]; then
  2245. fn_info_game_ts3
  2246. elif [ "${shortname}" == "tu" ]; then
  2247. fn_info_game_tu
  2248. elif [ "${shortname}" == "tw" ]; then
  2249. fn_info_game_tw
  2250. elif [ "${shortname}" == "unt" ]; then
  2251. fn_info_game_unt
  2252. elif [ "${shortname}" == "ut" ]; then
  2253. fn_info_game_ut
  2254. elif [ "${shortname}" == "ut2k4" ]; then
  2255. fn_info_game_ut2k4
  2256. elif [ "${shortname}" == "ut3" ]; then
  2257. fn_info_game_ut3
  2258. elif [ "${shortname}" == "ut99" ]; then
  2259. fn_info_game_ut99
  2260. elif [ "${shortname}" == "vh" ]; then
  2261. fn_info_game_vh
  2262. elif [ "${shortname}" == "vints" ]; then
  2263. fn_info_game_vints
  2264. elif [ "${shortname}" == "vpmc" ]; then
  2265. fn_info_game_vpmc
  2266. elif [ "${shortname}" == "wet" ]; then
  2267. fn_info_game_wet
  2268. elif [ "${shortname}" == "wf" ]; then
  2269. fn_info_game_wf
  2270. elif [ "${shortname}" == "wmc" ]; then
  2271. fn_info_game_wmc
  2272. elif [ "${shortname}" == "wurm" ]; then
  2273. fn_info_game_wurm
  2274. elif [ "${engine}" == "prism3d" ]; then
  2275. fn_info_game_prism3d
  2276. elif [ "${engine}" == "source" ] || [ "${engine}" == "goldsrc" ]; then
  2277. fn_info_game_source
  2278. elif [ "${engine}" == "unreal2" ]; then
  2279. fn_info_game_unreal2
  2280. fi
  2281. # External IP address
  2282. # Cache external IP address for 24 hours
  2283. if [ -f "${tmpdir}/publicip.txt" ]; then
  2284. if [ "$(find "${tmpdir}/publicip.txt" -mmin +1440)" ]; then
  2285. rm -f "${tmpdir:?}/publicip.txt"
  2286. fi
  2287. fi
  2288. if [ ! -f "${tmpdir}/publicip.txt" ]; then
  2289. publicip="$(curl --connect-timeout 10 -s https://api.ipify.org 2> /dev/null)"
  2290. exitcode=$?
  2291. # if curl passes add publicip to externalip.txt
  2292. if [ "${exitcode}" == "0" ]; then
  2293. echo "${publicip}" > "${tmpdir}/publicip.txt"
  2294. else
  2295. echo "Unable to get external IP address"
  2296. fi
  2297. else
  2298. publicip="$(cat "${tmpdir}/publicip.txt")"
  2299. fi
  2300. # Alert IP address
  2301. if [ "${displayip}" ]; then
  2302. alertip="${displayip}"
  2303. elif [ "${publicip}" ]; then
  2304. alertip="${publicip}"
  2305. else
  2306. alertip="${ip}"
  2307. fi
  2308. # Steam Master Server - checks if detected by master server.
  2309. # Checked after config init, as the queryport is needed
  2310. if [ -z "${displaymasterserver}" ]; then
  2311. # if queryport and port3 are not set then set them to 123456789
  2312. # this is to prevent the query from failing.
  2313. if [ -z "${queryport}" ]; then
  2314. queryport="123456789"
  2315. fi
  2316. if [ -z "${port3}" ]; then
  2317. port3="123456789"
  2318. fi
  2319. if [ "$(command -v jq 2> /dev/null)" ]; then
  2320. if [ -n "${ip}" ] && [ -n "${port}" ]; then
  2321. if [ "${steammaster}" == "true" ] || [ "${commandname}" == "DEV-QUERY-RAW" ]; then
  2322. # Query external IP first as most liky to succeed.
  2323. masterserver="$(curl --connect-timeout 10 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${publicip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" --arg port3 "${port3}" 'if .response.servers != null then .response.servers[] | select((.gameport == ($port|tonumber) or .gameport == ($queryport|tonumber) or .gameport == ($port3|tonumber))) | .addr else empty end' | wc -l 2> /dev/null)"
  2324. if [ "${masterserver}" == "0" ]; then
  2325. # Loop though server IP addresses if external IP fails.
  2326. for queryip in "${queryips[@]}"; do
  2327. masterserver="$(curl --connect-timeout 10 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${queryip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" --arg port3 "${port3}" 'if .response.servers != null then .response.servers[] | select((.gameport == ($port|tonumber) or .gameport == ($queryport|tonumber) or .gameport == ($port3|tonumber))) | .addr else empty end' | wc -l 2> /dev/null)"
  2328. done
  2329. fi
  2330. if [ "${masterserver}" == "0" ]; then
  2331. displaymasterserver="false"
  2332. else
  2333. displaymasterserver="true"
  2334. fi
  2335. fi
  2336. fi
  2337. fi
  2338. # unset the ports if they are set to 123456789
  2339. if [ "${port3}" == "123456789" ]; then
  2340. unset port3
  2341. fi
  2342. if [ "${queryport}" == "123456789" ]; then
  2343. unset queryport
  2344. fi
  2345. fi