Example #1
0
        static void _Use(object sender, ItemUseEventArgs e)
        {
            var on_item = e.OnItem;
            var item = sender as Item;
             	        if(on_item == null || on_item.Type != ItemType.Container)
                return; // that does nothing

            // already locked
            if(on_item.LockerIsClose)
                return;

            uint lock_id = (uint)Global.Random(1, 65535);

            on_item.LockerId = lock_id;
            on_item.LockerComplexity = item.LockerComplexity;

            // remove it
            if (item.GetCount() > 1)
                item.SetCount(item.GetCount() - 1);
            else
                Global.DeleteItem(item);
            // give key
            var key = e.Cr.AddItem((ushort)Pid.KEY, 1);
            key.LockerId = lock_id;
            key.Update();
            // info
            e.Cr.SayMsg(Say.NetMsg, TextMsg.Text, 4400);
            e.PreventDefaults();
        }
Example #2
0
        static void _Use(object sender, ItemUseEventArgs e)
        {
            var on_item = e.OnItem;
            var item    = sender as Item;

            if (on_item == null || on_item.Type != ItemType.Container)
            {
                return;         // that does nothing
            }
            // already locked
            if (on_item.LockerIsClose)
            {
                return;
            }

            uint lock_id = (uint)Global.Random(1, 65535);

            on_item.LockerId         = lock_id;
            on_item.LockerComplexity = item.LockerComplexity;

            // remove it
            if (item.GetCount() > 1)
            {
                item.SetCount(item.GetCount() - 1);
            }
            else
            {
                Global.DeleteItem(item);
            }
            // give key
            var key = e.Cr.AddItem((ushort)Pid.KEY, 1);

            key.LockerId = lock_id;
            key.Update();
            // info
            e.Cr.SayMsg(Say.NetMsg, TextMsg.Text, 4400);
            e.PreventDefaults();
        }
Example #3
0
        public void UsingLockOnLockerGivesProperKey()
        {
            var _lock = new Mock<Item>(IntPtr.Zero);
            var locker = new Mock<Item>(IntPtr.Zero);
            locker.Setup(i => i.Type).Returns(ItemType.Container); // when target item is container
            locker.Setup(i => i.LockerIsClose).Returns(false); // and it's not locked
            ushort complexity = 50;
            uint lock_id = 10;
            Utils.MockRandomizer((int)complexity, (int)lock_id);
            var key = new Mock<Item>(IntPtr.Zero);
            var cr = new Mock<Critter>(IntPtr.Zero);
            cr.Setup(c => c.AddItem(It.Is<ushort>(i => i == Pid.KEY), 1))
                .Returns(key.Object); // critter will receive key

            Lock.Init(_lock.Object);

            var e = new ItemUseEventArgs(_lock.Object, cr.Object, null, null, null);
            _lock.Raise(i => i.Use += null, _lock.Object, cr.Object, null, locker.Object, null, e); // using lock on the locker

            _lock.VerifySet(l => l.LockerComplexity = complexity);
            locker.Verify();
            cr.Verify();
            key.VerifySet(k => k.LockerId = lock_id); // that random lock id is gonna be assigned to locker
        }