public bool LoadProtosFromFile(String Path, String Version, MSGParser FOObj, List <ItemProto> LoadedProtos, Dictionary <string, ItemProtoCustomField> CustomFields) { List <String> Lines = new List <string>(File.ReadAllLines(Path, new UTF8Encoding(false))); this._loadedProtos = LoadedProtos; return(Load(Path, Version, Lines, FOObj, CustomFields)); }
public EncounterGroupParser(string filename, FOGAMEParser gameParser, DialogListParser dialogParser, FOGMParser gmParser, MSGParser fodlgParser) { _gameParser = gameParser; _gmParser = gmParser; _fodlgParser = fodlgParser; _filename = filename; _groups = EncounterGroupFormat.Load(filename); }
public bool Save(string FilePath, string Version, List <String> Lines, MSGParser FOObj, Dictionary <String, ItemProtoCustomField> CustomFields) { List <int> ProcessedPids = new List <int>(); bool DuplicateFound = false; _saveLines.Clear(); _saveLines.Add("# " + Version); _saveLines.Add(""); _saveProtos.Sort(); int j = _saveProtos.Count; for (int i = 0; i < j; i++) { _saveLines.Add("[Proto]"); ItemProto Prot = _saveProtos[i]; ParseData(ref Prot, false, false); if (ProcessedPids.Contains(Prot.ProtoId)) { Utils.Log("An object with the ProtoId " + Prot.ProtoId + " was already saved. Skipping proto '" + Prot.Name + '\''); //Message.Show("An object with the ProtoId " + Prot.ProtoId + " was already saved. Skipping proto '"+Prot.Name+'\'', // System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, true); DuplicateFound = true; continue; } if (Prot != null && Prot.CustomFields != null) { foreach (KeyValuePair <String, ItemProtoCustomField> kvp in Prot.CustomFields) { if (kvp.Value.Value is bool) { _saveLines.Add(kvp.Key + "=" + ((bool)kvp.Value.Value == true?"1":"0")); } else { _saveLines.Add(kvp.Key + "=" + kvp.Value.Value.ToString()); } } } if (!String.IsNullOrEmpty(Prot.Name)) { FOObj.WriteMSGLine(Prot.ProtoId * 100, Prot.Name, 0); } if (!String.IsNullOrEmpty(Prot.Description)) { FOObj.WriteMSGLine(Prot.ProtoId * 100 + 1, Prot.Description, 0); } _saveLines.Add(""); ProcessedPids.Add(Prot.ProtoId); } FOObj.WriteFile(); // Flush file. return(DuplicateFound); }
public bool SaveProtosToFile(String Path, String Version, MSGParser FOObj, List <ItemProto> SaveProtos, Dictionary <string, ItemProtoCustomField> CustomFields, bool FormatWithSpace) { this._saveProtos = SaveProtos; this._formatWithSpaces = FormatWithSpace; bool DuplicateFound = Save(Path, Version, null, FOObj, CustomFields); File.WriteAllLines(Path, _saveLines.ToArray(), new UTF8Encoding(false)); return(DuplicateFound); }
public FOGAMEParser(string path) { this._msgParser = new MSGParser(path); }
public DialogParser(String fileName) { this._fileName = fileName; _textStrings = new MSGParser(fileName); }
public static bool LoadConfig() { StreamReader file; try { file = File.OpenText("PerkEditor.cfg"); } catch (Exception) { MessageBox.Show("Cannot open the config file."); return false; } try { string rec = file.ReadLine(); Regex regexp = new Regex(@"([^=]+)=([^=]+)"); Match match = regexp.Match(rec); if (!match.Success || !match.Groups[1].Value.Equals("server")) { MessageBox.Show("Cannot parse the config file."); return false; } ServerPath = match.Groups[2].Value; } catch (Exception) { MessageBox.Show("Cannot parse the config file."); return false; } MsgParser = new FOCommon.Parsers.MSGParser(ServerPath + "/text/engl/FOGAME.MSG"); if (!MsgParser.Parse()) { MessageBox.Show("Cannot parse FOGAME.MSG."); return false; } try { StreamReader reader = new StreamReader(ServerPath + "/scripts/_defines.fos"); Regex expr = new Regex(@"#pragma[\s]+crdata[\s]+""[\s]*([^\s]+)[\s]+([^\s]+)[\s]+([^\s]+)[\s]*"""); while (!reader.EndOfStream) { string s = reader.ReadLine(); Match match = expr.Match(s); if (!match.Success) continue; //MessageBox.Show(match.Groups[1].Value + "," + match.Groups[2].Value + "," + match.Groups[3].Value); if (match.Groups[1].Value.Equals("Stat")) { StatBegin = Int32.Parse(match.Groups[2].Value); StatEnd = Int32.Parse(match.Groups[3].Value); } else if (match.Groups[1].Value.Equals("Skill")) { SkillBegin = Int32.Parse(match.Groups[2].Value); SkillEnd = Int32.Parse(match.Groups[3].Value); } else if (match.Groups[1].Value.Equals("Perk")) { PerkBegin = Int32.Parse(match.Groups[2].Value); PerkEnd = Int32.Parse(match.Groups[3].Value); } } } catch (Exception) { MessageBox.Show("Cannot open _defines.fos."); return false; } MakeNames(); return true; }
// TODO: Refactor public bool Load(string FilePath, string Version, List <String> Lines, MSGParser FOObj, Dictionary <String, ItemProtoCustomField> CustomFields) { ItemProto Prot = null; bool CompatibilityMode = false; bool DuplicateFound = false; List <int> ProcessedPids = new List <int>(); foreach (ItemProto LProt in _loadedProtos) { ProcessedPids.Add(LProt.ProtoId); } bool IsCar = false; // Compatibility bool IsNoOpen = false; // Compatibility int j = Lines.Count; for (int i = 0; i < j; i++)// String Line in Lines) { String Line = Lines[i]; if (Line == "[Proto]" || i == Lines.Count - 1) { if (Prot != null) { if (FOObj != null) { Prot.Name = FOObj.GetMSGValue(Prot.ProtoId * 100); Prot.Description = FOObj.GetMSGValue(Prot.ProtoId * 100 + 1); } //Prot.FileName = Path.GetFileName(FilePath); Prot.FileName = FilePath; if (CompatibilityMode) { ConvertStuff(ref Prot, IsCar, IsNoOpen); CompatibilityMode = false; } IsCar = false; IsNoOpen = false; if (ProcessedPids.Contains(Prot.ProtoId)) { DuplicateFound = true; Utils.Log("An object with the ProtoId " + Prot.ProtoId + " was already loaded. Overwriting proto."); for (ushort u = 0; u < _loadedProtos.Count; u++) { if (_loadedProtos[u].ProtoId == Prot.ProtoId) { _loadedProtos[u] = Prot; } } } else { if (Prot.ProtoId != 0) { _loadedProtos.Add(Prot); } } ProcessedPids.Add(Prot.ProtoId); } Prot = new ItemProto(); continue; } if (string.IsNullOrEmpty(Lines[i]) || (Lines[i].Length > 0 && Lines[i][0] == '#')) { continue; } if (FOObj != null && Prot != null) { Prot.Name = FOObj.GetMSGValue(Prot.ProtoId * 100); Prot.Description = FOObj.GetMSGValue(Prot.ProtoId * 100 + 1); } String[] Parts = Line.Split('='); if (Parts.Length != 2) { continue; } _fieldName = Parts[0].Trim(); _fieldValue = Parts[1].TrimStart(' ', '\t'); if (Prot == null) { continue; } if (_fieldName == "Pid") { Prot.ProtoId = ushort.Parse(_fieldValue); CompatibilityMode = true; } if (_fieldName == "MiscEx.IsCar") { IsCar = true; } if (_fieldName == "Container.IsNoOpen") { IsNoOpen = true; } if (Prot != null) { ParseData(ref Prot, CompatibilityMode, true); } if (CustomFields == null) { continue; } foreach (KeyValuePair <String, ItemProtoCustomField> kvp in CustomFields) { if (_fieldName == kvp.Key || _fieldName.Replace('.', '_') == kvp.Key) { try { ItemProtoCustomField NewCustom = new ItemProtoCustomField(kvp.Key, (Utils.DataType) kvp.Value.Type); if (NewCustom.Type == (Byte)Utils.DataType.BOOL) { NewCustom.Value = (_fieldValue == "1"); } else if (NewCustom.Type == (Byte)Utils.DataType.SBYTE) { NewCustom.Value = SByte.Parse(_fieldValue); } else if (NewCustom.Type == (Byte)Utils.DataType.INT) { NewCustom.Value = Int32.Parse(_fieldValue); } else if (NewCustom.Type == (Byte)Utils.DataType.INT16) { NewCustom.Value = Int16.Parse(_fieldValue); } else if (NewCustom.Type == (Byte)Utils.DataType.UINT) { NewCustom.Value = UInt32.Parse(_fieldValue); } else if (NewCustom.Type == (Byte)Utils.DataType.UINT16) { NewCustom.Value = UInt16.Parse(_fieldValue); } Prot.CustomFields.Add(kvp.Key, NewCustom); } catch (OverflowException ex) { Utils.Log(ex.Message + " in ProtoId " + Prot.ProtoId + " ,field " + _fieldName + " value: " + _fieldValue); } } } } return(DuplicateFound); }
public static bool LoadConfig() { StreamReader file; try { file = File.OpenText("PerkEditor.cfg"); } catch (Exception) { MessageBox.Show("Cannot open the config file."); return(false); } try { string rec = file.ReadLine(); Regex regexp = new Regex(@"([^=]+)=([^=]+)"); Match match = regexp.Match(rec); if (!match.Success || !match.Groups[1].Value.Equals("server")) { MessageBox.Show("Cannot parse the config file."); return(false); } ServerPath = match.Groups[2].Value; } catch (Exception) { MessageBox.Show("Cannot parse the config file."); return(false); } MsgParser = new FOCommon.Parsers.MSGParser(ServerPath + "/text/engl/FOGAME.MSG"); if (!MsgParser.Parse()) { MessageBox.Show("Cannot parse FOGAME.MSG."); return(false); } try { StreamReader reader = new StreamReader(ServerPath + "/scripts/_defines.fos"); Regex expr = new Regex(@"[\s]*#[\s]*pragma[\s]+crdata[\s]+""[\s]*([^\s]+)[\s]+([^\s]+)[\s]+([^\s]+)[\s]*"""); while (!reader.EndOfStream) { string s = reader.ReadLine(); Match match = expr.Match(s); if (!match.Success) { continue; } //MessageBox.Show(match.Groups[1].Value + "," + match.Groups[2].Value + "," + match.Groups[3].Value); if (match.Groups[1].Value.Equals("Stat")) { StatBegin = Int32.Parse(match.Groups[2].Value); StatEnd = Int32.Parse(match.Groups[3].Value); } else if (match.Groups[1].Value.Equals("Skill")) { SkillBegin = Int32.Parse(match.Groups[2].Value); SkillEnd = Int32.Parse(match.Groups[3].Value); } else if (match.Groups[1].Value.Equals("Perk")) { PerkBegin = Int32.Parse(match.Groups[2].Value); PerkEnd = Int32.Parse(match.Groups[3].Value); } } } catch (Exception) { MessageBox.Show("Cannot parse _defines.fos."); return(false); } MakeNames(); return(true); }
public List <SimpleItemProto> Load(string FilePath, List <String> Lines, MSGParser FOObj, out bool DuplicateFound) { SimpleItemProto Prot = null; DuplicateFound = false; List <int> ProcessedPids = new List <int>(); foreach (SimpleItemProto LProt in LoadedProtos) { ProcessedPids.Add(LProt.ProtoId); } int j = Lines.Count; for (int i = 0; i < j; i++)// String Line in Lines) { String Line = Lines[i]; if (Line == "[Proto]" || i == Lines.Count - 1) { if (Prot != null) { if (FOObj != null) { Prot.Name = FOObj.GetMSGValue(Prot.ProtoId * 100); Prot.Description = FOObj.GetMSGValue(Prot.ProtoId * 100 + 1); } Prot.FileName = Path.GetFileName(FilePath); if (ProcessedPids.Contains(Prot.ProtoId)) { DuplicateFound = true; Utils.Log("An object with the ProtoId " + Prot.ProtoId + " was already loaded. Overwriting proto."); for (ushort u = 0; u < LoadedProtos.Count; u++) { if (LoadedProtos[u].ProtoId == Prot.ProtoId) { LoadedProtos[u] = Prot; } } } else { LoadedProtos.Add(Prot); } ProcessedPids.Add(Prot.ProtoId); } Prot = CreateInstance(); continue; } if (string.IsNullOrEmpty(Lines[i]) || (Lines[i].Length > 0 && Lines[i][0] == '#')) { continue; } String[] Parts = Line.Split('='); if (Parts.Length != 2) { continue; } FieldName = Parts[0].Trim(); FieldValue = Parts[1].TrimStart(' ', '\t'); if (Prot == null) { continue; } if (FieldName == "ProtoId") { Prot.ProtoId = ushort.Parse(FieldValue); } LoadData(Prot); } return(LoadedProtos); }
public List <SimpleItemProto> LoadProtosFromFile(String Path, MSGParser FOObj, out bool DuplicatesFound) { List <String> Lines = new List <string>(File.ReadAllLines(Path)); return(Load(Path, Lines, FOObj, out DuplicatesFound)); }