World_PrintAreaStats(&sv.world, "server");
}
+static qbool SV_CanSave(void)
+{
+ prvm_prog_t *prog = SVVM_prog;
+ if(SV_IsLocalGame() == 1)
+ {
+ // singleplayer checks
+ if ((svs.clients[0].active && PRVM_serveredictfloat(svs.clients[0].edict, deadflag)))
+ {
+ Con_Print("Can't savegame with a dead player\n");
+ return false;
+ }
+
+ if(host.hook.CL_Intermission && host.hook.CL_Intermission())
+ {
+ Con_Print("Can't save in intermission.\n");
+ return false;
+ }
+ }
+ else
+ Con_Print(CON_WARN "Warning: saving a multiplayer game may have strange results when restored (to properly resume, all players must join in the same player slots and then the game can be reloaded).\n");
+ return true;
+
+}
+
/*
===============
SV_Init
Cvar_RegisterVariable (&sv_mapformat_is_quake3);
SV_InitOperatorCommands();
+ host.hook.SV_CanSave = SV_CanSave;
sv_mempool = Mem_AllocPool("server", 0, NULL);
}
return 0;
}
-dp_model_t *SV_GetModelByIndex(int modelindex)
+model_t *SV_GetModelByIndex(int modelindex)
{
return (modelindex > 0 && modelindex < MAX_MODELS) ? sv.models[modelindex] : NULL;
}
-dp_model_t *SV_GetModelFromEdict(prvm_edict_t *ed)
+model_t *SV_GetModelFromEdict(prvm_edict_t *ed)
{
prvm_prog_t *prog = SVVM_prog;
int modelindex;
}
}
+qbool SV_IsLocalServer(void)
+{
+ if(host_isclient.integer && host_client && LHNETADDRESS_GetAddressType(&host_client->netconnection->peeraddress) == LHNETADDRESSTYPE_LOOP)
+ return true;
+ return false;
+}
+
/*
================
SV_SpawnServer
prvm_edict_t *ent;
int i;
char *entities;
- dp_model_t *worldmodel;
+ model_t *worldmodel;
char modelname[sizeof(sv.worldname)];
char vabuf[1024];
// SV_LockThreadMutex();
- if(cls.state == ca_dedicated)
+ if(!host_isclient.integer)
Sys_MakeProcessNice();
-
- if (cls.state != ca_dedicated)
+ else
{
SCR_BeginLoadingPlaque(false);
S_StopAllSounds();
{
Con_Printf("Couldn't load map %s\n", modelname);
- if(cls.state == ca_dedicated)
+ if(!host_isclient.integer)
Sys_MakeProcessMean();
// SV_UnlockThreadMutex();
// Once all init frames have been run, we consider svqc code fully initialized.
prog->inittime = host.realtime;
- if (cls.state == ca_dedicated)
+ if(!host_isclient.integer)
Mod_PurgeUnused();
// create a baseline for more efficient communications
Con_Printf("Server spawned.\n");
NetConn_Heartbeat (2);
- if(cls.state == ca_dedicated)
+ if(!host_isclient.integer)
Sys_MakeProcessMean();
// SV_UnlockThreadMutex();
}
+/*
+ * Returns number of slots if we're a listen server.
+ * Returns 0 if we're a dedicated server.
+ */
+int SV_IsLocalGame(void)
+{
+ if (sv.active && &svs.clients[0] && LHNETADDRESS_GetAddressType(&svs.clients[0].netconnection->peeraddress) == LHNETADDRESSTYPE_LOOP)
+ return svs.maxclients;
+ return 0;
+}
+
/*
==================
SV_Shutdown