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