Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void SERVERCOMMANDS_ACSScriptExecute( ULONG ulScript, AActor *pActivator, LONG lLineIdx, char *pszMap, bool bBackSide, int iArg0, int iArg1, int iArg2, bool bAlways, ULONG ulPlayerExtra, ULONG ulFlags )
- {
- LONG lActivatorID = ( pActivator ? pActivator->lNetID : -1 );
- //
- // [TP] Argument header:
- // Bits 0-1: length of arg0
- // Bits 2-3: length of arg1
- // Bits 4-5: length of arg2
- // Length is: 0 if not sent, 1 for byte, 2 for short, 3 for long.
- //
- // Bit 6: bBackSide
- // Bit 7: bAlways
- //
- BYTE argheader = 0;
- const int args[] = {iArg0, iArg1, iArg2};
- int arglength[3];
- // [TP] Determine argument length
- for ( int i = 0; i < 3; ++i )
- {
- if ( args[i] == 0 )
- arglength[i] = 0;
- else if ( args[i] <= 0xFF )
- arglength[i] = 1;
- else if ( args[i] <= 0xFFFF )
- arglength[i] = 2;
- else
- arglength[i] = 3;
- argheader |= arglength[i] << ( 2 * i );
- }
- // [TP] We still have two more bits free, let's pack some bools into themmm.
- argheader |= ( bBackSide ? 1 : 0 ) << 6;
- argheader |= ( bAlways ? 1 : 0 ) << 7;
- NetCommand command ( SVC_ACSSCRIPTEXECUTE );
- command.addShort( ulScript );
- command.addShort( lActivatorID );
- command.addShort( lLineIdx );
- command.addString( pszMap ); // <-- TODO
- command.addByte( argheader );
- // [TP] Now send the arguments.
- for ( int i = 0; i < 3; ++i )
- {
- switch( arglength[i] )
- {
- case 1: command.addByte( args[i] ); break;
- case 2: command.addShort( args[i] ); break;
- case 3: command.addLong( args[i] ); break;
- default: break;
- }
- }
- command.sendCommandToClients( ulPlayerExtra, ulFlags );
- }
Advertisement
Add Comment
Please, Sign In to add comment