Unidentified items
This commit is contained in:
parent
9ef1ec0a6a
commit
0e62c1083d
@ -5,6 +5,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
//Blizzless Project 2022
|
||||
using System.Text;
|
||||
using DiIiS_NA.Core.Logging;
|
||||
|
||||
namespace DiIiS_NA.Core.Helpers.Math
|
||||
{
|
||||
@ -12,7 +13,9 @@ namespace DiIiS_NA.Core.Helpers.Math
|
||||
{
|
||||
#region Static Fields
|
||||
|
||||
private static readonly FastRandom __seedRng = new FastRandom((int)Environment.TickCount);
|
||||
private static readonly Logger Logger = LogManager.CreateLogger(nameof(FastRandom));
|
||||
|
||||
private static readonly FastRandom _seedRng = new(Environment.TickCount);
|
||||
|
||||
public static readonly FastRandom Instance = new FastRandom();
|
||||
|
||||
@ -32,7 +35,7 @@ namespace DiIiS_NA.Core.Helpers.Math
|
||||
|
||||
public FastRandom()
|
||||
{
|
||||
Reinitialise(__seedRng.NextInt());
|
||||
Reinitialise(_seedRng.NextInt());
|
||||
}
|
||||
|
||||
public FastRandom(int seed)
|
||||
@ -212,5 +215,12 @@ namespace DiIiS_NA.Core.Helpers.Math
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Chance returns true if a random number between 0 and 100 is lesser than the specified value.
|
||||
/// </summary>
|
||||
/// <param name="successPercentage"></param>
|
||||
/// <returns></returns>
|
||||
public bool Chance(float successPercentage) => Next(100) < successPercentage;
|
||||
}
|
||||
}
|
||||
|
||||
@ -384,7 +384,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem
|
||||
lock (client._serviceLock)
|
||||
{
|
||||
if (additionalQuantity == 0) return;
|
||||
Logger.Trace("UpdateQuantity(): id {0}", achievementId);
|
||||
Logger.Debug("UpdateQuantity(): id {0}", achievementId);
|
||||
if (client.Account.GameAccount.Achievements.Where(a => a.AchievementId == achievementId && a.Completion != -1).Count() > 0) return;
|
||||
|
||||
ulong mainCriteriaId = GetMainCriteria(achievementId);
|
||||
@ -417,7 +417,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem
|
||||
var achievement = new DBAchievements();
|
||||
if (achs.Count == 0)
|
||||
{
|
||||
Logger.Trace("UpdateQuantity(): creating new ach data");
|
||||
Logger.Debug("UpdateQuantity(): creating new ach data");
|
||||
achievement.DBGameAccount = client.Account.GameAccount.DBGameAccount;
|
||||
achievement.AchievementId = achievementId;
|
||||
achievement.IsHardcore = IsHardcore(achievementId);
|
||||
|
||||
@ -289,9 +289,6 @@ namespace DiIiS_NA.GameServer.CommandManager
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
player.Toon.GameAccount.NotifyUpdate();
|
||||
if (player.Level >= 70)
|
||||
return $"New paragon level: {player.ParagonLevel}";
|
||||
|
||||
@ -64,8 +64,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
|
||||
public bool Unidentified
|
||||
{
|
||||
get;
|
||||
set;
|
||||
get => Attributes[GameAttribute.Unidentified];
|
||||
set
|
||||
{
|
||||
Attributes[GameAttribute.Unidentified] = value;
|
||||
if (DBInventory is {} dbInventory) dbInventory.Unidentified = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int EquipGemType
|
||||
@ -371,7 +375,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
public void Identify()
|
||||
{
|
||||
Unidentified = false;
|
||||
DBInventory.Unidentified = false;
|
||||
// DBInventory.Unidentified = false;
|
||||
Attributes[GameAttribute.Unidentified] = false;
|
||||
|
||||
Owner.World.Game.GameDBSession.SessionUpdate(DBInventory);
|
||||
|
||||
@ -1035,7 +1035,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
|
||||
// generates a random equip item (for vendors)
|
||||
public static Item GenerateRandomEquip(ActorSystem.Actor owner, int level, int minQuality = 1,
|
||||
int maxQuality = -1, ItemTypeTable type = null, ToonClass owner_class = ToonClass.Unknown,
|
||||
int maxQuality = -1, ItemTypeTable type = null, ToonClass ownerClass = ToonClass.Unknown,
|
||||
bool crafted = false)
|
||||
{
|
||||
if (level < 0) level = owner.Attributes[GameAttribute.Level];
|
||||
@ -1053,35 +1053,18 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
&& !ObsoleteItems.Contains(def.Hash)
|
||||
&& UniqueItems.UniqueItemStats.ContainsKey(def.Hash)
|
||||
&& def.Quality != ItemTable.ItemQuality.Special
|
||||
&& (type == null
|
||||
? true
|
||||
: ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID))
|
||||
.Contains(type.Hash))
|
||||
&& (quality > 2
|
||||
? true
|
||||
: !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID))
|
||||
.Contains(-740765630)) //not jewelry
|
||||
&& (owner_class == ToonClass.Unknown
|
||||
? true
|
||||
: (owner_class == ToonClass.Barbarian
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian)
|
||||
: (owner_class == ToonClass.Crusader
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader)
|
||||
: (owner_class == ToonClass.Monk
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk)
|
||||
: (owner_class == ToonClass.Necromancer
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.Necromancer)
|
||||
: (owner_class == ToonClass.Wizard
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.Wizard)
|
||||
: (owner_class == ToonClass.DemonHunter
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.DemonHunter)
|
||||
: (owner_class == ToonClass.WitchDoctor
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.WitchDoctor)
|
||||
: true)))))))
|
||||
&& (type == null || ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash))
|
||||
&& (quality > 2 || !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry
|
||||
&& (ownerClass == ToonClass.Unknown || (ownerClass switch
|
||||
{
|
||||
ToonClass.Barbarian => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian),
|
||||
ToonClass.Crusader => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader),
|
||||
ToonClass.Monk => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk),
|
||||
ToonClass.Necromancer => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Necromancer),
|
||||
ToonClass.Wizard => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard),
|
||||
ToonClass.DemonHunter => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.DemonHunter),
|
||||
_ => ownerClass != ToonClass.WitchDoctor || ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.WitchDoctor)
|
||||
})
|
||||
)
|
||||
).ToList()
|
||||
, (quality > 8));
|
||||
@ -1101,37 +1084,22 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
&& def.ItemLevel <= Math.Min(level + 3, 73)
|
||||
|
||||
&& !ObsoleteItems.Contains(def.Hash) //obsolete 1.0.3 items
|
||||
&& (type == null
|
||||
? true
|
||||
: ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash))
|
||||
&& (quality > 2
|
||||
? true
|
||||
: !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID))
|
||||
.Contains(-740765630)) //not jewelry
|
||||
&& (owner_class == ToonClass.Unknown
|
||||
? true
|
||||
: (owner_class == ToonClass.Barbarian
|
||||
?
|
||||
ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian)
|
||||
:
|
||||
owner_class == ToonClass.Crusader
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader)
|
||||
:
|
||||
(owner_class == ToonClass.Monk
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk)
|
||||
: (owner_class == ToonClass.Wizard
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard)
|
||||
: (owner_class == ToonClass.DemonHunter
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.DemonHunter)
|
||||
: (owner_class == ToonClass.Necromancer
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.Necromancer)
|
||||
: (owner_class == ToonClass.WitchDoctor
|
||||
? ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.WitchDoctor)
|
||||
: true
|
||||
)))))))
|
||||
&& (type == null || ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash))
|
||||
&& (quality > 2 || !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry
|
||||
&& (ownerClass == ToonClass.Unknown || (ownerClass switch
|
||||
{
|
||||
ToonClass.Barbarian => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian),
|
||||
ToonClass.Crusader => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader),
|
||||
ToonClass.Monk => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk),
|
||||
ToonClass.Wizard => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard),
|
||||
ToonClass.DemonHunter => ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.DemonHunter),
|
||||
ToonClass.Necromancer => ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.Necromancer),
|
||||
ToonClass.WitchDoctor => ItemGroup.FromHash(def.ItemTypesGBID).Usable
|
||||
.HasFlag(ItemFlags.WitchDoctor),
|
||||
_ => true
|
||||
}))
|
||||
).ToList()
|
||||
, false //(quality > 8)
|
||||
);
|
||||
@ -1350,7 +1318,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
|
||||
public static int GetItemHash(string name)
|
||||
{
|
||||
var item = Items.Where(i => i.Value.Name == name).FirstOrDefault();
|
||||
var item = Items.FirstOrDefault(i => i.Value.Name == name);
|
||||
return (item.Value == null ? -1 : item.Key);
|
||||
}
|
||||
|
||||
@ -1378,7 +1346,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
|
||||
Item item = GenerateRandomEquip(player, player.Level, minQuality, 10, itemType);
|
||||
|
||||
item.Unidentified = false;
|
||||
item.Unidentified = FastRandom.Instance.Chance(10f);
|
||||
return item;
|
||||
}
|
||||
|
||||
@ -1396,6 +1364,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
new object[] { owner.World, definition, forceQuality, crafted, seed });
|
||||
if (forceQuality == 9)
|
||||
item.Attributes[GameAttribute.Item_Quality_Level] = 9;
|
||||
item.Unidentified = FastRandom.Instance.Chance(10f);
|
||||
return item;
|
||||
}
|
||||
|
||||
@ -1444,17 +1413,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
return (Items.ContainsKey(gbid)) ? Items[gbid] : null;
|
||||
}
|
||||
|
||||
public static List<ParagonBonusesTable> GetParagonBonusTable(ToonClass toon_class)
|
||||
public static List<ParagonBonusesTable> GetParagonBonusTable(ToonClass toonClass)
|
||||
{
|
||||
Class gb_class = Class.None;
|
||||
if (toon_class == ToonClass.Barbarian) gb_class = Class.Barbarian;
|
||||
if (toon_class == ToonClass.Crusader) gb_class = Class.Crusader;
|
||||
if (toon_class == ToonClass.DemonHunter) gb_class = Class.DemonHunter;
|
||||
if (toon_class == ToonClass.Monk) gb_class = Class.Monk;
|
||||
if (toon_class == ToonClass.WitchDoctor) gb_class = Class.Witchdoctor;
|
||||
if (toon_class == ToonClass.Wizard) gb_class = Class.Wizard;
|
||||
if (toon_class == ToonClass.Necromancer) gb_class = Class.Necromancer;
|
||||
return ParagonBonuses.Where(b => b.HeroClass == gb_class || b.HeroClass == Class.None).ToList();
|
||||
Class @class = Class.None;
|
||||
if (toonClass == ToonClass.Barbarian) @class = Class.Barbarian;
|
||||
if (toonClass == ToonClass.Crusader) @class = Class.Crusader;
|
||||
if (toonClass == ToonClass.DemonHunter) @class = Class.DemonHunter;
|
||||
if (toonClass == ToonClass.Monk) @class = Class.Monk;
|
||||
if (toonClass == ToonClass.WitchDoctor) @class = Class.Witchdoctor;
|
||||
if (toonClass == ToonClass.Wizard) @class = Class.Wizard;
|
||||
if (toonClass == ToonClass.Necromancer) @class = Class.Necromancer;
|
||||
return ParagonBonuses.Where(b => b.HeroClass == @class || b.HeroClass == Class.None).ToList();
|
||||
}
|
||||
|
||||
public static RecipeTable GetRecipeDefinition(int gbid)
|
||||
@ -1464,8 +1433,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
|
||||
public static RecipeTable GetRecipeDefinition(string name)
|
||||
{
|
||||
var recipe = Recipes.Where(r => r.Value.Name == name).FirstOrDefault();
|
||||
return (recipe.Value == null) ? null : recipe.Value;
|
||||
var recipe = Recipes.FirstOrDefault(r => r.Value.Name == name);
|
||||
return recipe.Value;
|
||||
}
|
||||
|
||||
public static SocketedEffectTable GetGemEffectDefinition(int gem_gbid, int item_type)
|
||||
@ -1581,8 +1550,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem
|
||||
itm.Attributes[GameAttribute.Durability_Cur] = instance.Durability;
|
||||
itm.Attributes[GameAttribute.DyeType] = instance.DyeType;
|
||||
itm.Attributes[GameAttribute.TransmogGBID] = instance.TransmogGBID;
|
||||
itm.Unidentified = instance.Unidentified;
|
||||
itm.DBInventory = instance;
|
||||
itm.Unidentified = instance.Unidentified;
|
||||
|
||||
if (instance.Version == 1)
|
||||
itm.Attributes[GameAttribute.IsCrafted] = true;
|
||||
|
||||
|
||||
@ -797,7 +797,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem
|
||||
}
|
||||
public Item SpawnRandomEquip(Actor source, Player player, int forceQuality = -1, int forceLevel = -1, GameBalance.ItemTypeTable type = null, ToonClass toonClass = ToonClass.Unknown)
|
||||
{
|
||||
//Logger.Debug("SpawnRandomEquip(): quality {0}", forceQuality);
|
||||
Logger.Debug("SpawnRandomEquip(): quality {0}", forceQuality);
|
||||
if (player != null)
|
||||
{
|
||||
int level = (forceLevel > 0 ? forceLevel : source.Attributes[GameAttribute.Level]);
|
||||
@ -812,7 +812,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem
|
||||
}
|
||||
else
|
||||
{
|
||||
var item = ItemGenerator.GenerateRandomEquip(player, level, forceQuality, forceQuality, type: type,owner_class: toonClass);
|
||||
var item = ItemGenerator.GenerateRandomEquip(player, level, forceQuality, forceQuality, type: type,ownerClass: toonClass);
|
||||
if (item == null) return null;
|
||||
player.GroundItems[item.GlobalID] = item;
|
||||
|
||||
|
||||
@ -314,7 +314,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
|
||||
asset.ConversationType != ConversationTypes.GlobalFloat)
|
||||
player.CheckConversationCriteria(asset.Header.SNOId);
|
||||
|
||||
Logger.Trace("Handling conversation for Conversation: {0}", SNOId);
|
||||
Logger.Debug("Handling conversation for Conversation: {0}", SNOId);
|
||||
if (player.World.Game.QuestProgress.QuestTriggers.ContainsKey(SNOId))
|
||||
{
|
||||
var trigger = player.World.Game.QuestProgress.QuestTriggers[SNOId];
|
||||
@ -730,12 +730,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem
|
||||
void ConversationEnded(object sender, EventArgs e)
|
||||
{
|
||||
Conversation conversation = sender as Conversation;
|
||||
Logger.Trace(" (ConversationEnded) Sending a notify with type {0} and value {1}",
|
||||
Logger.Debug(" (ConversationEnded) Sending a notify with type {0} and value {1}",
|
||||
conversation.ConversationType, conversation.SNOId);
|
||||
|
||||
//quests.Notify(QuestStepObjectiveType.HadConversation, conversation.SNOId); //deprecated
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Conversation ended
|
||||
if (player.PlayerIndex == 0)
|
||||
switch (conversation.SNOId)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
user.block.title