public string GenerateStatChar()
{
int type = 0;
int type2 = 0;
switch (Class)
{
case (byte)ClassType.Adventurer:
type = 0;
type2 = 1;
break;
case ClassType.Magician:
type = 2;
type2 = 1;
break;
case ClassType.Swordman:
type = 0;
type2 = 1;
break;
case ClassType.Archer:
type = 1;
type2 = 0;
break;
}
int weaponUpgrade = 0;
int secondaryUpgrade = 0;
int armorUpgrade = 0;
MinHit = CharacterHelper.MinHit(Class, Level);
MaxHit = CharacterHelper.MaxHit(Class, Level);
HitRate = CharacterHelper.HitRate(Class, Level);
HitCriticalRate = CharacterHelper.HitCriticalRate(Class, Level);
HitCritical = CharacterHelper.HitCritical(Class, Level);
MinDistance = CharacterHelper.MinDistance(Class, Level);
MaxDistance = CharacterHelper.MaxDistance(Class, Level);
DistanceRate = CharacterHelper.DistanceRate(Class, Level);
DistanceCriticalRate = CharacterHelper.DistCriticalRate(Class, Level);
DistanceCritical = CharacterHelper.DistCritical(Class, Level);
FireResistance = CharacterHelper.FireResistance(Class, Level);
LightResistance = CharacterHelper.LightResistance(Class, Level);
WaterResistance = CharacterHelper.WaterResistance(Class, Level);
DarkResistance = CharacterHelper.DarkResistance(Class, Level);
Defence = CharacterHelper.Defence(Class, Level);
DefenceRate = CharacterHelper.DefenceRate(Class, Level);
ElementRate = CharacterHelper.ElementRate(Class, Level);
ElementRateSP = 0;
DistanceDefence = CharacterHelper.DistanceDefence(Class, Level);
DistanceDefenceRate = CharacterHelper.DistanceDefenceRate(Class, Level);
MagicalDefence = CharacterHelper.MagicalDefence(Class, Level);
if (UseSp)
{
SpecialistInstance specialist = Inventory?.LoadBySlotAndType<SpecialistInstance>((byte)EquipmentType.Sp, InventoryType.Wear);
if (specialist != null)
{
MinHit += specialist.DamageMinimum;
MaxHit += specialist.DamageMaximum;
MinDistance += specialist.DamageMinimum;
MaxDistance += specialist.DamageMaximum;
HitCriticalRate += specialist.CriticalLuckRate;
HitCritical += specialist.CriticalRate;
DistanceCriticalRate += specialist.CriticalLuckRate;
DistanceCritical += specialist.CriticalRate;
HitRate += specialist.HitRate;
DistanceRate += specialist.HitRate;
DefenceRate += specialist.DefenceDodge;
DistanceDefenceRate += specialist.DistanceDefenceDodge;
FireResistance += specialist.FireResistance;
WaterResistance += specialist.WaterResistance;
LightResistance += specialist.LightResistance;
DarkResistance += specialist.DarkResistance;
ElementRateSP += specialist.ElementRate;
Defence += specialist.CloseDefence;
DistanceDefence += specialist.DistanceDefence;
MagicalDefence += specialist.MagicDefence;
int point = CharacterHelper.SlPoint(specialist.SlDamage, 0);
int p = 0;
if (point <= 10)
p = point * 5;
else if (point <= 20)
p = 50 + (point - 10) * 6;
else if (point <= 30)
p = 110 + (point - 20) * 7;
else if (point <= 40)
p = 180 + (point - 30) * 8;
else if (point <= 50)
p = 260 + (point - 40) * 9;
else if (point <= 60)
p = 350 + (point - 50) * 10;
else if (point <= 70)
p = 450 + (point - 60) * 11;
else if (point <= 80)
p = 560 + (point - 70) * 13;
else if (point <= 90)
p = 690 + (point - 80) * 14;
else if (point <= 94)
p = 830 + (point - 90) * 15;
else if (point <= 95)
p = 890 + 16;
else if (point <= 97)
p = 906 + (point - 95) * 17;
else if (point <= 100)
p = 940 + (point - 97) * 20;
MaxHit += p;
MinHit += p;
MaxDistance += p;
MinDistance += p;
point = CharacterHelper.SlPoint(specialist.SlDefence, 1);
p = 0;
if (point <= 10)
p = point;
else if (point <= 20)
p = 10 + (point - 10) * 2;
else if (point <= 30)
p = 30 + (point - 20) * 3;
else if (point <= 40)
p = 60 + (point - 30) * 4;
else if (point <= 50)
p = 100 + (point - 40) * 5;
else if (point <= 60)
p = 150 + (point - 50) * 6;
else if (point <= 70)
p = 210 + (point - 60) * 7;
else if (point <= 80)
p = 280 + (point - 70) * 8;
else if (point <= 90)
p = 360 + (point - 80) * 9;
else if (point <= 100)
p = 450 + (point - 90) * 10;
Defence += p;
MagicalDefence += p;
DistanceDefence += p;
point = CharacterHelper.SlPoint(specialist.SlElement, 2);
if (point <= 50)
{
p = point;
}
else
{
p = 50 + (point - 50) * 2;
}
ElementRateSP += p;
}
}
// TODO: add base stats
WearableInstance weapon = Inventory?.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.MainWeapon, InventoryType.Wear);
if (weapon != null)
{
weaponUpgrade = weapon.Upgrade;
MinHit += weapon.DamageMinimum + weapon.Item.DamageMinimum;
MaxHit += weapon.DamageMaximum + weapon.Item.DamageMaximum;
HitRate += weapon.HitRate + weapon.Item.HitRate;
HitCriticalRate += weapon.CriticalLuckRate + weapon.Item.CriticalLuckRate;
HitCritical += weapon.CriticalRate + weapon.Item.CriticalRate;
// maxhp-mp
}
WearableInstance weapon2 = Inventory?.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.SecondaryWeapon, InventoryType.Wear);
if (weapon2 != null)
{
secondaryUpgrade = weapon2.Upgrade;
MinDistance += weapon2.DamageMinimum + weapon2.Item.DamageMinimum;
MaxDistance += weapon2.DamageMaximum + weapon2.Item.DamageMaximum;
DistanceRate += weapon2.HitRate + weapon2.Item.HitRate;
DistanceCriticalRate += weapon2.CriticalLuckRate + weapon2.Item.CriticalLuckRate;
DistanceCritical += weapon2.CriticalRate + weapon2.Item.CriticalRate;
// maxhp-mp
}
WearableInstance armor = Inventory?.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.Armor, InventoryType.Wear);
if (armor != null)
{
armorUpgrade = armor.Upgrade;
Defence += armor.CloseDefence + armor.Item.CloseDefence;
DistanceDefence += armor.DistanceDefence + armor.Item.DistanceDefence;
MagicalDefence += armor.MagicDefence + armor.Item.MagicDefence;
DefenceRate += armor.DefenceDodge + armor.Item.DefenceDodge;
DistanceDefenceRate += armor.DistanceDefenceDodge + armor.Item.DistanceDefenceDodge;
}
WearableInstance fairy = Inventory?.LoadBySlotAndType<WearableInstance>((byte)EquipmentType.Fairy, InventoryType.Wear);
if (fairy != null)
{
ElementRate += fairy.ElementRate + fairy.Item.ElementRate;
}
// handle specialist
if (UseSp)
{
SpecialistInstance specialist = Inventory?.LoadBySlotAndType<SpecialistInstance>((byte)EquipmentType.Sp, InventoryType.Wear);
if (specialist != null)
{
FireResistance += specialist.SpFire;
LightResistance += specialist.SpLight;
WaterResistance += specialist.SpWater;
DarkResistance += specialist.SpDark;
Defence += specialist.SpDefence * 10;
DistanceDefence += specialist.SpDefence * 10;
MagicalDefence += specialist.SpDefence * 10;
MinHit += specialist.SpDamage * 10;
MaxHit += specialist.SpDamage * 10;
ElementRateSP += specialist.SpElement;
}
}
for (short i = 1; i < 14; i++)
{
WearableInstance item = Inventory?.LoadBySlotAndType<WearableInstance>(i, InventoryType.Wear);
if (item != null)
{
if (((item.Item.EquipmentSlot != EquipmentType.MainWeapon)
&& (item.Item.EquipmentSlot != EquipmentType.SecondaryWeapon)
&& item.Item.EquipmentSlot != EquipmentType.Armor
&& item.Item.EquipmentSlot != EquipmentType.Sp))
{
FireResistance += item.FireResistance + item.Item.FireResistance;
LightResistance += item.LightResistance + item.Item.LightResistance;
WaterResistance += item.WaterResistance + item.Item.WaterResistance;
DarkResistance += item.DarkResistance + item.Item.DarkResistance;
Defence += item.CloseDefence + item.Item.CloseDefence;
DefenceRate += item.DefenceDodge + item.Item.DefenceDodge;
DistanceDefence += item.DistanceDefence + item.Item.DistanceDefence;
DistanceDefenceRate += item.DistanceDefenceDodge + item.Item.DistanceDefenceDodge;
}
}
}
return $"sc {type} {weaponUpgrade} {MinHit} {MaxHit} {HitRate} {HitCriticalRate} {HitCritical} {type2} {secondaryUpgrade} {MinDistance} {MaxDistance} {DistanceRate} {DistanceCriticalRate} {DistanceCritical} {armorUpgrade} {Defence} {DefenceRate} {DistanceDefence} {DistanceDefenceRate} {MagicalDefence} {FireResistance} {WaterResistance} {LightResistance} {DarkResistance}";
}