Reworked Autoassigner & Hero's Will & Trade + Visual NX + New commands
Reworked autoassigner (improved limits between required secondary and surplus primary stats). Hero's will removes most of diseases, tonic removes slow. Added visual info for collected NX cards. Added commands cake (cake boss with customizable HP) and setgmlevel. Reworked Trade system now checking for slots smartly (instead of just checking for empty slots).
This commit is contained in:
@@ -754,6 +754,8 @@ public class MapleStatEffect {
|
||||
applyto.dispelDebuffs();
|
||||
} else if (isHeroWill()) {
|
||||
applyto.dispelDebuff(MapleDisease.SEDUCE);
|
||||
applyto.dispelDebuff(MapleDisease.ZOMBIFY);
|
||||
applyto.dispelDebuffs();
|
||||
}
|
||||
if (isComboReset()) {
|
||||
applyto.setCombo((short) 0);
|
||||
@@ -763,7 +765,7 @@ public class MapleStatEffect {
|
||||
} */
|
||||
if (hpchange != 0) {
|
||||
if (hpchange < 0 && (-hpchange) >= applyto.getHp() && (!applyto.hasDisease(MapleDisease.ZOMBIFY) || hpCon > 0)) {
|
||||
if(!ServerConstants.USE_PERMISSIVE_BUFFS) {
|
||||
if(!applyto.isGM()) {
|
||||
applyto.getClient().announce(MaplePacketCreator.enableActions());
|
||||
return false;
|
||||
}
|
||||
@@ -778,7 +780,7 @@ public class MapleStatEffect {
|
||||
int newMp = applyto.getMp() + mpchange;
|
||||
if (mpchange != 0) {
|
||||
if (mpchange < 0 && -mpchange > applyto.getMp()) {
|
||||
if(!ServerConstants.USE_PERMISSIVE_BUFFS) {
|
||||
if(!applyto.isGM()) {
|
||||
applyto.getClient().announce(MaplePacketCreator.enableActions());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -22,24 +22,24 @@
|
||||
package server;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import tools.LogHelper;
|
||||
import tools.MaplePacketCreator;
|
||||
import client.MapleCharacter;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import constants.ItemConstants;
|
||||
import constants.ServerConstants;
|
||||
import tools.Pair;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Matze
|
||||
* @author Ronan (concurrency safety)
|
||||
* @author Ronan (concurrency safety & check available slots)
|
||||
*/
|
||||
public class MapleTrade {
|
||||
private MapleTrade partner = null;
|
||||
@@ -192,22 +192,12 @@ public class MapleTrade {
|
||||
}
|
||||
|
||||
private boolean fitsInInventory() {
|
||||
MapleItemInformationProvider mii = MapleItemInformationProvider.getInstance();
|
||||
Map<MapleInventoryType, Integer> neededSlots = new LinkedHashMap<>();
|
||||
List<Pair<Item, MapleInventoryType>> tradeItems = new LinkedList<>();
|
||||
for (Item item : exchangeItems) {
|
||||
MapleInventoryType type = mii.getInventoryType(item.getItemId());
|
||||
if (neededSlots.get(type) == null) {
|
||||
neededSlots.put(type, 1);
|
||||
} else {
|
||||
neededSlots.put(type, neededSlots.get(type) + 1);
|
||||
}
|
||||
tradeItems.add(new Pair(item, MapleItemInformationProvider.getInstance().getInventoryType(item.getItemId())));
|
||||
}
|
||||
for (Map.Entry<MapleInventoryType, Integer> entry : neededSlots.entrySet()) {
|
||||
if (chr.getInventory(entry.getKey()).isFull(entry.getValue() - 1)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
return MapleInventory.checkSpotsAndOwnership(chr, tradeItems);
|
||||
}
|
||||
|
||||
public static void completeTrade(MapleCharacter c) {
|
||||
|
||||
@@ -72,7 +72,7 @@ public class MapleLifeFactory {
|
||||
stats.setMp(MapleDataTool.getIntConvert("maxMP", monsterInfoData, 0));
|
||||
stats.setExp(MapleDataTool.getIntConvert("exp", monsterInfoData, 0));
|
||||
stats.setLevel(MapleDataTool.getIntConvert("level", monsterInfoData));
|
||||
stats.setRemoveAfter(MapleDataTool.getIntConvert("removeAfter", monsterInfoData, 0));
|
||||
stats.setRemoveAfter(MapleDataTool.getIntConvert("removeAfter", monsterInfoData, 0));
|
||||
stats.setBoss(MapleDataTool.getIntConvert("boss", monsterInfoData, 0) > 0);
|
||||
stats.setExplosiveReward(MapleDataTool.getIntConvert("explosiveReward", monsterInfoData, 0) > 0);
|
||||
stats.setFfaLoot(MapleDataTool.getIntConvert("publicReward", monsterInfoData, 0) > 0);
|
||||
|
||||
@@ -526,7 +526,10 @@ public class MapleMap {
|
||||
if (chr.getBuffedValue(MapleBuffStat.MESOUP) != null) {
|
||||
mesos = (int) (mesos * chr.getBuffedValue(MapleBuffStat.MESOUP).doubleValue() / 100.0);
|
||||
}
|
||||
spawnMesoDrop(mesos * chr.getMesoRate(), calcDropPos(pos, mob.getPosition()), mob, chr, false, droptype);
|
||||
mesos = mesos * chr.getMesoRate();
|
||||
if(mesos <= 0) mesos = Integer.MAX_VALUE;
|
||||
|
||||
spawnMesoDrop(mesos, calcDropPos(pos, mob.getPosition()), mob, chr, false, droptype);
|
||||
}
|
||||
} else {
|
||||
if (ItemConstants.getInventoryType(de.itemId) == MapleInventoryType.EQUIP) {
|
||||
@@ -1468,7 +1471,7 @@ public class MapleMap {
|
||||
} else if (monster.getId() == 9300093) {
|
||||
monsterItemDrop(monster, new Item(4031495, (short) 0, (short) 1), monster.getDropPeriodTime());
|
||||
} else {
|
||||
FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "UNCODED TIMED MOB DETECTED: " + monster.getId());
|
||||
FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "UNCODED TIMED MOB DETECTED: " + monster.getId() + "\r\n");
|
||||
}
|
||||
}
|
||||
spawnedMonstersOnMap.incrementAndGet();
|
||||
|
||||
@@ -77,9 +77,7 @@ public class MapleMapItem extends AbstractMapleMapObject {
|
||||
}
|
||||
|
||||
public final int getItemId() {
|
||||
if (getMeso() > 0) {
|
||||
return meso;
|
||||
}
|
||||
if (meso > 0) return meso;
|
||||
return item.getItemId();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user