void AddOutput(string output) { if (output == null) { return; } ConsoleOutput.AppendText(output); ConsoleOutput.AppendText("\n"); // see if the line contains a progress report if (output.Length > 0 && (output[0] == '[' || output[0] == '(')) { var words = output.Split(' '); var progress = words[0].Substring(1, words[0].Length - 2); var progressParts = progress.Split('/'); int progressNom, progressDenom; if (int.TryParse(progressParts[0], out progressNom) && int.TryParse(progressParts[1], out progressDenom)) { if (output[0] == '[') { TotalProgress.Maximum = progressDenom; TotalProgress.Value = progressNom; // also get the name of the currently processed archive var name = string.Join(" ", words.Skip(3).Take(words.Length - 4)); CurrentFileLabel.Text = "Converting " + name; } else { FileProgress.Maximum = progressDenom; FileProgress.Value = progressNom; } } } }
void consoleWriter_WriteEvent(object sender, ConsoleWriterEventArgs e) { this.Dispatcher.Invoke(() => { ConsoleOutput.AppendText(e.Value); }); }
private void Button_Click(object sender, RoutedEventArgs e) { //Test code, please ignore OpenFileDialog fileDialog = new OpenFileDialog(); if (fileDialog.ShowDialog() == true) { //open file dialog to open the map Stream str = File.Open(fileDialog.FileName, FileMode.Open); //Get the header MapHeader mh = HeaderReader.ReadHeader(str); ///Break out the sections of the file in order to avoid seeks and shit /// //First get the debug section. What the f**k is this for anyways? int debug_offset = (int)mh.section_offsets[0] + (int)mh.section_bounds[0].offset; int debug_size = (int)mh.section_bounds[0].size; byte[] debug_section = new byte[debug_size]; if (str.Position != debug_offset) { str.Seek(debug_offset, SeekOrigin.Begin); } str.Read(debug_section, 0, debug_size); //Then get the resources section. Images and models maybe? and strings probably! int resource_offset = (int)mh.section_offsets[1] + (int)mh.section_bounds[1].offset; int resource_size = (int)mh.section_bounds[1].size; byte[] resource_section = new byte[resource_size]; if (str.Position != resource_offset) { str.Seek(resource_offset, SeekOrigin.Begin); } str.Read(resource_section, 0, resource_size); //Get the actual tags int tag_offset = (int)mh.section_offsets[2] + (int)mh.section_bounds[2].offset; int tag_size = (int)mh.section_bounds[2].size; byte[] tag_section = new byte[tag_size]; long pos = str.Position; if (str.Position != tag_offset) { str.Seek(tag_offset, SeekOrigin.Begin); } str.Read(tag_section, 0, tag_size); //Lastly get the localization data //But I dont need it now so f**k it ConsoleOutput.AppendText("Read in the map file!\n"); } }
private void AppendConsoleErr(string msg) { ConsoleOutput.SelectionStart = ConsoleOutput.TextLength; ConsoleOutput.SelectionLength = 0; ConsoleOutput.SelectionColor = Color.Red; ConsoleOutput.AppendText(msg); ConsoleOutput.SelectionColor = ConsoleOutput.ForeColor; }
private bool RunConsoleCmd(string app, string args) { if (proc_ != null) { ErrMsg("Please wait for the current operation to complete."); return(false); } if (!File.Exists(app)) { ErrMsg("Could not find " + app + ", please make sure it is in the same folder as this program"); return(false); } ConsoleOutput.Clear(); ConsoleOutput.ForeColor = Color.Black; ConsoleOutput.AppendText(app + " " + args + "\r\n"); proc_ = new Process(); proc_.StartInfo.FileName = app; proc_.StartInfo.Arguments = args; proc_.StartInfo.UseShellExecute = false; proc_.StartInfo.RedirectStandardOutput = true; proc_.StartInfo.RedirectStandardError = true; proc_.StartInfo.CreateNoWindow = true; proc_.StartInfo.StandardErrorEncoding = Encoding.UTF8; proc_.StartInfo.StandardOutputEncoding = Encoding.UTF8; proc_.EnableRaisingEvents = true; proc_.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputHandler); proc_.ErrorDataReceived += new DataReceivedEventHandler(ConsoleErrHandler); proc_.Exited += new EventHandler(OnConsoleAppExit); proc_.SynchronizingObject = this; try { if (!proc_.Start()) { throw new Exception("Failed to run progam: " + app); } proc_.BeginOutputReadLine(); proc_.BeginErrorReadLine(); } catch (Exception ex) { ErrMsg(ex.Message); proc_.Close(); proc_ = null; return(false); } return(true); }
private void ConsoleOutputHandler(object proc, DataReceivedEventArgs data) { if (!String.IsNullOrEmpty(data.Data)) { if (ConsoleOutput.InvokeRequired) { ConsoleOutput.Invoke((ConOutDelegate)(msg => ConsoleOutput.AppendText(msg)), new object[] { data.Data + "\r\n" }); } else { ConsoleOutput.AppendText(data.Data + "\r\n"); } } }
private void AppendLine(String line) { ConsoleOutput.AppendText(line + Environment.NewLine); ConsoleOutput.ScrollToEnd(); latestOutput = line; }
private void LoadButton_Click(object sender, EventArgs e) { ConsoleOutput.Clear(); ConsoleOutput.AppendText("Loading...\r\n"); ConsoleOutput.Refresh(); Reset(); WorkingDirTextBox.Text = WorkingDirTextBox.Text.TrimEnd("/\\".ToCharArray()); // Remove trailing slashes // Find DollData.json and determine if this is YnK or base TPDP data string wkdir = WorkingDirTextBox.Text; string dolldata = wkdir + "/gn_dat6.arc/doll/DollData.json"; is_ynk_ = true; if (!File.Exists(dolldata)) { dolldata = wkdir + "/gn_dat3.arc/doll/DollData.json"; is_ynk_ = false; if (!File.Exists(dolldata)) { ErrMsg("Could not locate DollData.json"); ConsoleOutput.Clear(); return; } } string versiondata = wkdir + "/version.json"; if (!File.Exists(versiondata)) { ErrMsg("Seems like you're using an old JSON dump from an alpha build.\r\nPlease run convert to update the JSON."); ConsoleOutput.Clear(); return; } try { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(VersionJson)); var buf = File.ReadAllBytes(versiondata); MemoryStream s = new MemoryStream(buf); var ver = (VersionJson)ser.ReadObject(s); if (!ver.VersionMatches()) { var major = VersionJson.VersionMajor; var minor = VersionJson.VersionMinor; bool newer = (ver.major > major) || (ver.major == major && (ver.minor > minor)); ErrMsg("Current JSON dump is for " + (newer ? "a newer" : "an older") + " version of TPDP-Dev-Tools.\r\nPlease run convert to update the JSON."); ConsoleOutput.Clear(); return; } } catch (Exception ex) { ErrMsg("Error reading file: " + versiondata + "\r\n" + ex.Message); return; } working_dir_ = wkdir; string pflags = wkdir + (is_ynk_ ? "/gn_dat6.arc/dollImage/img/DollMainGLoadFlag.bin" : "/gn_dat3.arc/doll/img/DollMainGLoadFlag.bin"); string oflags = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/obj/ObjGLoadFlag.bin" : "/gn_dat3.arc/map/obj/ObjGLoadFlag.bin"); string eflags = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/obj/ObjFirstActivity.bin" : "/gn_dat3.arc/map/obj/ObjFirstActivity.bin"); string bgm = wkdir + (is_ynk_ ? "/gn_dat4.arc/bgm/BgmData.csv" : "/gn_dat2.arc/sound/bgm/BgmData.csv"); string[] bgmdata; try { puppet_flags_ = File.ReadAllBytes(pflags); obj_flags_ = File.ReadAllBytes(oflags); event_flags_ = File.ReadAllBytes(eflags); bgmdata = File.ReadAllLines(bgm, Encoding.GetEncoding(932)); } catch (Exception ex) { ErrMsg("Error: " + ex.Message); Reset(); return; } foreach (var line in bgmdata) { var fields = line.Split(','); uint id; try { id = uint.Parse(fields[0]); } catch { continue; } var name = fields[1] + ".ogg"; if (!File.Exists(wkdir + (is_ynk_ ? "/gn_dat4.arc/bgm/" : "/gn_dat2.arc/sound/bgm/") + name)) { continue; } bgm_data_[id] = id.ToString() + ": " + name; } bgm_data_[0] = "None"; // Parse puppets puppets_.Clear(); try { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DollDataJson)); var buf = File.ReadAllBytes(dolldata); MemoryStream s = new MemoryStream(buf); var tmp = (DollDataJson)ser.ReadObject(s); foreach (var puppet in tmp.puppets) { puppets_[puppet.id] = puppet; } } catch (Exception ex) { ErrMsg("Error parsing file: " + dolldata + "\r\n" + ex.Message); return; } // Parse puppet names string puppetnames = wkdir + (is_ynk_ ? "/gn_dat5.arc/name/DollName.csv" : "/gn_dat3.arc/name/DollName.csv"); try { puppet_names_ = File.ReadAllLines(puppetnames, Encoding.GetEncoding(932)); } catch (Exception ex) { ErrMsg("Error reading file: " + puppetnames + "\r\n" + ex.Message); return; } // Parse map names string mapnames = wkdir + (is_ynk_ ? "/gn_dat5.arc/name/MapName.csv" : "/gn_dat3.arc/name/MapName.csv"); try { map_names_ = File.ReadAllLines(mapnames, Encoding.GetEncoding(932)); } catch (Exception ex) { ErrMsg("Error reading file: " + mapnames + "\r\n" + ex.Message); return; } // Parse .mad files string mapdir = wkdir + (is_ynk_ ? "/gn_dat5.arc/map/data" : "/gn_dat3.arc/map/data"); try { LoadMaps(mapdir); } catch (Exception ex) { ErrMsg("Failed to load maps: " + ex.Message); Reset(); return; } // Parse ability names ability_names_.Clear(); string abl = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/AbilityData.csv" : "/gn_dat3.arc/doll/ability/AbilityData.csv"); try { var abilities = File.ReadAllLines(abl, Encoding.GetEncoding(932)); foreach (var ability in abilities) { var fields = ability.Split(','); if (fields.Length < 2) { continue; } var id = uint.Parse(fields[0]); var name = fields[1]; if (id == 0 || string.IsNullOrEmpty(name)) { continue; } if (name.Contains("NULL") || name.Contains("ABL")) { continue; } ability_names_[id] = name; } } catch (Exception ex) { ErrMsg("Error reading file: " + abl + "\r\n" + ex.Message); return; } // Parse skill names skill_names_.Clear(); skill_descs_.Clear(); string skl = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/SkillData.csv" : "/gn_dat3.arc/doll/skill/SkillData.csv"); try { var skills = File.ReadAllLines(skl, Encoding.GetEncoding(932)); uint count = 0; foreach (var skill in skills) { var fields = skill.Split(new char[] { ',' }, is_ynk_ ? 4 : 2); if (fields.Length < (is_ynk_ ? 4 : 2)) { continue; } uint id; try { id = is_ynk_ ? uint.Parse(fields[0]) : count++; } catch { continue; } var name = is_ynk_ ? fields[1] : fields[0]; var desc = is_ynk_ ? fields[3] : fields[1]; if (id == 0 || string.IsNullOrEmpty(name)) { continue; } if (name.Contains("SKILL0") || name.Contains("SKILL1")) { continue; } skill_names_[id] = name; skill_descs_[id] = desc; } } catch (Exception ex) { ErrMsg("Error reading file: " + skl + "\r\n" + ex.Message); return; } // Parse item names item_names_.Clear(); skillcard_names_.Clear(); string itm = wkdir + (is_ynk_ ? "/gn_dat6.arc/item/ItemData.csv" : "/gn_dat3.arc/item/ItemData.csv"); try { var items = File.ReadAllLines(itm, Encoding.GetEncoding(932)); foreach (var item in items) { var fields = item.Split(','); if (fields.Length < 2) { continue; } uint id; try { id = uint.Parse(fields[0]); } catch { continue; } var name = fields[1]; if (id == 0 || string.IsNullOrEmpty(name)) { continue; } if (name.StartsWith("Item")) { continue; } // Skillcards if (id >= 385 && id <= 512) { /*var index = (is_ynk_ ? 11 : 10); * if(fields.Length <= index) * throw new Exception("ItemData.csv has too few fields!"); * var scname = fields[index];*/ var skillid = uint.Parse(fields[9]); if ((skillid > 0) && (skillid < 1023)) { skillcard_names_[id] = skill_names_[skillid]; /*if(!skill_names_[skillid].Equals(scname, StringComparison.OrdinalIgnoreCase)) * { * string msg = "Note: Skillcard name mismatch! Item \"" + scname + "\" actually teaches \"" + skill_names_[skillid] + "\"\r\n"; * msg += skill_names_[skillid] + " will be displayed in the editor.\r\n"; * ConsoleOutput.AppendText(msg); * }*/ } else { //skillcard_names_[id] = scname; skillcard_names_[id] = name; } } item_names_[id] = name; } } catch (Exception ex) { ErrMsg("Error reading file: " + itm + "\r\n" + ex.Message); return; } // Populate Puppets tab try { LoadPuppets(); } catch (Exception ex) { ErrMsg("Failed to load puppet data: " + ex.Message); Reset(); return; } // Populate Trainers tab try { string dods = wkdir + (is_ynk_ ? "/gn_dat5.arc/script/dollOperator" : "/gn_dat3.arc/script/dollOperator"); LoadTrainers(dods); } catch (Exception ex) { ErrMsg("Failed to load trainer data: " + ex.Message); Reset(); return; } // Populate Skills tab try { string skills = wkdir + (is_ynk_ ? "/gn_dat6.arc/doll/SkillData.json" : "/gn_dat3.arc/doll/skill/SkillData.json"); LoadSkills(skills); } catch (Exception ex) { ErrMsg("Failed to load skill data: " + ex.Message); Reset(); return; } // Populate Design tab try { LoadDesign(); } catch (Exception ex) { ErrMsg("Error initializing level designer: " + ex.Message); Reset(); return; } // Populate Event tab try { LoadEvents(); } catch (Exception ex) { ErrMsg("Error initializing event editor: " + ex.Message); Reset(); return; } ConsoleOutput.AppendText("Done.\r\n"); cfg_.game_dir = GameDirTextBox.Text; cfg_.working_dir = WorkingDirTextBox.Text; WriteCfg(); }