private void FindPidsInMap( BackgroundWorker worker, string filename, List<Tuple<int, int>> pids ) { if( !filename.HaveExtension( "fomap" ) ) return; FOnlineMap fomap = FOnlineMap.Load( filename, false, false, true ); if( fomap == null ) return; bool header = false; foreach( Dictionary<string, string> mapObject in fomap.Objects ) { //mapObject["ProtoId"] = "1"; string tmp; int objectType = -1; if( !mapObject.TryGetValue( "MapObjType", out tmp ) || !int.TryParse( tmp, out objectType ) ) objectType = -1; int objectPid; if( mapObject.TryGetValue( "ProtoId", out tmp ) && int.TryParse( tmp, out objectPid ) && pids.IsWantedObject( objectType, objectPid ) ) { int hx, hy; if( mapObject.TryGetValue( "MapX", out tmp ) && int.TryParse( tmp, out hx ) && mapObject.TryGetValue( "MapY", out tmp ) && int.TryParse( tmp, out hy ) ) { if( !header ) { if( resultsLog.Text.Length > 0 ) worker.ReportProgress( 0, "\r\n" ); worker.SendResult( string.Format( "{0} ({1})\r\n\r\n", "?", Path.GetFileName( filename ) ) ); header = true; } string typeString = ""; if( objectType == objectCritter ) typeString = "Critter"; else if( objectType == objectItem ) typeString = "Item"; else if( objectType == objectScenery ) typeString = "Scenery"; string objectPidName = null; if( objectType == objectItem || objectType == objectScenery ) objectPidName = itemPids.Defines.FindKeyByValue( objectPid ); worker.SendResult( string.Format( "\t[Hex {0,3},{1,3}] {2}{3}\r\n", hx, hy, typeString.Length > 0 ? "(" + typeString + ") " : "", objectPidName != null ? objectPidName + " <" + objectPid + ">" : "" + objectPid ) ); worker.SendResult( "Maps" + "|" + Path.GetFileName( filename ) + "|" + (typeString == "Scenery" ? "Sceneries" : typeString + "s") + "|" + (objectPidName != null ? objectPidName + " <" + objectPid + ">" : "" + objectPid) + "|Hex " + hx + "," + hy ); } } } }
private void FindPidsInMap(BackgroundWorker worker, string filename, List <Tuple <int, int> > pids) { if (!filename.HaveExtension("fomap")) { return; } FOnlineMap fomap = FOnlineMap.Load(filename, false, false, true); if (fomap == null) { return; } bool header = false; foreach (Dictionary <string, string> mapObject in fomap.Objects) { //mapObject["ProtoId"] = "1"; string tmp; int objectType = -1; if (!mapObject.TryGetValue("MapObjType", out tmp) || !int.TryParse(tmp, out objectType)) { objectType = -1; } int objectPid; if (mapObject.TryGetValue("ProtoId", out tmp) && int.TryParse(tmp, out objectPid) && pids.IsWantedObject(objectType, objectPid)) { int hx, hy; if (mapObject.TryGetValue("MapX", out tmp) && int.TryParse(tmp, out hx) && mapObject.TryGetValue("MapY", out tmp) && int.TryParse(tmp, out hy)) { if (!header) { if (resultsLog.Text.Length > 0) { worker.ReportProgress(0, "\r\n"); } worker.SendResult(string.Format("{0} ({1})\r\n\r\n", "?", Path.GetFileName(filename))); header = true; } string typeString = ""; if (objectType == objectCritter) { typeString = "Critter"; } else if (objectType == objectItem) { typeString = "Item"; } else if (objectType == objectScenery) { typeString = "Scenery"; } string objectPidName = null; if (objectType == objectItem || objectType == objectScenery) { objectPidName = itemPids.Defines.FindKeyByValue(objectPid); } worker.SendResult(string.Format("\t[Hex {0,3},{1,3}] {2}{3}\r\n", hx, hy, typeString.Length > 0 ? "(" + typeString + ") " : "", objectPidName != null ? objectPidName + " <" + objectPid + ">" : "" + objectPid )); worker.SendResult("Maps" + "|" + Path.GetFileName(filename) + "|" + (typeString == "Scenery" ? "Sceneries" : typeString + "s") + "|" + (objectPidName != null ? objectPidName + " <" + objectPid + ">" : "" + objectPid) + "|Hex " + hx + "," + hy ); } } } }
private void FindPidsInDialog( BackgroundWorker worker, string filename, List<Tuple<int, int>> pids ) { if( !filename.HaveExtension( "fodlg" ) ) return; DialogParser fodlg = new DialogParser( filename ); if( fodlg == null ) return; if( fodlg.Parse() ) { bool header = false; string headerText = "? (" + Path.GetFileName( filename ) + ")\r\n\r\n"; Dialog dialog = fodlg.GetDialog(); if( dialog == null ) return; string lNode = "" + dialog.Nodes.Count.ToString().Length; foreach( Node node in dialog.Nodes ) { int answerId = 0; string lAnswer = "" + node.Answers.Count.ToString().Length; foreach( Answer answer in node.Answers ) { answerId++; int demandId = 0; int resultId = 0; string lDemand = "" + answer.Demands.Count.ToString().Length; string lResult = "" + answer.Results.Count.ToString().Length; foreach( Demand demand in answer.Demands ) { demandId++; if( demand.Item != null ) { int pid = -1; if( itemPids.Defines.TryGetValue( demand.Item.PidDefine, out pid ) && pids.IsWantedObject( objectItem, pid ) ) { if( !header ) { if( resultsLog.Text.Length > 0 ) worker.SendResult( "\r\n" ); worker.SendResult( headerText ); header = true; } worker.SendResult( string.Format( "\t[Node {0," + lNode + "} Answer {1," + lAnswer + "} Demand {2," + lDemand + "}] {3} {4} {5}\r\n", node.Id, answerId, demandId, demand.Item.PidDefine, demand.Operator == "=" ? "==" : demand.Operator, demand.Value ) ); worker.SendResult( "Dialogs" + "|" + Path.GetFileName( filename ) + "|Node " + node.Id + "^" + node.Text["engl"] + "|Answer " + answerId + "^" + answer.Text["engl"] + "|Demand " + demandId + ": " + demand.Item.PidDefine + " " + (demand.Operator == "=" ? "==" : demand.Operator) + " " + demand.Value ); } } } foreach( Result result in answer.Results ) { resultId++; if( result.Item != null ) { int pid = -1; if( itemPids.Defines.TryGetValue( result.Item.PidDefine, out pid ) && pids.IsWantedObject( objectItem, pid ) ) { if( !header ) { if( resultsLog.Text.Length > 0 ) worker.SendResult( "\r\n" ); worker.SendResult( headerText ); header = true; } worker.SendResult( string.Format( "\t[Node {0," + lNode + "} Answer {1," + lAnswer + "} Result {2," + lResult + "}] {3} {4} {5}\r\n", node.Id, answerId, resultId, result.Item.PidDefine, result.Operator, result.Value ) ); worker.SendResult( "Dialogs" + "|" + Path.GetFileName( filename ) + "|Node " + node.Id + "^" + node.Text["engl"] + "|Answer " + answerId + "^" + answer.Text["engl"] + "|Result " + resultId + ": " + result.Item.PidDefine + " " + result.Operator + " " + result.Value ); } } } } } } }
private void FindPidsInDialog(BackgroundWorker worker, string filename, List <Tuple <int, int> > pids) { if (!filename.HaveExtension("fodlg")) { return; } DialogParser fodlg = new DialogParser(filename); if (fodlg == null) { return; } if (fodlg.Parse()) { bool header = false; string headerText = "? (" + Path.GetFileName(filename) + ")\r\n\r\n"; Dialog dialog = fodlg.GetDialog(); if (dialog == null) { return; } string lNode = "" + dialog.Nodes.Count.ToString().Length; foreach (Node node in dialog.Nodes) { int answerId = 0; string lAnswer = "" + node.Answers.Count.ToString().Length; foreach (Answer answer in node.Answers) { answerId++; int demandId = 0; int resultId = 0; string lDemand = "" + answer.Demands.Count.ToString().Length; string lResult = "" + answer.Results.Count.ToString().Length; foreach (Demand demand in answer.Demands) { demandId++; if (demand.Item != null) { int pid = -1; if (itemPids.Defines.TryGetValue(demand.Item.PidDefine, out pid) && pids.IsWantedObject(objectItem, pid)) { if (!header) { if (resultsLog.Text.Length > 0) { worker.SendResult("\r\n"); } worker.SendResult(headerText); header = true; } worker.SendResult(string.Format("\t[Node {0," + lNode + "} Answer {1," + lAnswer + "} Demand {2," + lDemand + "}] {3} {4} {5}\r\n", node.Id, answerId, demandId, demand.Item.PidDefine, demand.Operator == "=" ? "==" : demand.Operator, demand.Value)); worker.SendResult("Dialogs" + "|" + Path.GetFileName(filename) + "|Node " + node.Id + "^" + node.Text["engl"] + "|Answer " + answerId + "^" + answer.Text["engl"] + "|Demand " + demandId + ": " + demand.Item.PidDefine + " " + (demand.Operator == "=" ? "==" : demand.Operator) + " " + demand.Value); } } } foreach (Result result in answer.Results) { resultId++; if (result.Item != null) { int pid = -1; if (itemPids.Defines.TryGetValue(result.Item.PidDefine, out pid) && pids.IsWantedObject(objectItem, pid)) { if (!header) { if (resultsLog.Text.Length > 0) { worker.SendResult("\r\n"); } worker.SendResult(headerText); header = true; } worker.SendResult(string.Format("\t[Node {0," + lNode + "} Answer {1," + lAnswer + "} Result {2," + lResult + "}] {3} {4} {5}\r\n", node.Id, answerId, resultId, result.Item.PidDefine, result.Operator, result.Value)); worker.SendResult("Dialogs" + "|" + Path.GetFileName(filename) + "|Node " + node.Id + "^" + node.Text["engl"] + "|Answer " + answerId + "^" + answer.Text["engl"] + "|Result " + resultId + ": " + result.Item.PidDefine + " " + result.Operator + " " + result.Value); } } } } } } }