Protected Trade/Quest system + Expirable quests
Added true protection against race conditions on player trades and fixed some situational issues. Character's quest status table also received concurrency treatment. Quests with time limit now expires properly. Increased subtly the performance on the server start-up.
This commit is contained in:
@@ -21,7 +21,6 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import net.server.channel.handlers.AbstractMovementPacketHandler;
|
||||
import java.util.List;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
@@ -30,6 +29,7 @@ import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
public final class MovePetHandler extends AbstractMovementPacketHandler {
|
||||
@Override
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
int petId = slea.readInt();
|
||||
slea.readLong();
|
||||
|
||||
@@ -191,6 +191,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
} else {
|
||||
playerGuild.getMGC(player.getId()).setCharacter(player);
|
||||
player.setMGC(playerGuild.getMGC(player.getId()));
|
||||
|
||||
server.setGuildMemberOnline(player, true, c.getChannel());
|
||||
c.announce(MaplePacketCreator.showGuildInfo(player));
|
||||
int allianceId = player.getGuild().getAllianceId();
|
||||
@@ -204,6 +205,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
player.getGuild().setAllianceId(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (newAlliance != null) {
|
||||
c.announce(MaplePacketCreator.updateAllianceInfo(newAlliance, c));
|
||||
c.announce(MaplePacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice()));
|
||||
@@ -267,11 +269,11 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
if (player.getMap().getHPDec() > 0) {
|
||||
final MapleCharacter mc = player;
|
||||
|
||||
ScheduledFuture<?> hpDecreaseTask = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mc.doHurtHp();
|
||||
}
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mc.doHurtHp();
|
||||
}
|
||||
}, 10000);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,6 +194,8 @@ public class World {
|
||||
}
|
||||
|
||||
public MapleGuild getGuild(MapleGuildCharacter mgc) {
|
||||
if(mgc == null) return null;
|
||||
|
||||
int gid = mgc.getGuildId();
|
||||
MapleGuild g;
|
||||
g = Server.getInstance().getGuild(gid, mgc.getWorld(), mgc.getCharacter());
|
||||
|
||||
Reference in New Issue
Block a user