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; } } } }
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; } } }