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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user