Attempt on Mystic Doors
Partially fixed Mystic Doors.
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user