static void Cvar_NotifyProg(prvm_prog_t *prog, cvar_t *var, char *oldvalue) { int func = PRVM_allfunction(CvarUpdated); if(!func) return; PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, var->name); PRVM_G_INT(OFS_PARM1) = PRVM_SetTempString(prog, oldvalue); prog->ExecuteProgram(prog, func, "QC function CvarUpdated is missing"); }
/* ========= VM_M_getserverliststring string getserverliststring(float field, float hostnr) ========= */ static void VM_M_getserverliststring(prvm_prog_t *prog) { serverlist_entry_t *cache; int hostnr; VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); PRVM_G_INT(OFS_RETURN) = OFS_NULL; hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); if(hostnr < 0 || hostnr >= serverlist_viewcount) { Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); return; } cache = ServerList_GetViewEntry(hostnr); switch( (int) PRVM_G_FLOAT(OFS_PARM0) ) { case SLIF_CNAME: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.cname ); break; case SLIF_NAME: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.name ); break; case SLIF_QCSTATUS: PRVM_G_INT (OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.qcstatus ); break; case SLIF_PLAYERS: PRVM_G_INT (OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.players ); break; case SLIF_GAME: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.game ); break; case SLIF_MOD: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.mod ); break; case SLIF_MAP: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->info.map ); break; // TODO remove this again case 1024: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->line1 ); break; case 1025: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, cache->line2 ); break; default: Con_Print("VM_M_getserverliststring: bad field number passed!\n"); } }
static void VM_M_crypto_getidfp(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; char idfp[FP64_SIZE + 1]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getidfp); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, idfp, sizeof(idfp), NULL)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, idfp ); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
static void VM_M_crypto_getencryptlevel(prvm_prog_t *prog) { lhnetaddress_t addr; const char *s; int aeslevel; char vabuf[1024]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getencryptlevel); s = PRVM_G_STRING( OFS_PARM0 ); VM_CheckEmptyString( prog, s ); if(LHNETADDRESS_FromString(&addr, s, 26000) && Crypto_RetrieveHostKey(&addr, NULL, NULL, 0, NULL, 0, &aeslevel)) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, aeslevel ? va(vabuf, sizeof(vabuf), "%d AES128", aeslevel) : "0"); else PRVM_G_INT( OFS_RETURN ) = OFS_NULL; }
static void VM_M_getgamedirinfo(prvm_prog_t *prog) { int nr, item; VM_SAFEPARMCOUNT(2, VM_getgamedirinfo); nr = (int)PRVM_G_FLOAT(OFS_PARM0); item = (int)PRVM_G_FLOAT(OFS_PARM1); PRVM_G_INT( OFS_RETURN ) = OFS_NULL; if(nr >= 0 && nr < fs_all_gamedirs_count) { if(item == 0) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, fs_all_gamedirs[nr].name ); else if(item == 1) PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString( prog, fs_all_gamedirs[nr].description ); } }
static OSGK_ScriptResult dpGlobal_query (void* objTag, void* methTag, size_t numParams, OSGK_ScriptVariant** params, OSGK_ScriptVariant** returnVal) { clgecko_t *instance = (clgecko_t *) objTag; OSGK_ScriptVariant* strVal; OSGK_ScriptResult result = srFailed; prvm_prog_t * saveProg; /* Can happen when created from console */ if (instance->ownerProg < 0) return srFailed; /* Require exactly one param, for now */ if (numParams != 1) return srFailed; strVal = osgk_variant_convert (params[0], svtString); if (strVal == 0) return srFailed; saveProg = prog; PRVM_SetProg(instance->ownerProg); if (prog->funcoffsets.Gecko_Query) { OSGK_String* paramStr, *resultStr; if (!osgk_variant_get_string (strVal, ¶mStr)) return srFailed; PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString (instance->name); PRVM_G_INT(OFS_PARM1) = PRVM_SetTempString (osgk_string_get (paramStr)); PRVM_ExecuteProgram(prog->funcoffsets.Gecko_Query,"Gecko_Query() required"); resultStr = osgk_string_create (PRVM_G_STRING (OFS_RETURN)); *returnVal = osgk_variant_create_string (cl_geckoembedding, resultStr); osgk_release (resultStr); result = srSuccess; } prog = saveProg; return result; }
static void VM_M_crypto_getmyidfp(prvm_prog_t *prog) { int i; char idfp[FP64_SIZE + 1]; VM_SAFEPARMCOUNT(1,VM_M_crypto_getmykey); i = PRVM_G_FLOAT( OFS_PARM0 ); switch(Crypto_RetrieveLocalKey(i, NULL, 0, idfp, sizeof(idfp), NULL)) { case -1: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, ""); break; case 0: PRVM_G_INT( OFS_RETURN ) = OFS_NULL; break; default: case 1: PRVM_G_INT( OFS_RETURN ) = PRVM_SetTempString(prog, idfp); break; } }
/* ========= VM_M_getserverlistnumber float getserverlistnumber(float field, float hostnr) ========= */ static void VM_M_getserverlistnumber(prvm_prog_t *prog) { serverlist_entry_t *cache; int hostnr; VM_SAFEPARMCOUNT(2, VM_M_getserverliststring); PRVM_G_INT(OFS_RETURN) = OFS_NULL; hostnr = (int)PRVM_G_FLOAT(OFS_PARM1); if(hostnr < 0 || hostnr >= serverlist_viewcount) { Con_Print("VM_M_getserverliststring: bad hostnr passed!\n"); return; } cache = ServerList_GetViewEntry(hostnr); switch( (int) PRVM_G_FLOAT(OFS_PARM0) ) { case SLIF_MAXPLAYERS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.maxplayers; break; case SLIF_NUMPLAYERS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.numplayers; break; case SLIF_NUMBOTS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.numbots; break; case SLIF_NUMHUMANS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.numhumans; break; case SLIF_FREESLOTS: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.freeslots; break; case SLIF_PING: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.ping; break; case SLIF_PROTOCOL: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.protocol; break; case SLIF_ISFAVORITE: PRVM_G_FLOAT( OFS_RETURN ) = cache->info.isfavorite; break; default: Con_Print("VM_M_getserverlistnumber: bad field number passed!\n"); } }