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 {
|
||||
|
||||
@@ -1196,8 +1196,8 @@ public class MapleClient {
|
||||
}
|
||||
server.getPlayerBuffStorage().addBuffsToStorage(player.getId(), player.getAllBuffs());
|
||||
player.cancelBuffEffects();
|
||||
player.cancelMagicDoor();
|
||||
//Canceling mounts? Noty
|
||||
//Cancelling magicdoor? Nope
|
||||
//Cancelling mounts? Noty
|
||||
if (player.getBuffedValue(MapleBuffStat.PUPPET) != null) {
|
||||
player.cancelEffectFromBuffStat(MapleBuffStat.PUPPET);
|
||||
}
|
||||
|
||||
@@ -27,12 +27,12 @@ import server.MapleStatEffect;
|
||||
import server.life.Element;
|
||||
|
||||
public class Skill {
|
||||
public int id;
|
||||
public List<MapleStatEffect> effects = new ArrayList<>();
|
||||
public Element element;
|
||||
public int animationTime;
|
||||
public int job;
|
||||
public boolean action;
|
||||
private int id;
|
||||
private List<MapleStatEffect> effects = new ArrayList<>();
|
||||
private Element element;
|
||||
private int animationTime;
|
||||
private int job;
|
||||
private boolean action;
|
||||
|
||||
public Skill(int id) {
|
||||
this.id = id;
|
||||
@@ -61,6 +61,10 @@ public class Skill {
|
||||
return job % 10 == 2;
|
||||
}
|
||||
|
||||
public void setElement(Element elem) {
|
||||
element = elem;
|
||||
}
|
||||
|
||||
public Element getElement() {
|
||||
return element;
|
||||
}
|
||||
@@ -68,12 +72,28 @@ public class Skill {
|
||||
public int getAnimationTime() {
|
||||
return animationTime;
|
||||
}
|
||||
|
||||
public void setAnimationTime(int time) {
|
||||
animationTime = time;
|
||||
}
|
||||
|
||||
public void incAnimationTime(int time) {
|
||||
animationTime += time;
|
||||
}
|
||||
|
||||
public boolean isBeginnerSkill() {
|
||||
return id % 10000000 < 10000;
|
||||
}
|
||||
|
||||
public void setAction(boolean act) {
|
||||
action = act;
|
||||
}
|
||||
|
||||
public boolean getAction() {
|
||||
return action;
|
||||
}
|
||||
|
||||
public void addLevelEffect(MapleStatEffect effect) {
|
||||
effects.add(effect);
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,9 @@ import constants.skills.WhiteKnight;
|
||||
import constants.skills.WindArcher;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import provider.MapleData;
|
||||
@@ -122,9 +124,9 @@ public class SkillFactory {
|
||||
int skillType = MapleDataTool.getInt("skillType", data, -1);
|
||||
String elem = MapleDataTool.getString("elemAttr", data, null);
|
||||
if (elem != null) {
|
||||
ret.element = Element.getFromChar(elem.charAt(0));
|
||||
ret.setElement(Element.getFromChar(elem.charAt(0)));
|
||||
} else {
|
||||
ret.element = Element.NEUTRAL;
|
||||
ret.setElement(Element.NEUTRAL);
|
||||
}
|
||||
MapleData effect = data.getChildByPath("effect");
|
||||
if (skillType != -1) {
|
||||
@@ -148,7 +150,7 @@ public class SkillFactory {
|
||||
} else {
|
||||
action = true;
|
||||
}
|
||||
ret.action = action;
|
||||
ret.setAction(action);
|
||||
MapleData hit = data.getChildByPath("hit");
|
||||
MapleData ball = data.getChildByPath("ball");
|
||||
isBuff = effect != null && hit == null && ball == null;
|
||||
@@ -371,12 +373,12 @@ public class SkillFactory {
|
||||
}
|
||||
|
||||
for (MapleData level : data.getChildByPath("level")) {
|
||||
ret.effects.add(MapleStatEffect.loadSkillEffectFromData(level, id, isBuff));
|
||||
ret.addLevelEffect(MapleStatEffect.loadSkillEffectFromData(level, id, isBuff));
|
||||
}
|
||||
ret.animationTime = 0;
|
||||
ret.setAnimationTime(0);
|
||||
if (effect != null) {
|
||||
for (MapleData effectEntry : effect) {
|
||||
ret.animationTime += MapleDataTool.getIntConvert("delay", effectEntry, 0);
|
||||
ret.incAnimationTime(MapleDataTool.getIntConvert("delay", effectEntry, 0));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
|
||||
@@ -709,7 +709,7 @@ public class Commands {
|
||||
|
||||
case "debugmap":
|
||||
if(ServerConstants.USE_DEBUG) {
|
||||
player.dropMessage(6, "Current map id " + player.getMap().getId() + ", event: '" + ((player.getMap().getEventInstance() != null) ? player.getMap().getEventInstance().getName() : "null") + "'; Players: " + player.getMap().getAllPlayers().size() + ", Mobs: " + player.getMap().countMonsters() + ", Reactors: " + player.getMap().countReactors() + ", Items: " + player.getMap().countItems() + ".");
|
||||
player.dropMessage(6, "Current map id " + player.getMap().getId() + ", event: '" + ((player.getMap().getEventInstance() != null) ? player.getMap().getEventInstance().getName() : "null") + "'; Players: " + player.getMap().getAllPlayers().size() + ", Mobs: " + player.getMap().countMonsters() + ", Reactors: " + player.getMap().countReactors() + ", Items: " + player.getMap().countItems() + ", Objects: " + player.getMap().getMapObjects().size() + ".");
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -764,7 +764,7 @@ public class Commands {
|
||||
case "debugplayercoupons":
|
||||
if(ServerConstants.USE_DEBUG) {
|
||||
String s = "Currently active PLAYER coupons: ";
|
||||
for(Integer i : Server.getInstance().getActiveCoupons()) {
|
||||
for(Integer i : player.getActiveCoupons()) {
|
||||
s += (i + " ");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user