コード例 #1
0
 public static int Create(int itemid, MapleCharacter chr)
 {
     try
     {
         MapleItemInformationProvider mii = MapleItemInformationProvider.Instance;
         using (var db = new NeoMapleStoryDatabase())
         {
             var petmodel = new PetModel()
             {
                 Name      = mii.GetName(itemid),
                 Level     = 1,
                 Closeness = 0,
                 Fullness  = 100,
                 UniqueId  = MapleCharacter.GetNextUniqueId()
             };
             db.Pets.Add(petmodel);
             db.SaveChanges();
             chr.Save();
             return(petmodel.Id);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(-1);
     }
 }
コード例 #2
0
        public static void Equip(MapleClient c, short src, short dst)
        {
            MapleItemInformationProvider ii = MapleItemInformationProvider.Instance;

            byte srcSlot = (byte)src;
            byte dstSlot = (byte)dst;

            Equip source = c.Player.Inventorys[MapleInventoryType.Equip.Value].Inventory.FirstOrDefault(x => x.Key == srcSlot).Value as Equip;
            Equip target = c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.FirstOrDefault(x => x.Key == dstSlot).Value as Equip;

            if (source == null)
            {
                return;
            }
            if (!c.Player.IsGm)
            {
                switch (source.ItemId)
                {
                case 1002140:     // Wizet Invincible Hat
                case 1042003:     // Wizet Plain Suit
                case 1062007:     // Wizet Plain Suit Pants
                case 1322013:     // Wizet Secret Agent Suitcase
                    RemoveAllById(c, source.ItemId, false);
                    c.Player.DropMessage(PacketCreator.ServerMessageType.Popup, "无法佩带此物品");
                    return;
                }
            }
            int  reqLevel = ii.GetReqLevel(source.ItemId);
            int  reqStr   = ii.GetReqStr(source.ItemId);
            int  reqDex   = ii.GetReqDex(source.ItemId);
            int  reqInt   = ii.GetReqInt(source.ItemId);
            int  reqLuk   = ii.GetReqLuk(source.ItemId);
            bool cashSlot = false;

            if (source.ItemId == 1812006)
            {
                RemoveAllById(c, source.ItemId, false);
                c.Player.DropMessage(PacketCreator.ServerMessageType.Popup, "物品已被封印");
                return;
            }
            if (dstSlot < 0x9D)
            {
                cashSlot = true;
            }
            if (!ii.IsCash(source.ItemId))
            {
                string type = ii.GetType(source.ItemId);
                if ((type.Equals("Cp", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xFF) ||
                    (type.Equals("Af", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xFE) ||
                    (type.Equals("Ay", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xFD) ||
                    (type.Equals("Ae", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xFC) ||
                    ((type.Equals("Ma", StringComparison.CurrentCultureIgnoreCase) || type.Equals("MaPn", StringComparison.CurrentCultureIgnoreCase)) && dstSlot != 0xFB) ||
                    (type.Equals("Pn", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xFA) ||
                    (type.Equals("So", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xF9) ||
                    (type.Equals("Gv", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xF8) ||
                    (type.Equals("Sr", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xF7) ||
                    (type.Equals("Si", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xF6) ||
                    ((type.Equals("Wp", StringComparison.CurrentCultureIgnoreCase) || type.Equals("WpSi", StringComparison.CurrentCultureIgnoreCase)) && dstSlot != 0xF5) ||
                    (type.Equals("Pe", StringComparison.CurrentCultureIgnoreCase) && dstSlot != 0xEF))
                {
                    c.Send(PacketCreator.EnableActions());
                    return;
                }
            }
            if ((ii.GetName(source.ItemId).Contains("(Male)") && !c.Player.Gender) ||
                (ii.GetName(source.ItemId).Contains("(Female)") && c.Player.Gender) ||
                reqLevel > c.Player.Level ||
                reqStr > c.Player.Localstr ||
                reqDex > c.Player.Localdex ||
                reqInt > c.Player.Localint ||
                reqLuk > c.Player.Localluk ||
                (cashSlot && !ii.IsCash(source.ItemId)))
            {
                c.Send(PacketCreator.EnableActions());
                return;
            }

            switch (dstSlot)
            {
            case 0xFA:
            {
                // unequip the overall
                IMapleItem top;
                if (c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.TryGetValue(0xFB, out top) && ii.IsOverall(top.ItemId))
                {
                    if (c.Player.Inventorys[MapleInventoryType.Equip.Value].IsFull())
                    {
                        c.Send(PacketCreator.GetInventoryFull());
                        c.Send(PacketCreator.GetShowInventoryFull());
                        return;
                    }
                    UnEquip(c, -5, c.Player.Inventorys[MapleInventoryType.Equip.Value].GetNextFreeSlot());
                }
            }
            break;

            case 0xFB:
            {        // unequip the bottom and top
                IMapleItem top    = c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.FirstOrDefault(x => x.Key == 0xFB).Value;
                IMapleItem bottom = c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.FirstOrDefault(x => x.Key == 0xFA).Value;
                if (top != null && ii.IsOverall(source.ItemId))
                {
                    if (c.Player.Inventorys[MapleInventoryType.Equip.Value].IsFull(bottom != null && ii.IsOverall(source.ItemId) ? 1 : 0))
                    {
                        c.Send(PacketCreator.GetInventoryFull());
                        c.Send(PacketCreator.GetShowInventoryFull());
                        return;
                    }
                    UnEquip(c, -5, c.Player.Inventorys[MapleInventoryType.Equip.Value].GetNextFreeSlot());
                }
                if (bottom != null && ii.IsOverall(source.ItemId))
                {
                    if (c.Player.Inventorys[MapleInventoryType.Equip.Value].IsFull())
                    {
                        c.Send(PacketCreator.GetInventoryFull());
                        c.Send(PacketCreator.GetShowInventoryFull());
                        return;
                    }
                    UnEquip(c, -6, c.Player.Inventorys[MapleInventoryType.Equip.Value].GetNextFreeSlot());
                }
            }
            break;

            case 0xF6:
                // check if weapon is two-handed
                IMapleItem weapon;
                if (c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.TryGetValue(0xF5, out weapon) && ii.IsTwoHanded(weapon.ItemId))
                {
                    if (c.Player.Inventorys[MapleInventoryType.Equip.Value].IsFull())
                    {
                        c.Send(PacketCreator.GetInventoryFull());
                        c.Send(PacketCreator.GetShowInventoryFull());
                        return;
                    }
                    UnEquip(c, -11, c.Player.Inventorys[MapleInventoryType.Equip.Value].GetNextFreeSlot());
                }
                break;

            case 0xF5:
                IMapleItem shield;
                if (c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.TryGetValue(0xF6, out shield) && ii.IsTwoHanded(source.ItemId))
                {
                    if (c.Player.Inventorys[MapleInventoryType.Equip.Value].IsFull())
                    {
                        c.Send(PacketCreator.GetInventoryFull());
                        c.Send(PacketCreator.GetShowInventoryFull());
                        return;
                    }
                    UnEquip(c, -10, c.Player.Inventorys[MapleInventoryType.Equip.Value].GetNextFreeSlot());
                }
                break;

            case 0xEE:
                //if (c.Player.Mount != null)
                //{
                //    c.Player.getMount().setItemId(source.ItemId);
                //}
                break;
            }

            source = c.Player.Inventorys[MapleInventoryType.Equip.Value].Inventory.FirstOrDefault(x => x.Key == srcSlot).Value as Equip;
            target = c.Player.Inventorys[MapleInventoryType.Equipped.Value].Inventory.FirstOrDefault(x => x.Key == dstSlot).Value as Equip;

            c.Player.Inventorys[MapleInventoryType.Equip.Value].RemoveSlot(srcSlot);

            if (target != null)
            {
                c.Player.Inventorys[MapleInventoryType.Equipped.Value].RemoveSlot(dstSlot);
            }

            source.Position = dstSlot;

            c.Player.Inventorys[MapleInventoryType.Equipped.Value].AddFromDb(source);

            if (target != null)
            {
                target.Position = srcSlot;
                c.Player.Inventorys[MapleInventoryType.Equip.Value].AddFromDb(target);
            }

            if (c.Player.GetBuffedValue(MapleBuffStat.Booster) != null && ii.IsWeapon(source.ItemId))
            {
                c.Player.CancelBuffStats(MapleBuffStat.Booster);
            }

            c.Send(PacketCreator.MoveInventoryItem(MapleInventoryType.Equip, src, dst, 2));
            c.Player.EquipChanged();
        }