public static LevelUPInfo GetAttackExp(CharacterLogic logic, int defenderCareerRank, int defenderLevel, bool isEnemyDead, int damage, bool isCritical) { int attackerLevel = logic.GetLevel(); int attackerExp = logic.GetExp(); int careerRankDiff = 0; LevelUPInfo r = new LevelUPInfo(); int levelDiff = attackerLevel - defenderLevel; int exp = careerRankDiff * 20 + levelDiff + 10; exp = Mathf.Max(exp, 2); if (isEnemyDead) { exp *= 3; } else { if (isCritical) { exp *= 2; } } exp = Mathf.Min(100, exp); r.startExp = attackerExp; int finalExp = r.startExp + exp; r.endExp = finalExp % 100; r.startLevel = attackerLevel; r.endLevel = attackerLevel + finalExp / 100; if (r.endLevel > r.startExp) { CharacterAttribute add = GetGrow(logic.GetAttributeGrow()); r.abilityData = new List <LevelUPInfo.AbilityData>(); LevelUPInfo.AbilityData d = new LevelUPInfo.AbilityData(logic.GetAttribute().Array, add.Array); r.abilityData.Add(d); } return(r); }