@@ -355,7 +355,7 @@ class CScriptNetPropManager
355355 int fieldType = td->fieldType ;
356356 int fieldOffset = td->fieldOffset [ TD_OFFSET_NORMAL ];
357357
358- if ( td->flags & (FTYPEDESC_FUNCTIONTABLE | FTYPEDESC_INPUT | FTYPEDESC_OUTPUT ) )
358+ if ( td->flags & (FTYPEDESC_FUNCTIONTABLE | FTYPEDESC_INPUT ) )
359359 continue ;
360360
361361 if ( fieldType == FIELD_VOID || fieldType == FIELD_FUNCTION )
@@ -924,6 +924,63 @@ class CScriptNetPropManager
924924 }
925925 case FIELD_CUSTOM :
926926 {
927+ #ifdef GAME_DLL
928+ if ( pField->flags & FTYPEDESC_OUTPUT )
929+ {
930+ CBaseEntityOutput *pOutput = (CBaseEntityOutput*)( (char *)pEnt + offset );
931+ offset += offsetof ( CBaseEntityOutput, m_Value );
932+ enum types datatype;
933+
934+ switch ( pOutput->ValueFieldType () )
935+ {
936+ case FIELD_INTEGER :
937+ case FIELD_COLOR32 :
938+ {
939+ datatype = types::_INT32;
940+ offset += offsetof ( variant_t , iVal );
941+ break ;
942+ }
943+ case FIELD_FLOAT :
944+ {
945+ datatype = types::_FLOAT;
946+ offset += offsetof ( variant_t , flVal );
947+ break ;
948+ }
949+ case FIELD_VECTOR :
950+ case FIELD_POSITION_VECTOR :
951+ {
952+ datatype = types::_VEC3;
953+ offset += offsetof ( variant_t , vecVal );
954+ break ;
955+ }
956+ case FIELD_STRING :
957+ {
958+ datatype = types::_STRING_T;
959+ offset += offsetof ( variant_t , iszVal );
960+ break ;
961+ }
962+ case FIELD_EHANDLE :
963+ {
964+ datatype = types::_EHANDLE;
965+ offset += offsetof ( variant_t , eVal );
966+ break ;
967+ }
968+ default :
969+ AssertMsg (
970+ pOutput->ValueFieldType () == FIELD_INPUT ||
971+ pOutput->ValueFieldType () == FIELD_VOID ,
972+ " not implemented" );
973+ return NULL ;
974+ }
975+
976+ varinfo_t *pInfo = CacheNew ( pEnt, szProp, false );
977+ pInfo->arraysize = 1 ;
978+ pInfo->offset = offset;
979+ pInfo->datatype = datatype;
980+ return pInfo;
981+ }
982+ #endif
983+
927984 if ( pField->pSaveRestoreOps == GetPhysObjSaveRestoreOps ( PIID_IPHYSICSOBJECT ) )
928985 {
929986 SetVarInfo ();
@@ -2130,6 +2187,47 @@ class CScriptNetPropManager
21302187 {
21312188 Assert ( td->fieldType == FIELD_CUSTOM );
21322189
2190+ #ifdef GAME_DLL
2191+ if ( td->flags & FTYPEDESC_OUTPUT )
2192+ {
2193+ CBaseEntityOutput *pOutput = (CBaseEntityOutput*)pVar;
2194+ Print ( " output " );
2195+
2196+ switch ( pOutput->ValueFieldType () )
2197+ {
2198+ case FIELD_INTEGER :
2199+ Print ( " int" );
2200+ break ;
2201+ case FIELD_COLOR32 :
2202+ Print ( " clr32" );
2203+ break ;
2204+ case FIELD_FLOAT :
2205+ Print ( " float" );
2206+ break ;
2207+ case FIELD_VECTOR :
2208+ case FIELD_POSITION_VECTOR :
2209+ Print ( " vec3" );
2210+ break ;
2211+ case FIELD_STRING :
2212+ Print ( " string" );
2213+ break ;
2214+ case FIELD_EHANDLE :
2215+ Print ( " entity" );
2216+ break ;
2217+ case FIELD_INPUT :
2218+ Print ( " variant" );
2219+ break ;
2220+ case FIELD_VOID :
2221+ m_output.SeekPut ( CUtlBuffer::SEEK_CURRENT , -1 );
2222+ break ;
2223+ default :
2224+ Print ( " unknown %d" , pOutput->ValueFieldType () );
2225+ }
2226+
2227+ return ;
2228+ }
2229+ #endif
2230+
21332231 const char *g_ppszPhysTypeNames[PIID_NUM_TYPES ] =
21342232 {
21352233 " Unknown Phys" ,
@@ -2247,6 +2345,55 @@ class CScriptNetPropManager
22472345 {
22482346 Assert ( td->fieldType == FIELD_CUSTOM );
22492347
2348+ #ifdef GAME_DLL
2349+ if ( td->flags & FTYPEDESC_OUTPUT )
2350+ {
2351+ CBaseEntityOutput *pOutput = (CBaseEntityOutput*)pVar;
2352+ pVar += offsetof ( CBaseEntityOutput, m_Value );
2353+
2354+ switch ( pOutput->ValueFieldType () )
2355+ {
2356+ case FIELD_INTEGER :
2357+ {
2358+ Print ( " %i" , ((variant_t *)pVar)->iVal );
2359+ break ;
2360+ }
2361+ case FIELD_COLOR32 :
2362+ {
2363+ Print ( " 0x%08x" , ((variant_t *)pVar)->iVal );
2364+ break ;
2365+ }
2366+ case FIELD_FLOAT :
2367+ {
2368+ Print ( " %f" , ((variant_t *)pVar)->flVal );
2369+ break ;
2370+ }
2371+ case FIELD_VECTOR :
2372+ case FIELD_POSITION_VECTOR :
2373+ {
2374+ PrintVec3 ( ((variant_t *)pVar)->vecVal );
2375+ break ;
2376+ }
2377+ case FIELD_STRING :
2378+ {
2379+ PrintString ( ((variant_t *)pVar)->String () );
2380+ break ;
2381+ }
2382+ case FIELD_EHANDLE :
2383+ {
2384+ PrintEntity ( &((variant_t *)pVar)->eVal );
2385+ break ;
2386+ }
2387+ case FIELD_INPUT :
2388+ case FIELD_VOID :
2389+ default :
2390+ break ;
2391+ }
2392+
2393+ return ;
2394+ }
2395+ #endif
2396+
22502397 for ( int i = 0 ; i < PIID_NUM_TYPES ; i++ )
22512398 {
22522399 if ( td->pSaveRestoreOps == GetPhysObjSaveRestoreOps ( (PhysInterfaceId_t)i ) )
@@ -2512,7 +2659,7 @@ class CScriptNetPropManager
25122659 {
25132660 typedescription_t * td = &pFields[i];
25142661
2515- if ( td->flags & (FTYPEDESC_FUNCTIONTABLE | FTYPEDESC_INPUT | FTYPEDESC_OUTPUT ) )
2662+ if ( td->flags & (FTYPEDESC_FUNCTIONTABLE | FTYPEDESC_INPUT ) )
25162663 continue ;
25172664
25182665 if ( td->fieldType == FIELD_VOID || td->fieldType == FIELD_FUNCTION )
0 commit comments