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 ); } } } } } } }