NScumm.Scumm.ScummEngine.RunObjectScript C# (CSharp) Метод

RunObjectScript() защищенный Метод

protected RunObjectScript ( int obj, byte entry, bool freezeResistant, bool recursive, int vars, int slot = -1 ) : void
obj int
entry byte
freezeResistant bool
recursive bool
vars int
slot int
Результат void
        protected void RunObjectScript(int obj, byte entry, bool freezeResistant, bool recursive, int[] vars, int slot = -1)
        {
            if (obj == 0)
                return;

            if (!recursive && (Game.Version >= 3))
                StopObjectScriptCore((ushort)obj);

            var where = GetWhereIsObject(obj);

            if (where == WhereIsObject.NotFound)
            {
                //                Console.Error.WriteLine("warning: Code for object {0} not in room {1}", obj, _roomResource);
                return;
            }

            // Find a free object slot, unless one was specified
            if (slot == -1)
                slot = GetScriptSlotIndex();

            ObjectData objFound = null;
            if (roomData != null)
            {
                objFound = (from o in roomData.Objects.Concat(_invData)
                            where o != null
                            where o.Number == obj
                            where o.ScriptOffsets.ContainsKey(entry) || o.ScriptOffsets.ContainsKey(0xFF)
                            select o).FirstOrDefault();
            }

            if (objFound == null)
            {
                objFound = (from o in _objs
                            where o.Number == obj
                            where o.ScriptOffsets.ContainsKey(entry) || o.ScriptOffsets.ContainsKey(0xFF)
                            select o).FirstOrDefault();
            }

            if (objFound == null)
                return;

            _slots[slot] = new ScriptSlot
            {
                Number = (ushort)obj,
                InventoryEntry = entry,
                Offset = (uint)((objFound.ScriptOffsets.ContainsKey(entry) ? objFound.ScriptOffsets[entry] : objFound.ScriptOffsets[0xFF]) - objFound.Script.Offset),
                Status = ScriptStatus.Running,
                Where = where,
                FreezeResistant = freezeResistant,
                Recursive = recursive
            };

            _slots[slot].InitializeLocals(vars);

            // V0 Ensure we don't try and access objects via index inside the script
            //_v0ObjectIndex = false;
            UpdateScriptData((ushort)slot);
            RunScriptNested(slot);
        }
ScummEngine