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