Multi World NPCs + patch on Player interactions

Made NPCs now work properly on multiworld system. Solved multiple issues
regarding Player Shops not giving back items properly when owner exits.
Added restriction on changing channels at FM rooms, preventing shop
owner entering Cash Shop.
This commit is contained in:
ronancpl
2017-05-28 22:11:39 -03:00
parent d0396e4c36
commit 7f178a3d80
548 changed files with 340 additions and 164 deletions

View File

@@ -178,7 +178,9 @@ public class Server implements Runnable {
try {
for (int i = 0; i < Integer.parseInt(p.getProperty("worlds")); i++) {
Integer worldCount = Math.min(ServerConstants.WORLD_NAMES.length, Integer.parseInt(p.getProperty("worlds")));
for (int i = 0; i < worldCount; i++) {
System.out.println("Starting world " + i);
World world = new World(i,
Integer.parseInt(p.getProperty("flag" + i)),

View File

@@ -25,6 +25,7 @@ import client.MapleCharacter;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import net.server.Server;
import server.MapleTrade;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
@@ -41,6 +42,8 @@ public class EnterCashShopHandler extends AbstractMaplePacketHandler {
if (mc.getCashShop().isOpened()) {
return;
}
mc.closePlayerInteractions();
Server.getInstance().getPlayerBuffStorage().addBuffsToStorage(mc.getId(), mc.getAllBuffs());
mc.cancelBuffEffects();

View File

@@ -33,12 +33,14 @@ import tools.data.input.SeekableLittleEndianAccessor;
* @author Matze
*/
public final class ItemMoveHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
slea.skip(4);
if(c.getPlayer().getAutobanManager().getLastSpam(6) + 300 > System.currentTimeMillis()) {
c.announce(MaplePacketCreator.enableActions());
return;
}
if(c.getPlayer().getAutobanManager().getLastSpam(6) + 300 > System.currentTimeMillis()) {
c.announce(MaplePacketCreator.enableActions());
return;
}
MapleInventoryType type = MapleInventoryType.getByType(slea.readByte());
byte src = (byte) slea.readShort();
byte action = (byte) slea.readShort();
@@ -52,6 +54,6 @@ public final class ItemMoveHandler extends AbstractMaplePacketHandler {
} else {
MapleInventoryManipulator.move(c, type, src, action);
}
c.getPlayer().getAutobanManager().spam(6);
c.getPlayer().getAutobanManager().spam(6);
}
}

View File

@@ -31,6 +31,7 @@ import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
public final class MessengerHandler extends AbstractMaplePacketHandler {
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
String input;
byte mode = slea.readByte();
@@ -59,12 +60,7 @@ public final class MessengerHandler extends AbstractMaplePacketHandler {
}
break;
case 0x02:
if (messenger != null) {
MapleMessengerCharacter messengerplayer = new MapleMessengerCharacter(player, player.getMessengerPosition());
world.leaveMessenger(messenger.getId(), messengerplayer);
player.setMessenger(null);
player.setMessengerPosition(4);
}
player.closePlayerMessenger();
break;
case 0x03:
if (messenger.getMembers().size() < 3) {

View File

@@ -266,38 +266,9 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler {
if (chr.getTrade() != null) {
MapleTrade.cancelTrade(c.getPlayer());
} else {
MaplePlayerShop shop = chr.getPlayerShop();
MapleMiniGame game = chr.getMiniGame();
HiredMerchant merchant = chr.getHiredMerchant();
if (shop != null) {
if (shop.isOwner(c.getPlayer())) {
for (MaplePlayerShopItem mpsi : shop.getItems()) {
if (mpsi.getBundles() > 2) {
Item iItem = mpsi.getItem().copy();
iItem.setQuantity((short) (mpsi.getBundles() * iItem.getQuantity()));
MapleInventoryManipulator.addFromDrop(c, iItem, false);
} else if (mpsi.isExist()) {
MapleInventoryManipulator.addFromDrop(c, mpsi.getItem(), true);
}
}
chr.getMap().broadcastMessage(MaplePacketCreator.removeCharBox(c.getPlayer()));
shop.removeVisitors();
} else {
shop.removeVisitor(c.getPlayer());
}
chr.setPlayerShop(null);
} else if (game != null) {
chr.setMiniGame(null);
if (game.isOwner(c.getPlayer())) {
chr.getMap().broadcastMessage(MaplePacketCreator.removeCharBox(c.getPlayer()));
game.broadcastToVisitor(MaplePacketCreator.getMiniGameClose());
} else {
game.removeVisitor(c.getPlayer());
}
} else if (merchant != null) {
merchant.removeVisitor(c.getPlayer());
chr.setHiredMerchant(null);
}
chr.closePlayerShop();
chr.closeMiniGame();
chr.closeHiredMerchant(true);
}
} else if (mode == Action.OPEN.getCode()) {
MaplePlayerShop shop = chr.getPlayerShop();

View File

@@ -269,12 +269,14 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
if (player.getMap().getHPDec() > 0) {
final MapleCharacter mc = player;
TimerManager.getInstance().schedule(new Runnable() {
ScheduledFuture<?> hpDecreaseTask = TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
mc.doHurtHp();
}
}, 10000);
mc.setHpDecreaseTask(hpDecreaseTask);
}
}
}