Exemplo n.º 1
0
 internal void ResolveReferences(ScriptExpressionTable allExpressions)
 {
     if (_nextIndex.IsValid)
     {
         Next = allExpressions.FindExpression(_nextIndex);
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// Resolves the next expression.
 /// </summary>
 /// <param name="allExpressions">The map's script expression table.</param>
 internal void ResolveReferences(ScriptExpressionTable allExpressions)
 {
     if (Next.IsValid)
     {
         NextExpression = allExpressions.FindExpression(Next);
     }
 }
Exemplo n.º 3
0
        private ScriptExpressionTable LoadSyntax(IReader reader, StructureValueCollection values,
                                                 StringTableReader stringReader)
        {
            var stringsSize = (int)values.GetInteger("script string table size");

            var  tableSize    = (int)values.GetInteger("script syntax table size");
            uint tableAddress = (uint)values.GetInteger("script syntax table address");
            long expand       = _expander.Expand(tableAddress);

            StructureLayout headerLayout = _buildInfo.Layouts.GetLayout("script syntax table header");

            StructureValueCollection[] headerEntry = TagBlockReader.ReadTagBlock(reader, 1, expand, headerLayout, _metaArea);

            int count = (int)headerEntry[0].GetInteger("element count");

            StructureLayout layout = _buildInfo.Layouts.GetLayout("script syntax table element");

            StructureValueCollection[] entries = TagBlockReader.ReadTagBlock(reader, count, expand + headerLayout.Size, layout, _metaArea);

            var result = new ScriptExpressionTable();

            result.AddExpressions(entries.Select((e, i) => new ScriptExpression(e, (ushort)i, stringReader, stringsSize)));

            foreach (ScriptExpression expr in result.Where(expr => expr != null))
            {
                expr.ResolveReferences(result);
            }

            return(result);
        }