108 lines
No EOL
3.9 KiB
C#
108 lines
No EOL
3.9 KiB
C#
using WingsEmu.Game._enum;
|
|
using WingsEmu.Game.Extensions;
|
|
using WingsEmu.Game.Extensions.Mates;
|
|
using WingsEmu.Game.Items;
|
|
using WingsEmu.Packets.Enums;
|
|
using WingsEmu.Packets.Enums.Battle;
|
|
|
|
namespace WingsEmu.Game.Mates;
|
|
|
|
public partial class MateEntity
|
|
{
|
|
private int _criticalChance;
|
|
private int _criticalDamage;
|
|
private int _damageMax;
|
|
private int _damageMin;
|
|
private short _hitRate;
|
|
private short _magicDefense;
|
|
private int _maxHp;
|
|
private int _maxMp;
|
|
private short _meleeDefense;
|
|
private short _meleeDodge;
|
|
private short _rangedDefense;
|
|
private short _rangedDodge;
|
|
private byte _speed;
|
|
|
|
public void RefreshStatistics()
|
|
{
|
|
_maxHp = _algorithm.GetBasicHp((short)MonsterRaceType, Level, MeleeHpFactor, CleanHp, false);
|
|
_maxMp = _algorithm.GetBasicMp((short)MonsterRaceType, Level, MagicMpFactor, CleanMp, false);
|
|
|
|
_hitRate = (short)_algorithm.GetHitrate((short)MonsterRaceType, AttackType, WeaponLevel, BaseLevel, RangeDodgeFactor, CleanHitRate, false, Level, MateType);
|
|
_damageMin = _algorithm.GetAttack(true, (short)MonsterRaceType, AttackType, WeaponLevel, WinfoValue, BaseLevel, this.GetModifier(), CleanDamageMin, false, Level, MateType);
|
|
_damageMax = _algorithm.GetAttack(false, (short)MonsterRaceType, AttackType, WeaponLevel, WinfoValue, BaseLevel, this.GetModifier(), CleanDamageMax, false, Level, MateType);
|
|
|
|
_criticalChance = MateType == MateType.Partner ? 0 : BaseCriticalChance;
|
|
_criticalDamage = MateType == MateType.Partner ? 0 : BaseCriticalRate;
|
|
|
|
_meleeDefense = (short)_algorithm.GetDefense((short)MonsterRaceType, AttackType.Melee, ArmorLevel, BaseLevel, MeleeHpFactor, CleanMeleeDefence, false, Level, MateType);
|
|
_rangedDefense = (short)_algorithm.GetDefense((short)MonsterRaceType, AttackType.Ranged, ArmorLevel, BaseLevel, RangeDodgeFactor, CleanRangeDefence, false, Level, MateType);
|
|
_magicDefense = (short)_algorithm.GetDefense((short)MonsterRaceType, AttackType.Magical, ArmorLevel, BaseLevel, MagicMpFactor, CleanMagicDefence, false, Level, MateType);
|
|
_meleeDodge = (short)_algorithm.GetDodge((short)MonsterRaceType, ArmorLevel, BaseLevel, RangeDodgeFactor, CleanDodge, false, Level, MateType);
|
|
_rangedDodge = (short)_algorithm.GetDodge((short)MonsterRaceType, ArmorLevel, BaseLevel, RangeDodgeFactor, CleanDodge, false, Level, MateType);
|
|
|
|
StatisticsComponent.RefreshMateStatistics(this);
|
|
}
|
|
|
|
private short GetMoreStats(StatisticType type, short baseStats) => (short)(this.FindMoreStats(type) + baseStats);
|
|
|
|
private int GetMateDamage(int baseDamage, bool isMin)
|
|
{
|
|
GameItemInstance weapon = Weapon;
|
|
if (weapon == null)
|
|
{
|
|
return baseDamage;
|
|
}
|
|
|
|
int toAdd;
|
|
if (isMin)
|
|
{
|
|
toAdd = weapon.DamageMinimum + weapon.GameItem.DamageMinimum;
|
|
}
|
|
else
|
|
{
|
|
toAdd = weapon.DamageMaximum + weapon.GameItem.DamageMaximum;
|
|
}
|
|
|
|
return toAdd + baseDamage;
|
|
}
|
|
|
|
private int GetMateCritical(int baseCritical, bool isChance)
|
|
{
|
|
if (MateType == MateType.Pet)
|
|
{
|
|
return baseCritical;
|
|
}
|
|
|
|
GameItemInstance weapon = Weapon;
|
|
if (weapon == null)
|
|
{
|
|
return baseCritical;
|
|
}
|
|
|
|
int toAdd;
|
|
if (isChance)
|
|
{
|
|
toAdd = weapon.GameItem.CriticalLuckRate;
|
|
}
|
|
else
|
|
{
|
|
toAdd = weapon.GameItem.CriticalRate;
|
|
}
|
|
|
|
return toAdd + baseCritical;
|
|
}
|
|
|
|
private int GetMateHitRate(short hitRate)
|
|
{
|
|
int stats = AttackType switch
|
|
{
|
|
AttackType.Melee => this.FindMoreStats(StatisticType.HITRATE_MELEE),
|
|
AttackType.Ranged => this.FindMoreStats(StatisticType.HITRATE_RANGED),
|
|
AttackType.Magical => this.FindMoreStats(StatisticType.HITRATE_MAGIC),
|
|
_ => 0
|
|
};
|
|
|
|
return stats + hitRate;
|
|
}
|
|
} |