This commit is contained in:
Lucca Faria Ferri 2023-01-26 14:45:27 -08:00
parent 55e30cd4c0
commit 3312e5b693

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022
using System;
//Blizzless Project 2022
using System.Collections.Generic;
@ -78,7 +79,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
public ItemRandomHelper RandomGenerator { get; set; }
public int ItemLevel { get; private set; }
public List<Item> Gems = new List<Item>();
public List<Item> Gems = new();
public int Rating
{
@ -108,7 +109,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
set => Attributes[GameAttribute.Item_Quality_Level] = value;
}
public SNOHandle SnoFlippyActory => ActorData.TagMap.ContainsKey(ActorKeys.Flippy) ? ActorData.TagMap[ActorKeys.Flippy] : null;
public SNOHandle SnoFlippyActory =>
ActorData.TagMap.ContainsKey(ActorKeys.Flippy) ? ActorData.TagMap[ActorKeys.Flippy] : null;
public SNOHandle SnoFlippyParticle =>
ActorData.TagMap.ContainsKey(ActorKeys.FlippyParticle)
@ -121,7 +123,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
{
return new InventoryLocationMessageData
{
OwnerID = (Owner != null) ? Owner.DynamicID(plr) : 0,
OwnerID = Owner?.DynamicID(plr) ?? 0,
EquipmentSlot = EquipmentSlot,
InventoryLocation = InventoryLocation
};
@ -136,14 +138,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
{
return new InvLoc
{
OwnerID = (Owner != null) ? Owner.DynamicID(plr) : 0,
OwnerID = Owner?.DynamicID(plr) ?? 0,
EquipmentSlot = EquipmentSlot,
Row = InventoryLocation.Y,
Column = InventoryLocation.X
};
}
public List<int> AffixFamilies = new List<int>();
public List<int> AffixFamilies = new();
public Item(World world, ItemTable definition, IEnumerable<Affix> affixList, string serializedGameAttributeMap,
int count = 1)
@ -163,7 +165,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
//Attributes[GameAttribute.Requirement, 57] = 10;
Attributes[GameAttribute.ItemStackQuantityLo] = count;
Attributes[GameAttribute.Loot_2_0_Drop] = true;
AffixList.Clear();
@ -177,7 +178,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
(IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType))
{
//Attributes[GameAttribute.Requirement, 64] = 0;
var reqLevel = (definition.RequiredLevel % 10 != 0)
var reqLevel = definition.RequiredLevel % 10 != 0
? definition.RequiredLevel - 1
: definition.RequiredLevel;
var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel);
@ -191,11 +192,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
AffixList[0].Definition.OverrideLevelReq != 0)
Attributes[GameAttribute.Requirement, 57] = AffixList[0].Definition.OverrideLevelReq;
foreach (var affix in AffixList)
{
if (affix.Definition.OverrideLevelReq > Attributes[GameAttribute.Requirement, 57])
Attributes[GameAttribute.Requirement, 57] = affix.Definition.OverrideLevelReq;
}
}
//*/
/*
Attributes[GameAttribute.Item_Quality_Level] = 1;
@ -206,7 +205,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
*/
//Attributes[GameAttribute.ItemStackQuantityLo] = 1;
//Attributes[GameAttribute.Seed] = RandomHelper.Next(); //unchecked((int)2286800181);
}
@ -250,10 +248,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
Attributes[GameAttribute.Item_Quality_Level] = 9;
if (ForceQualityLevel > -1)
Attributes[GameAttribute.Item_Quality_Level] = ForceQualityLevel;
if (definition.SNOSet != -1)
{
Attributes[GameAttribute.Item_Quality_Level] = 9;
}
if (definition.SNOSet != -1) Attributes[GameAttribute.Item_Quality_Level] = 9;
if (ItemDefinition.Name.ToLower().Contains("unique_gem"))
{
@ -263,26 +258,19 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
//Attributes[GameAttribute.Jewel_Rank] = 1;
}
if (ItemDefinition.Name.ToLower().Contains("norm_season"))
{
Attributes[GameAttribute.Item_Quality_Level] = 9;
}
if (ItemDefinition.Name.ToLower().Contains("norm_season")) Attributes[GameAttribute.Item_Quality_Level] = 9;
if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal"))
{
Attributes[GameAttribute.Item_Quality_Level] = 9;
Attributes[GameAttribute.Attacks_Per_Second_Item] += 1.1f;
Attributes[GameAttribute.Damage_Weapon_Min, 0] = 15 + (World.Game.InitialMonsterLevel * 1.7f);
Attributes[GameAttribute.Damage_Weapon_Min, 0] = 15 + World.Game.InitialMonsterLevel * 1.7f;
if (World.Game.InitialMonsterLevel > 70)
Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 20f;
else if (World.Game.InitialMonsterLevel > 60)
Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 14f;
Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 15;
}
@ -320,7 +308,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
ApplySkills(definition);
ApplyAttributeSpecifier(definition);
int affixNumber = 1;
var affixNumber = 1;
if (Attributes[GameAttribute.Item_Quality_Level] >= 3)
affixNumber = Attributes[GameAttribute.Item_Quality_Level] - 2;
@ -337,7 +325,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
Attributes[GameAttribute.Item_Quality_Level] = 1;
Attributes[GameAttribute.Item_Quality_Level] = Math.Min(Attributes[GameAttribute.Item_Quality_Level], 9);
Attributes[GameAttribute.Durability_Cur] = Attributes[GameAttribute.Durability_Max];
/*
@ -355,17 +342,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
//if (Attributes[GameAttribute.Item_Quality_Level] > 6)
// this.Unidentified = true;
#endif
if (Attributes[GameAttribute.Item_Quality_Level] == 9)
{
Attributes[GameAttribute.MinimapActive] = true;
}
if (Attributes[GameAttribute.Item_Quality_Level] == 9) Attributes[GameAttribute.MinimapActive] = true;
if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) ||
(IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType))
{
var a = Attributes[GameAttribute.Requirement, 57];
var reqLevel = (definition.RequiredLevel % 10 != 0)
var reqLevel = definition.RequiredLevel % 10 != 0
? definition.RequiredLevel - 1
: definition.RequiredLevel;
var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel);
@ -383,12 +366,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
(int)Attributes[GameAttribute.Requirement, 57];
if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal"))
{
AffixGenerator.AddAffix(this, 1661455571, true); //1661455571
}
}
public void Identify()
{
@ -422,7 +402,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
Attributes[GameAttribute.Damage_Weapon_Delta, 0] += definition.WeaponDamageDelta;
}
int hash = definition.Hash;
var hash = definition.Hash;
if (definition.Name.Contains("_104"))
hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4));
@ -440,8 +420,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 34;
}
float scaleCapMin = 0f;
float scaleCapDelta = 0f;
var scaleCapMin = 0f;
var scaleCapDelta = 0f;
switch (definition.ItemTypesGBID)
{
case 109694: //Axe
@ -532,7 +512,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (scaleCapMin > 5 && scaleCapDelta > 5)
{
float ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f;
var ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f;
if (ratio < 0.01f) ratio = 0.01f;
if (ratio > 1f) ratio = 1f;
Attributes[GameAttribute.Damage_Weapon_Min, 0] +=
@ -554,13 +534,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
var Armor_Item_Total = Attributes[GameAttribute.Armor_Item_Total];
}
int hash = definition.Hash;
var hash = definition.Hash;
if (definition.Name.Contains("_104"))
hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4));
if (UniqueItems.UniqueItemStats.ContainsKey(hash))
{
Attributes[GameAttribute.Armor_Item] += UniqueItems.GetArmor(hash);
//Unique items level scaling
if (IsArmor(ItemType))
@ -583,9 +562,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (definition.ItemTypesGBID == 332825721 ||
definition.ItemTypesGBID == 602099538) //Shield and CruShield
{
float scaleCapMin = 14000f;
float scaleCapDelta = 21000f - scaleCapMin;
float ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f;
var scaleCapMin = 14000f;
var scaleCapDelta = 21000f - scaleCapMin;
var ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f;
if (ratio < 0.01f) ratio = 0.01f;
if (ratio > 1f) ratio = 1f;
Attributes[GameAttribute.Block_Amount_Item_Min] +=
@ -600,7 +579,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
{
if (definition.BaseDurability > 0)
{
int durability = (definition.BaseDurability * 2) + RandomHelper.Next(definition.DurabilityVariance);
var durability = definition.BaseDurability * 2 + RandomHelper.Next(definition.DurabilityVariance);
Attributes[GameAttribute.Durability_Max] = durability;
Attributes[GameAttribute.Durability_Cur] = durability;
}
@ -641,25 +620,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
private void ApplySkills(ItemTable definition)
{
if (definition.SNOSkill0 != -1)
{
Attributes[GameAttribute.Skill, definition.SNOSkill0] = 1;
}
if (definition.SNOSkill0 != -1) Attributes[GameAttribute.Skill, definition.SNOSkill0] = 1;
if (definition.SNOSkill1 != -1)
{
Attributes[GameAttribute.Skill, definition.SNOSkill1] = 1;
}
if (definition.SNOSkill1 != -1) Attributes[GameAttribute.Skill, definition.SNOSkill1] = 1;
if (definition.SNOSkill2 != -1)
{
Attributes[GameAttribute.Skill, definition.SNOSkill2] = 1;
}
if (definition.SNOSkill2 != -1) Attributes[GameAttribute.Skill, definition.SNOSkill2] = 1;
if (definition.SNOSkill3 != -1)
{
Attributes[GameAttribute.Skill, definition.SNOSkill3] = 1;
}
if (definition.SNOSkill3 != -1) Attributes[GameAttribute.Skill, definition.SNOSkill3] = 1;
}
private void ApplyAttributeSpecifier(ItemTable definition)
@ -696,9 +663,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
{
return new VisualItem()
{
GbId = (Attributes[GameAttribute.TransmogGBID] == -1
GbId = Attributes[GameAttribute.TransmogGBID] == -1
? GBHandle.GBID
: Attributes[GameAttribute.TransmogGBID]),
: Attributes[GameAttribute.TransmogGBID],
DyeType = Attributes[GameAttribute.DyeType],
ItemEffectType = 0, //Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 14),
EffectLevel = -1 //Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 30)
@ -709,9 +676,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
public D3.Hero.VisualItem GetVisualItem()
{
var visualItem = D3.Hero.VisualItem.CreateBuilder()
.SetGbid((Attributes[GameAttribute.TransmogGBID] == -1
.SetGbid(Attributes[GameAttribute.TransmogGBID] == -1
? GBHandle.GBID
: Attributes[GameAttribute.TransmogGBID]))
: Attributes[GameAttribute.TransmogGBID])
.SetDyeType(Attributes[GameAttribute.DyeType])
.SetEffectLevel(0)
.SetItemEffectType(-1)
@ -721,13 +688,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
public int GetPrice()
{
int price = ItemDefinition.Cost;
var price = ItemDefinition.Cost;
//if (this.AffixList.Count == 0)
// price *= (1 + this.ItemDefinition.BuyCostMultiplier);
foreach (var affix in AffixList)
{
price += affix.Price;
}
foreach (var affix in AffixList) price += affix.Price;
return price;
}
@ -868,11 +832,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
InventoryLocation.Y = row;
if (Owner is Player)
{
var player = (Owner as Player);
if (!Reveal(player))
{
player.InGameClient.SendMessage(ACDInventoryPositionMessage(player));
}
var player = Owner as Player;
if (!Reveal(player)) player.InGameClient.SendMessage(ACDInventoryPositionMessage(player));
}
}
@ -906,49 +867,49 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
}
var Moneys = D3.Items.CurrencySavedData.CreateBuilder();
D3.Items.CurrencyData GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0)
var GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0)
.SetCount((long)player.Inventory.GetGoldAmount()).Build();
D3.Items.CurrencyData BloodShardData =
var BloodShardData =
D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(playerAcc.BloodShards).Build();
D3.Items.CurrencyData PlatinumData =
var PlatinumData =
D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(playerAcc.Platinum).Build();
D3.Items.CurrencyData Craft1Data =
var Craft1Data =
D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(playerAcc.CraftItem1)
.Build(); // Reusable Parts.
D3.Items.CurrencyData Craft2Data =
var Craft2Data =
D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(playerAcc.CraftItem2).Build(); // Arcanes Dust.
D3.Items.CurrencyData Craft3Data =
var Craft3Data =
D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(playerAcc.CraftItem3)
.Build(); // Veiled Crystal.
D3.Items.CurrencyData Craft4Data =
var Craft4Data =
D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(playerAcc.CraftItem4)
.Build(); // Death's Breath.
D3.Items.CurrencyData Craft5Data =
var Craft5Data =
D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(playerAcc.CraftItem5)
.Build(); // Forgotten Soul.
D3.Items.CurrencyData Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8)
var Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8)
.SetCount(playerAcc.HoradricA1Res).Build(); // Khanduran Rune Bounty itens Act I.
D3.Items.CurrencyData Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9)
var Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9)
.SetCount(playerAcc.HoradricA2Res).Build(); // Caldeum Nightshade Bounty itens Act II.
D3.Items.CurrencyData Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10)
var Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10)
.SetCount(playerAcc.HoradricA3Res).Build(); // Arreat War Tapestry Bounty itens Act III.
D3.Items.CurrencyData Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11)
var Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11)
.SetCount(playerAcc.HoradricA4Res).Build(); // Copputed Angel Flesh Bounty itens Act IV.
D3.Items.CurrencyData Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12)
var Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12)
.SetCount(playerAcc.HoradricA5Res).Build(); // Westmarch Holy Water Bounty itens Act V.
D3.Items.CurrencyData Craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13)
var Craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13)
.SetCount(playerAcc.HeartofFright).Build(); // Heart of Fright.
D3.Items.CurrencyData Craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14)
var Craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14)
.SetCount(playerAcc.VialofPutridness).Build(); // Idol of Terror.
D3.Items.CurrencyData Craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15)
var Craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15)
.SetCount(playerAcc.IdolofTerror).Build(); // Vail of Putridiness.
D3.Items.CurrencyData Craft11Data =
var Craft11Data =
D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(playerAcc.LeorikKey).Build(); // Leorik Regret.
D3.Items.CurrencyData Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20)
var Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20)
.SetCount(playerAcc.BigPortalKey).Build(); // KeyStone Greater Rift.
object[] consumables =
@ -958,15 +919,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
Craft9Data, Craft10Data, Craft11Data
};
foreach (object consumable in consumables)
{
Moneys.AddCurrency(consumable);
}
foreach (var consumable in consumables) Moneys.AddCurrency(consumable);
player.InGameClient.SendMessage(
new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull)
{ Data = Moneys.Build().ToByteArray() });
}
public virtual void OnRequestUse(Player player, Item target, int actionId, WorldPlace worldPlace)
@ -994,21 +951,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (IsRecipe(ItemType)) //if item is crafting recipe
{
Logger.Trace("Learning recipe...");
for (int i = 0; i < 10; i++)
{
for (var i = 0; i < 10; i++)
if (ItemDefinition.RecipeToGrant[i] != -1)
player.LearnRecipe(player.ArtisanInteraction, ItemDefinition.RecipeToGrant[i]);
else
break;
}
for (int i = 0; i < 8; i++)
{
for (var i = 0; i < 8; i++)
if (ItemDefinition.TransmogsToGrant[i] != -1)
player.UnlockTransmog(ItemDefinition.TransmogsToGrant[i]);
else
break;
}
if (GBHandle.GBID == 1549850924) //Arma Haereticorum additional transmog
{
@ -1017,7 +970,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
}
if (Attributes[GameAttribute.ItemStackQuantityLo] <= 1)
{
player.Inventory.DestroyInventoryItem(this); // No more recipes!
}
else
{
UpdateStackCount(--Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one
@ -1030,8 +985,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (IsTreasureBag(ItemType))
{
Logger.Warn("Treasure Bag system v0.2");
string[] items = new string[1];
int @base = 0;
var items = new string[1];
var @base = 0;
switch (player.Toon.Class)
{
case LoginServer.Toons.ToonClass.Crusader:
@ -1054,52 +1009,52 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
break;
} //0 - Barbarian, 2 - Crusader, 4 - Hunter, 6 - Monk, 8 - Necromancer, 10 - Sorcerer, 12 - Wizard
string it = "";
var it = "";
#region Balance calculation
var moneys = D3.Items.CurrencySavedData.CreateBuilder();
var playerAcc = player.InGameClient.BnetClient.Account.GameAccount;
D3.Items.CurrencyData goldData = D3.Items.CurrencyData.CreateBuilder().SetId(0)
var goldData = D3.Items.CurrencyData.CreateBuilder().SetId(0)
.SetCount((long)player.Inventory.GetGoldAmount()).Build();
D3.Items.CurrencyData bloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1)
var bloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1)
.SetCount(playerAcc.BloodShards).Build();
D3.Items.CurrencyData platinumData =
var platinumData =
D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(playerAcc.Platinum).Build();
D3.Items.CurrencyData craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3)
var craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3)
.SetCount(playerAcc.CraftItem1).Build(); // Reusable Parts.
D3.Items.CurrencyData craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4)
var craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4)
.SetCount(playerAcc.CraftItem2).Build(); // Arcanes Dust.
D3.Items.CurrencyData craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5)
var craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5)
.SetCount(playerAcc.CraftItem3).Build(); // Veiled Crystal.
D3.Items.CurrencyData craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6)
var craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6)
.SetCount(playerAcc.CraftItem4).Build(); // Death's Breath.
D3.Items.CurrencyData craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7)
var craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7)
.SetCount(playerAcc.CraftItem5).Build(); // Forgotten Soul.
D3.Items.CurrencyData horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8)
var horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8)
.SetCount(playerAcc.HoradricA1Res).Build(); // Khanduran Rune Bounty itens Act I.
D3.Items.CurrencyData horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9)
var horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9)
.SetCount(playerAcc.HoradricA2Res).Build(); // Caldeum Nightshade Bounty itens Act II.
D3.Items.CurrencyData horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10)
var horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10)
.SetCount(playerAcc.HoradricA3Res).Build(); // Arreat War Tapestry Bounty itens Act III.
D3.Items.CurrencyData horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11)
var horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11)
.SetCount(playerAcc.HoradricA4Res).Build(); // Copputed Angel Flesh Bounty itens Act IV.
D3.Items.CurrencyData horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12)
var horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12)
.SetCount(playerAcc.HoradricA5Res).Build(); // Westmarch Holy Water Bounty itens Act V.
D3.Items.CurrencyData craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13)
var craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13)
.SetCount(playerAcc.HeartofFright).Build(); // Heart of Fright.
D3.Items.CurrencyData craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14)
var craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14)
.SetCount(playerAcc.VialofPutridness).Build(); // Idol of Terror.
D3.Items.CurrencyData craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15)
var craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15)
.SetCount(playerAcc.IdolofTerror).Build(); // Vail of Putridiness.
D3.Items.CurrencyData craft11Data = D3.Items.CurrencyData.CreateBuilder().SetId(16)
var craft11Data = D3.Items.CurrencyData.CreateBuilder().SetId(16)
.SetCount(playerAcc.LeorikKey).Build(); // Leorik Regret.
D3.Items.CurrencyData craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20)
var craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20)
.SetCount(playerAcc.BigPortalKey).Build(); // KeyStone Greater Rift.
object[] consumables =
@ -1109,10 +1064,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
craft9Data, craft10Data, craft11Data
};
foreach (object consumable in consumables)
{
moneys.AddCurrency(consumable);
}
foreach (var consumable in consumables) moneys.AddCurrency(consumable);
#endregion
@ -1260,10 +1212,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(playerAcc.CraftItem4).Build();
object[] horadricBoxes = { horadric1Data, horadric2Data, horadric3Data, horadric4Data, horadric5Data };
foreach (object horadricBoxe in horadricBoxes)
{
moneys.AddCurrency(horadricBoxe);
}
foreach (var horadricBoxe in horadricBoxes) moneys.AddCurrency(horadricBoxe);
player.InGameClient.SendMessage(
new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull)
@ -1387,7 +1336,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (GBHandle.GBID == 1866876233 || GBHandle.GBID == 1866876234) return; //CE dyes
if (Attributes[GameAttribute.ItemStackQuantityLo] <= 1)
{
player.Inventory.DestroyInventoryItem(this); // No more dyes!
}
else
{
UpdateStackCount(--Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one
@ -1412,15 +1363,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
player.CurrentWingsPowerId = -1;
}
bool activated = (player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, powerId] == true);
var activated = player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, powerId] == true;
player.CurrentWingsPowerId = activated ? -1 : powerId;
player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, powerId] = !activated;
player.Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, powerId] = !activated;
player.Attributes[GameAttribute.Buff_Icon_Start_Tick0, powerId] = 0;
player.Attributes[GameAttribute.Buff_Icon_End_Tick0, powerId] = (activated ? 0 : 100);
player.Attributes[GameAttribute.Buff_Icon_Count0, powerId] = (activated ? 0 : 1);
player.Attributes[GameAttribute.Buff_Icon_End_Tick0, powerId] = activated ? 0 : 100;
player.Attributes[GameAttribute.Buff_Icon_Count0, powerId] = activated ? 0 : 1;
player.Attributes.BroadcastChangedIfRevealed();
player.Inventory.SendVisualInventory(player);
var dbToon = player.Toon.DBToon;
@ -1435,10 +1386,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
return false;
foreach (var gplayer in player.World.Game.Players.Values)
{
if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player)
return false;
}
if (!base.Reveal(player))
return false;
@ -1446,16 +1395,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (AffixList.Count > 0)
{
var affixGbis = new int[AffixList.Count];
for (int i = 0; i < AffixList.Count; i++)
{
affixGbis[i] = AffixList[i].AffixGbid;
}
for (var i = 0; i < AffixList.Count; i++) affixGbis[i] = AffixList[i].AffixGbid;
player.InGameClient.SendMessage(new AffixMessage()
{
ActorID = DynamicID(player),
Field1 = (Unidentified ? 0x00000002 : 0x00000001),
aAffixGBIDs = affixGbis,
Field1 = Unidentified ? 0x00000002 : 0x00000001,
aAffixGBIDs = affixGbis
});
}
@ -1480,9 +1426,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
public override bool Unreveal(Player player)
{
if (CurrentState == ItemState.PickingUp) // && player == Owner)
{
return false;
}
foreach (var gem in Gems)
gem.Unreveal(player);
@ -1497,10 +1441,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
if (PowerMath.Distance2D(player.Position, Position) < 3f && !ZPositionCorrected)
{
foreach (var gplayer in player.World.Game.Players.Values)
{
if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player)
return;
}
ZPositionCorrected = true;
Teleport(new Vector3D(Position.X, Position.Y, player.Position.Z));