コード例 #1
0
ファイル: Item.cs プロジェクト: fuding/Snowlight
        public Item(uint Id, uint DefinitionId, uint UserId, uint RoomId, Vector3 RoomPos, string RoomWallPos, int Rotation,
            string Flags, string DisplayFlags, bool Untradable, uint SoundManagerId, int SoundManagerOrder, double ExpireTimestamp, WiredManager WiredManager)
        {
            mId = Id;
            mDefinitionId = DefinitionId;
            mUserId = UserId;
            mRoomId = RoomId;
            mRoomPos = RoomPos;
            mRoomWallPos = RoomWallPos;
            mRoomRot = Rotation;
            mFlags = Flags;
            mDisplayFlags = DisplayFlags;
            mInitialFlags = Flags;
            mUntradable = Untradable;
            mCachedDefinition = ItemDefinitionManager.GetDefinition (mDefinitionId);
            mTmpInteractingUsers = new Dictionary<int, uint> ();
            mSoundManagerId = SoundManagerId;
            mSoundManagerOrder = SoundManagerOrder;
            mExpireTimestamp = ExpireTimestamp;

            if (WiredManager != null && (mCachedDefinition.Behavior == ItemBehavior.WiredCondition || mCachedDefinition.Behavior == ItemBehavior.WiredTrigger || mCachedDefinition.Behavior == ItemBehavior.WiredEffect)) {
                mWiredData = WiredManager.LoadWired (Id, mCachedDefinition.BehaviorData);
                if (mCachedDefinition.Behavior == ItemBehavior.WiredTrigger) {
                    switch (WiredTypesUtil.TriggerFromInt (mCachedDefinition.BehaviorData)) {
                    case WiredTriggerTypes.periodically:
                        RequestUpdate (mWiredData.Data2);
                        break;
                    case WiredTriggerTypes.walks_on_furni:
                    case WiredTriggerTypes.walks_off_furni:
                        WiredManager.RegisterWalkItems(mId);
                        break;
                    }

                }

            }
        }
コード例 #2
0
ファイル: WiredManager.cs プロジェクト: DaimOwns/Snowlight
        public void HandleSave(Session Session, ClientMessage Message)
        {
            uint ItemId = Message.PopWiredUInt32();



            if (!mInstance.CheckUserRights(Session) || !mWired.ContainsKey(ItemId))
            {
                return;
            }

            Item item = mInstance.GetItem(ItemId);

            if (item == null)
            {
                return;
            }

            WiredData data = mWired [ItemId];

            String Data1 = "";
            int    Data2 = 0;
            int    Data3 = 0;
            int    Data4 = 0;
            int    Time  = 0;
            String Data5 = "";

            Message.PopWiredInt32();
            Data2 = Message.PopWiredInt32();

            Boolean Simple = true;

            if (item.Definition.Behavior == ItemBehavior.WiredEffect)
            {
                switch (WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData))
                {
                case WiredEffectTypes.match_to_sshot:
                case WiredEffectTypes.move_rotate:
                case WiredEffectTypes.teleport_to:
                case WiredEffectTypes.toggle_state:
                    Simple = false;
                    break;
                }
            }

            if (item.Definition.Behavior == ItemBehavior.WiredTrigger)
            {
                switch (WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData))
                {
                case WiredTriggerTypes.state_changed:
                case WiredTriggerTypes.walks_off_furni:
                case WiredTriggerTypes.walks_on_furni:
                    Simple = false;
                    break;
                }
            }

            if (!Simple)
            {
                Data3 = Message.PopWiredInt32();

                if (item.Definition.Behavior == ItemBehavior.WiredEffect && WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData) == WiredEffectTypes.match_to_sshot)
                {
                    Data4 = Message.PopWiredInt32();
                }

                Message.PopString();
                int c = Message.PopWiredInt32();
                for (int i = 0; i < c; i++)
                {
                    uint tmp = Message.PopWiredUInt32();
                    if (mInstance.GetItem(tmp) == null)
                    {
                        continue;
                    }
                    if (tmp != 0)
                    {
                        Data1 += "" + tmp.ToString() + "|";
                    }
                }

                Time = Message.PopWiredInt32();
            }
            else
            {
                Data1 = Message.PopString();
                Data3 = Message.PopWiredInt32();
            }


            if (item.Definition.Behavior == ItemBehavior.WiredEffect)
            {
                switch (WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData))
                {
                case WiredEffectTypes.match_to_sshot:
                    String[] Selected = Data1.Split('|');

                    foreach (String ItemIdS in Selected)
                    {
                        uint SelectedItemId;
                        uint.TryParse(ItemIdS, out SelectedItemId);
                        Item Item = mInstance.GetItem(SelectedItemId);
                        if (Item == null)
                        {
                            continue;
                        }

                        Data5 += Item.Id + "#" + Item.RoomPosition.ToString() + "#" + Item.RoomRotation + "#" + Item.Flags + "+";
                    }
                    break;
                }
            }

            if (data.Data1 == Data1 && data.Data2 == Data2 && data.Data3 == Data3 && data.Data4 == Data4 && data.Time == Time && data.Data5 == Data5)
            {
                return;
            }

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) {
                data.Data1 = Data1;
                data.Data2 = Data2;
                data.Data3 = Data3;
                data.Data4 = Data4;
                data.Data5 = Data5;
                data.Time  = Time;
                data.SynchronizeDatabase(MySqlClient);
            }

            if (item.Definition.Behavior == ItemBehavior.WiredTrigger)
            {
                switch (WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData))
                {
                case WiredTriggerTypes.at_given_time:
                    item.RequestUpdate(Data2);
                    break;

                case WiredTriggerTypes.walks_on_furni:
                case WiredTriggerTypes.walks_off_furni:
                    DeRegisterWalkItems(item.Id);
                    RegisterWalkItems(item.Id);
                    break;
                }
            }
        }