Skills added from bonus stat system.

Thanks to nasseka.
This commit is contained in:
MobiusDevelopment 2021-12-10 01:06:59 +00:00
parent b0c264b576
commit aa8252283c
18 changed files with 534 additions and 0 deletions

View File

@ -71,5 +71,11 @@ public class StatUp extends AbstractEffect
}
}
effected.getStat().mergeAdd(stat, _amount);
// Calculate stat increase skills.
if (effected.isPlayer())
{
effected.getActingPlayer().calculateStatIncreaseSkills();
}
}
}

View File

@ -906,6 +906,8 @@ public class Player extends Playable
private PlayerRandomCraft _randomCraft = null;
private ScheduledFuture<?> _statIncreaseSkillTask;
private final Map<Integer, PetEvolveHolder> _petEvolves = new HashMap<>();
private final List<QuestTimer> _questTimers = new ArrayList<>();
@ -14765,4 +14767,147 @@ public class Player extends Playable
}
});
}
public void calculateStatIncreaseSkills()
{
// Use a task to prevent multiple execution from effects.
if (_statIncreaseSkillTask != null)
{
return;
}
_statIncreaseSkillTask = ThreadPool.schedule(() ->
{
Skill knownSkill;
double statValue;
boolean update = false;
// Remove stat increase skills.
for (int i = CommonSkill.STR_INCREASE_BONUS_1.getId(); i <= CommonSkill.MEN_INCREASE_BONUS_1.getId(); i++)
{
knownSkill = getKnownSkill(i);
if (knownSkill != null)
{
removeSkill(knownSkill);
update = true;
}
}
// STR bonus.
statValue = getStat().getValue(Stat.STAT_STR);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.STR_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// INT bonus.
statValue = getStat().getValue(Stat.STAT_INT);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.INT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// DEX bonus.
statValue = getStat().getValue(Stat.STAT_DEX);
if ((statValue >= 50) && (statValue < 60))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 80))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 80)
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// WIT bonus.
statValue = getStat().getValue(Stat.STAT_WIT);
if ((statValue >= 40) && (statValue < 50))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 50) && (statValue < 70))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 70)
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// CON bonus.
statValue = getStat().getValue(Stat.STAT_CON);
if ((statValue >= 50) && (statValue < 65))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 65) && (statValue < 90))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.CON_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// MEN bonus.
statValue = getStat().getValue(Stat.STAT_MEN);
if ((statValue >= 45) && (statValue < 60))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 85))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 85)
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// Update skill list.
if (update)
{
sendSkillList();
}
_statIncreaseSkillTask = null;
}, 500);
}
}

View File

@ -59,6 +59,24 @@ public enum CommonSkill
PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1),
POTION_MASTERY(45184, 1),
STR_INCREASE_BONUS_1(45191, 1),
STR_INCREASE_BONUS_2(45191, 2),
STR_INCREASE_BONUS_3(45191, 3),
INT_INCREASE_BONUS_1(45192, 1),
INT_INCREASE_BONUS_2(45192, 2),
INT_INCREASE_BONUS_3(45192, 3),
DEX_INCREASE_BONUS_1(45193, 1),
DEX_INCREASE_BONUS_2(45193, 2),
DEX_INCREASE_BONUS_3(45193, 3),
WIT_INCREASE_BONUS_1(45194, 1),
WIT_INCREASE_BONUS_2(45194, 2),
WIT_INCREASE_BONUS_3(45194, 3),
CON_INCREASE_BONUS_1(45195, 1),
CON_INCREASE_BONUS_2(45195, 2),
CON_INCREASE_BONUS_3(45195, 3),
MEN_INCREASE_BONUS_1(45196, 1),
MEN_INCREASE_BONUS_2(45196, 2),
MEN_INCREASE_BONUS_3(45196, 3),
TELEPORT(60018, 1);
private final SkillHolder _holder;

View File

@ -357,6 +357,9 @@ public class EnterWorld implements IClientIncomingPacket
// Send EtcStatusUpdate
player.sendPacket(new EtcStatusUpdate(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
// Clan packets
if (clan != null)
{

View File

@ -119,6 +119,9 @@ public class ExResetStatusBonus implements IClientIncomingPacket
player.sendPacket(new UserInfo(player));
player.getStat().recalculateStats(true);
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}
}

View File

@ -110,5 +110,8 @@ public class ExSetStatusBonus implements IClientIncomingPacket
}
player.sendPacket(new UserInfo(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}

View File

@ -71,5 +71,11 @@ public class StatUp extends AbstractEffect
}
}
effected.getStat().mergeAdd(stat, _amount);
// Calculate stat increase skills.
if (effected.isPlayer())
{
effected.getActingPlayer().calculateStatIncreaseSkills();
}
}
}

