From 524aea053f386e07ed779d07772139e3a9fecf81 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 14 Jan 2007 13:41:44 +0000 Subject: [PATCH] ext response system added; NOTE: two outstanding things: - "Update to Nexuiz ..." bar isn't centered right... BLACK! - we need to run a modified dpmaster on update.alientrap.org before we can release this code to the masses git-svn-id: svn://svn.icculus.org/nexuiz/trunk@2108 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/default.cfg | 3 + data/menu/main.menu | 9 ++ data/qcsrc/menu/custom/extresponse.qc | 125 ++++++++++++++++++++++++++ data/qcsrc/menu/custom/extresponse.qh | 7 ++ data/qcsrc/menu/mbuiltin.qc | 1 + data/qcsrc/menu/progs.src | 2 + 6 files changed, 147 insertions(+) create mode 100644 data/qcsrc/menu/custom/extresponse.qc create mode 100644 data/qcsrc/menu/custom/extresponse.qh diff --git a/data/default.cfg b/data/default.cfg index 02a21ead8..445632c17 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -811,3 +811,6 @@ set sv_allow_shownames 1 alias teamstatus "set _scoreboard 1" con_chatwidth 1.0 + +net_banlist "" +seta _alientrap_net_banlist "" diff --git a/data/menu/main.menu b/data/menu/main.menu index 2bcde75be..daa1a4a55 100644 --- a/data/menu/main.menu +++ b/data/menu/main.menu @@ -16,6 +16,7 @@ Item Arrangement Main { normal "$gfx/b_campaign" selected "$gfx/b_campaign_u" + alignment [AlignCenter] target "Campaign" init Nex_Action_SetNormalPanelLink @@ -88,4 +89,12 @@ Item Arrangement InstantBar target "Demos" init Nex_Action_SetNormalPanelLink } + Item Nex_ExtResponseSystem UpdateMessage + { + color '1.0 0.9 0.1' + alpha [DefaultTextAlpha] + drawFlag [DefaultTextDrawFlag] + fontSize '12 18' + pos '0 10' + } } diff --git a/data/qcsrc/menu/custom/extresponse.qc b/data/qcsrc/menu/custom/extresponse.qc new file mode 100644 index 000000000..96719cc61 --- /dev/null +++ b/data/qcsrc/menu/custom/extresponse.qc @@ -0,0 +1,125 @@ +bool _Nex_ExtResponseSystem_RequestsSent; +bool _Nex_ExtResponseSystem_VersionHandled; +bool _Nex_ExtResponseSystem_BanlistHandled; +string _Nex_ExtResponseSystem_UpdateTo; +float _Nex_ExtResponseSystem_RetryTime; +bool _Nex_ExtResponseSystem_UpdateStringSet; +bool _Nex_ExtResponseSystem_Initialized; + +void() Item_Nex_ExtResponseSystem_SendQuery = +{ + dprint("Sending extended response requests...\n"); + localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse checkUpdates nexuiz ", cvar_string("g_nexuizversion"), "\"\n")); + localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse getBanlist nexuiz\"\n")); + _Nex_ExtResponseSystem_RequestsSent = TRUE; + _Nex_ExtResponseSystem_RetryTime = Timer_Time + 10; +} + +void(float argc) Item_Nex_ExtResponseSystem_Parse = +{ + float i; + string banlist; + dprint("Received extended response packet from ", argv(0), "\n"); + if(!_Nex_ExtResponseSystem_RequestsSent) + { + dprint(" But I haven't sent a request yet! Ignoring.\n"); + return; + } + if(argv(1) == "noUpdateAvailable") + { + if(_Nex_ExtResponseSystem_VersionHandled) + { + dprint(" duplicated update notice, ignored\n"); + return; + } + _Nex_ExtResponseSystem_VersionHandled = TRUE; + } + else if(argv(1) == "updateAvailable") + { + if(_Nex_ExtResponseSystem_VersionHandled) + { + dprint(" duplicated update notice, ignored\n"); + return; + } + _Nex_ExtResponseSystem_VersionHandled = TRUE; + _Nex_ExtResponseSystem_UpdateTo = strzone(argv(2)); // note: only one packet can be handled, so this can't be a leak + //Nex_MessageBox("Update available!", strcat("We recommend you to download Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " from http://www.nexuiz.com/"), "Ok", "Download in background", Util_NullFunction, Util_NullFunction); + } + else if(argv(1) == "banlist") + { + if(_Nex_ExtResponseSystem_BanlistHandled) + { + dprint(" duplicated banlist notice\n"); + return; + } + _Nex_ExtResponseSystem_BanlistHandled = TRUE; + dprint(" BANLIST RECEIVED:"); + + if(cvar_string("net_banlist") == cvar_string("_alientrap_net_banlist")) + { + banlist = ""; // IP of www.alientrap.org + for(i = 0; i < argc - 2; ++i) + { + banlist = strcat(banlist, argv(i + 2), " "); + dprint(" ", argv(i + 2)); + } + dprint(" (", ftos(i), " items)\n"); + cvar_set("net_banlist", banlist); + cvar_set("_alientrap_net_banlist", banlist); + } + else + { + for(i = 0; i < argc - 2; ++i) + dprint(" ", argv(i + 2)); + dprint(" (", ftos(i), " items; overridden by user setting)\n"); + } + } + else + dprint(" UNKNOWN RESPONSE TYPE: ", argv(1), "\n"); +} + +void() Item_Nex_ExtResponseSystem_CheckForResponse = +{ + local string s; + local float argc; + while(strlen((s = getextresponse()))) + { + argc = tokenize(s); + Item_Nex_ExtResponseSystem_Parse(argc); + } +} + +void() Item_Nex_ExtResponseSystem_Update = +{ + Item_Nex_ExtResponseSystem_CheckForResponse(); + + if(!_Nex_ExtResponseSystem_VersionHandled) + if(Timer_Time > _Nex_ExtResponseSystem_RetryTime) + Item_Nex_ExtResponseSystem_SendQuery(); + + if(_Nex_ExtResponseSystem_UpdateTo) + if(!_Nex_ExtResponseSystem_UpdateStringSet) + { + local string filler; + local float count; + + filler = ""; + for(count = strlen(_Nex_ExtResponseSystem_UpdateTo); count < 5; ++count) + filler = strcat(filler, " "); + + String_EntitySet(self, text, strcat(filler, "Update to Nexuiz ", _Nex_ExtResponseSystem_UpdateTo, " on:")); + self.size = '0 0 0'; + _Nex_ExtResponseSystem_UpdateStringSet = TRUE; + } + + Item_Label_Update(); +} + +void() Item_Nex_ExtResponseSystem_Spawn = +{ + if(_Nex_ExtResponseSystem_Initialized) + objerror("Item_Nex_ExtResponseSystem is a singleton!"); + _Nex_ExtResponseSystem_Initialized = TRUE; + Item_Label_Spawn(); + self._update = Item_Nex_ExtResponseSystem_Update; +} diff --git a/data/qcsrc/menu/custom/extresponse.qh b/data/qcsrc/menu/custom/extresponse.qh new file mode 100644 index 000000000..1c5427259 --- /dev/null +++ b/data/qcsrc/menu/custom/extresponse.qh @@ -0,0 +1,7 @@ +// Property of Alientrap +// custom/extresponse.qh + +// Item_Nex_ExtResponseSystem (singleton) Item_Label + +void() Item_Nex_ExtResponseSystem_Update; +void() Item_Nex_ExtResponseSystem_Spawn; diff --git a/data/qcsrc/menu/mbuiltin.qc b/data/qcsrc/menu/mbuiltin.qc index 78abb1fdc..bed9a8c4b 100644 --- a/data/qcsrc/menu/mbuiltin.qc +++ b/data/qcsrc/menu/mbuiltin.qc @@ -228,6 +228,7 @@ void refreshhostcache(void) = #620; float gethostcachenumber(float fld, float hostnr) = #621; float gethostcacheindexforkey(string key) = #622; void addwantedhostcachekey(string key) = #623; +string getextresponse(void) = #624; #ifdef FIXEDFOPEN float fopen( string filename, float mode ) = diff --git a/data/qcsrc/menu/progs.src b/data/qcsrc/menu/progs.src index d15950251..f108d2f28 100644 --- a/data/qcsrc/menu/progs.src +++ b/data/qcsrc/menu/progs.src @@ -66,6 +66,7 @@ custom/key.qh custom/video.qh custom/credits.qh custom/messagebox.qh +custom/extresponse.qh // Singleplayer campaign custom/campaign.qh @@ -103,6 +104,7 @@ custom/video.qc custom/joingame.qc custom/credits.qc custom/messagebox.qc +custom/extresponse.qc // controls control/automation/automation.qc -- 2.39.2