Пример #1
0
        public string ToDataString(ColumnInfo inColumn)
        {
            if (DataValue == null && inColumn.Type != ColumnType.Index)
            {
                return(SourceString);
            }
            if (DataValue is int && (int)DataValue == int.MinValue)
            {
                return(SourceString);
            }

            switch (inColumn.Type)
            {
            case ColumnType.Index:
                return(ParentRow.Index.ToString());

            case ColumnType.Label:
            case ColumnType.String:
            case ColumnType.ScriptRef:
            case ColumnType.ScriptConst:
            case ColumnType.Enum:
                return((string)DataValue);

            case ColumnType.Integer:
                return(((int)DataValue).ToString());

            case ColumnType.Flags:
                return("0x" + ((UInt32)DataValue).ToString("X"));

            case ColumnType.Float:
                return(((float)DataValue).ToString());

            case ColumnType.TableRef:
            {
                TableDocument doc   = CTCore.GetOpenProject().GetDocument <TableDocument>(inColumn.ReferenceTo);
                Guid          refID = (Guid)DataValue;
                if (refID != Guid.Empty)
                {
                    return(doc.GetRow(refID).Index.ToString());
                }
                else
                {
                    return(SourceString);
                }
            }

            case ColumnType.TLKRef:
            {
                object[] data = (object[])DataValue;
                if ((int)data[1] == -1)
                {
                    return(SourceString);
                }

                return(CTCore.GetOpenProject().GetTlkStack().GetIndex((int)data[1], (string)data[0]).ToString());
            }

            default: return("INVALID_CELL_DATA");
            }
        }
Пример #2
0
 public DataRow(TableDocument table)
 {
     InTable = table;
     m_data  = new Dictionary <string, CellData>();
     m_id    = new CTRef(this);
     Exists  = false;
     HasUnresolvedReferences = false;
     m_dupeIndex             = 0;
 }
Пример #3
0
        private void OpenDocument(CTDocument.DocumentType type, string name, string args = "")
        {
            if (name.ToLowerInvariant() == "all")
            {
                OpenAllDocuments(type, args);
                return;
            }

            switch (type)
            {
            case CTDocument.DocumentType.Table:
            {
                try
                {
                    CTDebug.Info("Opening Table: {0}", name);
                    _2da.TableDocument doc = new _2da.TableDocument(name);
                    if (args == "raw")
                    {
                        doc.LoadCompiled();
                    }
                    else if (args == "friendly")
                    {
                        doc.LoadFriendly();
                    }
                    else
                    {
                        doc.LoadNewest();
                    }
                    m_openDocuments.Add(name, doc);
                }
                catch (Exception e)
                {
                    CTDebug.Error("{0}: {1}", e.GetType().Name, e.Message);
                }
            }
            break;

            case CTDocument.DocumentType.TLK:
                if (name.ToLowerInvariant() != "dialog") // Don't open dialog.tlk as a document.
                {
                    CTDebug.Info("Opening TLK: {0}", name);
                    Tlk.TlkDocument doc = new Tlk.TlkDocument(name);
                    m_openDocuments.Add(name, doc);
                    m_tlkStack.AddTlkFile(doc);
                    doc.LoadCompiled();
                }
                break;
            }
        }
Пример #4
0
        public static DataRow ReadRaw(TableDocument table, string data)
        {
            DataRow ret = new DataRow(table);

            string[] columnValues = FileUtils.Tokenize(data);
            ret.Exists = true;

            if (columnValues.Length == 0)
            {
                return(null);
            }

            if (columnValues.Length != table.Columns.Count)
            {
                throw new FormatException(string.Format("Row {0} is not correctly formatted.", columnValues[0]));
            }
            else
            {
                for (int i = 0; i < columnValues.Length; ++i)
                {
                    ColumnInfo ci          = table.Columns[i];
                    CellData   cellContent = new CellData(ret);
                    cellContent.FromDataString(columnValues[i], ci);
                    ret.m_data.Add(ci.Name, cellContent);
                    if (ci.Type == ColumnType.Label && columnValues[i] == "****")
                    {
                        ret.Exists = false;
                    }
                    if (ci.Name.ToLowerInvariant() == "removed")
                    {
                        if (!char.IsNumber(columnValues[i][0]) || Int32.Parse(columnValues[i]) != 0)
                        {
                            ret.Exists = false;
                        }
                    }
                    if (cellContent.NeedsResolution)
                    {
                        ret.HasUnresolvedReferences = true;
                    }
                }
            }

            return(ret);
        }
Пример #5
0
 public void ResolveReferences()
 {
     if (HasUnresolvedReferences)
     {
         CTDebug.Info("Resolving references in {0}", Name);
         foreach (ColumnInfo col in m_columns)
         {
             if (col.Type == ColumnType.TableRef)
             {
                 TableDocument table = CTCore.GetOpenProject().GetDocument <TableDocument>(col.ReferenceTo);
                 table.PrintDuplicationWarnings();
             }
         }
         foreach (DataRow row in m_docRows)
         {
             row.ResolveReferences();
         }
         HasUnresolvedReferences = false;
     }
 }
