mirror of
https://github.com/celisej567/source-sdk-2013.git
synced 2026-09-17 20:10:21 +03:00
Mapbase v6.0
- Fixed path_track paths saving as pointers instead of handles - Fixed player animations not falling to base class correctly - Fixed logic_externaldata creating garbage in trailing spaces - Added "SetHandModelSkin" input - Added unique colors for various types of console message, adjustable via convars - Added the ability to use map-specific weapon scripts - Added a way to display (placeholder) text entirely from Faceposer scenes - Added "autobreak" keyvalue to game_text, which automatically breaks long text into different lines - Added the ability to change a game_text's font (very limited) - Added LightToggle input to point_spotlight - Added Enable/DisableSprites on npc_manhack - Added ai_goal_police behavior from metrocops to Combine soldiers and citizens - Added func_precipitation particle rain systems from the Alien Swarm SDK - Added new func_precipitation spawnflags for controlling behavior in particle types - Added "mapbase_version" cvar which shows the version of Mapbase a mod might be running on - Fixed an oversight with NPC crouch activities which was causing npc_metropolice to stop firing in standoffs - Added toggleable patches to npc_combine AI which make soldiers less likely to stand around without shooting or rush to melee when not needed - Added key for custom logo font on env_credits scripts - Added SetSpeed and SetPushDir inputs for trigger_push - Added a bunch of I/O/KV to func_fish_pool to allow for more control over the fish - Added OnLostEnemy/Player support for npc_combine_camera - Added enhanced save/restore for the Response System, toggleable via convar - Added a convar which allows users to disable weapon autoswitching when picking up ammo - Split VScript base script into its own file - Added VScript descriptions for NPC squads and the manager class which handles them - Moved several classes, functions, etc. to the VScript library itself for future usage in other projects, like VBSP - Added VScript to VBSP with basic map file interfacing - Made some VScript documentation more clear due to deprecation of online documentation - Added VScript "hook" registration, creating a standardized system which shows up in script_help documentation - Added VScript-driven custom weapons - Added clientside VScript scopes - Added a bunch of weapon-related VScript functions - Split a bunch of cluttered VScript stuff into different files - Added VScript functions for "following" entities/bonemerging - Added VScript functions for grenades - Added a few more VScript trigger functions - Added OnDeath hook for VScript - Fixed documentation for aliased functions in VScript - Fixed $bumpmask not working on SDK_LightmappedGeneric - Made vertex blend swapping in Hammer use a constant instead of a combo (makes it easier to compile the shader, especially for $bumpmask's sake) - Fixed brush phong, etc. causing SDK_WorldVertexTransition to stop working - Added limited support for $envmapmask in the bumpmapping shader - Fixed more issues with parallax corrected cubemaps and instances - Made instance variable recursion consistent with VMFII
This commit is contained in:
156
sp/src/utils/vbsp/vscript_funcs_vmfs.cpp
Normal file
156
sp/src/utils/vbsp/vscript_funcs_vmfs.cpp
Normal file
@@ -0,0 +1,156 @@
|
||||
//========= Mapbase - https://github.com/mapbase-source/source-sdk-2013 ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "tier1/KeyValues.h"
|
||||
#include "tier1/fmtstr.h"
|
||||
|
||||
#include "vbsp.h"
|
||||
#include "map.h"
|
||||
#include "fgdlib/fgdlib.h"
|
||||
|
||||
#include "vscript_vbsp.h"
|
||||
#include "vscript_funcs_vmfs.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static HSCRIPT VMFKV_CreateBlank()
|
||||
{
|
||||
KeyValues *pKV = new KeyValues("VMF");
|
||||
|
||||
KeyValues *pWorld = pKV->FindKey( "world", true );
|
||||
if (pWorld)
|
||||
{
|
||||
pWorld->SetString( "classname", "worldspawn" );
|
||||
}
|
||||
|
||||
return scriptmanager->CreateScriptKeyValues( g_pScriptVM, pKV, true );
|
||||
}
|
||||
|
||||
static bool VMFKV_SaveToFile( const char *szFile, HSCRIPT hKV )
|
||||
{
|
||||
Warning( "Getting keyvalues from thing\n" );
|
||||
|
||||
KeyValues *pKV = scriptmanager->GetKeyValuesFromScriptKV( g_pScriptVM, hKV );
|
||||
if (!pKV)
|
||||
return false;
|
||||
|
||||
CUtlBuffer buf( 0, 0, CUtlBuffer::TEXT_BUFFER );
|
||||
for (KeyValues *pSubKey = pKV->GetFirstSubKey(); pSubKey; pSubKey = pSubKey->GetNextKey())
|
||||
{
|
||||
pSubKey->RecursiveSaveToFile( buf, 0 );
|
||||
}
|
||||
|
||||
char pszFullName[MAX_PATH];
|
||||
Q_ExtractFilePath( source, pszFullName, sizeof(pszFullName) );
|
||||
V_snprintf( pszFullName, sizeof(pszFullName), "%s/vscript_io/%s", pszFullName, szFile );
|
||||
|
||||
if ( !V_RemoveDotSlashes( pszFullName, CORRECT_PATH_SEPARATOR, true ) )
|
||||
{
|
||||
Warning( "Invalid file location : %s\n", szFile );
|
||||
buf.Purge();
|
||||
return false;
|
||||
}
|
||||
|
||||
int nSize = V_strlen(pszFullName) + 1;
|
||||
char *pszDir = (char*)stackalloc(nSize);
|
||||
V_memcpy( pszDir, pszFullName, nSize );
|
||||
V_StripFilename( pszDir );
|
||||
|
||||
//g_pFullFileSystem->RelativePathToFullPath( szFile, NULL, pszFullName, sizeof( pszFullName ) );
|
||||
Warning( "Full path is %s!\n", pszFullName );
|
||||
g_pFullFileSystem->CreateDirHierarchy( pszDir, NULL );
|
||||
bool res = g_pFullFileSystem->WriteFile( pszFullName, NULL, buf );
|
||||
buf.Purge();
|
||||
return res;
|
||||
}
|
||||
|
||||
static HSCRIPT VMFKV_LoadFromFile( const char *szFile )
|
||||
{
|
||||
char pszFullName[MAX_PATH];
|
||||
V_snprintf( pszFullName, sizeof(pszFullName), NULL, szFile );
|
||||
|
||||
if ( !V_RemoveDotSlashes( pszFullName, CORRECT_PATH_SEPARATOR, true ) )
|
||||
{
|
||||
DevWarning( 2, "Invalid file location : %s\n", szFile );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
KeyValues *pKV = new KeyValues( szFile );
|
||||
if ( !pKV->LoadFromFile( g_pFullFileSystem, pszFullName, NULL ) )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
HSCRIPT hScript = scriptmanager->CreateScriptKeyValues( g_pScriptVM, pKV, true ); // bAllowDestruct is supposed to automatically remove the involved KV
|
||||
|
||||
return hScript;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
inline void ScriptVarsToKV( ScriptVariant_t &varKey, ScriptVariant_t &varValue, KeyValues *pKV )
|
||||
{
|
||||
switch (varValue.m_type)
|
||||
{
|
||||
case FIELD_CSTRING: pKV->SetString( varKey.m_pszString, varValue.m_pszString ); break;
|
||||
case FIELD_INTEGER: pKV->SetInt( varKey.m_pszString, varValue.m_int ); break;
|
||||
case FIELD_FLOAT: pKV->SetFloat( varKey.m_pszString, varValue.m_float ); break;
|
||||
case FIELD_BOOLEAN: pKV->SetBool( varKey.m_pszString, varValue.m_bool ); break;
|
||||
case FIELD_VECTOR: pKV->SetString( varKey.m_pszString, CFmtStr( "%f %f %f", varValue.m_pVector->x, varValue.m_pVector->y, varValue.m_pVector->z ) ); break;
|
||||
}
|
||||
}
|
||||
|
||||
static HSCRIPT VMFKV_AddEntityFromTables( HSCRIPT hVMF, HSCRIPT hKV, HSCRIPT hIO )
|
||||
{
|
||||
KeyValues *pVMF = scriptmanager->GetKeyValuesFromScriptKV( g_pScriptVM, hVMF );
|
||||
if (!pVMF)
|
||||
return false;
|
||||
|
||||
KeyValues *pEnt = pVMF->CreateNewKey();
|
||||
if (!pEnt)
|
||||
return false;
|
||||
|
||||
pEnt->SetName( "entity" );
|
||||
|
||||
int nIterator = -1;
|
||||
ScriptVariant_t varKey, varValue;
|
||||
while ((nIterator = g_pScriptVM->GetKeyValue( hKV, nIterator, &varKey, &varValue )) != -1)
|
||||
{
|
||||
ScriptVarsToKV( varKey, varValue, pEnt );
|
||||
|
||||
g_pScriptVM->ReleaseValue( varKey );
|
||||
g_pScriptVM->ReleaseValue( varValue );
|
||||
}
|
||||
|
||||
KeyValues *pConnections = pEnt->FindKey( "connections", true );
|
||||
if (hIO && pConnections)
|
||||
{
|
||||
nIterator = -1;
|
||||
while ((nIterator = g_pScriptVM->GetKeyValue( hIO, nIterator, &varKey, &varValue )) != -1)
|
||||
{
|
||||
ScriptVarsToKV( varKey, varValue, pEnt );
|
||||
|
||||
g_pScriptVM->ReleaseValue( varKey );
|
||||
g_pScriptVM->ReleaseValue( varValue );
|
||||
}
|
||||
}
|
||||
|
||||
return scriptmanager->CreateScriptKeyValues( g_pScriptVM, pEnt, false );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void RegisterVMFScriptFunctions()
|
||||
{
|
||||
ScriptRegisterFunction( g_pScriptVM, VMFKV_CreateBlank, "Creates a CScriptKeyValues instance with VMF formatting." );
|
||||
ScriptRegisterFunction( g_pScriptVM, VMFKV_SaveToFile, "Saves a CScriptKeyValues instance with VMF formatting." );
|
||||
ScriptRegisterFunction( g_pScriptVM, VMFKV_LoadFromFile, "Loads a VMF as a CScriptKeyValues instance with VMF formatting." );
|
||||
ScriptRegisterFunction( g_pScriptVM, VMFKV_AddEntityFromTables, "Adds a VMF-formatted entity to a CScriptKeyValues instance." );
|
||||
}
|
||||
Reference in New Issue
Block a user