예제 #1
0
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");
}
예제 #2
0
/*
=========
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");
	}
}
예제 #3
0
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;
}
예제 #4
0
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;
}
예제 #5
0
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 );
	}
}
예제 #6
0
파일: cl_gecko.c 프로젝트: VenFPS/Vengeance
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, &paramStr)) 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;
}
예제 #7
0
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;
	}
}
예제 #8
0
/*
=========
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");
	}
}