View File

@ -930,6 +930,8 @@ public class Player extends Playable
private PlayerRandomCraft _randomCraft = null;
private ScheduledFuture<?> _statIncreaseSkillTask;
private final List<PlayerCollectionData> _collections = new ArrayList<>();
private final List<Integer> _collectionFavorites = new ArrayList<>();
@ -14843,6 +14845,149 @@ public class Player extends Playable
});
}
public void calculateStatIncreaseSkills()
{
// Use a task to prevent multiple execution from effects.
if (_statIncreaseSkillTask != null)
{
return;
}
_statIncreaseSkillTask = ThreadPool.schedule(() ->
{
Skill knownSkill;
double statValue;
boolean update = false;
// Remove stat increase skills.
for (int i = CommonSkill.STR_INCREASE_BONUS_1.getId(); i <= CommonSkill.MEN_INCREASE_BONUS_1.getId(); i++)
{
knownSkill = getKnownSkill(i);
if (knownSkill != null)
{
removeSkill(knownSkill);
update = true;
}
}
// STR bonus.
statValue = getStat().getValue(Stat.STAT_STR);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.STR_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// INT bonus.
statValue = getStat().getValue(Stat.STAT_INT);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.INT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// DEX bonus.
statValue = getStat().getValue(Stat.STAT_DEX);
if ((statValue >= 50) && (statValue < 60))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 80))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 80)
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// WIT bonus.
statValue = getStat().getValue(Stat.STAT_WIT);
if ((statValue >= 40) && (statValue < 50))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 50) && (statValue < 70))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 70)
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// CON bonus.
statValue = getStat().getValue(Stat.STAT_CON);
if ((statValue >= 50) && (statValue < 65))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 65) && (statValue < 90))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.CON_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// MEN bonus.
statValue = getStat().getValue(Stat.STAT_MEN);
if ((statValue >= 45) && (statValue < 60))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 85))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 85)
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// Update skill list.
if (update)
{
sendSkillList();
}
_statIncreaseSkillTask = null;
}, 500);
}
public List<PlayerCollectionData> getCollections()
{
return _collections;

View File

@ -59,6 +59,24 @@ public enum CommonSkill
PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1),
POTION_MASTERY(45184, 1),
STR_INCREASE_BONUS_1(45191, 1),
STR_INCREASE_BONUS_2(45191, 2),
STR_INCREASE_BONUS_3(45191, 3),
INT_INCREASE_BONUS_1(45192, 1),
INT_INCREASE_BONUS_2(45192, 2),
INT_INCREASE_BONUS_3(45192, 3),
DEX_INCREASE_BONUS_1(45193, 1),
DEX_INCREASE_BONUS_2(45193, 2),
DEX_INCREASE_BONUS_3(45193, 3),
WIT_INCREASE_BONUS_1(45194, 1),
WIT_INCREASE_BONUS_2(45194, 2),
WIT_INCREASE_BONUS_3(45194, 3),
CON_INCREASE_BONUS_1(45195, 1),
CON_INCREASE_BONUS_2(45195, 2),
CON_INCREASE_BONUS_3(45195, 3),
MEN_INCREASE_BONUS_1(45196, 1),
MEN_INCREASE_BONUS_2(45196, 2),
MEN_INCREASE_BONUS_3(45196, 3),
TELEPORT(60018, 1);
private final SkillHolder _holder;

View File

@ -361,6 +361,9 @@ public class EnterWorld implements IClientIncomingPacket
// Send EtcStatusUpdate
player.sendPacket(new EtcStatusUpdate(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
// Clan packets
if (clan != null)
{

View File

@ -119,6 +119,9 @@ public class ExResetStatusBonus implements IClientIncomingPacket
player.sendPacket(new UserInfo(player));
player.getStat().recalculateStats(true);
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}
}

View File

@ -110,5 +110,8 @@ public class ExSetStatusBonus implements IClientIncomingPacket
}
player.sendPacket(new UserInfo(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}

View File

@ -71,5 +71,11 @@ public class StatUp extends AbstractEffect
}
}
effected.getStat().mergeAdd(stat, _amount);
// Calculate stat increase skills.
if (effected.isPlayer())
{
effected.getActingPlayer().calculateStatIncreaseSkills();
}
}
}

View File

