Beispiel #1
0
        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

                           );
                    }
                }
            }
        }
Beispiel #2
0
        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 );
                                }
                            }
                        }
                    }
                }
            }
        }