X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=mvm_cmds.c;h=138dfc46aa068d93faa60bab347c3f88c27da741;hb=7bc9f2f55d1385f7019fbd6503522ac05b828124;hp=401b33d6065ba223f176c95df8809cc0e10f59b1;hpb=0960c1f25d397c09f680454759f4ea747975c8c9;p=xonotic%2Fdarkplaces.git diff --git a/mvm_cmds.c b/mvm_cmds.c index 401b33d6..138dfc46 100644 --- a/mvm_cmds.c +++ b/mvm_cmds.c @@ -4,7 +4,13 @@ // Menu char *vm_m_extensions = -"DP_CINEMATIC_DPV"; +"BX_WAL_SUPPORT " +"DP_CINEMATIC_DPV " +"DP_MENU_EXTRESPONSEPACKET " +"DP_QC_ASINACOSATANATAN2TAN " +"DP_QC_STRFTIME " +"DP_QC_STRINGCOLORFUNCTIONS " +"DP_QC_UNLIMITEDTEMPSTRINGS"; /* ========= @@ -51,7 +57,10 @@ void VM_M_precache_sound (void) VM_CheckEmptyString (s); if(snd_initialized.integer && !S_PrecacheSound (s,true, true)) - Con_Printf("VM_precache_sound: Failed to load %s for %s\n", s, PRVM_NAME); + { + VM_Warning("VM_precache_sound: Failed to load %s for %s\n", s, PRVM_NAME); + return; + } } /* @@ -74,7 +83,7 @@ void VM_M_setmousetarget(void) in_client_mouse = true; break; default: - PRVM_ERROR("VM_M_setmousetarget: wrong destination %i !\n",PRVM_G_FLOAT(OFS_PARM0)); + PRVM_ERROR("VM_M_setmousetarget: wrong destination %f !",PRVM_G_FLOAT(OFS_PARM0)); } } @@ -123,7 +132,7 @@ void VM_M_setkeydest(void) // key_dest = key_message // break; default: - PRVM_ERROR("VM_M_setkeydest: wrong destination %i !\n",prog->globals.generic[OFS_PARM0]); + PRVM_ERROR("VM_M_setkeydest: wrong destination %f !", PRVM_G_FLOAT(OFS_PARM0)); } } @@ -171,19 +180,16 @@ void VM_M_callfunction(void) const char *s; if(prog->argc == 0) - PRVM_ERROR("VM_M_callfunction: 1 parameter is required !\n"); + PRVM_ERROR("VM_M_callfunction: 1 parameter is required !"); s = PRVM_G_STRING(OFS_PARM0 + (prog->argc - 1)); - if(!s) - PRVM_ERROR("VM_M_callfunction: null string !\n"); - VM_CheckEmptyString(s); func = PRVM_ED_FindFunction(s); if(!func) - PRVM_ERROR("VM_M_callfunciton: function %s not found !\n", s); + PRVM_ERROR("VM_M_callfunciton: function %s not found !", s); else if (func->first_statement < 0) { // negative statements are built in functions @@ -219,9 +225,6 @@ void VM_M_isfunction(void) s = PRVM_G_STRING(OFS_PARM0); - if(!s) - PRVM_ERROR("VM_M_isfunction: null string !\n"); - VM_CheckEmptyString(s); func = PRVM_ED_FindFunction(s); @@ -246,15 +249,17 @@ void VM_M_writetofile(void) VM_SAFEPARMCOUNT(2, VM_M_writetofile); - file = VM_GetFileHandle( PRVM_G_FLOAT(OFS_PARM0) ); - if( !file ) { + file = VM_GetFileHandle( (int)PRVM_G_FLOAT(OFS_PARM0) ); + if( !file ) + { + VM_Warning("VM_M_writetofile: invalid or closed file handle\n"); return; } - + ent = PRVM_G_EDICT(OFS_PARM1); if(ent->priv.required->free) { - Con_Printf("VM_M_writetofile: %s: entity %i is free !\n", PRVM_NAME, PRVM_EDICT_NUM(OFS_PARM1)); + VM_Warning("VM_M_writetofile: %s: entity %i is free !\n", PRVM_NAME, PRVM_NUM_FOR_EDICT(ent)); return; } @@ -274,7 +279,7 @@ void VM_M_getresolution(void) int nr; VM_SAFEPARMCOUNT(1, VM_getresolution); - nr = PRVM_G_FLOAT(OFS_PARM0); + nr = (int)PRVM_G_FLOAT(OFS_PARM0); PRVM_G_VECTOR(OFS_RETURN)[0] = video_resolutions[nr][0]; @@ -282,45 +287,6 @@ void VM_M_getresolution(void) PRVM_G_VECTOR(OFS_RETURN)[2] = 0; } -/* -========= -VM_M_keynumtostring - -string keynumtostring(float keynum) -========= -*/ -void VM_M_keynumtostring(void) -{ - int keynum; - char *tmp; - VM_SAFEPARMCOUNT(1, VM_M_keynumtostring); - - keynum = PRVM_G_FLOAT(OFS_PARM0); - - tmp = VM_GetTempString(); - - strcpy(tmp, Key_KeynumToString(keynum)); - - PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(tmp); -} - -/* -========= -VM_M_stringtokeynum - -float stringtokeynum(string key) -========= -*/ -void VM_M_stringtokeynum( void ) -{ - const char *str; - VM_SAFEPARMCOUNT( 1, VM_M_keynumtostring ); - - str = PRVM_G_STRING( OFS_PARM0 ); - - PRVM_G_INT(OFS_RETURN) = Key_StringToKeynum( str ); -} - /* ========= VM_M_findkeysforcommand @@ -336,7 +302,7 @@ void M_FindKeysForCommand(const char *command, int *keys); void VM_M_findkeysforcommand(void) { const char *cmd; - char *ret; + char ret[VM_STRINGTEMP_LENGTH]; int keys[NUMKEYS]; int i; @@ -346,14 +312,13 @@ void VM_M_findkeysforcommand(void) VM_CheckEmptyString(cmd); - (ret = VM_GetTempString())[0] = 0; - M_FindKeysForCommand(cmd, keys); + ret[0] = 0; for(i = 0; i < NUMKEYS; i++) - ret = strcat(ret, va(" \'%i\'", keys[i])); + strlcat(ret, va(" \'%i\'", keys[i]), sizeof(ret)); - PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(ret); + PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(ret); } /* @@ -381,7 +346,7 @@ void VM_M_getserverliststat( void ) PRVM_G_FLOAT( OFS_RETURN ) = 0; - type = PRVM_G_FLOAT( OFS_PARM0 ); + type = (int)PRVM_G_FLOAT( OFS_PARM0 ); switch(type) { case 0: @@ -408,7 +373,7 @@ void VM_M_getserverliststat( void ) PRVM_G_FLOAT ( OFS_RETURN ) = serverlist_sortdescending; return; default: - Con_Printf( "VM_M_getserverliststat: bad type %i!\n", type ); + VM_Warning( "VM_M_getserverliststat: bad type %i!\n", type ); } } @@ -442,17 +407,16 @@ void VM_M_setserverlistmaskstring( void ) int field; VM_SAFEPARMCOUNT( 4, VM_M_setserverlistmaskstring ); - str = PRVM_G_STRING( OFS_PARM1 ); - if( !str ) - PRVM_ERROR( "VM_M_setserverlistmaskstring: null string passed!" ); + str = PRVM_G_STRING( OFS_PARM2 ); - masknr = PRVM_G_FLOAT( OFS_PARM0 ); + masknr = (int)PRVM_G_FLOAT( OFS_PARM0 ); if( masknr >= 0 && masknr <= SERVERLIST_ANDMASKCOUNT ) mask = &serverlist_andmasks[masknr]; else if( masknr >= 512 && masknr - 512 <= SERVERLIST_ORMASKCOUNT ) mask = &serverlist_ormasks[masknr - 512 ]; - else { - Con_Printf( "VM_M_setserverlistmaskstring: invalid mask number %i\n", masknr ); + else + { + VM_Warning( "VM_M_setserverlistmaskstring: invalid mask number %i\n", masknr ); return; } @@ -460,27 +424,27 @@ void VM_M_setserverlistmaskstring( void ) switch( field ) { case SLIF_CNAME: - strncpy( mask->info.cname, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.cname) ); + strlcpy( mask->info.cname, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.cname) ); break; case SLIF_NAME: - strncpy( mask->info.name, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.name) ); + strlcpy( mask->info.name, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.name) ); break; case SLIF_MAP: - strncpy( mask->info.map, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.map) ); + strlcpy( mask->info.map, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.map) ); break; case SLIF_MOD: - strncpy( mask->info.mod, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.mod) ); + strlcpy( mask->info.mod, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.mod) ); break; case SLIF_GAME: - strncpy( mask->info.game, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.game) ); + strlcpy( mask->info.game, PRVM_G_STRING( OFS_PARM2 ), sizeof(mask->info.game) ); break; default: - Con_Printf( "VM_M_setserverlistmaskstring: Bad field number %i passed!\n", field ); + VM_Warning( "VM_M_setserverlistmaskstring: Bad field number %i passed!\n", field ); return; } mask->active = true; - mask->tests[field] = (int) PRVM_G_FLOAT( OFS_PARM3 ); + mask->tests[field] = (serverlist_maskop_t)((int)PRVM_G_FLOAT( OFS_PARM3 )); } /* @@ -501,17 +465,18 @@ void VM_M_setserverlistmasknumber( void ) int field; VM_SAFEPARMCOUNT( 4, VM_M_setserverlistmasknumber ); - masknr = PRVM_G_FLOAT( OFS_PARM0 ); + masknr = (int)PRVM_G_FLOAT( OFS_PARM0 ); if( masknr >= 0 && masknr <= SERVERLIST_ANDMASKCOUNT ) mask = &serverlist_andmasks[masknr]; else if( masknr >= 512 && masknr - 512 <= SERVERLIST_ORMASKCOUNT ) mask = &serverlist_ormasks[masknr - 512 ]; - else { - Con_Printf( "VM_M_setserverlistmasknumber: invalid mask number %i\n", masknr ); + else + { + VM_Warning( "VM_M_setserverlistmasknumber: invalid mask number %i\n", masknr ); return; } - number = PRVM_G_FLOAT( OFS_PARM2 ); + number = (int)PRVM_G_FLOAT( OFS_PARM2 ); field = (int) PRVM_G_FLOAT( OFS_PARM1 ); switch( field ) { @@ -528,12 +493,12 @@ void VM_M_setserverlistmasknumber( void ) mask->info.protocol = number; break; default: - Con_Printf( "VM_M_setserverlistmasknumber: Bad field number %i passed!\n", field ); + VM_Warning( "VM_M_setserverlistmasknumber: Bad field number %i passed!\n", field ); return; } mask->active = true; - mask->tests[field] = (int) PRVM_G_FLOAT( OFS_PARM3 ); + mask->tests[field] = (serverlist_maskop_t)((int)PRVM_G_FLOAT( OFS_PARM3 )); } @@ -563,9 +528,9 @@ void VM_M_getserverliststring(void) VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); - PRVM_G_INT(OFS_RETURN) = 0; + PRVM_G_INT(OFS_RETURN) = OFS_NULL; - hostnr = PRVM_G_FLOAT(OFS_PARM1); + hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); if(hostnr < 0 || hostnr >= serverlist_viewcount) { @@ -615,9 +580,9 @@ void VM_M_getserverlistnumber(void) VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); - PRVM_G_INT(OFS_RETURN) = 0; + PRVM_G_INT(OFS_RETURN) = OFS_NULL; - hostnr = PRVM_G_FLOAT(OFS_PARM1); + hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); if(hostnr < 0 || hostnr >= serverlist_viewcount) { @@ -654,7 +619,7 @@ void VM_M_setserverlistsort( void ) { VM_SAFEPARMCOUNT( 2, VM_M_setserverlistsort ); - serverlist_sortbyfield = (int) PRVM_G_FLOAT( OFS_PARM0 ); + serverlist_sortbyfield = (serverlist_infofield_t)((int)PRVM_G_FLOAT( OFS_PARM0 )); serverlist_sortdescending = (qboolean) PRVM_G_FLOAT( OFS_PARM1 ); } @@ -668,7 +633,7 @@ refreshserverlist() void VM_M_refreshserverlist( void ) { VM_SAFEPARMCOUNT( 0, VM_M_refreshserverlist ); - ServerList_QueryList(); + ServerList_QueryList(true, false); } /* @@ -743,9 +708,9 @@ sizebuf_t *VM_WriteDest (void) int destclient; if(!sv.active) - PRVM_ERROR("VM_WriteDest: game is not server (%s)\n", PRVM_NAME); + PRVM_ERROR("VM_WriteDest: game is not server (%s)", PRVM_NAME); - dest = PRVM_G_FLOAT(OFS_PARM1); + dest = (int)PRVM_G_FLOAT(OFS_PARM1); switch (dest) { case MSG_BROADCAST: @@ -753,10 +718,10 @@ sizebuf_t *VM_WriteDest (void) case MSG_ONE: destclient = (int) PRVM_G_FLOAT(OFS_PARM2); - if (destclient < 0 || destclient >= svs.maxclients || !svs.clients[destclient].active) - PRVM_ERROR("VM_clientcommand: %s: invalid client !\n", PRVM_NAME); + if (destclient < 0 || destclient >= svs.maxclients || !svs.clients[destclient].active || !svs.clients[destclient].netconnection) + PRVM_ERROR("VM_clientcommand: %s: invalid client !", PRVM_NAME); - return &svs.clients[destclient].message; + return &svs.clients[destclient].netconnection->message; case MSG_ALL: return &sv.reliable_datagram; @@ -774,22 +739,22 @@ sizebuf_t *VM_WriteDest (void) void VM_M_WriteByte (void) { - MSG_WriteByte (VM_WriteDest(), PRVM_G_FLOAT(OFS_PARM0)); + MSG_WriteByte (VM_WriteDest(), (int)PRVM_G_FLOAT(OFS_PARM0)); } void VM_M_WriteChar (void) { - MSG_WriteChar (VM_WriteDest(), PRVM_G_FLOAT(OFS_PARM0)); + MSG_WriteChar (VM_WriteDest(), (int)PRVM_G_FLOAT(OFS_PARM0)); } void VM_M_WriteShort (void) { - MSG_WriteShort (VM_WriteDest(), PRVM_G_FLOAT(OFS_PARM0)); + MSG_WriteShort (VM_WriteDest(), (int)PRVM_G_FLOAT(OFS_PARM0)); } void VM_M_WriteLong (void) { - MSG_WriteLong (VM_WriteDest(), PRVM_G_FLOAT(OFS_PARM0)); + MSG_WriteLong (VM_WriteDest(), (int)PRVM_G_FLOAT(OFS_PARM0)); } void VM_M_WriteAngle (void) @@ -812,6 +777,22 @@ void VM_M_WriteEntity (void) MSG_WriteShort (VM_WriteDest(), PRVM_G_EDICTNUM(OFS_PARM0)); } +//string(void) getextresponse = #624; // returns the next extResponse packet that was sent to this client +void VM_M_getextresponse (void) +{ + VM_SAFEPARMCOUNT(0,VM_argv); + + if (net_extresponse_count <= 0) + PRVM_G_INT(OFS_RETURN) = OFS_NULL; + else + { + int first; + --net_extresponse_count; + first = (net_extresponse_last + NET_EXTRESPONSE_MAX - net_extresponse_count) % NET_EXTRESPONSE_MAX; + PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(net_extresponse[first]); + } +} + prvm_builtin_t vm_m_builtins[] = { 0, // to be consistent with the old vm // common builtings (mostly) @@ -894,14 +875,17 @@ prvm_builtin_t vm_m_builtins[] = { VM_search_getfilename, // 77 VM_chr, VM_itof, - VM_ftoi, // 80 + VM_ftoe, // 80 VM_itof, // isString VM_altstr_count, VM_altstr_prepare, VM_altstr_get, VM_altstr_set, - VM_altstr_ins, // 86 - 0,0,0,0, // 90 + VM_altstr_ins, + VM_findflags, + VM_findchainflags, + VM_cvar_defstring, // 89 + 0, // 90 e10, // 100 e100, // 200 e100, // 300 @@ -937,8 +921,18 @@ prvm_builtin_t vm_m_builtins[] = { VM_cin_setstate, VM_cin_getstate, VM_cin_restart, // 465 - 0,0,0,0,0, // 470 - e10, // 480 + VM_drawline, // 466 + 0,0,0,0, // 470 + VM_asin, // #471 float(float s) VM_asin (DP_QC_ASINACOSATANATAN2TAN) + VM_acos, // #472 float(float c) VM_acos (DP_QC_ASINACOSATANATAN2TAN) + VM_atan, // #473 float(float t) VM_atan (DP_QC_ASINACOSATANATAN2TAN) + VM_atan2, // #474 float(float c, float s) VM_atan2 (DP_QC_ASINACOSATANATAN2TAN) + VM_tan, // #475 float(float a) VM_tan (DP_QC_ASINACOSATANATAN2TAN) + VM_strlennocol, // #476 float(string s) : DRESK - String Length (not counting color codes) (DP_QC_STRINGCOLORFUNCTIONS) + VM_strdecolorize, // #477 string(string s) : DRESK - Decolorized String (DP_QC_STRINGCOLORFUNCTIONS) + VM_strftime, // #478 string(float uselocaltime, string format, ...) (DP_QC_STRFTIME) + 0, // 479 + 0, // 480 e10, // 490 e10, // 500 e100, // 600 @@ -951,12 +945,12 @@ prvm_builtin_t vm_m_builtins[] = { VM_M_writetofile, VM_M_isfunction, VM_M_getresolution, - VM_M_keynumtostring, + VM_keynumtostring, VM_M_findkeysforcommand,// 610 VM_M_getserverliststat, VM_M_getserverliststring, VM_parseentitydata, - VM_M_stringtokeynum, + VM_stringtokeynum, VM_M_resetserverlistmasks, VM_M_setserverlistmaskstring, VM_M_setserverlistmasknumber, @@ -965,7 +959,8 @@ prvm_builtin_t vm_m_builtins[] = { VM_M_refreshserverlist, VM_M_getserverlistnumber, VM_M_getserverlistindexforkey, - VM_M_addwantedserverlistkey // 623 + VM_M_addwantedserverlistkey, // 623 + VM_M_getextresponse }; const int vm_m_numbuiltins = sizeof(vm_m_builtins) / sizeof(prvm_builtin_t);