public static void SV_WriteLevelFile( ) { String name; QuakeFile f; Com.DPrintf("SV_WriteLevelFile()\\n"); name = FS.Gamedir() + "/save/current/" + SV_INIT.sv.name + ".sv2"; try { f = new QuakeFile(name, FileAccess.ReadWrite); for (var i = 0; i < Defines.MAX_CONFIGSTRINGS; i++) { f.Write(SV_INIT.sv.configstrings[i]); } CM.CM_WritePortalState(f); f.Dispose(); } catch (Exception e) { Com.Printf("Failed to open " + name + "\\n"); e.PrintStackTrace(); } name = FS.Gamedir() + "/save/current/" + SV_INIT.sv.name + ".sav"; GameSave.WriteLevel(name); }
public static void WriteGame(String filename, Boolean autosave) { try { QuakeFile f; if (!autosave) { PlayerClient.SaveClientData(); } f = new QuakeFile(filename, FileAccess.ReadWrite); if (f == null) { GameBase.gi.Error("Couldn't write to " + filename); } GameBase.game.autosaved = autosave; GameBase.game.Write(f); GameBase.game.autosaved = false; for (var i = 0; i < GameBase.game.maxclients; i++) { GameBase.game.clients[i].Write(f); } f.Dispose(); } catch (Exception e) { e.PrintStackTrace(); } }
public static void WriteLevel(String filename) { try { Int32 i; edict_t ent; QuakeFile f; f = new QuakeFile(filename, FileAccess.ReadWrite); if (f == null) { GameBase.gi.Error("Couldn't open for writing: " + filename); } GameBase.level.Write(f); for (i = 0; i < GameBase.num_edicts; i++) { ent = GameBase.g_edicts[i]; if (!ent.inuse) { continue; } f.Write(i); ent.Write(f); } i = -1; f.Write(-1); f.Dispose(); } catch (Exception e) { e.PrintStackTrace(); } }
public static void SV_WriteServerFile(Boolean autosave) { QuakeFile f; cvar_t var; String filename, name, string_renamed, comment; Com.DPrintf("SV_WriteServerFile(" + (autosave ? "true" : "false") + ")\\n"); filename = FS.Gamedir() + "/save/current/server.ssv"; try { f = new QuakeFile(filename, FileAccess.ReadWrite); if (!autosave) { var now = DateTime.Now; comment = Com.Sprintf("%2i:%2i %2i/%2i ", now.Hour, now.Minute, now.Month + 1, now.Day); comment += SV_INIT.sv.configstrings[Defines.CS_NAME]; } else { comment = "ENTERING " + SV_INIT.sv.configstrings[Defines.CS_NAME]; } f.Write(comment); f.Write(SV_INIT.svs.mapcmd); for (var = Globals.cvar_vars; var != null; var = var.next) { if (0 == (var.flags & Defines.CVAR_LATCH)) { continue; } if (var.name.Length >= Defines.MAX_OSPATH - 1 || var.string_renamed.Length >= 128 - 1) { Com.Printf("Cvar too long: " + var.name + " = " + var.string_renamed + "\\n"); continue; } name = var.name; string_renamed = var.string_renamed; try { f.Write(name); f.Write(string_renamed); } catch (IOException e2) { } } f.Write(( String )null); f.Dispose(); } catch (Exception e) { Com.Printf("Couldn't write " + filename + "\\n"); } filename = FS.Gamedir() + "/save/current/game.ssv"; GameSave.WriteGame(filename, autosave); }
public static void ReadLevel(String filename) { try { edict_t ent; QuakeFile f = new QuakeFile(filename, FileAccess.Read); if (f == null) { GameBase.gi.Error("Couldn't read level file " + filename); } CreateEdicts(); GameBase.num_edicts = ( Int32 )GameBase.maxclients.value + 1; GameBase.level.Read(f); while (true) { var entnum = f.ReadInt32(); if (entnum == -1) { break; } if (entnum >= GameBase.num_edicts) { GameBase.num_edicts = entnum + 1; } ent = GameBase.g_edicts[entnum]; ent.Read(f); ent.Cleararealinks(); GameBase.gi.Linkentity(ent); } f.Dispose(); for (var i = 0; i < GameBase.maxclients.value; i++) { ent = GameBase.g_edicts[i + 1]; ent.client = GameBase.game.clients[i]; ent.client.pers.connected = false; } for (var i = 0; i < GameBase.num_edicts; i++) { ent = GameBase.g_edicts[i]; if (!ent.inuse) { continue; } if (ent.classname != null) { if (Lib.Strcmp(ent.classname, "target_crosslevel_target") == 0) { ent.nextthink = GameBase.level.time + ent.delay; } } } } catch (Exception e) { e.PrintStackTrace(); } }
public static void WriteVariables(String path) { cvar_t var; QuakeFile f; String buffer; f = new QuakeFile(path, System.IO.FileAccess.ReadWrite); if (f == null) { return; } try { f.Seek(f.Length); } catch (Exception e1) { f.Dispose(); return; } for (var = cvar_vars; var != null; var = var.next) { if ((var.flags & CVAR_ARCHIVE) != 0) { buffer = "set " + var.name + " \\\"" + var.string_renamed + "\\\"\\n"; try { f.Write(buffer); } catch (Exception e) { } } } f.Dispose(); }
public static void SV_Loadgame_f( ) { if (Cmd.Argc() != 2) { Com.Printf("USAGE: loadgame <directory>\\n"); return; } Com.Printf("Loading game...\\n"); var dir = Cmd.Argv(1); if ((dir.IndexOf("..") > -1) || (dir.IndexOf("/") > -1) || (dir.IndexOf("\\\\") > -1)) { Com.Printf("Bad savedir.\\n"); } var name = FS.Gamedir() + "/save/" + Cmd.Argv(1) + "/server.ssv"; QuakeFile f; try { f = new QuakeFile(name, FileAccess.Read); } catch (FileNotFoundException e) { Com.Printf("No such savegame: " + name + "\\n"); return; } try { f.Dispose(); } catch (IOException e1) { e1.PrintStackTrace(); } SV_CopySaveGame(Cmd.Argv(1), "current"); SV_ReadServerFile(); SV_INIT.sv.state = Defines.ss_dead; SV_INIT.SV_Map(false, SV_INIT.svs.mapcmd, true); }
static void SVCmd_WriteIP_f( ) { QuakeFile f; String name; Byte[] b; Int32 i; cvar_t game; game = GameBase.gi.Cvar_f("game", "", 0); if (game.string_renamed == null) { name = Defines.GAMEVERSION + "/listip.cfg"; } else { name = game.string_renamed + "/listip.cfg"; } GameBase.gi.Cprintf(null, Defines.PRINT_HIGH, "Writing " + name + ".\\n"); f = new QuakeFile(name, FileAccess.ReadWrite); //Lib.Fopen(name, "rw"); if (f == null) { GameBase.gi.Cprintf(null, Defines.PRINT_HIGH, "Couldn't open " + name + "\\n"); return; } try { f.Write("set filterban " + ( Int32 )GameBase.filterban.value + "\\n"); for (i = 0; i < numipfilters; i++) { b = Lib.GetIntBytes(ipfilters[i].compare); f.Write("sv addip " + (b[0] & 0xff) + "." + (b[1] & 0xff) + "." + (b[2] & 0xff) + "." + (b[3] & 0xff) + "\\n"); } } catch (IOException e) { Com.Printf("IOError in SVCmd_WriteIP_f:" + e); } f.Dispose(); }