]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
Added a lot of builtin commands to prvm_cmds.c (mostly from pr_cmds).
[xonotic/darkplaces.git] / prvm_edict.c
index ec2f2b18528f5486fde1af593e2d4dc35b7764b8..9ba389a7b9f84d5faed5dfe3e4edc995c48bef68 100644 (file)
@@ -54,7 +54,7 @@ void PRVM_MEM_Alloc()
        prog->max_edicts = min(prog->max_edicts,prog->limit_edicts);
 
        // edictprivate_size has to be min as big prvm_edict_private_t
-       prog->edictprivate_size = max(prog->edictprivate_size,sizeof(prvm_edict_private_t)); 
+       prog->edictprivate_size = max(prog->edictprivate_size,(int)sizeof(prvm_edict_private_t)); 
 
        // alloc edicts
        prog->edicts = Mem_Alloc(prog->edicts_mempool,prog->limit_edicts * sizeof(prvm_edict_t));
@@ -215,8 +215,10 @@ prvm_edict_t *PRVM_ED_Alloc (void)
 
        // the client qc dont need maxclients
        // thus it doesnt need to use svs.maxclients
-       // AK: changed i=svs.maxclients+1
-       for (i = 0;i < prog->num_edicts;i++)
+       // AK:  changed i=svs.maxclients+1
+       // AK:  changed so the edict 0 wont spawned -> used as reserved/world entity
+       //              although the menu/client has no world
+       for (i = 1;i < prog->num_edicts;i++)
        {
                e = PRVM_EDICT_NUM(i);
                // the first couple seconds of server time can involve a lot of
@@ -429,16 +431,16 @@ char *PRVM_UglyValueString (etype_t type, prvm_eval_t *val)
        char *s;
        ddef_t *def;
        mfunction_t *f;
-
+       
        type &= ~DEF_SAVEGLOBAL;
-
+       
        switch (type)
        {
        case ev_string:
                // Parse the string a bit to turn special characters
                // (like newline, specifically) into escape codes,
                // this fixes saving games from various mods
-               sprintf (line, "%s", PRVM_GetString(val->string));
+               s = PRVM_GetString (val->string);
                for (i = 0;i < (int)sizeof(line) - 2 && *s;)
                {
                        if (*s == '\n')
@@ -456,33 +458,32 @@ char *PRVM_UglyValueString (etype_t type, prvm_eval_t *val)
                        s++;
                }
                line[i] = '\0';
-               
                break;
        case ev_entity:
-               sprintf (line, "%i", PRVM_NUM_FOR_EDICT(PRVM_PROG_TO_EDICT(val->edict)));
+               snprintf (line, sizeof (line), "%i", PRVM_NUM_FOR_EDICT(PRVM_PROG_TO_EDICT(val->edict)));
                break;
        case ev_function:
                f = pr_functions + val->function;
-               sprintf (line, "%s", PRVM_GetString(f->s_name));
+               snprintf (line, sizeof (line), "%s", PRVM_GetString(f->s_name));
                break;
        case ev_field:
                def = PRVM_ED_FieldAtOfs ( val->_int );
-               s = PRVM_GetString(def->s_name);
+               snprintf (line, sizeof (line), ".%s", PRVM_GetString(def->s_name));
                break;
        case ev_void:
-               sprintf (line, "void");
+               snprintf (line, sizeof (line), "void");
                break;
        case ev_float:
-               sprintf (line, "%f", val->_float);
+               snprintf (line, sizeof (line), "%f", val->_float);
                break;
        case ev_vector:
-               sprintf (line, "%f %f %f", val->vector[0], val->vector[1], val->vector[2]);
+               snprintf (line, sizeof (line), "%f %f %f", val->vector[0], val->vector[1], val->vector[2]);
                break;
        default:
-               sprintf (line, "bad type %i", type);
+               snprintf (line, sizeof (line), "bad type %i", type);
                break;
        }
-
+       
        return line;
 }
 
@@ -1209,7 +1210,7 @@ void PRVM_ResetProg()
        prog->edictstring_mempool = t2;
        prog->edicts_mempool = t3;
 
-       PRVM_GCALL(reset_cmd);
+       PRVM_GCALL(reset_cmd)();
 }
 
 /*
@@ -1444,10 +1445,13 @@ void PRVM_LoadProgs (const char * filename, int numrequiredfunc, char **required
        if(PRVM_ED_FindGlobal("time"))
                prog->flag |= PRVM_GE_TIME;
 
-       if(PRVM_ED_FindFieldOffset ("classname"))
+       if(PRVM_ED_FindField ("chain"))
+               prog->flag |= PRVM_FE_CHAIN;
+
+       if(PRVM_ED_FindField ("classname"))
                prog->flag |= PRVM_FE_CLASSNAME; 
 
-       if(PRVM_ED_FindFieldOffset ("nextthink") && PRVM_ED_FindFieldOffset("frame") && PRVM_ED_FindFieldOffset("think") 
+       if(PRVM_ED_FindField ("nextthink") && PRVM_ED_FindField ("frame") && PRVM_ED_FindField ("think") 
                && prog->flag &  PRVM_GE_TIME && prog->self) 
                prog->flag |= PRVM_OP_STATE;