Knights' Seal & I. MaxHP + Adherent mob status + Script point-warps
Fixed Seal skill not working for Blaze Wizard. Added a check against Seal skill on bosses. Reviewed improper usage of "random spawn point arrival" at several warps on scripts. Refactored CPQ modules fetching players from the channel storage, this should be unneeded after a recent update on the player object from MPC. Added door objects as a visible map object for the player server-side view component. Fixed a few scenarios where mobs would unexpectedly show up impervious to mob status. Fixed scenario where a player wouldn't receive disease informations from other players after changing maps. Fixed some magic-type skills (such as Magic Claw or Freeze) not displaying damage value for other players when the player is within melee-range from the mob. Added check for whether a given quest is scripted before trying to find the script. Fixed registering items onto MTS leading to loss of a few of its properties (expiration, item level, etc). Fixed "Improved MaxHP" skill gains not working for Thunderbreakers. Refactored pet autopot to also apply on HP/MP consumption by items/skills. Added portal sound effect on Mystic Doors.
This commit is contained in:
@@ -102,10 +102,12 @@ public class MapleDoor {
|
||||
|
||||
for (MapleCharacter chr : targetChars) {
|
||||
areaDoor.sendDestroyData(chr.getClient());
|
||||
chr.removeVisibleMapObject(areaDoor);
|
||||
}
|
||||
|
||||
for (MapleCharacter chr : townChars) {
|
||||
townDoor.sendDestroyData(chr.getClient());
|
||||
chr.removeVisibleMapObject(townDoor);
|
||||
}
|
||||
|
||||
owner.removePartyDoor(false);
|
||||
@@ -115,6 +117,7 @@ public class MapleDoor {
|
||||
MapleDoor door = chr.getMainTownDoor();
|
||||
if (door != null) {
|
||||
townDoor.sendSpawnData(chr.getClient());
|
||||
chr.addVisibleMapObject(townDoor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,8 @@ public class MapleDoorObject extends AbstractMapleMapObject {
|
||||
public void warp(final MapleCharacter chr) {
|
||||
MapleParty party = chr.getParty();
|
||||
if (chr.getId() == ownerId || (party != null && party.getMemberById(ownerId) != null)) {
|
||||
chr.announce(MaplePacketCreator.playPortalSound());
|
||||
|
||||
if(!inTown() && party == null) {
|
||||
chr.changeMap(to, getLinkedPortalId());
|
||||
} else {
|
||||
|
||||
@@ -2063,6 +2063,8 @@ public class MapleMap {
|
||||
|
||||
spos.y--;
|
||||
monster.setPosition(spos);
|
||||
monster.setSpawnEffect(effect);
|
||||
|
||||
spawnAndAddRangedMapObject(monster, new DelayedPacketCreation() {
|
||||
@Override
|
||||
public void sendPackets(MapleClient c) {
|
||||
@@ -2116,7 +2118,11 @@ public class MapleMap {
|
||||
spawnAndAddRangedMapObject(door, new DelayedPacketCreation() {
|
||||
@Override
|
||||
public void sendPackets(MapleClient c) {
|
||||
door.sendSpawnData(c, false);
|
||||
MapleCharacter chr = c.getPlayer();
|
||||
if (chr != null) {
|
||||
door.sendSpawnData(c, false);
|
||||
chr.addVisibleMapObject(door);
|
||||
}
|
||||
}
|
||||
}, new SpawnCondition() {
|
||||
@Override
|
||||
@@ -2465,22 +2471,23 @@ public class MapleMap {
|
||||
chr.setMapId(mapid);
|
||||
chr.updateActiveEffects();
|
||||
|
||||
MapScriptManager msm = MapScriptManager.getInstance();
|
||||
if (chrSize == 1) {
|
||||
if(!hasItemMonitor()) {
|
||||
startItemMonitor();
|
||||
aggroMonitor.startAggroCoordinator();
|
||||
}
|
||||
|
||||
if (onFirstUserEnter.length() != 0 && !chr.hasEntered(onFirstUserEnter, mapid) && MapScriptManager.getInstance().scriptExists(onFirstUserEnter, true)) {
|
||||
chr.enteredScript(onFirstUserEnter, mapid);
|
||||
MapScriptManager.getInstance().runMapScript(chr.getClient(), onFirstUserEnter, true);
|
||||
if (onFirstUserEnter.length() != 0) {
|
||||
msm.runMapScript(chr.getClient(), "onFirstUserEnter/" + onFirstUserEnter, true);
|
||||
}
|
||||
}
|
||||
if (onUserEnter.length() != 0) {
|
||||
if (onUserEnter.equals("cygnusTest") && (mapid < 913040000 || mapid > 913040006)) {
|
||||
chr.saveLocation("INTRO");
|
||||
}
|
||||
MapScriptManager.getInstance().runMapScript(chr.getClient(), onUserEnter, false);
|
||||
|
||||
msm.runMapScript(chr.getClient(), "onUserEnter/" + onUserEnter, false);
|
||||
}
|
||||
if (FieldLimit.CANNOTUSEMOUNTS.check(fieldLimit) && chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null) {
|
||||
chr.cancelEffectFromBuffStat(MapleBuffStat.MONSTER_RIDING);
|
||||
@@ -3020,8 +3027,8 @@ public class MapleMap {
|
||||
}
|
||||
}
|
||||
|
||||
private void sendObjectPlacement(MapleClient mapleClient) {
|
||||
MapleCharacter chr = mapleClient.getPlayer();
|
||||
private void sendObjectPlacement(MapleClient c) {
|
||||
MapleCharacter chr = c.getPlayer();
|
||||
Collection<MapleMapObject> objects;
|
||||
|
||||
objectRLock.lock();
|
||||
@@ -3033,7 +3040,7 @@ public class MapleMap {
|
||||
|
||||
for (MapleMapObject o : objects) {
|
||||
if (isNonRangedType(o.getType())) {
|
||||
o.sendSpawnData(mapleClient);
|
||||
o.sendSpawnData(c);
|
||||
} else if (o.getType() == MapleMapObjectType.MONSTER) {
|
||||
((MapleMonster) o).aggroUpdateController();
|
||||
} else if (o.getType() == MapleMapObjectType.SUMMON) {
|
||||
|
||||
Reference in New Issue
Block a user