Aran skill & mount quests + New player IDs + MapleSkillMakerFetcher

Aran skill and mount questlines fixed.
Player ID starts counting from 20mil now, preventing clashes with map objects oid's (trying to solve the NPC disappearing issue).
New tool: MapleSkillMakerFetcher. It compiles a SQL script file containing updated Maker data info from the inputted ItemMake.wz.xml.
Updated Maker tables on the DB.
This commit is contained in:
ronancpl
2017-11-14 16:55:37 -02:00
parent 6fbd23f903
commit bc482ee0d2
72 changed files with 41495 additions and 18673 deletions

View File

@@ -28,30 +28,75 @@ import server.MapleItemInformationProvider;
import server.MakerItemFactory;
import server.MakerItemFactory.MakerItemCreateEntry;
import tools.Pair;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
* @author Jay Estrella
* @author Jay Estrella, Ronan
*/
public final class MakerSkillHandler extends AbstractMaplePacketHandler {
private MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.readInt();
int toCreate = slea.readInt();
MakerItemCreateEntry recipe = MakerItemFactory.getItemCreateEntry(toCreate);
if (canCreate(c, recipe) && !c.getPlayer().getInventory(ii.getInventoryType(toCreate)).isFull()) {
for (Pair<Integer, Integer> p : recipe.getReqItems()) {
int toRemove = p.getLeft();
MapleInventoryManipulator.removeById(c, ii.getInventoryType(toRemove), toRemove, p.getRight(), false, false);
}
MapleInventoryManipulator.addById(c, toCreate, (short) recipe.getRewardAmount());
short createStatus = getCreateStatus(c, recipe);
switch(createStatus) {
case 4: // no req skill level
c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation."));
break;
case 3: // no meso
c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough mesos to complete this operation."));
break;
case 2: // no req level
c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough level to complete this operation."));
break;
case 1: // no items
c.announce(MaplePacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + recipe.getRewardAmount() + " " + ii.getName(toCreate) + "."));
break;
default:
if (!c.getPlayer().getInventory(ii.getInventoryType(toCreate)).isFull()) {
for (Pair<Integer, Integer> p : recipe.getReqItems()) {
int toRemove = p.getLeft();
MapleInventoryManipulator.removeById(c, ii.getInventoryType(toRemove), toRemove, p.getRight(), false, false);
}
MapleInventoryManipulator.addById(c, toCreate, (short) recipe.getRewardAmount());
c.announce(MaplePacketCreator.serverNotice(1, "You have created " + recipe.getRewardAmount() + " " + ii.getName(toCreate) + "."));
c.announce(MaplePacketCreator.showMakerEffect());
} else {
c.announce(MaplePacketCreator.serverNotice(1, "Your inventory is full."));
}
}
}
private boolean canCreate(MapleClient c, MakerItemCreateEntry recipe) {
return hasItems(c, recipe) && c.getPlayer().getMeso() >= recipe.getCost() && c.getPlayer().getLevel() >= recipe.getReqLevel() && c.getPlayer().getSkillLevel(c.getPlayer().getJob().getId() / 1000 * 1000 + 1007) >= recipe.getReqSkillLevel();
private short getCreateStatus(MapleClient c, MakerItemCreateEntry recipe) {
if(!hasItems(c, recipe)) {
return 1;
}
if(c.getPlayer().getMeso() < recipe.getCost()) {
return 2;
}
if(c.getPlayer().getLevel() < recipe.getReqLevel()) {
return 3;
}
if(c.getPlayer().getSkillLevel((c.getPlayer().getJob().getId() / 1000) * 10000000 + 1007) < recipe.getReqSkillLevel()) {
return 4;
}
return 0;
}
private boolean hasItems(MapleClient c, MakerItemCreateEntry recipe) {