Attempt on Mystic Doors

Partially fixed Mystic Doors.
This commit is contained in:
ronancpl
2017-07-09 20:00:31 -03:00
parent b3734cbaf7
commit b7c0bb6c07
83 changed files with 443 additions and 241 deletions

View File

@@ -23,22 +23,22 @@ package net.server.channel.handlers;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import server.maps.MapleDoor;
import server.maps.MapleDoorObject;
import server.maps.MapleMapObject;
import tools.data.input.SeekableLittleEndianAccessor;
/**
*
* @author Matze
* @author Matze, Ronan
*/
public final class DoorHandler extends AbstractMaplePacketHandler {
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
int oid = slea.readInt();
int ownerid = slea.readInt();
boolean mode = (slea.readByte() == 0); // specifies if backwarp or not, 1 town to target, 0 target to town
for (MapleMapObject obj : c.getPlayer().getMap().getMapObjects()) {
if (obj instanceof MapleDoor) {
MapleDoor door = (MapleDoor) obj;
if (door.getOwner().getId() == oid) {
if (obj instanceof MapleDoorObject) {
MapleDoorObject door = (MapleDoorObject) obj;
if (door.getOwnerId() == ownerid) {
door.warp(c.getPlayer(), mode);
return;
}

View File

@@ -116,12 +116,12 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler {
if (slea.available() == 5) {
pos = new Point(slea.readShort(), slea.readShort());
}
if (skill.getId() == Priest.MYSTIC_DOOR && !chr.isGM()) {
c.announce(MaplePacketCreator.enableActions());
return;
}
if (chr.isAlive()) {
if (skill.getId() != Priest.MYSTIC_DOOR || chr.canDoor()) {
if (skill.getId() != Priest.MYSTIC_DOOR) {
skill.getEffect(skillLevel).applyTo(c.getPlayer(), pos);
} else if(chr.canDoor()) {
//update door lists
chr.cancelMagicDoor();
skill.getEffect(skillLevel).applyTo(c.getPlayer(), pos);
} else {
chr.message("Please wait 5 seconds before casting Mystic Door again.");

View File

@@ -21,12 +21,16 @@
*/
package net.server.world;
import java.util.ArrayList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.LinkedHashMap;
import java.util.Collection;
import server.maps.MapleDoor;
import server.MapleStatEffect;
import client.MapleCharacter;
import client.MapleJob;
import java.util.Collections;
public class MaplePartyCharacter {
private String name;
@@ -35,7 +39,7 @@ public class MaplePartyCharacter {
private int channel, world;
private int jobid;
private int mapid;
private ArrayList<MapleDoor> door = new ArrayList<MapleDoor>();
private Map<Integer, MapleDoor> doors = new LinkedHashMap<>();
private boolean online;
private MapleJob job;
private MapleCharacter character;
@@ -51,8 +55,8 @@ public class MaplePartyCharacter {
this.mapid = maplechar.getMapId();
this.online = true;
this.job = maplechar.getJob();
for (MapleDoor doors : maplechar.getDoors()) {
this.door.add(doors);
for (Entry<Integer, MapleDoor> entry : maplechar.getDoors().entrySet()) {
doors.put(entry.getKey(), entry.getValue());
}
}
@@ -116,12 +120,16 @@ public class MaplePartyCharacter {
return character.getGuildId();
}
public void updateDoor(MapleDoor door) {
this.door.add(door);
public void addDoor(Integer owner, MapleDoor door) {
this.doors.put(owner, door);
}
public void removeDoor(Integer owner) {
this.doors.remove(owner);
}
public Collection<MapleDoor> getDoors() {
return door;
return Collections.unmodifiableCollection(doors.values());
}
@Override