AmoriaPQ + ItemSort fix + revamped GMShop
Implemented AmoriaPQ. Fixed an issue with ItemIdSortHandler where empty vectors given to the sorting module would cause an exception thrown, wiping players inventory items. Thanks to Vcoc, revamped shop data for GMShop (shop id 1337). Mount quest for explorers now uses event script.
This commit is contained in:
@@ -240,8 +240,8 @@ public final class Channel {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (Entry<Integer, MapleMap> map : mapFactory.getMaps().entrySet()) {
|
||||
map.getValue().respawn();
|
||||
for (MapleMap map : mapFactory.getMaps().values()) {
|
||||
map.respawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
}
|
||||
|
||||
//WTF IS THIS F3,1
|
||||
/*if (attackCount != attack.numDamage && attack.skill != ChiefBandit.MESO_EXPLOSION && attack.skill != NightWalker.VAMPIRE && attack.skill != WindArcher.WIND_SHOT && attack.skill != Aran.COMBO_SMASH && attack.skill != Aran.COMBO_PENRIL && attack.skill != Aran.COMBO_TEMPEST && attack.skill != NightLord.NINJA_AMBUSH && attack.skill != Shadower.NINJA_AMBUSH) {
|
||||
/*if (attackCount != attack.numDamage && attack.skill != ChiefBandit.MESO_EXPLOSION && attack.skill != NightWalker.VAMPIRE && attack.skill != WindArcher.WIND_SHOT && attack.skill != Aran.COMBO_SMASH && attack.skill != Aran.COMBO_FENRIR && attack.skill != Aran.COMBO_TEMPEST && attack.skill != NightLord.NINJA_AMBUSH && attack.skill != Shadower.NINJA_AMBUSH) {
|
||||
return;
|
||||
}*/
|
||||
|
||||
|
||||
@@ -303,15 +303,15 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
int extras = 0;
|
||||
|
||||
extras = gainStatByType(chr, primary, statGain, statEqpd, prStat + extras);
|
||||
extras = gainStatByType(chr, secondary, statGain, statEqpd, scStat + extras);
|
||||
extras = gainStatByType(chr, tertiary, statGain, statEqpd, trStat + extras);
|
||||
extras = gainStatByType(chr, primary, statGain, prStat + extras);
|
||||
extras = gainStatByType(chr, secondary, statGain, scStat + extras);
|
||||
extras = gainStatByType(chr, tertiary, statGain, trStat + extras);
|
||||
|
||||
if(extras > 0) { //redistribute surplus in priority order
|
||||
extras = gainStatByType(chr, primary, statGain, statEqpd, extras);
|
||||
extras = gainStatByType(chr, secondary, statGain, statEqpd, extras);
|
||||
extras = gainStatByType(chr, tertiary, statGain, statEqpd, extras);
|
||||
gainStatByType(chr, getQuaternaryStat(stance), statGain, statEqpd, extras);
|
||||
extras = gainStatByType(chr, primary, statGain, extras);
|
||||
extras = gainStatByType(chr, secondary, statGain, extras);
|
||||
extras = gainStatByType(chr, tertiary, statGain, extras);
|
||||
gainStatByType(chr, getQuaternaryStat(stance), statGain, extras);
|
||||
}
|
||||
|
||||
int remainingAp = (chr.getRemainingAp() - getAccumulatedStatGain(statGain));
|
||||
@@ -350,7 +350,7 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
|
||||
return;
|
||||
}
|
||||
total += tempVal;
|
||||
extras += gainStatByType(chr, MapleStat.getBy5ByteEncoding(type), statGain, statEqpd, tempVal);
|
||||
extras += gainStatByType(chr, MapleStat.getBy5ByteEncoding(type), statGain, tempVal);
|
||||
}
|
||||
int remainingAp = (chr.getRemainingAp() - total) + extras;
|
||||
chr.setRemainingAp(remainingAp);
|
||||
@@ -359,42 +359,42 @@ public class AutoAssignHandler extends AbstractMaplePacketHandler {
|
||||
}
|
||||
}
|
||||
|
||||
private int gainStatByType(MapleCharacter chr, MapleStat type, int[] statGain, int[] statEqpd, int gain) {
|
||||
private int gainStatByType(MapleCharacter chr, MapleStat type, int[] statGain, int gain) {
|
||||
if(gain <= 0) return 0;
|
||||
|
||||
int newVal = 0;
|
||||
if (type.equals(MapleStat.STR)) {
|
||||
newVal = chr.getStr() + statEqpd[0] + gain;
|
||||
newVal = chr.getStr() + gain;
|
||||
if (newVal > ServerConstants.MAX_AP) {
|
||||
statGain[0] += gain - (newVal - ServerConstants.MAX_AP);
|
||||
chr.setStr(ServerConstants.MAX_AP - statEqpd[0]);
|
||||
statGain[0] += (gain - (newVal - ServerConstants.MAX_AP));
|
||||
chr.setStr(ServerConstants.MAX_AP);
|
||||
} else {
|
||||
statGain[0] += gain;
|
||||
chr.setStr(newVal);
|
||||
}
|
||||
} else if (type.equals(MapleStat.INT)) {
|
||||
newVal = chr.getInt() + statEqpd[3] + gain;
|
||||
newVal = chr.getInt() + gain;
|
||||
if (newVal > ServerConstants.MAX_AP) {
|
||||
statGain[3] += gain - (newVal - ServerConstants.MAX_AP);
|
||||
chr.setInt(ServerConstants.MAX_AP - statEqpd[3]);
|
||||
statGain[3] += (gain - (newVal - ServerConstants.MAX_AP));
|
||||
chr.setInt(ServerConstants.MAX_AP);
|
||||
} else {
|
||||
statGain[3] += gain;
|
||||
chr.setInt(newVal);
|
||||
}
|
||||
} else if (type.equals(MapleStat.LUK)) {
|
||||
newVal = chr.getLuk() + statEqpd[2] + gain;
|
||||
newVal = chr.getLuk() + gain;
|
||||
if (newVal > ServerConstants.MAX_AP) {
|
||||
statGain[2] += gain - (newVal - ServerConstants.MAX_AP);
|
||||
chr.setLuk(ServerConstants.MAX_AP - statEqpd[2]);
|
||||
statGain[2] += (gain - (newVal - ServerConstants.MAX_AP));
|
||||
chr.setLuk(ServerConstants.MAX_AP);
|
||||
} else {
|
||||
statGain[2] += gain;
|
||||
chr.setLuk(newVal);
|
||||
}
|
||||
} else if (type.equals(MapleStat.DEX)) {
|
||||
newVal = chr.getDex() + statEqpd[1] + gain;
|
||||
newVal = chr.getDex() + gain;
|
||||
if (newVal > ServerConstants.MAX_AP) {
|
||||
statGain[1] += gain - (newVal - ServerConstants.MAX_AP);
|
||||
chr.setDex(ServerConstants.MAX_AP - statEqpd[1]);
|
||||
statGain[1] += (gain - (newVal - ServerConstants.MAX_AP));
|
||||
chr.setDex(ServerConstants.MAX_AP);
|
||||
} else {
|
||||
statGain[1] += gain;
|
||||
chr.setDex(newVal);
|
||||
|
||||
@@ -167,7 +167,7 @@ class PairedQuicksort {
|
||||
public PairedQuicksort(ArrayList<Item> A, int primarySort, int secondarySort) {
|
||||
intersect = new ArrayList<>();
|
||||
|
||||
MapleQuicksort(0, A.size() - 1, A, primarySort);
|
||||
if(A.size() > 0) MapleQuicksort(0, A.size() - 1, A, primarySort);
|
||||
|
||||
intersect.add(0);
|
||||
for(int ind = 1; ind < A.size(); ind++) {
|
||||
@@ -178,7 +178,7 @@ class PairedQuicksort {
|
||||
intersect.add(A.size());
|
||||
|
||||
for(int ind = 0; ind < intersect.size() - 1; ind++) {
|
||||
MapleQuicksort(intersect.get(ind), intersect.get(ind + 1) - 1, A, secondarySort);
|
||||
if(intersect.get(ind + 1) > intersect.get(ind)) MapleQuicksort(intersect.get(ind), intersect.get(ind + 1) - 1, A, secondarySort);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public final class MobDamageMobFriendlyHandler extends AbstractMaplePacketHandle
|
||||
monster.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, "The Moon Bunny went home because he was sick."));
|
||||
}
|
||||
else if(monster.getId() == 9300093) { //tylus
|
||||
monster.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, "Tylus has fallen by the overwhelming forces of this ambush."));
|
||||
monster.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, "Tylus has fallen by the overwhelming forces of the ambush."));
|
||||
}
|
||||
else if(monster.getId() == 9300137) { //juliet
|
||||
monster.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, "Juliet has fainted on the middle of the combat."));
|
||||
|
||||
@@ -79,12 +79,12 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler {
|
||||
if (attack.skill == Buccaneer.ENERGY_ORB || attack.skill == ThunderBreaker.SPARK || attack.skill == Shadower.TAUNT || attack.skill == NightLord.TAUNT) {
|
||||
player.getMap().broadcastMessage(player, MaplePacketCreator.rangedAttack(player, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false);
|
||||
applyAttack(attack, player, 1);
|
||||
} else if (attack.skill == Aran.COMBO_SMASH || attack.skill == Aran.COMBO_PENRIL || attack.skill == Aran.COMBO_TEMPEST) {
|
||||
} else if (attack.skill == Aran.COMBO_SMASH || attack.skill == Aran.COMBO_FENRIR || attack.skill == Aran.COMBO_TEMPEST) {
|
||||
player.getMap().broadcastMessage(player, MaplePacketCreator.rangedAttack(player, attack.skill, attack.skilllevel, attack.stance, attack.numAttackedAndDamage, 0, attack.allDamage, attack.speed, attack.direction, attack.display), false);
|
||||
if (attack.skill == Aran.COMBO_SMASH && player.getCombo() >= 30) {
|
||||
player.setCombo((short) 0);
|
||||
applyAttack(attack, player, 1);
|
||||
} else if (attack.skill == Aran.COMBO_PENRIL && player.getCombo() >= 100) {
|
||||
} else if (attack.skill == Aran.COMBO_FENRIR && player.getCombo() >= 100) {
|
||||
player.setCombo((short) 0);
|
||||
applyAttack(attack, player, 2);
|
||||
} else if (attack.skill == Aran.COMBO_TEMPEST && player.getCombo() >= 200) {
|
||||
|
||||
@@ -45,7 +45,6 @@ import constants.skills.DarkKnight;
|
||||
import constants.skills.Hero;
|
||||
import constants.skills.Paladin;
|
||||
import constants.skills.Priest;
|
||||
import constants.skills.Hermit;
|
||||
import constants.skills.SuperGM;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user