Cbuf_AddText(string);
}
+static qboolean PRVM_Cvar_ReadOk(const char *string)
+{
+ cvar_t *cvar;
+ cvar = Cvar_FindVar(string);
+ return ((cvar) && ((cvar->flags & CVAR_PRIVATE) == 0));
+}
+
/*
=================
VM_cvar
VM_SAFEPARMCOUNTRANGE(1,8,VM_cvar);
VM_VarString(0, string, sizeof(string));
VM_CheckEmptyString(string);
- PRVM_G_FLOAT(OFS_RETURN) = Cvar_VariableValue(string);
+ PRVM_G_FLOAT(OFS_RETURN) = PRVM_Cvar_ReadOk(string) ? Cvar_VariableValue(string) : 0;
}
/*
VM_SAFEPARMCOUNTRANGE(1,8,VM_cvar_string);
VM_VarString(0, string, sizeof(string));
VM_CheckEmptyString(string);
- PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(Cvar_VariableString(string));
+ PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(PRVM_Cvar_ReadOk(string) ? Cvar_VariableString(string) : "");
}
int f;
const char *s, *t;
prvm_edict_t *ent, *chain;
+ int chainfield;
- VM_SAFEPARMCOUNT(2,VM_findchain);
+ VM_SAFEPARMCOUNTRANGE(2,3,VM_findchain);
- if (prog->fieldoffsets.chain < 0)
- PRVM_ERROR("VM_findchain: %s doesnt have a chain field !", PRVM_NAME);
+ if(prog->argc == 3)
+ chainfield = PRVM_G_INT(OFS_PARM2);
+ else
+ chainfield = prog->fieldoffsets.chain;
+ if (chainfield < 0)
+ PRVM_ERROR("VM_findchain: %s doesnt have the specified chain field !", PRVM_NAME);
chain = prog->edicts;
if (strcmp(t,s))
continue;
- PRVM_EDICTFIELDVALUE(ent,prog->fieldoffsets.chain)->edict = PRVM_NUM_FOR_EDICT(chain);
+ PRVM_EDICTFIELDVALUE(ent,chainfield)->edict = PRVM_NUM_FOR_EDICT(chain);
chain = ent;
}
int f;
float s;
prvm_edict_t *ent, *chain;
+ int chainfield;
- VM_SAFEPARMCOUNT(2, VM_findchainfloat);
+ VM_SAFEPARMCOUNTRANGE(2, 3, VM_findchainfloat);
- if (prog->fieldoffsets.chain < 0)
- PRVM_ERROR("VM_findchainfloat: %s doesnt have a chain field !", PRVM_NAME);
+ if(prog->argc == 3)
+ chainfield = PRVM_G_INT(OFS_PARM2);
+ else
+ chainfield = prog->fieldoffsets.chain;
+ if (chainfield < 0)
+ PRVM_ERROR("VM_findchain: %s doesnt have the specified chain field !", PRVM_NAME);
chain = (prvm_edict_t *)prog->edicts;
if (PRVM_E_FLOAT(ent,f) != s)
continue;
- PRVM_EDICTFIELDVALUE(ent,prog->fieldoffsets.chain)->edict = PRVM_EDICT_TO_PROG(chain);
+ PRVM_EDICTFIELDVALUE(ent,chainfield)->edict = PRVM_EDICT_TO_PROG(chain);
chain = ent;
}
int f;
int s;
prvm_edict_t *ent, *chain;
+ int chainfield;
- VM_SAFEPARMCOUNT(2, VM_findchainflags);
+ VM_SAFEPARMCOUNTRANGE(2, 3, VM_findchainflags);
- if (prog->fieldoffsets.chain < 0)
- PRVM_ERROR("VM_findchainflags: %s doesnt have a chain field !", PRVM_NAME);
+ if(prog->argc == 3)
+ chainfield = PRVM_G_INT(OFS_PARM2);
+ else
+ chainfield = prog->fieldoffsets.chain;
+ if (chainfield < 0)
+ PRVM_ERROR("VM_findchain: %s doesnt have the specified chain field !", PRVM_NAME);
chain = (prvm_edict_t *)prog->edicts;
if (!((int)PRVM_E_FLOAT(ent,f) & s))
continue;
- PRVM_EDICTFIELDVALUE(ent,prog->fieldoffsets.chain)->edict = PRVM_EDICT_TO_PROG(chain);
+ PRVM_EDICTFIELDVALUE(ent,chainfield)->edict = PRVM_EDICT_TO_PROG(chain);
chain = ent;
}
int numseparators;
int separatorlen[7];
const char *separators[7];
- const char *p;
+ const char *p, *p0;
const char *token;
char tokentext[MAX_INPUTLINE];
{
token = tokentext + j;
tokens_startpos[num_tokens] = p - tokenize_string;
+ p0 = p;
while (*p)
{
for (k = 0;k < numseparators;k++)
if (j < (int)sizeof(tokentext)-1)
tokentext[j++] = *p;
p++;
+ p0 = p;
}
- tokens_endpos[num_tokens] = p - tokenize_string;
+ tokens_endpos[num_tokens] = p0 - tokenize_string;
if (j >= (int)sizeof(tokentext))
break;
tokentext[j++] = 0;
float gettime(void)
=========
*/
+extern double host_starttime;
void VM_gettime(void)
{
- VM_SAFEPARMCOUNT(0,VM_gettime);
+ int timer_index;
+
+ VM_SAFEPARMCOUNTRANGE(0,1,VM_gettime);
- PRVM_G_FLOAT(OFS_RETURN) = (float) realtime;
+ if(prog->argc == 0)
+ {
+ PRVM_G_FLOAT(OFS_RETURN) = (float) realtime;
+ }
+ else
+ {
+ timer_index = (int) PRVM_G_FLOAT(OFS_PARM0);
+ switch(timer_index)
+ {
+ case 0: // GETTIME_FRAMESTART
+ PRVM_G_FLOAT(OFS_RETURN) = (float) realtime;
+ break;
+ case 1: // GETTIME_REALTIME
+ PRVM_G_FLOAT(OFS_RETURN) = (float) Sys_DoubleTime();
+ break;
+ case 2: // GETTIME_HIRES
+ PRVM_G_FLOAT(OFS_RETURN) = (float) (Sys_DoubleTime() - realtime);
+ break;
+ case 3: // GETTIME_UPTIME
+ PRVM_G_FLOAT(OFS_RETURN) = (float) Sys_DoubleTime() - host_starttime;
+ break;
+ default:
+ VM_Warning("VM_gettime: %s: unsupported timer specified, returning realtime\n", PRVM_NAME);
+ PRVM_G_FLOAT(OFS_RETURN) = (float) realtime;
+ break;
+ }
+ }
}
/*