@ -930,6 +930,8 @@ public class Player extends Playable
private PlayerRandomCraft _randomCraft = null;
private ScheduledFuture<?> _statIncreaseSkillTask;
private final List<PlayerCollectionData> _collections = new ArrayList<>();
private final List<Integer> _collectionFavorites = new ArrayList<>();
@ -14843,6 +14845,149 @@ public class Player extends Playable
});
}
public void calculateStatIncreaseSkills()
{
// Use a task to prevent multiple execution from effects.
if (_statIncreaseSkillTask != null)
{
return;
}
_statIncreaseSkillTask = ThreadPool.schedule(() ->
{
Skill knownSkill;
double statValue;
boolean update = false;
// Remove stat increase skills.
for (int i = CommonSkill.STR_INCREASE_BONUS_1.getId(); i <= CommonSkill.MEN_INCREASE_BONUS_1.getId(); i++)
{
knownSkill = getKnownSkill(i);
if (knownSkill != null)
{
removeSkill(knownSkill);
update = true;
}
}
// STR bonus.
statValue = getStat().getValue(Stat.STAT_STR);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.STR_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.STR_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// INT bonus.
statValue = getStat().getValue(Stat.STAT_INT);
if ((statValue >= 60) && (statValue < 70))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 70) && (statValue < 90))
{
addSkill(CommonSkill.INT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.INT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// DEX bonus.
statValue = getStat().getValue(Stat.STAT_DEX);
if ((statValue >= 50) && (statValue < 60))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 80))
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 80)
{
addSkill(CommonSkill.DEX_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// WIT bonus.
statValue = getStat().getValue(Stat.STAT_WIT);
if ((statValue >= 40) && (statValue < 50))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 50) && (statValue < 70))
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 70)
{
addSkill(CommonSkill.WIT_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// CON bonus.
statValue = getStat().getValue(Stat.STAT_CON);
if ((statValue >= 50) && (statValue < 65))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 65) && (statValue < 90))
{
addSkill(CommonSkill.CON_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 90)
{
addSkill(CommonSkill.CON_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// MEN bonus.
statValue = getStat().getValue(Stat.STAT_MEN);
if ((statValue >= 45) && (statValue < 60))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_1.getSkill(), false);
update = true;
}
else if ((statValue >= 60) && (statValue < 85))
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_2.getSkill(), false);
update = true;
}
else if (statValue >= 85)
{
addSkill(CommonSkill.MEN_INCREASE_BONUS_3.getSkill(), false);
update = true;
}
// Update skill list.
if (update)
{
sendSkillList();
}
_statIncreaseSkillTask = null;
}, 500);
}
public List<PlayerCollectionData> getCollections()
{
return _collections;

View File

@ -59,6 +59,24 @@ public enum CommonSkill
PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1),
POTION_MASTERY(45184, 1),
STR_INCREASE_BONUS_1(45191, 1),
STR_INCREASE_BONUS_2(45191, 2),
STR_INCREASE_BONUS_3(45191, 3),
INT_INCREASE_BONUS_1(45192, 1),
INT_INCREASE_BONUS_2(45192, 2),
INT_INCREASE_BONUS_3(45192, 3),
DEX_INCREASE_BONUS_1(45193, 1),
DEX_INCREASE_BONUS_2(45193, 2),
DEX_INCREASE_BONUS_3(45193, 3),
WIT_INCREASE_BONUS_1(45194, 1),
WIT_INCREASE_BONUS_2(45194, 2),
WIT_INCREASE_BONUS_3(45194, 3),
CON_INCREASE_BONUS_1(45195, 1),
CON_INCREASE_BONUS_2(45195, 2),
CON_INCREASE_BONUS_3(45195, 3),
MEN_INCREASE_BONUS_1(45196, 1),
MEN_INCREASE_BONUS_2(45196, 2),
MEN_INCREASE_BONUS_3(45196, 3),
TELEPORT(60018, 1);
private final SkillHolder _holder;

View File

@ -361,6 +361,9 @@ public class EnterWorld implements IClientIncomingPacket
// Send EtcStatusUpdate
player.sendPacket(new EtcStatusUpdate(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
// Clan packets
if (clan != null)
{

View File

@ -119,6 +119,9 @@ public class ExResetStatusBonus implements IClientIncomingPacket
player.sendPacket(new UserInfo(player));
player.getStat().recalculateStats(true);
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}
}

View File

@ -110,5 +110,8 @@ public class ExSetStatusBonus implements IClientIncomingPacket
}
player.sendPacket(new UserInfo(player));
// Calculate stat increase skills.
player.calculateStatIncreaseSkills();
}
}