]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_cmds.c
cvar, prvm_cmds: Remove redundant Cmd_Exists checks
[xonotic/darkplaces.git] / prvm_cmds.c
index 4990834d914fc12e66cea78203edbb1a0ec45976..07adabf396246c2a6ec3b0e140ff3d389b1813c7 100644 (file)
@@ -58,6 +58,34 @@ void VM_CheckEmptyString(prvm_prog_t *prog, const char *s)
                prog->error_cmd("%s: Bad string", prog->name);
 }
 
+qbool PRVM_ConsoleCommand (prvm_prog_t *prog, const char *text, int *func, qbool preserve_self, int curself, double ptime, qbool prog_loaded, const char *error_message)
+{
+       int restorevm_tempstringsbuf_cursize;
+       int save_self = 0; // hush compiler warning
+       qbool r = false;
+
+       if(!prog_loaded)
+               return false;
+
+       if(func)
+       {
+               if(preserve_self)
+                       save_self = PRVM_gameglobaledict(self);
+               if(ptime)
+                       PRVM_gameglobalfloat(time) = ptime;
+               PRVM_gameglobaledict(self) = curself;
+               restorevm_tempstringsbuf_cursize = prog->tempstringsbuf.cursize;
+               PRVM_G_INT(OFS_PARM0) = PRVM_SetTempString(prog, text);
+               prog->ExecuteProgram(prog, *func, error_message);
+               prog->tempstringsbuf.cursize = restorevm_tempstringsbuf_cursize;
+               if(preserve_self)
+                       PRVM_gameglobaledict(self) = save_self;
+               r = (int) PRVM_G_FLOAT(OFS_RETURN) != 0;
+       }
+
+       return r;
+}
+
 void VM_GenerateFrameGroupBlend(prvm_prog_t *prog, framegroupblend_t *framegroupblend, const prvm_edict_t *ed)
 {
        // self.frame is the interpolation target (new frame)
@@ -595,7 +623,7 @@ void VM_break(prvm_prog_t *prog)
 
 /*
 =================
-VM_localcmd_client
+VM_localcmd_local
 
 Sends text over to the client's execution buffer
 
@@ -603,12 +631,12 @@ Sends text over to the client's execution buffer
 cmd (string, ...)
 =================
 */
-void VM_localcmd_client(prvm_prog_t *prog)
+void VM_localcmd_local(prvm_prog_t *prog)
 {
        char string[VM_STRINGTEMP_LENGTH];
-       VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_client);
+       VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_local);
        VM_VarString(prog, 0, string, sizeof(string));
-       Cbuf_AddText(&cmd_client, string);
+       Cbuf_AddText(cmd_local, string);
 }
 
 /*
@@ -626,7 +654,7 @@ void VM_localcmd_server(prvm_prog_t *prog)
        char string[VM_STRINGTEMP_LENGTH];
        VM_SAFEPARMCOUNTRANGE(1, 8, VM_localcmd_server);
        VM_VarString(prog, 0, string, sizeof(string));
-       Cbuf_AddText(&cmd_server, string);
+       Cbuf_AddText(cmd_local, string);
 }
 
 static qbool PRVM_Cvar_ReadOk(prvm_prog_t *prog, const char *string)
@@ -1335,12 +1363,11 @@ coredump()
 */
 void VM_coredump(prvm_prog_t *prog)
 {
-       cmd_state_t *cmd =      !host_isclient.integer ? &cmd_server : &cmd_client;
        VM_SAFEPARMCOUNT(0,VM_coredump);
 
-       Cbuf_AddText(cmd, "prvm_edicts ");
-       Cbuf_AddText(cmd, prog->name);
-       Cbuf_AddText(cmd, "\n");
+       Cbuf_AddText(cmd_local, "prvm_edicts ");
+       Cbuf_AddText(cmd_local, prog->name);
+       Cbuf_AddText(cmd_local, "\n");
 }
 
 /*
@@ -1521,7 +1548,7 @@ void VM_changelevel(prvm_prog_t *prog)
                return;
        svs.changelevel_issued = true;
 
-       Cbuf_AddText(&cmd_server, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
+       Cbuf_AddText(cmd_local, va(vabuf, sizeof(vabuf), "changelevel %s\n", PRVM_G_STRING(OFS_PARM0)));
 }
 
 /*
@@ -1669,7 +1696,7 @@ void VM_registercvar(prvm_prog_t *prog)
                return;
 
 // check for overlap with a command
-       if (Cmd_Exists(&cmd_client, name) || Cmd_Exists(&cmd_server, name))
+       if (Cmd_Exists(cmd_local, name))
        {
                VM_Warning(prog, "VM_registercvar: %s is a command\n", name);
                return;
@@ -6122,9 +6149,9 @@ static void clippointtosurface(prvm_prog_t *prog, prvm_edict_t *ed, model_t *mod
 
 static msurface_t *getsurface(model_t *model, int surfacenum)
 {
-       if (surfacenum < 0 || surfacenum >= model->nummodelsurfaces)
+       if (surfacenum < 0 || surfacenum >= model->submodelsurfaces_end - model->submodelsurfaces_start)
                return NULL;
-       return model->data_surfaces + surfacenum + model->firstmodelsurface;
+       return model->data_surfaces + surfacenum + model->submodelsurfaces_start;
 }
 
 
@@ -6299,9 +6326,9 @@ void VM_getsurfacenearpoint(prvm_prog_t *prog)
        applytransform_inverted(prog, point, ed, p);
        best = -1;
        bestdist = 1000000000;
-       for (surfacenum = 0;surfacenum < model->nummodelsurfaces;surfacenum++)
+       for (surfacenum = model->submodelsurfaces_start;surfacenum < model->submodelsurfaces_end;surfacenum++)
        {
-               surface = model->data_surfaces + surfacenum + model->firstmodelsurface;
+               surface = model->data_surfaces + surfacenum;
                // first see if the nearest point on the surface's box is closer than the previous match
                clipped[0] = bound(surface->mins[0], p[0], surface->maxs[0]) - p[0];
                clipped[1] = bound(surface->mins[1], p[1], surface->maxs[1]) - p[1];
@@ -6316,7 +6343,7 @@ void VM_getsurfacenearpoint(prvm_prog_t *prog)
                        if (dist < bestdist)
                        {
                                // that's closer too, store it as the best match
-                               best = surfacenum;
+                               best = surfacenum - model->submodelsurfaces_start;
                                bestdist = dist;
                        }
                }