Guest User

Untitled

a guest
Oct 12th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. 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 )
  2. {
  3.     LONG lActivatorID = ( pActivator ? pActivator->lNetID : -1 );
  4.  
  5.     //
  6.     // [TP] Argument header:
  7.     // Bits 0-1: length of arg0
  8.     // Bits 2-3: length of arg1
  9.     // Bits 4-5: length of arg2
  10.     // Length is: 0 if not sent, 1 for byte, 2 for short, 3 for long.
  11.     //
  12.     // Bit 6: bBackSide
  13.     // Bit 7: bAlways
  14.     //
  15.     BYTE argheader = 0;
  16.     const int args[] = {iArg0, iArg1, iArg2};
  17.     int arglength[3];
  18.  
  19.     // [TP] Determine argument length
  20.     for ( int i = 0; i < 3; ++i )
  21.     {
  22.         if ( args[i] == 0 )
  23.             arglength[i] = 0;
  24.         else if ( args[i] <= 0xFF )
  25.             arglength[i] = 1;
  26.         else if ( args[i] <= 0xFFFF )
  27.             arglength[i] = 2;
  28.         else
  29.             arglength[i] = 3;
  30.  
  31.         argheader |= arglength[i] << ( 2 * i );
  32.     }
  33.  
  34.     // [TP] We still have two more bits free, let's pack some bools into themmm.
  35.     argheader |= ( bBackSide ? 1 : 0 ) << 6;
  36.     argheader |= ( bAlways ? 1 : 0 ) << 7;
  37.  
  38.     NetCommand command ( SVC_ACSSCRIPTEXECUTE );
  39.     command.addShort( ulScript );
  40.     command.addShort( lActivatorID );
  41.     command.addShort( lLineIdx );
  42.     command.addString( pszMap ); // <-- TODO
  43.     command.addByte( argheader );
  44.  
  45.     // [TP] Now send the arguments.
  46.     for ( int i = 0; i < 3; ++i )
  47.     {
  48.         switch( arglength[i] )
  49.         {
  50.             case 1: command.addByte( args[i] ); break;
  51.             case 2: command.addShort( args[i] ); break;
  52.             case 3: command.addLong( args[i] ); break;
  53.             default: break;
  54.         }
  55.     }
  56.  
  57.     command.sendCommandToClients( ulPlayerExtra, ulFlags );
  58. }
Advertisement
Add Comment
Please, Sign In to add comment