potential boost module calc impl, not used yet

need to investigate how modules are calculated and what ids are used

also added a potential impl for if src item's exp is also added to the dest item
This commit is contained in:
Kyle873
2024-12-22 03:11:47 -05:00
parent 4b157363f8
commit 86a8d6d78f

View File

@@ -20,11 +20,13 @@ namespace EpinelPS.LobbyServer.Inventory
var item = user.Items.FirstOrDefault(x => x.Isn == srcItem.Isn); var item = user.Items.FirstOrDefault(x => x.Isn == srcItem.Isn);
item.Count -= srcItem.Count; item.Count -= srcItem.Count;
goldCost += AddExp(srcItem, destItem); goldCost += AddExp(srcItem, destItem).exp;
// TODO: boost modules. for now, excess exp gets scrapped
response.Items.Add(NetUtils.ToNet(item)); response.Items.Add(NetUtils.ToNet(item));
} }
response.Currency = new NetUserCurrencyData response.Currency = new NetUserCurrencyData
{ {
Type = (int)CurrencyType.Gold, Type = (int)CurrencyType.Gold,
@@ -33,13 +35,13 @@ namespace EpinelPS.LobbyServer.Inventory
// we NEED to make sure the target item itself is in the delta list, or the UI won't update! // we NEED to make sure the target item itself is in the delta list, or the UI won't update!
response.Items.Add(NetUtils.ToNet(destItem)); response.Items.Add(NetUtils.ToNet(destItem));
JsonDb.Save(); JsonDb.Save();
await WriteDataAsync(response); await WriteDataAsync(response);
} }
int AddExp(NetItemData srcItem, ItemData destItem) (int exp, int modules) AddExp(NetItemData srcItem, ItemData destItem)
{ {
var srcEquipRecord = GameData.Instance.itemEquipTable.Values.FirstOrDefault(x => x.id == srcItem.Tid); var srcEquipRecord = GameData.Instance.itemEquipTable.Values.FirstOrDefault(x => x.id == srcItem.Tid);
var destEquipRecord = GameData.Instance.itemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType); var destEquipRecord = GameData.Instance.itemEquipTable.Values.FirstOrDefault(x => x.id == destItem.ItemType);
@@ -51,11 +53,12 @@ namespace EpinelPS.LobbyServer.Inventory
.OrderBy(x => x) // order from lowest to highest .OrderBy(x => x) // order from lowest to highest
.ToArray(); .ToArray();
int exp = levelRecord.exp * srcItem.Count; int exp = levelRecord.exp * srcItem.Count;
int modules = 0;
destItem.Exp += exp * srcItem.Count; destItem.Exp += exp * srcItem.Count;
// TODO: double-check this. is this a thing? // TODO: double-check this. is this a thing?
// destItem.Exp += GetUser().Items.FirstOrDefault(x => x.Isn == srcItem.Isn).Exp; // destItem.Exp += GetSourceExp(srcItem);
while (destItem.Exp >= expNextTable[destItem.Level + 1] && destItem.Level < maxLevel[destEquipRecord.grade_core_id - 1]) while (destItem.Exp >= expNextTable[destItem.Level + 1] && destItem.Level < maxLevel[destEquipRecord.grade_core_id - 1])
{ {
@@ -65,9 +68,30 @@ namespace EpinelPS.LobbyServer.Inventory
if (destItem.Level >= maxLevel[destEquipRecord.grade_core_id - 1]) if (destItem.Level >= maxLevel[destEquipRecord.grade_core_id - 1])
{ {
modules = destItem.Exp; // is the ratio actually 1:1?
destItem.Exp = 0; destItem.Exp = 0;
} }
return (exp, modules);
}
int GetSourceExp(NetItemData srcItem)
{
var item = GetUser().Items.FirstOrDefault(x => x.Isn == srcItem.Isn);
var equipRecord = GameData.Instance.itemEquipTable.Values.FirstOrDefault(x => x.id == item.ItemType);
var levelRecord = GameData.Instance.ItemEquipGradeExpTable.Values.FirstOrDefault(x => x.grade_core_id == equipRecord.grade_core_id);
int[] expNextTable = GameData.Instance.itemEquipExpTable.Values
.Where(x => x.item_rare == equipRecord.item_rare)
.Select(x => x.exp)
.ToArray();
int level = item.Level;
int exp = item.Exp;
while (level-- > 0)
{
exp += expNextTable[level];
}
return exp; return exp;
} }
} }