From c3beb0ed2213ed3aad6c0fe04ea40d5575702aa5 Mon Sep 17 00:00:00 2001 From: black Date: Mon, 5 Dec 2005 12:51:37 +0000 Subject: [PATCH] Fixed the crosshair selection. Cleaned-up the team/shirt-color selection (took me way too long because of some stupid bugs). Now uses the fact that localcmd takes an arbitrary number of parameters (merged many multi-line calls). Removed menuqc/custom/player/name.qc since it is no longer needed because the new Data_ServerCvar is used now instead. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@631 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/menu/data/player.menu | 47 +++--- data/menu/options/player.menu | 18 ++- data/menuqc/base/key.qc | 4 +- data/menuqc/control/data/cvar.qc | 86 ++++++++++ data/menuqc/control/data/data.qh | 7 + data/menuqc/control/data/value.qc | 20 +-- data/menuqc/custom/creategame.qm | 12 +- data/menuqc/custom/creategame/creategame.qh | 5 - data/menuqc/custom/joingame.qm | 4 +- data/menuqc/custom/player/avatar.qc | 4 +- data/menuqc/custom/player/color.qc | 165 +++++++++++--------- data/menuqc/custom/player/name.qc | 65 -------- data/menuqc/custom/player/player.qh | 11 +- data/menuqc/mbuiltin.qc | 2 +- data/menuqc/menu.qc | 2 +- data/menuqc/progs.src | 1 - data/menuqc/system/debug.qh | 2 +- data/menuqc/system/isframe.qc | 6 +- data/menuqc/util/text.qc | 17 ++ data/menuqc/util/text.qh | 1 + 20 files changed, 272 insertions(+), 207 deletions(-) delete mode 100644 data/menuqc/custom/player/name.qc diff --git a/data/menu/data/player.menu b/data/menu/data/player.menu index a8995ead1..c2a20112c 100644 --- a/data/menu/data/player.menu +++ b/data/menu/data/player.menu @@ -4,9 +4,13 @@ Item DataContainer Player { - Item Data_Nex_Name Name + Item Data_ServerCvar Name { + cvarName "_cl_name" + syncCmd "name" + defValue "NexPlayer" + Item DataLink_Text Text { maxValue 32 @@ -16,30 +20,35 @@ Item DataContainer Player Item Data_Nex_Avatar Avatar { } - Item Data_Nex_Color TeamColor + Item Data_Nex_Color Color { - defValue "4" // Red + defValue "0" - Item DataLink_TextSwitch TextSwitch + Item DataLink_Nex_PantsColor TeamColor { - // Red Blue Green Yellow - valueList "'4' '13' '3' '12'" - descList "'$gfx/m_redsquare' '$gfx/m_bluesquare' '$gfx/m_greensquare' '$gfx/m_yellowsquare'" + link "##up" - link "##up" - } - } - Item Data_Nex_ColorShirt ShirtColor - { - defValue "4" // Red + Item DataLink_TextSwitch TextSwitch + { + // Red Blue Green Yellow + valueList "'0' '4' '13' '3' '12'" + descList "'None' '$gfx/m_redsquare' '$gfx/m_bluesquare' '$gfx/m_greensquare' '$gfx/m_yellowsquare'" - Item DataLink_TextSwitch TextSwitch + link "##up" + } + } + Item DataLink_Nex_ShirtColor ShirtColor { - // Red Blue Green Yellow - valueList "'4' '13' '3' '12'" - descList "'$gfx/m_redsquare' '$gfx/m_bluesquare' '$gfx/m_greensquare' '$gfx/m_yellowsquare'" + link "##up" - link "##up" + Item DataLink_TextSwitch TextSwitch + { + // Red Blue Green Yellow + valueList "'0' '4' '13' '3' '12'" + descList "'None' '$gfx/m_redsquare' '$gfx/m_bluesquare' '$gfx/m_greensquare' '$gfx/m_yellowsquare'" + + link "##up" + } } } Item Data_Cvar FOV @@ -88,7 +97,7 @@ Item DataContainer Player stepValue 1 maxValue 5 - descList "'' '$gfx/crosshair1.tga' '$gfx/crosshair2.tga' '$gfx/crosshair3.tga' '$gfx/crosshair4.tga' '$gfx/crosshair5.tga'" + descList "'' '$gfx/crosshair1' '$gfx/crosshair2' '$gfx/crosshair3' '$gfx/crosshair4' '$gfx/crosshair5'" link "##up" } diff --git a/data/menu/options/player.menu b/data/menu/options/player.menu index e9f8d91b7..ab8df1908 100644 --- a/data/menu/options/player.menu +++ b/data/menu/options/player.menu @@ -103,16 +103,20 @@ Item Window Player Derive Nex_Composition TeamColor { text "Team color" - target "::Data::Player::TeamColor::TextSwitch" + target "::Data::Player::Color::TeamColor::TextSwitch" Derive Nex_Automation_Option_Slider Automation {} Derive TextButton Description {} Derive Slider Slider - {} + { + action Nex_Action_TestOnChange + } Derive PictureValueButton Value { + fontSize [DefaultFontSize] + color "1.0 1.0 1.0" colorPressed "1.0 1.0 1.0" colorSelected "1.0 1.0 1.0" @@ -121,21 +125,25 @@ Item Window Player Derive Nex_Composition ShirtColor { text "Shirt color" - target "::Data::Player::ShirtColor::TextSwitch" + target "::Data::Player::Color::ShirtColor::TextSwitch" Derive Nex_Automation_Option_Slider Automation {} Derive TextButton Description {} Derive Slider Slider - {} + { + action Nex_Action_TestOnChange + } Derive PictureValueButton Value { + fontSize [DefaultFontSize] + color "1.0 1.0 1.0" colorPressed "1.0 1.0 1.0" colorSelected "1.0 1.0 1.0" } - } + } Derive Nex_Option_Slider FOV { text "Field of View" diff --git a/data/menuqc/base/key.qc b/data/menuqc/base/key.qc index 787d22312..e4ecef623 100644 --- a/data/menuqc/base/key.qc +++ b/data/menuqc/base/key.qc @@ -33,7 +33,7 @@ void() Key_Hide = void( string pKey ) Key_Unbind = { - cmd( strcat( "unbind ", pKey, "\n" ) ); + cmd( "unbind ", pKey, "\n" ); }; string( float pKey ) Key_GetName = @@ -53,7 +53,7 @@ string( string pCommand ) Key_GetBindList = void(string pKey, string pCommand) Key_Bind = { - cmd( strcat( "bind \"", pKey, "\" \"", pCommand, "\"\n" ) ); + cmd( "bind \"", pKey, "\" \"", pCommand, "\"\n" ); }; void(float pNum, string pCommand) Key_LimitBinds = diff --git a/data/menuqc/control/data/cvar.qc b/data/menuqc/control/data/cvar.qc index 3a64acc40..86abedec8 100644 --- a/data/menuqc/control/data/cvar.qc +++ b/data/menuqc/control/data/cvar.qc @@ -85,6 +85,92 @@ void() Item_Data_Cvar_Spawn = self._destroy = Item_Data_Cvar_Destroy; }; +/* +=================== +Item_Data_ServerCvar +=================== +*/ + +void( string pValue ) Item_Data_ServerCvar_SendSyncCmd = { + cmd( self.syncCmd, " \"", pValue, "\"\n" ); +}; +//#define Item_Data_ServerCvar_SendSyncCmd(pValue) cmd( self.syncCmd, " \"", pValue, "\"\n" ) + +void() Item_Data_ServerCvar_Sync = +{ + String_EntitySet( self, _syncValue, cvar_string( self.cvarName ) ); + String_EntitySet( self, value, self._syncValue ); +}; + +void() Item_Data_ServerCvar_Send = +{ + Item_Data_ServerCvar_SendSyncCmd( self.value ); + String_EntitySet( self, _syncValue, self.value ); +}; + +void() Item_Data_ServerCvar_Reset = +{ + if( self.defValue ) { + String_EntitySet( self, value, self.defValue ); + } else { + String_EntitySet( self, value, cvar_defstring( self.cvarName ) ); + } + Item_Data_Cvar_Send(); +}; + +void() Item_Data_ServerCvar_Test_Start = +{ + Item_Data_ServerCvar_SendSyncCmd( self.value ); +}; + +void() Item_Data_ServerCvar_Test_End = +{ + Item_Data_ServerCvar_SendSyncCmd( self._syncValue ); +}; + +void() Item_Data_ServerCvar_Save_ExecString = { + Data_ExecString = String_Append( Data_ExecString, strcat( self.syncCmd, " \"", self.value, "\"\n" ) ); +}; + +void( float pEvent ) Item_Data_ServerCvar_DataEvent = +{ + switch( pEvent ) { + case ITEM_DATA_SYNC: + Item_Data_ServerCvar_Sync(); + break; + case ITEM_DATA_SEND: + Item_Data_ServerCvar_Send(); + break; + case ITEM_DATA_RESET: + Item_Data_ServerCvar_Reset(); + break; + case ITEM_DATA_TEST_START: + Item_Data_ServerCvar_Test_Start(); + break; + case ITEM_DATA_TEST_END: + Item_Data_ServerCvar_Test_End(); + break; + case ITEM_DATA_SAVE_EXECSTRING: + Item_Data_ServerCvar_Save_ExecString(); + break; + } +}; + +void() Item_Data_ServerCvar_Destroy = { + String_EntityFree( self, syncCmd ); + Item_Data_Cvar_Destroy(); +}; + +void() Item_Data_ServerCvar_Spawn = { + Item_Data_Cvar_Spawn(); + + String_EntityZone( self, syncCmd ); + + self._reinit = Item_Data_ServerCvar_Sync; + self._destroy = Item_Data_ServerCvar_Destroy; + self._dataEvent = Item_Data_ServerCvar_DataEvent; +}; + /* =================== Item_Data_CvarCreateSave diff --git a/data/menuqc/control/data/data.qh b/data/menuqc/control/data/data.qh index 7d3ed4104..b1b65c020 100644 --- a/data/menuqc/control/data/data.qh +++ b/data/menuqc/control/data/data.qh @@ -69,6 +69,12 @@ void() Item_Data_Cvar_Spawn; // Item_Data_CvarCreateSave Item_Data_Cvar void() Item_Data_CvarCreateSave_Spawn; +// Item_Data_ServerCvar Item_Data_Cvar +.string syncCmd; + +void( float pEvent ) Item_Data_ServerCvar_DataEvent; +void() Item_Data_ServerCvar_Spawn; + // Item_DataLink_Text [Item_DataLink] .float maxValue; // max length of the string (-1 for infinity) .string value; // text @@ -83,6 +89,7 @@ void() Item_Data_CvarCreateSave_Spawn; .string value; // read-only is most cases, but supplies are version of the data that can be displayed void() Item_DataLink_Value_Clamp; +string() Item_DataLink_Value_ClampedText; void() Item_DataLink_Value_Spawn; // [Item_DataLink_Switch] Item_DataLink_Value diff --git a/data/menuqc/control/data/value.qc b/data/menuqc/control/data/value.qc index 22096ee41..04574bbc9 100644 --- a/data/menuqc/control/data/value.qc +++ b/data/menuqc/control/data/value.qc @@ -18,24 +18,12 @@ void() Item_DataLink_Value_Clamp = /* =================== -Item_DataLink_ClampText +Item_DataLink_Value_ClampedText =================== */ -string() Item_DataLink_ClampedValue = +string() Item_DataLink_Value_ClampedText = { - local float lLen; - local float lClampedStep; - local float lInverseClamped; - lClampedStep = self.stepValue - floor( self.stepValue ); - if( lClampedStep == 0.0 ) - return ftos( self._realValue ); - // get the integer length - lLen = strlen( ftos( floor( self._realValue ) ) ); - // Example data: 0.1 -> 10 - 1 = 9; 0.9 -> 1.^1 - 0.1 = 1.0^1 ; 0.01 -> 100 - 1 = 99 ; 0.09 -> 11.^1 - 0.1 = 10.0^1 - lInverseClamped = 1.0 / lClampedStep - 0.1; - // add the fraction length and 1 for the . - lLen += strlen( ftos( floor( lInverseClamped ) ) ) + 1; - return substring( ftos( self._realValue + 0.0001 ), 0, lLen ); + return Util_FloatToClampedText( self._realValue, self.stepValue ); } /* @@ -59,7 +47,7 @@ void( float pEvent ) Item_DataLink_Value_DataEvent = else if( pEvent == ITEM_DATALINK_GET ) { Raise_DataEvent( self._link, ITEM_DATALINK_GET ); self._realValue = stof( self._link.value ); - String_EntitySet( self, value, Item_DataLink_ClampedValue() ); + String_EntitySet( self, value, Item_DataLink_Value_ClampedText() ); Item_DataLink_Value_Clamp(); } else Raise_DataEvent( self._link, pEvent ); diff --git a/data/menuqc/custom/creategame.qm b/data/menuqc/custom/creategame.qm index 6fc2aea40..a06f51ef3 100644 --- a/data/menuqc/custom/creategame.qm +++ b/data/menuqc/custom/creategame.qm @@ -96,9 +96,7 @@ void() Nex_Action_Map_Start = // Set maxplayers lItem = Menu_GetItem( "::Data::Server::MaxPlayers" ); - cmd( "maxplayers \"" ); - cmd( lItem.value ); - cmd( "\"\n" ); + cmd( "maxplayers \"", lItem.value, "\"\n" ); lItem = Menu_GetItem( "::Data::Server::Map::Cycle" ); Raise_DataEvent( lItem, ITEM_DATA_SEND ); @@ -108,14 +106,10 @@ void() Nex_Action_Map_Start = exit_cfg = cvar_string("exit_cfg"); if(exit_cfg) { - cmd( "exec "); - cmd( exit_cfg ); - cmd( "\n" ); + cmd( "exec ", exit_cfg, "\n" ); } // exec the game reset cfg and then the mapcfg - cmd( "exec game_reset.cfg \nwait \nexec \"maps/" ); - cmd( String_Normal( Util_GetAltStringItem( lItem.valueList, 0 ) ) ); - cmd( ".mapcfg\"\n"); + cmd( "exec game_reset.cfg \nwait \nexec \"maps/", String_Normal( Util_GetAltStringItem( lItem.valueList, 0 ) ), ".mapcfg\"\n" ); // force the menu to hide m_hide(); diff --git a/data/menuqc/custom/creategame/creategame.qh b/data/menuqc/custom/creategame/creategame.qh index 8bc9f5403..5409e4ef5 100644 --- a/data/menuqc/custom/creategame/creategame.qh +++ b/data/menuqc/custom/creategame/creategame.qh @@ -31,11 +31,6 @@ string() Nex_MapDB_GetFilteredNameAltString; string() Nex_MapDB_GetPathAltString; string() Nex_MapDB_GetNameAltString; -// see control/data/data.qh -// Item_Data_Nex_Name [Item_Data] -void( float pEvent ) Item_Data_Nex_Name_DataEvent; -void() Item_Data_Nex_Name_Spawn; - // Item_DataLink_Nex_MapList [Item_DataLink_Switch] // contains the full .bsp path in value and the text/map name in desc // this is just a placeholder data item - it only keeps a set diff --git a/data/menuqc/custom/joingame.qm b/data/menuqc/custom/joingame.qm index 010adb352..d65e00d61 100644 --- a/data/menuqc/custom/joingame.qm +++ b/data/menuqc/custom/joingame.qm @@ -34,9 +34,7 @@ void() Nex_Automation_CreateEntries = void() Nex_Action_EntryConnect = { - cmd( "connect \"" ); - cmd( gethostcachestring( SLIST_FIELD_CNAME, self.stepValue ) ); - cmd( "\"\n" ); + cmd( "connect \"", gethostcachestring( SLIST_FIELD_CNAME, self.stepValue ), "\"\n" ); m_hide(); }; diff --git a/data/menuqc/custom/player/avatar.qc b/data/menuqc/custom/player/avatar.qc index 4c074fa62..ac531ec13 100644 --- a/data/menuqc/custom/player/avatar.qc +++ b/data/menuqc/custom/player/avatar.qc @@ -171,8 +171,8 @@ void() _IDNA_RawSet = { _IDNA_UpdateLink(); - cmd( strcat( "playermodel \"", self._link.target, "\";" ) ); - cmd( strcat( "playerskin \"", self._link.link, "\"\n" ) ); + cmd( "playermodel \"", self._link.target, "\";" ); + cmd( "playerskin \"", self._link.link, "\"\n" ); }; void() _IDNA_Send = diff --git a/data/menuqc/custom/player/color.qc b/data/menuqc/custom/player/color.qc index cd86db256..9c95d4aa1 100644 --- a/data/menuqc/custom/player/color.qc +++ b/data/menuqc/custom/player/color.qc @@ -1,6 +1,11 @@ // Property of Alientrap/AK // custom/player/color.qc +/* +color/_cl_color + +color = shirt * 16 + pants +*/ /* =================== @@ -8,49 +13,45 @@ Item_Data_Nex_Color =================== */ -string pantscolor; - -void() _IDNC_Sync = -{ - local float lPants; +void( string pValue ) _IDNC_SendSyncCmd = { + local float lPants, lShirt, lCombined; + lCombined = stof( pValue ); + lPants = lCombined & 0x0F; + lShirt = (lCombined & 0xF0) / 16; - // color = shirt * 16 + pants - lPants = cvar( "_cl_color" ) & 15; - //bprint("Pants: ", ftos(lPants), "\n"); + cmd( "color ", ftos( lPants ), " ", ftos( lShirt ), "\n" ); + print( "%color ", ftos( lPants ), " ", ftos( lShirt ), "\n" ); +}; - String_EntitySet( self, value, ftos( lPants ) ); +void() _IDNC_Sync = +{ + String_EntitySet( self, value, cvar_string( "_cl_color" ) ); String_EntitySet( self, _syncValue, self.value ); }; void() _IDNC_Send = { + _IDNC_SendSyncCmd( self.value ); - // set global value "pantscolor" to our nice new value - // *could* be directly exectued via a color command - // BUT the shirt color send method will then pickup the old value - // (as _cl_color isn't updated immediately) - // which will result in resetting the pants color to its old value - pantscolor = self.value; - String_EntitySet( self, _syncValue, self.value ); }; void() _IDNC_Test_Start = { - cmd( strcat( "color \"", self.value, "\"\n" ) ); + _IDNC_SendSyncCmd( self.value ); }; void() _IDNC_Test_End = { String_EntitySet( self, value, self._syncValue ); - cmd( strcat( "color \"", self.value, "\"\n" ) ); + _IDNC_SendSyncCmd( self.value ); }; void() _IDNC_Reset = { String_EntitySet( self, value, self.defValue ); - _IDNN_Send(); + _IDNC_Send(); }; void( float pEvent ) Item_Data_Nex_Color_DataEvent = @@ -82,78 +83,96 @@ void() Item_Data_Nex_Color_Spawn = self._dataEvent = Item_Data_Nex_Color_DataEvent; }; - /* =================== -Item_Data_Nex_ColorShirt +Item_DataLink_Nex_PantsColor =================== */ -void() _IDNCS_Sync = +void( float pEvent ) Item_DataLink_Nex_PantsColor_DataEvent = { - local float lShirt; - - // color = shirt * 16 + pants - lShirt = (cvar( "_cl_color" ) / 16) & 15; - - //bprint("Shirt: ", ftos(lShirt), "\n"); - - String_EntitySet( self, value, ftos( lShirt ) ); - String_EntitySet( self, _syncValue, self.value ); + Item_DataLink_Update(); + + if( pEvent == ITEM_DATALINK_SET ) { + Item_DataLink_Value_Clamp(); + if( self._link ) { + local float lShirt; + local float lNewColor; + + self._realValue = stof( self.value ); + + lShirt = (stof( self._link.value ) & 0xF0) / 16; + lNewColor = self._realValue + lShirt * 16; + + self._link._realValue = lNewColor; + String_EntitySet( self._link, value, Util_FloatToClampedText( lNewColor, 1.0 ) ); + + Raise_DataEvent( self._link, ITEM_DATALINK_SET ); + } + } else if( !self._link ) + return; + else if( pEvent == ITEM_DATALINK_GET ) { + Raise_DataEvent( self._link, ITEM_DATALINK_GET ); + self._realValue = stof( self._link.value ) & 0x0F; + + Item_DataLink_Value_Clamp(); + String_EntitySet( self, value, Item_DataLink_Value_ClampedText() ); + } else + Raise_DataEvent( self._link, pEvent ); }; -void() _IDNCS_Send = +void() Item_DataLink_Nex_PantsColor_Spawn = { - - cmd( strcat( "color ", self.value , " ", pantscolor , "\n" ) ); - - String_EntitySet( self, _syncValue, self.value ); -}; + Item_DataLink_Value_Spawn(); + self.stepValue = 1.0; -void() _IDNCS_Test_Start = -{ - //cmd( strcat( "color \"", self.value, "\"\n" ) ); -}; - -void() _IDNCS_Test_End = -{ - String_EntitySet( self, value, self._syncValue ); - //cmd( strcat( "color \"", self.value, "\"\n" ) ); + self._dataEvent = Item_DataLink_Nex_PantsColor_DataEvent; }; +/* +=================== +Item_DataLink_Nex_ShirtColor +=================== +*/ -void() _IDNCS_Reset = +void( float pEvent ) Item_DataLink_Nex_ShirtColor_DataEvent = { - String_EntitySet( self, value, self.defValue ); - _IDNN_Send(); + Item_DataLink_Update(); + + if( pEvent == ITEM_DATALINK_SET ) { + Item_DataLink_Value_Clamp(); + if( self._link ) { + local float lPants; + local float lNewColor; + + self._realValue = stof( self.value ); + + lPants = stof( self._link.value ) & 0x0F; + lNewColor = self._realValue * 16 + lPants; + + self._link._realValue = lNewColor; + String_EntitySet( self._link, value, Util_FloatToClampedText( lNewColor, 1.0 ) ); + + Raise_DataEvent( self._link, ITEM_DATALINK_SET ); + } + } else if( !self._link ) + return; + else if( pEvent == ITEM_DATALINK_GET ) { + Raise_DataEvent( self._link, ITEM_DATALINK_GET ); + self._realValue = (stof( self._link.value ) & 0xF0) / 16; + + Item_DataLink_Value_Clamp(); + String_EntitySet( self, value, Item_DataLink_Value_ClampedText() ); + } else + Raise_DataEvent( self._link, pEvent ); }; -void( float pEvent ) Item_Data_Nex_ColorShirt_DataEvent = +void() Item_DataLink_Nex_ShirtColor_Spawn = { - switch( pEvent ) { - case ITEM_DATA_SYNC: - _IDNCS_Sync(); - break; - case ITEM_DATA_SEND: - _IDNCS_Send(); - break; - case ITEM_DATA_RESET: - _IDNCS_Reset(); - break; - case ITEM_DATA_TEST_START: - _IDNCS_Test_Start(); - break; - case ITEM_DATA_TEST_END: - _IDNCS_Test_End(); - break; - } -}; + Item_DataLink_Value_Spawn(); -void() Item_Data_Nex_ColorShirt_Spawn = -{ - Item_Data_Init(); + self.stepValue = 1.0; - self._reinit = _IDNCS_Sync; - self._dataEvent = Item_Data_Nex_ColorShirt_DataEvent; + self._dataEvent = Item_DataLink_Nex_ShirtColor_DataEvent; }; diff --git a/data/menuqc/custom/player/name.qc b/data/menuqc/custom/player/name.qc deleted file mode 100644 index 9b5c9e8d5..000000000 --- a/data/menuqc/custom/player/name.qc +++ /dev/null @@ -1,65 +0,0 @@ -// Property of Alientrap/AK -// custom/player/name.qc - -/* -=================== -Item_Data_Nex_Name -=================== -*/ - -void() _IDNN_Sync = -{ - String_EntitySet( self, value, cvar_string( "_cl_name" ) ); - String_EntitySet( self, _syncValue, self.value ); -}; -void() _IDNN_Send = -{ - cmd( strcat( "name \"", self.value, "\"\n" ) ); - String_EntitySet( self, _syncValue, self.value ); -}; - -void() _IDNN_Test_Start = -{ - cmd( strcat( "name \"", self.value, "\"\n" ) ); -}; - -void() _IDNN_Test_End = -{ - String_EntitySet( self, value, self._syncValue ); - cmd( strcat( "name \"", self.value, "\"\n" ) ); -}; - -void() _IDNN_Reset = -{ - String_EntitySet( self, value, self.defValue ); - _IDNN_Send(); -}; - -void( float pEvent ) Item_Data_Nex_Name_DataEvent = -{ - switch( pEvent ) { - case ITEM_DATA_SYNC: - _IDNN_Sync(); - break; - case ITEM_DATA_SEND: - _IDNN_Send(); - break; - case ITEM_DATA_RESET: - _IDNN_Reset(); - break; - case ITEM_DATA_TEST_START: - _IDNN_Test_Start(); - break; - case ITEM_DATA_TEST_END: - _IDNN_Test_End(); - break; - } -}; - -void() Item_Data_Nex_Name_Spawn = -{ - Item_Data_Init(); - - self._reinit = _IDNN_Sync; - self._dataEvent = Item_Data_Nex_Name_DataEvent; -}; diff --git a/data/menuqc/custom/player/player.qh b/data/menuqc/custom/player/player.qh index c8a7c80f7..dc5d088a2 100644 --- a/data/menuqc/custom/player/player.qh +++ b/data/menuqc/custom/player/player.qh @@ -21,9 +21,14 @@ void( float pEvent ) Item_Data_Nex_Avatar_DataEvent; void() Item_Data_Nex_Avatar_Spawn; // see control/data/data.qh -// Item_Data_Nex_Name [Item_Data] -void( float pEvent ) Item_Data_Nex_Name_DataEvent; -void() Item_Data_Nex_Name_Spawn; +// Item_Data_Nex_ShirtColor Item_DataLink_Value +void( float pEvent ) Item_DataLink_Nex_ShirtColor_DataEvent; +void() Item_DataLink_Nex_ShirtColor_Spawn; + +// see control/data/data.qh +// Item_Data_Nex_PantsColor Item_DataLink_Value +void( float pEvent ) Item_DataLink_Nex_PantsColor_DataEvent; +void() Item_DataLink_Nex_PantsColor_Spawn; // see control/data/data.qh // Item_Data_Nex_Color [Item_Data] diff --git a/data/menuqc/mbuiltin.qc b/data/menuqc/mbuiltin.qc index d9de42084..78abb1fdc 100644 --- a/data/menuqc/mbuiltin.qc +++ b/data/menuqc/mbuiltin.qc @@ -28,7 +28,7 @@ vector vectoangles(vector v) = #11; float random(void) = #12; -void cmd(string command) = #13; +void cmd(string command, ...) = #13; // cvar cmds diff --git a/data/menuqc/menu.qc b/data/menuqc/menu.qc index e50ff93f6..619203b6c 100644 --- a/data/menuqc/menu.qc +++ b/data/menuqc/menu.qc @@ -68,7 +68,7 @@ void() m_draw = if( !Menu_Active ) { // test whether we want to force it to be displayed - if( !(gamestatus & GAME_CONNECTED) && !(gamestatus & GAME_DEVELOPER) ) { + if( !(gamestatus & GAME_CONNECTED) && !(gamestatus & GAME_DEVELOPER) && cvar_string( "menu_directmenu" ) != "" ) { m_display(); } else { diff --git a/data/menuqc/progs.src b/data/menuqc/progs.src index 76554cfdc..39a7f90e8 100644 --- a/data/menuqc/progs.src +++ b/data/menuqc/progs.src @@ -85,7 +85,6 @@ custom/joingame.qm custom/credits.qm custom/player/avatar.qc -custom/player/name.qc custom/player/color.qc custom/creategame/maps.qc diff --git a/data/menuqc/system/debug.qh b/data/menuqc/system/debug.qh index 5fb3ed66b..043a7b629 100644 --- a/data/menuqc/system/debug.qh +++ b/data/menuqc/system/debug.qh @@ -8,7 +8,7 @@ const string SYSTEM_CVAR_VERSION = "scmenu_version"; const string SYSTEM_CVAR_VERSION_BUILDDATE_VALUE = __DATE__; const string SYSTEM_CVAR_VERSION_BUILDTIME_VALUE = __TIME__; -const string SYSTEM_CVAR_VERSION_VALUE = "prerelease"; +const string SYSTEM_CVAR_VERSION_VALUE = "1.3"; // system cvars diff --git a/data/menuqc/system/isframe.qc b/data/menuqc/system/isframe.qc index c328870b8..097504a29 100644 --- a/data/menuqc/system/isframe.qc +++ b/data/menuqc/system/isframe.qc @@ -250,7 +250,11 @@ void() Menu_PerformReinit = Menu_KeyHook = Util_NullFunction; // choose which menu to display - if( MENU_ALLOWINGAME && ( gamestatus & GAME_CONNECTED ) ) + // AK 05: added support for menu_directmenu + if( cvar_string( "menu_directmenu" ) != "" ) { + Menu_ActiveWindow = findstring( null_entity, name, cvar_string( "menu_directmenu" ) ); + cvar_set( "menu_directmenu", "" ); + } else if( MENU_ALLOWINGAME && ( gamestatus & GAME_CONNECTED ) ) Menu_ActiveWindow = findstring( null_entity, name, MENU_INGAME_NAME ); else Menu_ActiveWindow = findstring( null_entity, name, MENU_NORMAL_NAME ); diff --git a/data/menuqc/util/text.qc b/data/menuqc/util/text.qc index cc5766e78..fbc132ca5 100644 --- a/data/menuqc/util/text.qc +++ b/data/menuqc/util/text.qc @@ -57,3 +57,20 @@ vector( string pText, vector pLast, float pWrapLength ) Util_GetEndOfWrappedLine } } }; + +string( float pValue, float pStep ) Util_FloatToClampedText = +{ + local float lLen; + local float lClampedStep; + local float lInverseClamped; + lClampedStep = pStep - floor( pStep ); + if( lClampedStep == 0.0 ) + return ftos( pValue ); + // get the integer length + lLen = strlen( ftos( floor( pValue ) ) ); + // Example data: 0.1 -> 10 - 1 = 9; 0.9 -> 1.^1 - 0.1 = 1.0^1 ; 0.01 -> 100 - 1 = 99 ; 0.09 -> 11.^1 - 0.1 = 10.0^1 + lInverseClamped = 1.0 / lClampedStep - 0.1; + // add the fraction length and 1 for the . + lLen += strlen( ftos( floor( lInverseClamped ) ) ) + 1; + return substring( ftos( pValue + 0.0001 ), 0, lLen ); +} diff --git a/data/menuqc/util/text.qh b/data/menuqc/util/text.qh index 0eb3890f1..36be276a8 100644 --- a/data/menuqc/util/text.qh +++ b/data/menuqc/util/text.qh @@ -5,3 +5,4 @@ // returns a pair vector( string pText, vector pLast ) Util_GetEndOfLine; vector( string pText, vector pLast, float pWrapLength ) Util_GetEndOfWrappedLine; +string( float pValue, float pStep ) Util_FloatToClampedText; -- 2.39.2