Пример #1
0
        public static GW_ItemSlotBase CreateItem(int nItemID, bool bRandStats = true)
        {
            if (nItemID <= 0)
            {
                return(null);
            }

            // TODO test the below
            if (ItemConstants.GetInventoryType(nItemID) != InventoryType.Equip)
            {
                GW_ItemSlotBase item;
                if (ItemConstants.IsPet(nItemID))
                {
                    item = new GW_ItemSlotPet(nItemID);
                    ((GW_ItemSlotPet)item).nRemainLife = 7776000;
                }
                else
                {
                    item = new GW_ItemSlotBundle(nItemID);
                }

                if (item.Template is null)
                {
                    throw new ArgumentOutOfRangeException(nameof(nItemID), "Doesn't exist in data files.");
                }

                if (ItemConstants.IsRechargeableItem(item.nItemID))
                {
                    item.nNumber = (short)item.Template.SlotMax;
                }
                else
                {
                    item.nNumber = 1;
                }

                item.tDateExpire = DateTime.MaxValue;

                return(item);
            }

            if (bRandStats)
            {
                return(CreateVariableStatEquip(nItemID));
            }

            return(CreateNormalStatEquip(nItemID));
        }
Пример #2
0
        public void LoadFromDB()
        {
            using (var conn = new NpgsqlConnection(Constants.DB_World0_ConString))
            {
                conn.Open();

                using (var cmd = new NpgsqlCommand($"SELECT item_id, item_quantity, item_date_expire, item_serial_number, item_cash_serial_number FROM {Constants.DB_All_World_Schema_Name}.char_inventory_items "
                                                   + $"WHERE character_id = {dwOwnerID} "
                                                   + $"AND inventory_slot < {Constants.DB_ITEMSTORAGE_SLOTMAX} "
                                                   + $"AND inventory_slot >= {Constants.DB_ITEMSTORAGE_SLOTMIN}", conn))
                {
                    using (var r = cmd.ExecuteReader())
                    {
                        while (r.Read())
                        {
                            var i = new GW_ItemSlotBundle(Convert.ToInt16(r["item_id"]))
                            {
                                nNumber      = Convert.ToInt16(r["item_quantity"]),
                                tDateExpire  = (DateTime)r["item_date_expire"],
                                liSN         = Convert.ToInt16(r["item_serial_number"]),
                                liCashItemSN = Convert.ToInt16(r["item_cash_serial_number"]),
                            };

                            var tItem = new TempItem(i, 0, 0, 0);

                            Add(tItem);
                        }
                    }
                }

                using (var cmd = new NpgsqlCommand($"SELECT * FROM {Constants.DB_All_World_Schema_Name}.char_inventory_equips "
                                                   + $"WHERE character_id = {dwOwnerID} "
                                                   + $"AND inventory_slot < {Constants.DB_ITEMSTORAGE_SLOTMAX} "
                                                   + $"AND inventory_slot >= {Constants.DB_ITEMSTORAGE_SLOTMIN}", conn))
                    using (var r = cmd.ExecuteReader())
                    {
                        while (r.Read())
                        {
                            //Log.Info("Before adding item...");
                            var e = new GW_ItemSlotEquip(r.GetInt32(2))
                            {
                                dwInvItemId = (int)r.GetInt64(0),
                                // character_id =                   (1),
                                //nItemID = r.GetInt32(2),
                                CurrentUpgradeCount   = (byte)r.GetInt16(3),
                                RemainingUpgradeCount = (byte)r.GetInt16(4),
                                niSTR              = r.GetInt16(5),
                                niDEX              = r.GetInt16(6),
                                niINT              = r.GetInt16(7),
                                niLUK              = r.GetInt16(8),
                                niMaxHP            = r.GetInt16(9),
                                niMaxMP            = r.GetInt16(10),
                                niPAD              = r.GetInt16(11),
                                niMAD              = r.GetInt16(12),
                                niPDD              = r.GetInt16(13),
                                niMDD              = r.GetInt16(14),
                                niACC              = r.GetInt16(15),
                                niEVA              = r.GetInt16(16),
                                niCraft            = r.GetInt16(17),
                                niSpeed            = r.GetInt16(18),
                                niJump             = r.GetInt16(19),
                                nAttribute         = (ItemAttributeFlags)r.GetInt16(20),
                                liSN               = r.GetInt64(21),
                                sTitle             = r["item_title"] as string,
                                nLevelUpType       = (byte)r.GetInt16(23),
                                nLevel             = (byte)r.GetInt16(24),
                                nEXP               = r.GetInt32(25),
                                nDurability        = r.GetInt32(26),
                                HammerUpgradeCount = (byte)r.GetInt32(27),
                                nGrade             = (PotentialGradeCode)r.GetInt16(28),
                                StarUpgradeCount   = (byte)r.GetInt16(29),
                                nOption1           = r.GetInt16(30),
                                nOption2           = r.GetInt16(31),
                                nOption3           = r.GetInt16(32),
                                nSocket1           = r.GetInt16(33),
                                nSocket2           = r.GetInt16(34),
                                liCashItemSN       = r.GetInt64(38),
                                tSealingLock       = (DateTime)r["sealinglock_datetime"],
                                tDateExpire        = (DateTime)r["date_expire"],
                            };

                            //Log.Info($"Adding item ID {r.GetInt32(2)} to slot {r.GetInt16(36)} to char ID {r.GetInt32(1)}/{charId}");

                            var tItem = new TempItem(e, 0, 0, 0);                     // 0's cuz we dont care

                            Add(tItem);
                        }
                    }

                using (var cmd = new NpgsqlCommand($"SELECT merchant_mesos "
                                                   + $"FROM {Constants.DB_All_World_Schema_Name}.characters "
                                                   + $"WHERE id = {dwOwnerID}", conn))
                {
                    using (var r = cmd.ExecuteReader())
                    {
                        while (r.Read())
                        {
                            Meso = r.GetInt64(0);
                            break;
                        }
                    }
                }
            }
        }