From 309e819bcb5ecbfa69f9a82dd39fd469cbf408db Mon Sep 17 00:00:00 2001 From: TotallyMehis Date: Sat, 4 Jul 2020 10:26:02 +0300 Subject: [PATCH] Save run/zone name as a value instead of the section name --- addons/sourcemod/scripting/influx_core.sp | 33 ++++++--- addons/sourcemod/scripting/influx_zones.sp | 86 +++++++++++++--------- 2 files changed, 74 insertions(+), 45 deletions(-) diff --git a/addons/sourcemod/scripting/influx_core.sp b/addons/sourcemod/scripting/influx_core.sp index 01d3c735..28dc7ef2 100644 --- a/addons/sourcemod/scripting/influx_core.sp +++ b/addons/sourcemod/scripting/influx_core.sp @@ -3082,11 +3082,17 @@ stock bool LoadRunFromKv( KeyValues kv ) LogError( INF_CON_PRE..."Found duplicate run id %i!", runid ); return false; } - - if ( !kv.GetSectionName( szRun, sizeof( szRun ) ) ) + + + kv.GetString( "name", szRun, sizeof( szRun ), "" ); + if ( szRun[0] == 0 ) { - LogError( INF_CON_PRE..."Couldn't read run name!" ); - return false; + // Fallback to section name. + if ( !kv.GetSectionName( szRun, sizeof( szRun ) ) ) + { + LogError( INF_CON_PRE..."Couldn't read run name from kv!" ); + return false; + } } @@ -3109,6 +3115,8 @@ stock bool LoadRunFromKv( KeyValues kv ) stock void BuildRunKvs( ArrayList kvs ) { + char szRun[MAX_RUN_NAME]; + char szKeyValueName[64]; decl data[RUN_SIZE]; float vec[3]; @@ -3117,11 +3125,14 @@ stock void BuildRunKvs( ArrayList kvs ) { g_hRuns.GetArray( i, data ); - - KeyValues kv = new KeyValues( view_as( data[RUN_NAME] ) ); + + int runid = data[RUN_ID]; + + FormatEx( szKeyValueName, sizeof( szKeyValueName ), "run%i", runid ); + KeyValues kv = new KeyValues( szKeyValueName ); - kv.SetNum( "id", data[RUN_ID] ); + kv.SetNum( "id", runid ); kv.SetNum( "resflags", data[RUN_RESFLAGS] ); @@ -3148,17 +3159,21 @@ stock void BuildRunKvs( ArrayList kvs ) { LogError( INF_CON_PRE..."Run of id %i had invalid teleport yaw. No yaw will be saved.", data[RUN_ID] ); } + + strcopy( szRun, sizeof( szRun ), view_as( data[RUN_NAME] ) ); + kv.SetString( "name", szRun ); + // Ask other plugins if they want to save some data. Call_StartForward( g_hForward_OnRunSave ); - Call_PushCell( data[RUN_ID] ); + Call_PushCell( runid ); Call_PushCell( view_as( kv ) ); Call_Finish(); decl arr[2]; arr[0] = view_as( kv ); - arr[1] = data[RUN_ID]; + arr[1] = runid; kvs.PushArray( arr ); } diff --git a/addons/sourcemod/scripting/influx_zones.sp b/addons/sourcemod/scripting/influx_zones.sp index 5953d7b4..21fded84 100644 --- a/addons/sourcemod/scripting/influx_zones.sp +++ b/addons/sourcemod/scripting/influx_zones.sp @@ -1160,8 +1160,9 @@ stock bool LoadZoneFromKv( KeyValues kv ) ZoneType_t zonetype; int zoneid; - decl String:szType[32]; + char szType[32]; bool bInvalidZoneType; + char szZoneName[MAX_ZONE_NAME]; kv.GetString( "type", szType, sizeof( szType ), "" ); @@ -1211,7 +1212,17 @@ stock bool LoadZoneFromKv( KeyValues kv ) } - kv.GetSectionName( view_as( data[ZONE_NAME] ), MAX_ZONE_NAME ); + kv.GetString( "name", szZoneName, sizeof( szZoneName ), "" ); + if ( szZoneName[0] == 0 ) + { + // Fallback to section name. + if ( !kv.GetSectionName( szZoneName, sizeof( szZoneName ) ) ) + { + LogError( INF_CON_PRE..."Couldn't find zone name! (id: %i)", zoneid ); + } + } + + strcopy( view_as( data[RUN_NAME] ), MAX_ZONE_NAME, szZoneName ); // Ask other plugins what to load. @@ -1316,37 +1327,61 @@ stock int SaveZones( bool bForceType = false, bool bUseDb = false ) stock void BuildZoneKvs( ArrayList kvs ) { - decl String:szBuffer[256]; + char szBuffer[256]; + char szKeyValueName[64]; decl data[ZONE_SIZE]; - int zoneid; - ZoneType_t zonetype; - int itype; for ( int i = 0; i < g_hZones.Length; i++ ) { g_hZones.GetArray( i, data, sizeof( data ) ); - // Forward slashes need to be removed since they create a subkey. WHY?!?!?! - ReplaceString( view_as( data[ZONE_NAME] ), MAX_ZONE_NAME, "/", "" ); - - KeyValues kv = new KeyValues( view_as( data[ZONE_NAME] ) ); - - - zoneid = data[ZONE_ID]; + int zoneid = data[ZONE_ID]; if ( zoneid < 1 ) continue; - zonetype = view_as( data[ZONE_TYPE] ); + ZoneType_t zonetype = view_as( data[ZONE_TYPE] ); - itype = FindZoneType( zonetype ); + int itype = FindZoneType( zonetype ); if ( itype == -1 ) { continue; } + + + FormatEx( szKeyValueName, sizeof( szKeyValueName ), "Zone%i", zoneid ); + KeyValues kv = new KeyValues( szKeyValueName ); + + + kv.SetNum( "id", zoneid ); + + + GetZoneTypeShortNameByIndex( itype, szBuffer, sizeof( szBuffer ) ); + kv.SetString( "type", szBuffer ); + + + FormatEx( szBuffer, sizeof( szBuffer ), "%.1f %.1f %.1f", + data[ZONE_MINS], + data[ZONE_MINS + 1], + data[ZONE_MINS + 2] ); + kv.SetString( "mins", szBuffer ); + + FormatEx( szBuffer, sizeof( szBuffer ), "%.1f %.1f %.1f", + data[ZONE_MAXS], + data[ZONE_MAXS + 1], + data[ZONE_MAXS + 2] ); + kv.SetString( "maxs", szBuffer ); + + + strcopy( szBuffer, sizeof( szBuffer ), view_as( data[ZONE_NAME] ) ); + kv.SetString( "name", szBuffer ); + + + + // Ask other plugins what to save. Action res; @@ -1377,27 +1412,6 @@ stock void BuildZoneKvs( ArrayList kvs ) Call_Finish(); - - kv.SetNum( "id", zoneid ); - - - GetZoneTypeShortNameByIndex( itype, szBuffer, sizeof( szBuffer ) ); - kv.SetString( "type", szBuffer ); - - - FormatEx( szBuffer, sizeof( szBuffer ), "%.1f %.1f %.1f", - data[ZONE_MINS], - data[ZONE_MINS + 1], - data[ZONE_MINS + 2] ); - kv.SetString( "mins", szBuffer ); - - FormatEx( szBuffer, sizeof( szBuffer ), "%.1f %.1f %.1f", - data[ZONE_MAXS], - data[ZONE_MAXS + 1], - data[ZONE_MAXS + 2] ); - kv.SetString( "maxs", szBuffer ); - - decl arr[2]; arr[0] = view_as( kv ); arr[1] = zoneid;