Пример #6
0
        public override void Compile()
        {
            TableDocument doc = CTCore.GetOpenProject().GetDocument <TableDocument>(m_tableName);

            string[] output = new string[] { "Invalid table." };
            switch (ArtifactType)
            {
            case CTArtifactType.TableCT:
                break;

            case CTArtifactType.TableFriendly:
                output = doc.SaveFriendly();
                break;

            case CTArtifactType.TableRaw:
                output = doc.SaveCompiled();
                break;
            }

            System.IO.File.WriteAllLines(Path, output);
        }
Пример #7
0
        private static Object ReadDataString(string input, ColumnInfo inColumn, out bool refResolved)
        {
            refResolved = true;
            try
            {
                switch (inColumn.Type)
                {
                case ColumnType.Index:
                    return(null);

                case ColumnType.Label:
                case ColumnType.String:
                case ColumnType.ScriptRef:
                case ColumnType.ScriptConst:
                case ColumnType.Enum:
                    return(input);

                case ColumnType.Integer:
                    return(FileUtils.ParseInt(input));

                case ColumnType.Flags:
                    if (input[0] == '0')
                    {
                        UInt32 hex = 0;
                        if (UInt32.TryParse(input.Substring(2), System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out hex))
                        {
                            return(hex);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        return(null);
                    }

                case ColumnType.Float:
                {
                    float parsed;
                    if (float.TryParse(input, out parsed))
                    {
                        return(parsed);
                    }
                    else
                    {
                        return(null);
                    }
                }

                case ColumnType.TableRef:
                {
                    TableDocument doc = CTCore.GetOpenProject().GetDocument <TableDocument>(inColumn.ReferenceTo);
                    if (doc != null && doc.IsLoaded)
                    {
                        int     index = FileUtils.ParseInt(input);
                        DataRow row   = doc.GetRow(index);
                        if (row != null)
                        {
                            return(row.ID);
                        }
                        else
                        {
                            return(Guid.Empty);
                        }
                    }
                    else
                    {
                        refResolved = false;
                        return(FileUtils.ParseInt(input));
                    }
                }

                case ColumnType.TLKRef:
                {
                    string docName;
                    int    localVal;

                    int index;
                    if (int.TryParse(input, out index))
                    {
                        CTCore.GetOpenProject().GetTlkStack().GetEntry(index, out docName, out localVal);

                        return(new Object[] { docName, localVal });
                    }
                    else
                    {
                        return(null);
                    }
                }

                default: throw new FormatException("Input was incorrectly formatted.");;
                }
            }
            catch (FormatException)
            {
                return(null);
            }
        }
Пример #8
0
        private static Object ReadFriendlyString(string input, ColumnInfo inColumn, out bool refResolved)
        {
            refResolved = true;
            switch (inColumn.Type)
            {
            case ColumnType.Index:
                return(null);

            case ColumnType.Label:
            case ColumnType.String:
            case ColumnType.ScriptRef:
            case ColumnType.ScriptConst:
            case ColumnType.Enum:
                return(input);

            case ColumnType.Integer:
                return(FileUtils.ParseInt(input));

            case ColumnType.Flags:
                if (input[0] == '0')
                {
                    UInt32 hex = 0;
                    if (UInt32.TryParse(input.Substring(2), System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out hex))
                    {
                        return(hex);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }

            case ColumnType.Float:
            {
                float parsed;
                if (float.TryParse(input, out parsed))
                {
                    return(parsed);
                }
                else
                {
                    return(null);
                }
            }

            case ColumnType.TableRef:
            {
                TableDocument doc = CTCore.GetOpenProject().GetDocument <TableDocument>(inColumn.ReferenceTo);
                if (doc != null && doc.IsLoaded)
                {
                    if (input != "****")
                    {
                        if (doc.GetRow(input) != null)
                        {
                            return(doc.GetRow(input).ID);
                        }
                        else
                        {
                            return(Guid.Empty);
                        }
                    }
                    else
                    {
                        return(Guid.Empty);
                    }
                }
                else
                {
                    refResolved = false;
                    return(input);
                }
            }

            case ColumnType.TLKRef:
            {
                TlkDocument doc;

                string[] parsed = input.Split(':');
                if (parsed.Length == 1)
                {
                    return new Object[] { "tlk", -1 }
                }
                ;
                doc = CTCore.GetOpenProject().GetDocument <TlkDocument>(parsed[0]);
                if (parsed[0] == TlkDocument.DialogTlk.Name)
                {
                    doc = TlkDocument.DialogTlk;
                }
                int index;
                int.TryParse(parsed[1], out index);
                return(new Object[] { doc.Name, index });
            }

            default: throw new FormatException("Input was incorrectly formatted.");;
            }
        }