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);
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.Currency = new NetUserCurrencyData
{
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!
response.Items.Add(NetUtils.ToNet(destItem));
JsonDb.Save();
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 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
.ToArray();
int exp = levelRecord.exp * srcItem.Count;
int modules = 0;
destItem.Exp += exp * srcItem.Count;
// 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])
{
@@ -65,9 +68,30 @@ namespace EpinelPS.LobbyServer.Inventory
if (destItem.Level >= maxLevel[destEquipRecord.grade_core_id - 1])
{
modules = destItem.Exp; // is the ratio actually 1:1?
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;
}
}