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

@@ -250,7 +250,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
private Map<Integer, MapleSummon> summons = new LinkedHashMap<>();
private Map<Integer, MapleCoolDownValueHolder> coolDowns = new LinkedHashMap<>(50);
private EnumMap<MapleDisease, DiseaseValueHolder> diseases = new EnumMap<>(MapleDisease.class);
private List<MapleDoor> doors = new ArrayList<>();
private Map<Integer, MapleDoor> doors = new LinkedHashMap<>();
private ScheduledFuture<?> dragonBloodSchedule;
private ScheduledFuture<?> mapTimeLimitTask = null;
private ScheduledFuture<?>[] fullnessSchedule = new ScheduledFuture<?>[3];
@@ -462,8 +462,12 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
return pts;
}
public void addDoor(MapleDoor door) {
doors.add(door);
public void addDoor(Integer owner, MapleDoor door) {
doors.put(owner, door);
}
public void removeDoor(Integer owner) {
doors.remove(owner);
}
public void addExcluded(int x) {
@@ -656,40 +660,38 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
public int calculateMaxBaseDamage(int watk) {
int maxbasedamage;
Item weapon_item = getInventory(MapleInventoryType.EQUIPPED).getItem((short) -11);
if (weapon_item != null) {
MapleWeaponType weapon = MapleItemInformationProvider.getInstance().getWeaponType(weapon_item.getItemId());
int mainstat;
int secondarystat;
if (getJob().isA(MapleJob.THIEF) && weapon == MapleWeaponType.DAGGER_OTHER) {
weapon = MapleWeaponType.DAGGER_THIEVES;
}
Item weapon_item = getInventory(MapleInventoryType.EQUIPPED).getItem((short) -11);
if (weapon_item != null) {
MapleWeaponType weapon = MapleItemInformationProvider.getInstance().getWeaponType(weapon_item.getItemId());
int mainstat, secondarystat;
if (getJob().isA(MapleJob.THIEF) && weapon == MapleWeaponType.DAGGER_OTHER) {
weapon = MapleWeaponType.DAGGER_THIEVES;
}
if (weapon == MapleWeaponType.BOW || weapon == MapleWeaponType.CROSSBOW || weapon == MapleWeaponType.GUN) {
mainstat = localdex;
secondarystat = localstr;
} else if (weapon == MapleWeaponType.CLAW || weapon == MapleWeaponType.DAGGER_THIEVES) {
mainstat = localluk;
secondarystat = localdex + localstr;
} else {
mainstat = localstr;
secondarystat = localdex;
}
maxbasedamage = (int) (((weapon.getMaxDamageMultiplier() * mainstat + secondarystat) / 100.0) * watk);
} else {
if (weapon == MapleWeaponType.BOW || weapon == MapleWeaponType.CROSSBOW || weapon == MapleWeaponType.GUN) {
mainstat = localdex;
secondarystat = localstr;
} else if (weapon == MapleWeaponType.CLAW || weapon == MapleWeaponType.DAGGER_THIEVES) {
mainstat = localluk;
secondarystat = localdex + localstr;
} else {
mainstat = localstr;
secondarystat = localdex;
}
maxbasedamage = (int) (((weapon.getMaxDamageMultiplier() * mainstat + secondarystat) / 100.0) * watk);
} else {
if (job.isA(MapleJob.PIRATE) || job.isA(MapleJob.THUNDERBREAKER1)) {
double weapMulti = 3;
double weapMulti = 3;
if (job.getId() % 100 != 0) {
weapMulti = 4.2;
weapMulti = 4.2;
}
int attack = (int) Math.min(Math.floor((2 * getLevel() + 31) / 3), 31);
maxbasedamage = (int) (localstr * weapMulti + localdex) * attack / 100;
} else {
maxbasedamage = 1;
}
}
int attack = (int) Math.min(Math.floor((2 * getLevel() + 31) / 3), 31);
maxbasedamage = (int) (localstr * weapMulti + localdex) * attack / 100;
} else {
maxbasedamage = 1;
}
}
return maxbasedamage;
}
@@ -811,31 +813,33 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
buffstats.add(statup.getLeft());
}
}
List<MapleBuffStatValueHolder> toCancel = deregisterBuffStats(buffstats);
if (effect.isMagicDoor()) {
if (!getDoors().isEmpty()) {
MapleDoor door = getDoors().iterator().next();
for (MapleCharacter chr : door.getTarget().getCharacters()) {
door.sendDestroyData(chr.client);
MapleDoor destroyDoor = doors.remove(this.getId());
if (destroyDoor != null) {
destroyDoor.freeAllocatedPortal();
destroyDoor.getTarget().removeMapObject(destroyDoor.getAreaDoor());
destroyDoor.getTown().removeMapObject(destroyDoor.getTownDoor());
for (MapleCharacter chr : destroyDoor.getTarget().getCharacters()) {
destroyDoor.getAreaDoor().sendDestroyData(chr.getClient());
}
for (MapleCharacter chr : door.getTown().getCharacters()) {
door.sendDestroyData(chr.client);
}
for (MapleDoor destroyDoor : getDoors()) {
door.getTarget().removeMapObject(destroyDoor);
door.getTown().removeMapObject(destroyDoor);
for (MapleCharacter chr : destroyDoor.getTown().getCharacters()) {
destroyDoor.getTownDoor().sendDestroyData(chr.getClient());
}
if (party != null) {
for (MaplePartyCharacter partyMembers : getParty().getMembers()) {
partyMembers.getPlayer().getDoors().remove(door);
partyMembers.getDoors().remove(door);
partyMembers.getPlayer().removeDoor(this.getId());
partyMembers.removeDoor(this.getId());
}
silentPartyUpdate();
} else {
clearDoors();
}
}
}
List<MapleBuffStatValueHolder> toCancel = deregisterBuffStats(buffstats);
if (effect.getSourceId() == Spearman.HYPER_BODY || effect.getSourceId() == GM.HYPER_BODY || effect.getSourceId() == SuperGM.HYPER_BODY) {
List<Pair<MapleStat, Integer>> statup = new ArrayList<>(4);
statup.add(new Pair<>(MapleStat.HP, Math.min(hp, maxhp)));
@@ -1335,10 +1339,6 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
}
public void clearDoors() {
doors.clear();
}
public void clearSavedLocation(SavedLocationType type) {
savedLocations[type.ordinal()] = null;
}
@@ -2412,8 +2412,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
return dojoStage;
}
public List<MapleDoor> getDoors() {
return new ArrayList<>(doors);
public Map<Integer, MapleDoor> getDoors() {
return Collections.unmodifiableMap(doors);
}
public int getEnergyBar() {
@@ -3870,6 +3870,10 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
}
}
public Set<Integer> getActiveCoupons() {
return Collections.unmodifiableSet(activeCoupons.keySet());
}
public static MapleCharacter loadCharFromDB(int charid, MapleClient client, boolean channelserver) throws SQLException {
try {