예제 #1
0
        public void ModifyOptionSkills(GW_ItemSlotEquip pEquip, bool bActive)
        {
            Parent.Modify.Skills(mod =>
            {
                foreach (var option in pEquip.nOptionData)
                {
                    if (option is null)
                    {
                        continue;
                    }
                    if (option.iSkill == 0)
                    {
                        continue;
                    }

                    var nOptionSkillID = SkillLogic.get_novice_skill_as_race((SkillLogic.NoviceSkillID)(option.iSkill - 23001), Parent.Stats.nJob);

                    mod.AddEntry(nOptionSkillID, entry => entry.nSLV = (byte)(bActive ? 1 : 0));

                    if (!bActive)
                    {
                        Parent.Buffs.Remove(nOptionSkillID);
                    }
                }
            });
        }
예제 #2
0
        public static GW_ItemSlotEquip CreateNormalStatEquip(int nItemID, long liCashItemSN = 0)
        {
            if (ItemConstants.GetInventoryType(nItemID) != InventoryType.Equip)
            {
                return(null);
            }

            var pItem = new GW_ItemSlotEquip(nItemID);

            pItem.niSTR   = (short)pItem.EquipTemplate.incSTR;
            pItem.niDEX   = (short)pItem.EquipTemplate.incDEX;
            pItem.niINT   = (short)pItem.EquipTemplate.incINT;
            pItem.niLUK   = (short)pItem.EquipTemplate.incLUK;
            pItem.niMaxHP = (short)pItem.EquipTemplate.incMHP;
            pItem.niMaxMP = (short)pItem.EquipTemplate.incMMP;
            pItem.niPAD   = (short)pItem.EquipTemplate.incPAD;
            pItem.niMAD   = (short)pItem.EquipTemplate.incMAD;
            pItem.niPDD   = (short)pItem.EquipTemplate.incPDD;
            pItem.niMDD   = (short)pItem.EquipTemplate.incMDD;
            pItem.niACC   = (short)pItem.EquipTemplate.incACC;
            pItem.niEVA   = (short)pItem.EquipTemplate.incEVA;
            pItem.niSpeed = (short)pItem.EquipTemplate.incSpeed;
            pItem.niJump  = (short)pItem.EquipTemplate.incJump;

            FinishEquip(pItem, liCashItemSN);

            return(pItem);
        }
예제 #3
0
 private static void FinishEquip(GW_ItemSlotEquip pItem, long liCashItemSN)
 {
     pItem.liCashItemSN          = liCashItemSN;
     pItem.tDateExpire           = pItem.EquipTemplate.Cash ? DateTime.Now.AddDays(90) : DateTime.MaxValue;
     pItem.RemainingUpgradeCount = (byte)pItem.EquipTemplate.TUC;
     pItem.liSN    = liCashItemSN != 0 ? DateTime.Now.Ticks : 0;
     pItem.niCraft = (byte)pItem.EquipTemplate.incCraft;
 }
예제 #4
0
        public static GW_ItemSlotEquip CreateVariableStatEquip(int nItemID, long liCashItemSN = 0)
        {
            var pItem = new GW_ItemSlotEquip(nItemID);

            if (pItem.Template is null)
            {
                throw new NullReferenceException($"Unable to find item with ID {nItemID} and cash ID {liCashItemSN}.");
            }

            if (!pItem.Template.Cash)
            {
                pItem.niSTR = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incSTR));
                pItem.niDEX = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incDEX));
                pItem.niINT = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incINT));
                pItem.niLUK = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incLUK));

                pItem.niMaxHP = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incMHP));
                pItem.niMaxMP = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incMMP));

                pItem.niPAD = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incPAD));
                pItem.niMAD = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incMAD));

                pItem.niPDD = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incPDD));
                pItem.niMDD = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incMDD));

                pItem.niACC = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incACC));
                pItem.niEVA = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incEVA));

                pItem.niSpeed = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incSpeed));
                pItem.niJump  = Math.Max((short)0, GaussianDistributionVariation(pItem.EquipTemplate.incJump));

                if (Constants.Rand.NextDouble() < RateConstants.ItemPotential_EquipDropHiddenPotentialOdds)
                {
                    pItem.nGrade = PotentialGradeCode.Hidden_Rare;
                }
            }

            FinishEquip(pItem, liCashItemSN);

            return(pItem);
        }
예제 #5
0
 /// <summary>
 /// Notifies the client that an equip has changed stats.
 /// Contains one remove operation and one add operation.
 /// </summary>
 /// <remarks>This is how Nexon does it as well. (You'd think they'd have another UpdateEquip op lol)</remarks>
 public void UpdateEquipInformation(GW_ItemSlotEquip pItemEquip, short nPOS)
 {
     aChangeLog.Add(new InventoryOperationRemove(InventoryType.Equip, nPOS));
     aChangeLog.Add(new InventoryOperationAdd(InventoryType.Equip, nPOS, pItemEquip));
 }
예제 #6
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;
                        }
                    }
                }
            }
        }