1 void ConnectionlessPacketReceived(byte IP0, byte IP1, byte IP2, byte IP3); 2 3 /* 4 ================ 5 vmMain 6 7 This is the only way control passes into the module. 8 This must be the very first function compiled into the .q3vm file 9 ================ 10 */ 11 int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) { 12 switch ( command ) { 13 case GAME_INIT: 14 G_InitGame( arg0, arg1, arg2 ); 15 return 0; 16 case GAME_SHUTDOWN: 17 G_ShutdownGame( arg0 ); 18 return 0; 19 case GAME_CLIENT_CONNECT: 20 return (int)ClientConnect( arg0, arg1, arg2 ); 21 case GAME_CLIENT_THINK: 22 ClientThink( arg0 ); 23 return 0; 24 case GAME_CLIENT_USERINFO_CHANGED: 25 ClientUserinfoChanged( arg0 ); 26 return 0; 27 case GAME_CLIENT_DISCONNECT: 28 ClientDisconnect( arg0 ); 29 return 0; 30 case GAME_CLIENT_BEGIN: 31 ClientBegin( arg0, qtrue ); 32 return 0; 33 case GAME_CLIENT_COMMAND: 34 ClientCommand( arg0 ); 35 return 0; 36 case GAME_RUN_FRAME: 37 G_RunFrame( arg0 ); 38 return 0; 39 case GAME_CONSOLE_COMMAND: 40 return ConsoleCommand(); 41 case BOTAI_START_FRAME: 42 return BotAIStartFrame( arg0 ); 43 case GAME_ROFF_NOTETRACK_CALLBACK: 44 G_ROFF_NotetrackCallback( &g_entities[arg0], (const char *)arg1 ); 45 return 0; 46 // JK2MF: receiving the JK2MF_CONNECTIONLESS_PACKET event 47 case JK2MF_CONNECTIONLESS_PACKET: 48 ConnectionlessPacketReceived(arg0, arg1, arg2, arg3); 49 return 0; 50 } 51 52 return -1; 53 } 54 55 void ConnectionlessPacketReceived(byte IP0, byte IP1, byte IP2, byte IP3) 56 { 57 char cmd[MAX_TOKEN_CHARS]; 58 char num1[10], num2[10]; 59 trap_Argv(0, cmd, sizeof(cmd)); 60 61 if ( !strcmp(cmd, "multiply") ) 62 { 63 int n1, n2; 64 65 trap_Argv(1, num1, sizeof(num1)); 66 trap_Argv(2, num2, sizeof(num2)); 67 n1 = atoi(num1); 68 n2 = atoi(num2); 69 70 // Send result 71 trap_JK2MF_SendConnectionlessPacket(va("result %i", n1 * n2)); 72 } 73 }