public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            _entryOffset = address;
            FDefEventArgument *header = (FDefEventArgument *)address;

            header->_type = (int)_type;
            header->_data = _value;
        }
示例#2
0
        protected internal override void OnRebuild(VoidPtr address, int length, bool force)
        {
            int off = 0;

            foreach (MoveDefEventNode e in Children)
            {
                off += e.Children.Count * 8;
            }

            FDefEventArgument *paramAddr = (FDefEventArgument *)address;
            FDefEvent *        eventAddr = (FDefEvent *)(address + off);

            _entryOffset = eventAddr;

            foreach (MoveDefEventNode e in Children)
            {
                if (e._name == "FADEF00D" || e._name == "FADE0D8A")
                {
                    continue;
                }
                e._entryOffset = eventAddr;
                *eventAddr = new FDefEvent()
                {
                    _id = e.id, _nameSpace = e.nameSpace, _numArguments = (byte)e.Children.Count, _unk1 = e.unk1
                };
                if (e.Children.Count > 0)
                {
                    eventAddr->_argumentOffset = (uint)paramAddr - (uint)_rebuildBase;
                    _lookupOffsets.Add((int)eventAddr->_argumentOffset.Address - (int)_rebuildBase);
                }
                else
                {
                    eventAddr->_argumentOffset = 0;
                }
                eventAddr++;
                foreach (MoveDefEventParameterNode p in e.Children)
                {
                    p._entryOffset = paramAddr;
                    if (p._type != ArgVarType.Offset)
                    {
                        *paramAddr = new FDefEventArgument()
                        {
                            _type = (int)p._type, _data = p._value
                        }
                    }
                    ;
                    else
                    {
                        Root._postProcessNodes.Add(p);
                        //if ((p as MoveDefEventOffsetNode).action != null)
                        //    _lookupOffsets.Add(0);
                    }
                    paramAddr++;
                }
            }

            eventAddr++; //Terminate
        }
        public override void PostProcess()
        {
            FDefEventArgument *arg = (FDefEventArgument *)_entryOffset;

            arg->_type = (int)_type;
            if (action != null)
            {
                if (action._entryOffset == 0)
                {
                    Console.WriteLine("Action offset = 0");
                }

                arg->_data = (int)action._entryOffset - (int)action._rebuildBase;
                if (arg->_data > 0)
                {
                    Root._lookupOffsets.Add((int)arg->_data.Address - (int)_rebuildBase);
                }
            }
            else
            {
                arg->_data = -1;
                if (External)
                {
                    if (_extNode is MoveDefReferenceEntryNode)
                    {
                        _entryOffset += 4;
                    }
                }
                else
                {
                    foreach (MoveDefReferenceEntryNode e in Root.references.Children)
                    {
                        if (e.Name == this.Name)
                        {
                            _extNode = e;
                            //if (!e._refs.Contains(this))
                            e._refs.Add(this);
                            _entryOffset += 4;
                            break;
                        }
                    }
                }
            }
        }