mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-12 22:34:36 +01:00
equipment switching & level up with avatar level up fix
This commit is contained in:
@@ -74,7 +74,7 @@ namespace Common.Database
|
||||
|
||||
public PlayerLevelData.LevelData AddExp(uint exp)
|
||||
{
|
||||
PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)(exp + Exp));
|
||||
PlayerLevelData.LevelData levelData = AvatarLevelData.GetInstance().CalculateLevel((int)Level, (int)(exp + Exp));
|
||||
Level = (uint)levelData.Level;
|
||||
Exp = (uint)levelData.Exp;
|
||||
|
||||
|
||||
@@ -84,6 +84,86 @@ namespace Common.Database
|
||||
return stigmata;
|
||||
}
|
||||
|
||||
public Resources.Proto.Material[] AddWeaponExpByConsumeItem(uint uniqueId, List<EquipmentItem> consumeItemList)
|
||||
{
|
||||
int expAdd = consumeItemList.Select(item =>
|
||||
{
|
||||
MaterialDataExcel? materialData = MaterialData.GetInstance().FromId(item.IdOrUniqueId);
|
||||
if (materialData == null)
|
||||
return 0;
|
||||
|
||||
int MaterialIndex = MaterialList.ToList().FindIndex(mat => mat.Id == item.IdOrUniqueId);
|
||||
MaterialList[MaterialIndex].Num -= item.Num;
|
||||
|
||||
return materialData.GearExpProvideBase * (int)item.Num;
|
||||
}).Sum();
|
||||
AddWeaponExp(uniqueId, expAdd);
|
||||
|
||||
return MaterialList.Where(material => consumeItemList.Select(item => item.IdOrUniqueId).ToArray().Contains(material.Id)).ToArray();
|
||||
}
|
||||
|
||||
public void AddWeaponExp(uint uniqueId, int exp)
|
||||
{
|
||||
int weaponIndex = WeaponList.ToList().FindIndex(weapon => weapon.UniqueId == uniqueId);
|
||||
if (weaponIndex == -1) return;
|
||||
WeaponDataExcel? weaponData = WeaponData.GetInstance().FromId((int)WeaponList[weaponIndex].Id);
|
||||
if (weaponData is null) return;
|
||||
|
||||
PlayerLevelData.LevelData levelData = EquipmentLevelData.GetInstance().CalculateLevel((int)WeaponList[weaponIndex].Level, (int)WeaponList[weaponIndex].Exp + exp, weaponData.ExpType);
|
||||
|
||||
if(levelData.Level > weaponData.MaxLv)
|
||||
{
|
||||
levelData.Level = weaponData.MaxLv;
|
||||
EquipmentLevelDataExcel? LevelData = EquipmentLevelData.GetInstance().FromLevel(levelData.Level);
|
||||
if (LevelData is null) return;
|
||||
|
||||
levelData.Exp = LevelData.Type1[weaponData.ExpType];
|
||||
}
|
||||
|
||||
WeaponList[weaponIndex].Level = (uint)levelData.Level;
|
||||
WeaponList[weaponIndex].Exp = (uint)levelData.Exp;
|
||||
}
|
||||
|
||||
public Resources.Proto.Material[] AddStigmataExpByConsumeItem(uint uniqueId, List<EquipmentItem> consumeItemList)
|
||||
{
|
||||
int expAdd = consumeItemList.Select(item =>
|
||||
{
|
||||
MaterialDataExcel? materialData = MaterialData.GetInstance().FromId(item.IdOrUniqueId);
|
||||
if (materialData == null)
|
||||
return 0;
|
||||
|
||||
int MaterialIndex = MaterialList.ToList().FindIndex(mat => mat.Id == item.IdOrUniqueId);
|
||||
MaterialList[MaterialIndex].Num -= item.Num;
|
||||
|
||||
return materialData.GearExpProvideBase * (int)item.Num;
|
||||
}).Sum();
|
||||
AddStigmataExp(uniqueId, expAdd);
|
||||
|
||||
return MaterialList.Where(material => consumeItemList.Select(item => item.IdOrUniqueId).ToArray().Contains(material.Id)).ToArray();
|
||||
}
|
||||
|
||||
public void AddStigmataExp(uint uniqueId, int exp)
|
||||
{
|
||||
int stigmataIndex = StigmataList.ToList().FindIndex(stigmata => stigmata.UniqueId == uniqueId);
|
||||
if (stigmataIndex == -1) return;
|
||||
StigmataDataExcel? stigmataData = StigmataData.GetInstance().FromId((int)StigmataList[stigmataIndex].Id);
|
||||
if (stigmataData is null) return;
|
||||
|
||||
PlayerLevelData.LevelData levelData = EquipmentLevelData.GetInstance().CalculateLevel((int)StigmataList[stigmataIndex].Level, (int)StigmataList[stigmataIndex].Exp + exp, stigmataData.ExpType);
|
||||
|
||||
if (levelData.Level > stigmataData.MaxLv)
|
||||
{
|
||||
levelData.Level = stigmataData.MaxLv;
|
||||
EquipmentLevelDataExcel? LevelData = EquipmentLevelData.GetInstance().FromLevel(levelData.Level);
|
||||
if (LevelData is null) return;
|
||||
|
||||
levelData.Exp = LevelData.Type1[stigmataData.ExpType];
|
||||
}
|
||||
|
||||
StigmataList[stigmataIndex].Level = (uint)levelData.Level;
|
||||
StigmataList[stigmataIndex].Exp = (uint)levelData.Exp;
|
||||
}
|
||||
|
||||
public Resources.Proto.Material AddMaterial(int materialId, int num = 1)
|
||||
{
|
||||
int MaterialIndex = Array.FindIndex(MaterialList, material => material.Id == materialId);
|
||||
|
||||
@@ -6,12 +6,11 @@ namespace Common.Utils.ExcelReader
|
||||
{
|
||||
public override string FileName { get { return "AvatarLevelData.json"; } }
|
||||
|
||||
public PlayerLevelData.LevelData CalculateLevel(int exp)
|
||||
public PlayerLevelData.LevelData CalculateLevel(int level, int exp)
|
||||
{
|
||||
int level = 1;
|
||||
int expRemain = exp;
|
||||
|
||||
foreach (AvatarLevelDataExcel levelData in All)
|
||||
foreach (AvatarLevelDataExcel levelData in All.Where(levelData => levelData.Level >= level))
|
||||
{
|
||||
if (expRemain < 1)
|
||||
{
|
||||
|
||||
65
Common/Utils/ExcelReader/EquipmentLevelData.cs
Normal file
65
Common/Utils/ExcelReader/EquipmentLevelData.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Common.Utils.ExcelReader
|
||||
{
|
||||
public class EquipmentLevelData : BaseExcelReader<EquipmentLevelData, EquipmentLevelDataExcel>
|
||||
{
|
||||
public override string FileName { get { return "EquipmentLevelData.json"; } }
|
||||
|
||||
public EquipmentLevelDataExcel? FromLevel(int level)
|
||||
{
|
||||
return All.Where(levelData => levelData.Level == level).FirstOrDefault();
|
||||
}
|
||||
|
||||
public PlayerLevelData.LevelData CalculateLevel(int level, int exp, int expType)
|
||||
{
|
||||
int expRemain = exp;
|
||||
|
||||
foreach (EquipmentLevelDataExcel levelData in All.Where(levelData => levelData.Level >= level))
|
||||
{
|
||||
if (expRemain < 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (expRemain >= levelData.Type1[expType])
|
||||
{
|
||||
if (level == All.OrderByDescending(level => level.Level).First().Level)
|
||||
{
|
||||
expRemain = All.OrderByDescending(level => level.Level).First().Type1[expType];
|
||||
break;
|
||||
}
|
||||
|
||||
level++;
|
||||
expRemain -= levelData.Type1[expType];
|
||||
}
|
||||
}
|
||||
|
||||
return new PlayerLevelData.LevelData(level, expRemain);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
||||
public partial class EquipmentLevelDataExcel
|
||||
{
|
||||
[JsonProperty("Type1")]
|
||||
public int[] Type1 { get; set; }
|
||||
|
||||
[JsonProperty("weaponUpgradeCost")]
|
||||
public int WeaponUpgradeCost { get; set; }
|
||||
|
||||
[JsonProperty("weaponEvoCost")]
|
||||
public int WeaponEvoCost { get; set; }
|
||||
|
||||
[JsonProperty("stigmataUpgradeCost")]
|
||||
public int StigmataUpgradeCost { get; set; }
|
||||
|
||||
[JsonProperty("stigmataEvoCost")]
|
||||
public int StigmataEvoCost { get; set; }
|
||||
|
||||
[JsonProperty("DataImpl")]
|
||||
public object DataImpl { get; set; }
|
||||
|
||||
[JsonProperty("level")]
|
||||
public int Level { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ namespace Common.Utils.ExcelReader
|
||||
return All.Where(levelData => levelData.Level == level).FirstOrDefault();
|
||||
}
|
||||
|
||||
public readonly struct LevelData
|
||||
public struct LevelData
|
||||
{
|
||||
public LevelData(int level, int exp)
|
||||
{
|
||||
@@ -18,8 +18,8 @@ namespace Common.Utils.ExcelReader
|
||||
Exp = exp;
|
||||
}
|
||||
|
||||
public int Level { get; init; }
|
||||
public int Exp { get; init; }
|
||||
public int Level { get; set; }
|
||||
public int Exp { get; set; }
|
||||
}
|
||||
|
||||
public LevelData CalculateLevel(int exp)
|
||||
|
||||
Reference in New Issue
Block a user