Rename and clean up MapleMonster
This commit is contained in:
1 parent
38c700ca48
commit
02786eab63
42 files changed
+237
-246
No files matched your search
@@ -104,7 +104,7 @@ function friendlyKilled(mob, eim) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function allMonstersDead(eim) {
|
function allMonstersDead(eim) {
|
||||||
// When invoking unregisterMonster(MapleMonster mob) OR killed
|
// When invoking unregisterMonster(Monster mob) OR killed
|
||||||
// Happens only when size = 0
|
// Happens only when size = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,10 +63,10 @@ import server.events.Events;
|
|||||||
import server.events.RescueGaga;
|
import server.events.RescueGaga;
|
||||||
import server.events.gm.Fitness;
|
import server.events.gm.Fitness;
|
||||||
import server.events.gm.Ola;
|
import server.events.gm.Ola;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MaplePlayerNPC;
|
import server.life.MaplePlayerNPC;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.*;
|
import server.maps.*;
|
||||||
import server.maps.MapleMiniGame.MiniGameResult;
|
import server.maps.MapleMiniGame.MiniGameResult;
|
||||||
import server.minigame.MapleRockPaperScissor;
|
import server.minigame.MapleRockPaperScissor;
|
||||||
@@ -177,7 +177,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
private final List<WeakReference<MapleMap>> lastVisitedMaps = new LinkedList<>();
|
private final List<WeakReference<MapleMap>> lastVisitedMaps = new LinkedList<>();
|
||||||
private WeakReference<MapleMap> ownedMap = new WeakReference<>(null);
|
private WeakReference<MapleMap> ownedMap = new WeakReference<>(null);
|
||||||
private final Map<Short, QuestStatus> quests;
|
private final Map<Short, QuestStatus> quests;
|
||||||
private final Set<MapleMonster> controlled = new LinkedHashSet<>();
|
private final Set<Monster> controlled = new LinkedHashSet<>();
|
||||||
private final Map<Integer, String> entered = new LinkedHashMap<>();
|
private final Map<Integer, String> entered = new LinkedHashMap<>();
|
||||||
private final Set<MapleMapObject> visibleMapObjects = Collections.newSetFromMap(new ConcurrentHashMap<>());
|
private final Set<MapleMapObject> visibleMapObjects = Collections.newSetFromMap(new ConcurrentHashMap<>());
|
||||||
private final Map<Skill, SkillEntry> skills = new LinkedHashMap<>();
|
private final Map<Skill, SkillEntry> skills = new LinkedHashMap<>();
|
||||||
@@ -833,7 +833,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (MapleMapObject mo : this.getMap().getMonsters()) {
|
for (MapleMapObject mo : this.getMap().getMonsters()) {
|
||||||
MapleMonster m = (MapleMonster) mo;
|
Monster m = (Monster) mo;
|
||||||
m.aggroUpdateController();
|
m.aggroUpdateController();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1815,7 +1815,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void controlMonster(MapleMonster monster) {
|
public void controlMonster(Monster monster) {
|
||||||
if (cpnLock.tryLock()) {
|
if (cpnLock.tryLock()) {
|
||||||
try {
|
try {
|
||||||
controlled.add(monster);
|
controlled.add(monster);
|
||||||
@@ -1825,7 +1825,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopControllingMonster(MapleMonster monster) {
|
public void stopControllingMonster(Monster monster) {
|
||||||
if (cpnLock.tryLock()) {
|
if (cpnLock.tryLock()) {
|
||||||
try {
|
try {
|
||||||
controlled.remove(monster);
|
controlled.remove(monster);
|
||||||
@@ -1844,7 +1844,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<MapleMonster> getControlledMonsters() {
|
public Collection<Monster> getControlledMonsters() {
|
||||||
cpnLock.lock();
|
cpnLock.lock();
|
||||||
try {
|
try {
|
||||||
return new ArrayList<>(controlled);
|
return new ArrayList<>(controlled);
|
||||||
@@ -1854,7 +1854,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void releaseControlledMonsters() {
|
public void releaseControlledMonsters() {
|
||||||
Collection<MapleMonster> controlledMonsters;
|
Collection<Monster> controlledMonsters;
|
||||||
|
|
||||||
cpnLock.lock();
|
cpnLock.lock();
|
||||||
try {
|
try {
|
||||||
@@ -1864,7 +1864,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
cpnLock.unlock();
|
cpnLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleMonster monster : controlledMonsters) {
|
for (Monster monster : controlledMonsters) {
|
||||||
monster.aggroRedirectController();
|
monster.aggroRedirectController();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9613,7 +9613,7 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showUnderleveledInfo(MapleMonster mob) {
|
public void showUnderleveledInfo(Monster mob) {
|
||||||
long curTime = Server.getInstance().getCurrentTime();
|
long curTime = Server.getInstance().getCurrentTime();
|
||||||
if (nextWarningTime < curTime) {
|
if (nextWarningTime < curTime) {
|
||||||
nextWarningTime = curTime + (60 * 1000); // show underlevel info again after 1 minute
|
nextWarningTime = curTime + (60 * 1000); // show underlevel info again after 1 minute
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ import scripting.quest.QuestActionManager;
|
|||||||
import scripting.quest.QuestScriptManager;
|
import scripting.quest.QuestScriptManager;
|
||||||
import server.ThreadManager;
|
import server.ThreadManager;
|
||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.FieldLimit;
|
import server.maps.FieldLimit;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleMiniDungeonInfo;
|
import server.maps.MapleMiniDungeonInfo;
|
||||||
@@ -1416,7 +1416,7 @@ public class Client extends ChannelInboundHandlerAdapter {
|
|||||||
sendPacket(PacketCreator.serverMessage(this.getChannelServer().getServerMessage()));
|
sendPacket(PacketCreator.serverMessage(this.getChannelServer().getServerMessage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void announceBossHpBar(MapleMonster mm, final int mobHash, Packet packet) {
|
public synchronized void announceBossHpBar(Monster mm, final int mobHash, Packet packet) {
|
||||||
long timeNow = System.currentTimeMillis();
|
long timeNow = System.currentTimeMillis();
|
||||||
int targetHash = player.getTargetHpBarHash();
|
int targetHash = player.getTargetHpBarHash();
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ package client.command.commands.gm1;
|
|||||||
import client.Character;
|
import client.Character;
|
||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
|
|
||||||
public class BossHpCommand extends Command {
|
public class BossHpCommand extends Command {
|
||||||
{
|
{
|
||||||
@@ -36,7 +36,7 @@ public class BossHpCommand extends Command {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(Client c, String[] params) {
|
public void execute(Client c, String[] params) {
|
||||||
Character player = c.getPlayer();
|
Character player = c.getPlayer();
|
||||||
for(MapleMonster monster : player.getMap().getAllMonsters()) {
|
for(Monster monster : player.getMap().getAllMonsters()) {
|
||||||
if(monster != null && monster.isBoss() && monster.getHp() > 0) {
|
if(monster != null && monster.isBoss() && monster.getHp() > 0) {
|
||||||
long percent = monster.getHp() * 100L / monster.getMaxHp();
|
long percent = monster.getHp() * 100L / monster.getMaxHp();
|
||||||
String bar = "[";
|
String bar = "[";
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ package client.command.commands.gm1;
|
|||||||
import client.Character;
|
import client.Character;
|
||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
|
|
||||||
public class MobHpCommand extends Command {
|
public class MobHpCommand extends Command {
|
||||||
{
|
{
|
||||||
@@ -36,7 +36,7 @@ public class MobHpCommand extends Command {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(Client c, String[] params) {
|
public void execute(Client c, String[] params) {
|
||||||
Character player = c.getPlayer();
|
Character player = c.getPlayer();
|
||||||
for(MapleMonster monster : player.getMap().getAllMonsters()) {
|
for(Monster monster : player.getMap().getAllMonsters()) {
|
||||||
if (monster != null && monster.getHp() > 0) {
|
if (monster != null && monster.getHp() > 0) {
|
||||||
player.yellowMessage(monster.getName() + " (" + monster.getId() + ") has " + monster.getHp() + " / " + monster.getMaxHp() + " HP.");
|
player.yellowMessage(monster.getName() + " (" + monster.getId() + ") has " + monster.getHp() + " / " + monster.getMaxHp() + " HP.");
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ package client.command.commands.gm2;
|
|||||||
import client.Character;
|
import client.Character;
|
||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleNPC;
|
import server.life.MapleNPC;
|
||||||
import server.life.MaplePlayerNPC;
|
import server.life.MaplePlayerNPC;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -45,7 +45,7 @@ public class WhereaMiCommand extends Command {
|
|||||||
HashSet<Character> chars = new HashSet<>();
|
HashSet<Character> chars = new HashSet<>();
|
||||||
HashSet<MapleNPC> npcs = new HashSet<>();
|
HashSet<MapleNPC> npcs = new HashSet<>();
|
||||||
HashSet<MaplePlayerNPC> playernpcs = new HashSet<>();
|
HashSet<MaplePlayerNPC> playernpcs = new HashSet<>();
|
||||||
HashSet<MapleMonster> mobs = new HashSet<>();
|
HashSet<Monster> mobs = new HashSet<>();
|
||||||
|
|
||||||
for (MapleMapObject mmo : player.getMap().getMapObjects()) {
|
for (MapleMapObject mmo : player.getMap().getMapObjects()) {
|
||||||
if (mmo instanceof MapleNPC) {
|
if (mmo instanceof MapleNPC) {
|
||||||
@@ -54,8 +54,8 @@ public class WhereaMiCommand extends Command {
|
|||||||
} else if (mmo instanceof Character) {
|
} else if (mmo instanceof Character) {
|
||||||
Character mc = (Character) mmo;
|
Character mc = (Character) mmo;
|
||||||
chars.add(mc);
|
chars.add(mc);
|
||||||
} else if (mmo instanceof MapleMonster) {
|
} else if (mmo instanceof Monster) {
|
||||||
MapleMonster mob = (MapleMonster) mmo;
|
Monster mob = (Monster) mmo;
|
||||||
if (mob.isAlive()) {
|
if (mob.isAlive()) {
|
||||||
mobs.add(mob);
|
mobs.add(mob);
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ public class WhereaMiCommand extends Command {
|
|||||||
|
|
||||||
if (!mobs.isEmpty()) {
|
if (!mobs.isEmpty()) {
|
||||||
player.yellowMessage("Monsters on this map:");
|
player.yellowMessage("Monsters on this map:");
|
||||||
for (MapleMonster mob : mobs) {
|
for (Monster mob : mobs) {
|
||||||
if (mob.isAlive()) {
|
if (mob.isAlive()) {
|
||||||
player.dropMessage(5, ">> " + mob.getName() + " - " + mob.getId() + " - Oid: " + mob.getObjectId());
|
player.dropMessage(5, ">> " + mob.getName() + " - " + mob.getId() + " - Oid: " + mob.getObjectId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ package client.command.commands.gm3;
|
|||||||
import client.Character;
|
import client.Character;
|
||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
import server.maps.MapleMapObjectType;
|
import server.maps.MapleMapObjectType;
|
||||||
@@ -46,7 +46,7 @@ public class KillAllCommand extends Command {
|
|||||||
List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
List<MapleMapObject> monsters = map.getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (MapleMapObject monstermo : monsters) {
|
for (MapleMapObject monstermo : monsters) {
|
||||||
MapleMonster monster = (MapleMonster) monstermo;
|
Monster monster = (Monster) monstermo;
|
||||||
if (!monster.getStats().isFriendly() && !(monster.getId() >= 8810010 && monster.getId() <= 8810018)) {
|
if (!monster.getStats().isFriendly() && !(monster.getId() >= 8810010 && monster.getId() <= 8810018)) {
|
||||||
map.damageMonster(player, monster, Integer.MAX_VALUE);
|
map.damageMonster(player, monster, Integer.MAX_VALUE);
|
||||||
count++;
|
count++;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import client.Character;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
|
|
||||||
public class SpawnCommand extends Command {
|
public class SpawnCommand extends Command {
|
||||||
{
|
{
|
||||||
@@ -42,7 +42,7 @@ public class SpawnCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleMonster monster = LifeFactory.getMonster(Integer.parseInt(params[0]));
|
Monster monster = LifeFactory.getMonster(Integer.parseInt(params[0]));
|
||||||
if (monster == null) {
|
if (monster == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import client.Character;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
|
|
||||||
public class CakeCommand extends Command {
|
public class CakeCommand extends Command {
|
||||||
{
|
{
|
||||||
@@ -37,7 +37,7 @@ public class CakeCommand extends Command {
|
|||||||
@Override
|
@Override
|
||||||
public void execute(Client c, String[] params) {
|
public void execute(Client c, String[] params) {
|
||||||
Character player = c.getPlayer();
|
Character player = c.getPlayer();
|
||||||
MapleMonster monster = LifeFactory.getMonster(9400606);
|
Monster monster = LifeFactory.getMonster(9400606);
|
||||||
if (params.length == 1) {
|
if (params.length == 1) {
|
||||||
double mobHp = Double.parseDouble(params[0]);
|
double mobHp = Double.parseDouble(params[0]);
|
||||||
int newHp = (mobHp <= 0) ? Integer.MAX_VALUE : ((mobHp > Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) mobHp);
|
int newHp = (mobHp <= 0) ? Integer.MAX_VALUE : ((mobHp > Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) mobHp);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import client.Client;
|
|||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import net.server.channel.Channel;
|
import net.server.channel.Channel;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.DatabaseConnection;
|
import tools.DatabaseConnection;
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ public class PmobCommand extends Command {
|
|||||||
int ypos = checkpos.y;
|
int ypos = checkpos.y;
|
||||||
int fh = player.getMap().getFootholds().findBelow(checkpos).getId();
|
int fh = player.getMap().getFootholds().findBelow(checkpos).getId();
|
||||||
|
|
||||||
MapleMonster mob = LifeFactory.getMonster(mobId);
|
Monster mob = LifeFactory.getMonster(mobId);
|
||||||
if (mob != null && !mob.getName().equals("MISSINGNO")) {
|
if (mob != null && !mob.getName().equals("MISSINGNO")) {
|
||||||
mob.setPosition(checkpos);
|
mob.setPosition(checkpos);
|
||||||
mob.setCy(ypos);
|
mob.setCy(ypos);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import client.Client;
|
|||||||
import client.command.Command;
|
import client.command.Command;
|
||||||
import net.server.Server;
|
import net.server.Server;
|
||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.life.SpawnPoint;
|
import server.life.SpawnPoint;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
import server.maps.MapleMapObjectType;
|
import server.maps.MapleMapObjectType;
|
||||||
@@ -69,7 +69,7 @@ public class DebugCommand extends Command {
|
|||||||
case "monster":
|
case "monster":
|
||||||
List<MapleMapObject> monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
List<MapleMapObject> monsters = player.getMap().getMapObjectsInRange(player.getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
||||||
for (MapleMapObject monstermo : monsters) {
|
for (MapleMapObject monstermo : monsters) {
|
||||||
MapleMonster monster = (MapleMonster) monstermo;
|
Monster monster = (Monster) monstermo;
|
||||||
Character controller = monster.getController();
|
Character controller = monster.getController();
|
||||||
player.message("Monster ID: " + monster.getId() + " Aggro target: " + ((controller != null) ? controller.getName() + " Has aggro: " + monster.isControllerHasAggro() + " Knowns aggro: " + monster.isControllerKnowsAboutAggro() : "<none>"));
|
player.message("Monster ID: " + monster.getId() + " Aggro target: " + ((controller != null) ? controller.getName() + " Has aggro: " + monster.isControllerHasAggro() + " Knowns aggro: " + monster.isControllerKnowsAboutAggro() : "<none>"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Integer oned : attack.allDamage.keySet()) {
|
for (Integer oned : attack.allDamage.keySet()) {
|
||||||
final MapleMonster monster = map.getMonsterByOid(oned);
|
final Monster monster = map.getMonsterByOid(oned);
|
||||||
if (monster != null) {
|
if (monster != null) {
|
||||||
double distance = player.getPosition().distanceSq(monster.getPosition());
|
double distance = player.getPosition().distanceSq(monster.getPosition());
|
||||||
double distanceToDetect = 200000.0;
|
double distanceToDetect = 200000.0;
|
||||||
@@ -508,7 +508,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final MapleMonster monster, final int damage, int skillid, int fixedTime) {
|
private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final Monster monster, final int damage, int skillid, int fixedTime) {
|
||||||
int animationTime;
|
int animationTime;
|
||||||
|
|
||||||
if(fixedTime == 0) animationTime = SkillFactory.getSkill(skillid).getAnimationTime();
|
if(fixedTime == 0) animationTime = SkillFactory.getSkill(skillid).getAnimationTime();
|
||||||
@@ -743,7 +743,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
|
|||||||
int oid = p.readInt();
|
int oid = p.readInt();
|
||||||
p.skip(14);
|
p.skip(14);
|
||||||
List<Integer> allDamageNumbers = new ArrayList<>();
|
List<Integer> allDamageNumbers = new ArrayList<>();
|
||||||
MapleMonster monster = chr.getMap().getMonsterByOid(oid);
|
Monster monster = chr.getMap().getMonsterByOid(oid);
|
||||||
|
|
||||||
if(chr.getBuffEffect(BuffStat.WK_CHARGE) != null) {
|
if(chr.getBuffEffect(BuffStat.WK_CHARGE) != null) {
|
||||||
// Charge, so now we need to check elemental effectiveness
|
// Charge, so now we need to check elemental effectiveness
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import net.AbstractPacketHandler;
|
|||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.MapleItemInformationProvider;
|
import server.MapleItemInformationProvider;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
import server.maps.MapleMapObjectType;
|
import server.maps.MapleMapObjectType;
|
||||||
import server.quest.MapleQuest;
|
import server.quest.MapleQuest;
|
||||||
@@ -128,7 +128,7 @@ public final class AdminCommandHandler extends AbstractPacketHandler {
|
|||||||
int amount = p.readInt();
|
int amount = p.readInt();
|
||||||
List<MapleMapObject> monsterx = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
List<MapleMapObject> monsterx = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
||||||
for (int x = 0; x < amount; x++) {
|
for (int x = 0; x < amount; x++) {
|
||||||
MapleMonster monster = (MapleMonster) monsterx.get(x);
|
Monster monster = (Monster) monsterx.get(x);
|
||||||
if (monster.getId() == mobToKill) {
|
if (monster.getId() == mobToKill) {
|
||||||
c.getPlayer().getMap().killMonster(monster, c.getPlayer(), true);
|
c.getPlayer().getMap().killMonster(monster, c.getPlayer(), true);
|
||||||
}
|
}
|
||||||
@@ -149,7 +149,7 @@ public final class AdminCommandHandler extends AbstractPacketHandler {
|
|||||||
c.getPlayer().dropMessage("Monsters HP");
|
c.getPlayer().dropMessage("Monsters HP");
|
||||||
List<MapleMapObject> monsters = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
List<MapleMapObject> monsters = c.getPlayer().getMap().getMapObjectsInRange(c.getPlayer().getPosition(), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER));
|
||||||
for (MapleMapObject mobs : monsters) {
|
for (MapleMapObject mobs : monsters) {
|
||||||
MapleMonster monster = (MapleMonster) mobs;
|
Monster monster = (Monster) mobs;
|
||||||
if (monster.getId() == mobHp) {
|
if (monster.getId() == mobHp) {
|
||||||
c.getPlayer().dropMessage(monster.getName() + ": " + monster.getHp());
|
c.getPlayer().dropMessage(monster.getName() + ": " + monster.getHp());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import client.Character;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
|
|
||||||
public final class AutoAggroHandler extends AbstractPacketHandler {
|
public final class AutoAggroHandler extends AbstractPacketHandler {
|
||||||
@@ -38,7 +38,7 @@ public final class AutoAggroHandler extends AbstractPacketHandler {
|
|||||||
MapleMap map = player.getMap();
|
MapleMap map = player.getMap();
|
||||||
int oid = p.readInt();
|
int oid = p.readInt();
|
||||||
|
|
||||||
MapleMonster monster = map.getMonsterByOid(oid);
|
Monster monster = map.getMonsterByOid(oid);
|
||||||
if (monster != null) {
|
if (monster != null) {
|
||||||
monster.aggroAutoAggroUpdate(player);
|
monster.aggroAutoAggroUpdate(player);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ import client.Client;
|
|||||||
import constants.game.GameConstants;
|
import constants.game.GameConstants;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleMonsterInformationProvider;
|
import server.life.MapleMonsterInformationProvider;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.FilePrinter;
|
import tools.FilePrinter;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
@@ -45,7 +45,7 @@ public class FieldDamageMobHandler extends AbstractPacketHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleMonster mob = map.getMonsterByOid(mobOid);
|
Monster mob = map.getMonsterByOid(mobOid);
|
||||||
if (mob != null) {
|
if (mob != null) {
|
||||||
if (dmg < 0 || dmg > GameConstants.MAX_FIELD_MOB_DAMAGE) {
|
if (dmg < 0 || dmg > GameConstants.MAX_FIELD_MOB_DAMAGE) {
|
||||||
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use an obstacle on mapid " + map.getId() + " to attack " + MapleMonsterInformationProvider.getInstance().getMobNameFromId(mob.getId()) + " with damage " + dmg);
|
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use an obstacle on mapid " + map.getId() + " to attack " + MapleMonsterInformationProvider.getInstance().getMobNameFromId(mob.getId()) + " with damage " + dmg);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import client.Client;
|
|||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.LifeFactory.BanishInfo;
|
import server.life.LifeFactory.BanishInfo;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
|
|
||||||
public final class MobBanishPlayerHandler extends AbstractPacketHandler {
|
public final class MobBanishPlayerHandler extends AbstractPacketHandler {
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ public final class MobBanishPlayerHandler extends AbstractPacketHandler {
|
|||||||
int mobid = p.readInt(); // mob banish handling detected thanks to MedicOP
|
int mobid = p.readInt(); // mob banish handling detected thanks to MedicOP
|
||||||
|
|
||||||
Character chr = c.getPlayer();
|
Character chr = c.getPlayer();
|
||||||
MapleMonster mob = chr.getMap().getMonsterById(mobid);
|
Monster mob = chr.getMap().getMonsterById(mobid);
|
||||||
|
|
||||||
if (mob != null) {
|
if (mob != null) {
|
||||||
BanishInfo banishInfo = mob.getBanish();
|
BanishInfo banishInfo = mob.getBanish();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import client.Client;
|
|||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import scripting.event.EventInstanceManager;
|
import scripting.event.EventInstanceManager;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
import tools.Randomizer;
|
import tools.Randomizer;
|
||||||
@@ -43,7 +43,7 @@ public final class MobDamageMobFriendlyHandler extends AbstractPacketHandler {
|
|||||||
int damaged = p.readInt();
|
int damaged = p.readInt();
|
||||||
|
|
||||||
MapleMap map = c.getPlayer().getMap();
|
MapleMap map = c.getPlayer().getMap();
|
||||||
MapleMonster monster = map.getMonsterByOid(damaged);
|
Monster monster = map.getMonsterByOid(damaged);
|
||||||
|
|
||||||
if (monster == null || map.getMonsterByOid(attacker) == null) {
|
if (monster == null || map.getMonsterByOid(attacker) == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ import client.status.MonsterStatus;
|
|||||||
import client.status.MonsterStatusEffect;
|
import client.status.MonsterStatusEffect;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleMonsterInformationProvider;
|
import server.life.MapleMonsterInformationProvider;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.FilePrinter;
|
import tools.FilePrinter;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
@@ -52,8 +52,8 @@ public final class MobDamageMobHandler extends AbstractPacketHandler {
|
|||||||
Character chr = c.getPlayer();
|
Character chr = c.getPlayer();
|
||||||
|
|
||||||
MapleMap map = chr.getMap();
|
MapleMap map = chr.getMap();
|
||||||
MapleMonster attacker = map.getMonsterByOid(from);
|
Monster attacker = map.getMonsterByOid(from);
|
||||||
MapleMonster damaged = map.getMonsterByOid(to);
|
Monster damaged = map.getMonsterByOid(to);
|
||||||
|
|
||||||
if (attacker != null && damaged != null) {
|
if (attacker != null && damaged != null) {
|
||||||
int maxDmg = calcMaxDamage(attacker, damaged, magic); // thanks Darter (YungMoozi) for reporting unchecked dmg
|
int maxDmg = calcMaxDamage(attacker, damaged, magic); // thanks Darter (YungMoozi) for reporting unchecked dmg
|
||||||
@@ -70,7 +70,7 @@ public final class MobDamageMobHandler extends AbstractPacketHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int calcMaxDamage(MapleMonster attacker, MapleMonster damaged, boolean magic) {
|
private static int calcMaxDamage(Monster attacker, Monster damaged, boolean magic) {
|
||||||
int attackerAtk, damagedDef, attackerLevel = attacker.getLevel();
|
int attackerAtk, damagedDef, attackerLevel = attacker.getLevel();
|
||||||
double maxDamage;
|
double maxDamage;
|
||||||
if (magic) {
|
if (magic) {
|
||||||
@@ -94,7 +94,7 @@ public final class MobDamageMobHandler extends AbstractPacketHandler {
|
|||||||
return (int) maxDamage;
|
return (int) maxDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int calcModifier(MapleMonster monster, MonsterStatus buff, MonsterStatus nerf) {
|
private static int calcModifier(Monster monster, MonsterStatus buff, MonsterStatus nerf) {
|
||||||
int atkModifier;
|
int atkModifier;
|
||||||
final Map<MonsterStatus, MonsterStatusEffect> monsterStati = monster.getStati();
|
final Map<MonsterStatus, MonsterStatusEffect> monsterStati = monster.getStati();
|
||||||
|
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ package net.server.channel.handlers;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
|
|
||||||
public final class MonsterBombHandler extends AbstractPacketHandler {
|
public final class MonsterBombHandler extends AbstractPacketHandler {
|
||||||
@Override
|
@Override
|
||||||
public final void handlePacket(InPacket p, Client c) {
|
public final void handlePacket(InPacket p, Client c) {
|
||||||
int oid = p.readInt();
|
int oid = p.readInt();
|
||||||
MapleMonster monster = c.getPlayer().getMap().getMonsterByOid(oid);
|
Monster monster = c.getPlayer().getMap().getMonsterByOid(oid);
|
||||||
if (!c.getPlayer().isAlive() || monster == null) {
|
if (!c.getPlayer().isAlive() || monster == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import net.packet.InPacket;
|
|||||||
import net.server.world.Party;
|
import net.server.world.Party;
|
||||||
import net.server.world.PartyCharacter;
|
import net.server.world.PartyCharacter;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.partyquest.MapleCarnivalFactory;
|
import server.partyquest.MapleCarnivalFactory;
|
||||||
import server.partyquest.MapleCarnivalFactory.MCSkill;
|
import server.partyquest.MapleCarnivalFactory.MCSkill;
|
||||||
import server.partyquest.MonsterCarnival;
|
import server.partyquest.MonsterCarnival;
|
||||||
@@ -62,7 +62,7 @@ public final class MonsterCarnivalHandler extends AbstractPacketHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final MapleMonster mob = LifeFactory.getMonster(mobs.get(num).left);
|
final Monster mob = LifeFactory.getMonster(mobs.get(num).left);
|
||||||
MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival();
|
MonsterCarnival mcpq = c.getPlayer().getMonsterCarnival();
|
||||||
if (mcpq != null) {
|
if (mcpq != null) {
|
||||||
if (!mcpq.canSummonR() && c.getPlayer().getTeam() == 0 || !mcpq.canSummonB() && c.getPlayer().getTeam() == 1) {
|
if (!mcpq.canSummonR() && c.getPlayer().getTeam() == 0 || !mcpq.canSummonB() && c.getPlayer().getTeam() == 1) {
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ import client.Character;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import config.YamlConfig;
|
import config.YamlConfig;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleMonsterInformationProvider;
|
import server.life.MapleMonsterInformationProvider;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
import server.maps.MapleMapObjectType;
|
import server.maps.MapleMapObjectType;
|
||||||
@@ -64,7 +64,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleMonster monster = (MapleMonster) mmo;
|
Monster monster = (Monster) mmo;
|
||||||
List<Character> banishPlayers = null;
|
List<Character> banishPlayers = null;
|
||||||
|
|
||||||
byte pNibbles = p.readByte();
|
byte pNibbles = p.readByte();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import client.Character;
|
|||||||
import client.Client;
|
import client.Client;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
import tools.Pair;
|
import tools.Pair;
|
||||||
@@ -54,7 +54,7 @@ public final class PlayerMapTransitionHandler extends AbstractPacketHandler {
|
|||||||
|
|
||||||
if (!chr.isHidden()) { // thanks Lame (Conrad) for noticing hidden characters controlling mobs
|
if (!chr.isHidden()) { // thanks Lame (Conrad) for noticing hidden characters controlling mobs
|
||||||
for (MapleMapObject mo : chr.getMap().getMonsters()) { // thanks BHB, IxianMace, Jefe for noticing several issues regarding mob statuses (such as freeze)
|
for (MapleMapObject mo : chr.getMap().getMonsters()) { // thanks BHB, IxianMace, Jefe for noticing several issues regarding mob statuses (such as freeze)
|
||||||
MapleMonster m = (MapleMonster) mo;
|
Monster m = (Monster) mo;
|
||||||
if (m.getSpawnEffect() == 0 || m.getHp() < m.getMaxHp()) { // avoid effect-spawning mobs
|
if (m.getSpawnEffect() == 0 || m.getHp() < m.getMaxHp()) { // avoid effect-spawning mobs
|
||||||
if (m.getController() == chr) {
|
if (m.getController() == chr) {
|
||||||
c.sendPacket(PacketCreator.stopControllingMonster(m.getObjectId()));
|
c.sendPacket(PacketCreator.stopControllingMonster(m.getObjectId()));
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import net.AbstractPacketHandler;
|
|||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import net.server.Server;
|
import net.server.Server;
|
||||||
import server.MapleStatEffect;
|
import server.MapleStatEffect;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -89,7 +89,7 @@ public final class SpecialMoveHandler extends AbstractPacketHandler {
|
|||||||
int mobOid = p.readInt();
|
int mobOid = p.readInt();
|
||||||
byte success = p.readByte();
|
byte success = p.readByte();
|
||||||
chr.getMap().broadcastMessage(chr, PacketCreator.catchMonster(mobOid, success), false);
|
chr.getMap().broadcastMessage(chr, PacketCreator.catchMonster(mobOid, success), false);
|
||||||
MapleMonster monster = chr.getMap().getMonsterByOid(mobOid);
|
Monster monster = chr.getMap().getMonsterByOid(mobOid);
|
||||||
if (monster != null) {
|
if (monster != null) {
|
||||||
if (!monster.isBoss()) {
|
if (!monster.isBoss()) {
|
||||||
monster.aggroClearDamages();
|
monster.aggroClearDamages();
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ import constants.skills.Outlaw;
|
|||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import server.MapleItemInformationProvider;
|
import server.MapleItemInformationProvider;
|
||||||
import server.MapleStatEffect;
|
import server.MapleStatEffect;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleMonsterInformationProvider;
|
import server.life.MapleMonsterInformationProvider;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleSummon;
|
import server.maps.MapleSummon;
|
||||||
import tools.FilePrinter;
|
import tools.FilePrinter;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
@@ -104,7 +104,7 @@ public final class SummonDamageHandler extends AbstractDealDamageHandler {
|
|||||||
int maxDmg = calcMaxDamage(summonEffect, player, magic); // thanks Darter (YungMoozi) for reporting unchecked max dmg
|
int maxDmg = calcMaxDamage(summonEffect, player, magic); // thanks Darter (YungMoozi) for reporting unchecked max dmg
|
||||||
for (SummonAttackEntry attackEntry : allDamage) {
|
for (SummonAttackEntry attackEntry : allDamage) {
|
||||||
int damage = attackEntry.getDamage();
|
int damage = attackEntry.getDamage();
|
||||||
MapleMonster target = player.getMap().getMonsterByOid(attackEntry.getMonsterOid());
|
Monster target = player.getMap().getMonsterByOid(attackEntry.getMonsterOid());
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
if (damage > maxDmg) {
|
if (damage > maxDmg) {
|
||||||
AutobanFactory.DAMAGE_HACK.alert(c.getPlayer(), "Possible packet editing summon damage exploit.");
|
AutobanFactory.DAMAGE_HACK.alert(c.getPlayer(), "Possible packet editing summon damage exploit.");
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler {
|
|||||||
int pos_x = 0, pos_y = 0, fake = 0;
|
int pos_x = 0, pos_y = 0, fake = 0;
|
||||||
boolean is_pgmr = false, is_pg = true, is_deadly = false;
|
boolean is_pgmr = false, is_pg = true, is_deadly = false;
|
||||||
int mpattack = 0;
|
int mpattack = 0;
|
||||||
MapleMonster attacker = null;
|
Monster attacker = null;
|
||||||
final MapleMap map = chr.getMap();
|
final MapleMap map = chr.getMap();
|
||||||
if (damagefrom != -3 && damagefrom != -4) {
|
if (damagefrom != -3 && damagefrom != -4) {
|
||||||
monsteridfrom = p.readInt();
|
monsteridfrom = p.readInt();
|
||||||
@@ -72,8 +72,8 @@ public final class TakeDamageHandler extends AbstractPacketHandler {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
MapleMapObject mmo = map.getMapObject(oid);
|
MapleMapObject mmo = map.getMapObject(oid);
|
||||||
if(mmo instanceof MapleMonster) {
|
if(mmo instanceof Monster) {
|
||||||
attacker = (MapleMonster) mmo;
|
attacker = (Monster) mmo;
|
||||||
if(attacker.getId() != monsteridfrom) {
|
if(attacker.getId() != monsteridfrom) {
|
||||||
attacker = null;
|
attacker = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import net.AbstractPacketHandler;
|
|||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import net.server.Server;
|
import net.server.Server;
|
||||||
import server.MapleItemInformationProvider;
|
import server.MapleItemInformationProvider;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +49,7 @@ public final class UseCatchItemHandler extends AbstractPacketHandler {
|
|||||||
int itemId = p.readInt();
|
int itemId = p.readInt();
|
||||||
int monsterid = p.readInt();
|
int monsterid = p.readInt();
|
||||||
|
|
||||||
MapleMonster mob = chr.getMap().getMonsterByOid(monsterid);
|
Monster mob = chr.getMap().getMonsterByOid(monsterid);
|
||||||
if (chr.getInventory(ItemConstants.getInventoryType(itemId)).countById(itemId) <= 0) {
|
if (chr.getInventory(ItemConstants.getInventoryType(itemId)).countById(itemId) <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import net.server.audit.locks.MonitoredLockType;
|
|||||||
import net.server.audit.locks.MonitoredReentrantLock;
|
import net.server.audit.locks.MonitoredReentrantLock;
|
||||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.Pair;
|
import tools.Pair;
|
||||||
|
|
||||||
@@ -46,8 +46,8 @@ public class MonsterAggroCoordinator {
|
|||||||
|
|
||||||
private ScheduledFuture<?> aggroMonitor = null;
|
private ScheduledFuture<?> aggroMonitor = null;
|
||||||
|
|
||||||
private final Map<MapleMonster, Map<Integer, PlayerAggroEntry>> mobAggroEntries = new HashMap<>();
|
private final Map<Monster, Map<Integer, PlayerAggroEntry>> mobAggroEntries = new HashMap<>();
|
||||||
private final Map<MapleMonster, List<PlayerAggroEntry>> mobSortedAggros = new HashMap<>();
|
private final Map<Monster, List<PlayerAggroEntry>> mobSortedAggros = new HashMap<>();
|
||||||
|
|
||||||
private final Set<Integer> mapPuppetEntries = new HashSet<>();
|
private final Set<Integer> mapPuppetEntries = new HashSet<>();
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ public class MonsterAggroCoordinator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addAggroDamage(MapleMonster mob, int cid, int damage) { // assumption: should not trigger after dispose()
|
public void addAggroDamage(Monster mob, int cid, int damage) { // assumption: should not trigger after dispose()
|
||||||
if (!mob.isAlive()) {
|
if (!mob.isAlive()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -196,17 +196,17 @@ public class MonsterAggroCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void runAggroUpdate(int deltaTime) {
|
private void runAggroUpdate(int deltaTime) {
|
||||||
List<Pair<MapleMonster, Map<Integer, PlayerAggroEntry>>> aggroMobs = new LinkedList<>();
|
List<Pair<Monster, Map<Integer, PlayerAggroEntry>>> aggroMobs = new LinkedList<>();
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
for (Entry<MapleMonster, Map<Integer, PlayerAggroEntry>> e : mobAggroEntries.entrySet()) {
|
for (Entry<Monster, Map<Integer, PlayerAggroEntry>> e : mobAggroEntries.entrySet()) {
|
||||||
aggroMobs.add(new Pair<>(e.getKey(), e.getValue()));
|
aggroMobs.add(new Pair<>(e.getKey(), e.getValue()));
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Pair<MapleMonster, Map<Integer, PlayerAggroEntry>> am : aggroMobs) {
|
for (Pair<Monster, Map<Integer, PlayerAggroEntry>> am : aggroMobs) {
|
||||||
Map<Integer, PlayerAggroEntry> mobAggro = am.getRight();
|
Map<Integer, PlayerAggroEntry> mobAggro = am.getRight();
|
||||||
List<PlayerAggroEntry> sortedAggro = mobSortedAggros.get(am.getLeft());
|
List<PlayerAggroEntry> sortedAggro = mobSortedAggros.get(am.getLeft());
|
||||||
|
|
||||||
@@ -289,7 +289,7 @@ public class MonsterAggroCoordinator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLeadingCharacterAggro(MapleMonster mob, Character player) {
|
public boolean isLeadingCharacterAggro(Monster mob, Character player) {
|
||||||
if (mob.isLeadingPuppetInVicinity()) {
|
if (mob.isLeadingPuppetInVicinity()) {
|
||||||
return false;
|
return false;
|
||||||
} else if (mob.isCharacterPuppetInVicinity(player)) {
|
} else if (mob.isCharacterPuppetInVicinity(player)) {
|
||||||
@@ -337,7 +337,7 @@ public class MonsterAggroCoordinator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeAggroEntries(MapleMonster mob) {
|
public void removeAggroEntries(Monster mob) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
mobAggroEntries.remove(mob);
|
mobAggroEntries.remove(mob);
|
||||||
|
|||||||
@@ -961,12 +961,12 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonster(int id, int x, int y) {
|
public void spawnMonster(int id, int x, int y) {
|
||||||
MapleMonster monster = LifeFactory.getMonster(id);
|
Monster monster = LifeFactory.getMonster(id);
|
||||||
monster.setPosition(new Point(x, y));
|
monster.setPosition(new Point(x, y));
|
||||||
getPlayer().getMap().spawnMonster(monster);
|
getPlayer().getMap().spawnMonster(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMonsterLifeFactory(int mid) {
|
public Monster getMonsterLifeFactory(int mid) {
|
||||||
return LifeFactory.getMonster(mid);
|
return LifeFactory.getMonster(mid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ import server.ThreadManager;
|
|||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.expeditions.Expedition;
|
import server.expeditions.Expedition;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleNPC;
|
import server.life.MapleNPC;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleMapManager;
|
import server.maps.MapleMapManager;
|
||||||
import server.maps.MaplePortal;
|
import server.maps.MaplePortal;
|
||||||
@@ -67,7 +67,7 @@ import java.util.logging.Logger;
|
|||||||
public class EventInstanceManager {
|
public class EventInstanceManager {
|
||||||
private Map<Integer, Character> chars = new HashMap<>();
|
private Map<Integer, Character> chars = new HashMap<>();
|
||||||
private int leaderId = -1;
|
private int leaderId = -1;
|
||||||
private List<MapleMonster> mobs = new LinkedList<>();
|
private List<Monster> mobs = new LinkedList<>();
|
||||||
private Map<Character, Integer> killCount = new HashMap<>();
|
private Map<Character, Integer> killCount = new HashMap<>();
|
||||||
private EventManager em;
|
private EventManager em;
|
||||||
private EventScriptScheduler ess;
|
private EventScriptScheduler ess;
|
||||||
@@ -431,7 +431,7 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerMonster(MapleMonster mob) {
|
public void registerMonster(Monster mob) {
|
||||||
if (!mob.getStats().isFriendly()) { //We cannot register moon bunny
|
if (!mob.getStats().isFriendly()) { //We cannot register moon bunny
|
||||||
mobs.add(mob);
|
mobs.add(mob);
|
||||||
}
|
}
|
||||||
@@ -467,7 +467,7 @@ public class EventInstanceManager {
|
|||||||
leaderId = ldr.getId();
|
leaderId = ldr.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void monsterKilled(final MapleMonster mob, final boolean hasKiller) {
|
public void monsterKilled(final Monster mob, final boolean hasKiller) {
|
||||||
int scriptResult = 0;
|
int scriptResult = 0;
|
||||||
|
|
||||||
sL.lock();
|
sL.lock();
|
||||||
@@ -502,19 +502,19 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void friendlyKilled(final MapleMonster mob, final boolean hasKiller) {
|
public void friendlyKilled(final Monster mob, final boolean hasKiller) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyKilled", mob, EventInstanceManager.this, hasKiller);
|
invokeScriptFunction("friendlyKilled", mob, EventInstanceManager.this, hasKiller);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} //optional
|
} catch (ScriptException | NoSuchMethodException ex) {} //optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void friendlyDamaged(final MapleMonster mob) {
|
public void friendlyDamaged(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyDamaged", EventInstanceManager.this, mob);
|
invokeScriptFunction("friendlyDamaged", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void friendlyItemDrop(final MapleMonster mob) {
|
public void friendlyItemDrop(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyItemDrop", EventInstanceManager.this, mob);
|
invokeScriptFunction("friendlyItemDrop", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
||||||
@@ -528,7 +528,7 @@ public class EventInstanceManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reviveMonster(final MapleMonster mob) {
|
public void reviveMonster(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("monsterRevive", EventInstanceManager.this, mob);
|
invokeScriptFunction("monsterRevive", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
||||||
@@ -555,7 +555,7 @@ public class EventInstanceManager {
|
|||||||
EventRecallCoordinator.getInstance().storeEventInstance(chr.getId(), this);
|
EventRecallCoordinator.getInstance().storeEventInstance(chr.getId(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void monsterKilled(Character chr, final MapleMonster mob) {
|
public void monsterKilled(Character chr, final Monster mob) {
|
||||||
try {
|
try {
|
||||||
final int inc = (int) invokeScriptFunction("monsterValue", EventInstanceManager.this, mob.getId());
|
final int inc = (int) invokeScriptFunction("monsterValue", EventInstanceManager.this, mob.getId());
|
||||||
|
|
||||||
@@ -876,7 +876,7 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMonster(int mid) {
|
public Monster getMonster(int mid) {
|
||||||
return(LifeFactory.getMonster(mid));
|
return(LifeFactory.getMonster(mid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import server.MapleMarriage;
|
|||||||
import server.ThreadManager;
|
import server.ThreadManager;
|
||||||
import server.expeditions.Expedition;
|
import server.expeditions.Expedition;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.quest.MapleQuest;
|
import server.quest.MapleQuest;
|
||||||
import tools.exceptions.EventInstanceInProgressException;
|
import tools.exceptions.EventInstanceInProgressException;
|
||||||
@@ -737,7 +737,7 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMonster(int mid) {
|
public Monster getMonster(int mid) {
|
||||||
return(LifeFactory.getMonster(mid));
|
return(LifeFactory.getMonster(mid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import scripting.AbstractPlayerInteraction;
|
|||||||
import server.MapleItemInformationProvider;
|
import server.MapleItemInformationProvider;
|
||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.life.LifeFactory;
|
import server.life.LifeFactory;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapMonitor;
|
import server.maps.MapMonitor;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleReactor;
|
import server.maps.MapleReactor;
|
||||||
@@ -287,7 +287,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MapleMap map = reactor.getMap();
|
MapleMap map = reactor.getMap();
|
||||||
MapleMonster mm = map.getMonsterById(id);
|
Monster mm = map.getMonsterById(id);
|
||||||
if(mm != null) {
|
if(mm != null) {
|
||||||
int damage = (int)Math.ceil(mm.getMaxHp() / hitsToKill);
|
int damage = (int)Math.ceil(mm.getMaxHp() / hitsToKill);
|
||||||
Character chr = this.getPlayer();
|
Character chr = this.getPlayer();
|
||||||
@@ -326,7 +326,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
public void dispelAllMonsters(int num, int team) { //dispels all mobs, cpq
|
public void dispelAllMonsters(int num, int team) { //dispels all mobs, cpq
|
||||||
final MCSkill skil = MapleCarnivalFactory.getInstance().getGuardian(num);
|
final MCSkill skil = MapleCarnivalFactory.getInstance().getGuardian(num);
|
||||||
if (skil != null) {
|
if (skil != null) {
|
||||||
for (MapleMonster mons : getMap().getAllMonsters()) {
|
for (Monster mons : getMap().getAllMonsters()) {
|
||||||
if(mons.getTeam() == team) {
|
if(mons.getTeam() == team) {
|
||||||
mons.dispelSkill(skil.getSkill());
|
mons.dispelSkill(skil.getSkill());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ import net.server.world.Party;
|
|||||||
import net.server.world.PartyCharacter;
|
import net.server.world.PartyCharacter;
|
||||||
import provider.Data;
|
import provider.Data;
|
||||||
import provider.DataTool;
|
import provider.DataTool;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
import server.life.MobSkillFactory;
|
import server.life.MobSkillFactory;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.*;
|
import server.maps.*;
|
||||||
import server.partyquest.MapleCarnivalFactory;
|
import server.partyquest.MapleCarnivalFactory;
|
||||||
import server.partyquest.MapleCarnivalFactory.MCSkill;
|
import server.partyquest.MapleCarnivalFactory.MCSkill;
|
||||||
@@ -822,7 +822,7 @@ public class MapleStatEffect {
|
|||||||
if (obj == null || obj.getType() != MapleMapObjectType.MONSTER) {
|
if (obj == null || obj.getType() != MapleMapObjectType.MONSTER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MapleMonster mob = (MapleMonster) obj; // x is absorb percentage
|
Monster mob = (Monster) obj; // x is absorb percentage
|
||||||
if (!mob.isBoss()) {
|
if (!mob.isBoss()) {
|
||||||
int absorbMp = Math.min((int) (mob.getMaxMp() * (getX() / 100.0)), mob.getMp());
|
int absorbMp = Math.min((int) (mob.getMaxMp() * (getX() / 100.0)), mob.getMp());
|
||||||
if (absorbMp > 0) {
|
if (absorbMp > 0) {
|
||||||
@@ -1124,7 +1124,7 @@ public class MapleStatEffect {
|
|||||||
Skill skill_ = SkillFactory.getSkill(sourceid);
|
Skill skill_ = SkillFactory.getSkill(sourceid);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (MapleMapObject mo : affected) {
|
for (MapleMapObject mo : affected) {
|
||||||
MapleMonster monster = (MapleMonster) mo;
|
Monster monster = (Monster) mo;
|
||||||
if (isDispel()) {
|
if (isDispel()) {
|
||||||
monster.debuffMob(skill_.getId());
|
monster.debuffMob(skill_.getId());
|
||||||
} else if (isSeal() && monster.isBoss()) { // thanks IxianMace for noticing seal working on bosses
|
} else if (isSeal() && monster.isBoss()) { // thanks IxianMace for noticing seal working on bosses
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import net.server.audit.locks.MonitoredReentrantLock;
|
|||||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||||
import net.server.channel.Channel;
|
import net.server.channel.Channel;
|
||||||
import server.TimerManager;
|
import server.TimerManager;
|
||||||
import server.life.MapleMonster;
|
import server.life.Monster;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import tools.LogHelper;
|
import tools.LogHelper;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
@@ -259,7 +259,7 @@ public class Expedition {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void monsterKilled(Character chr, MapleMonster mob) {
|
public void monsterKilled(Character chr, Monster mob) {
|
||||||
for (int expeditionBoss : EXPEDITION_BOSSES) {
|
for (int expeditionBoss : EXPEDITION_BOSSES) {
|
||||||
if (mob.getId() == expeditionBoss) { //If the monster killed was a boss
|
if (mob.getId() == expeditionBoss) { //If the monster killed was a boss
|
||||||
String timeStamp = new SimpleDateFormat("HH:mm:ss").format(new Date());
|
String timeStamp = new SimpleDateFormat("HH:mm:ss").format(new Date());
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ public class LifeFactory {
|
|||||||
return new Pair<>(stats, attackInfos);
|
return new Pair<>(stats, attackInfos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MapleMonster getMonster(int mid) {
|
public static Monster getMonster(int mid) {
|
||||||
try {
|
try {
|
||||||
MapleMonsterStats stats = monsterStats.get(mid);
|
MapleMonsterStats stats = monsterStats.get(mid);
|
||||||
if (stats == null) {
|
if (stats == null) {
|
||||||
@@ -247,7 +247,7 @@ public class LifeFactory {
|
|||||||
|
|
||||||
monsterStats.put(mid, stats);
|
monsterStats.put(mid, stats);
|
||||||
}
|
}
|
||||||
MapleMonster ret = new MapleMonster(mid, stats);
|
Monster ret = new Monster(mid, stats);
|
||||||
return ret;
|
return ret;
|
||||||
} catch (NullPointerException npe) {
|
} catch (NullPointerException npe) {
|
||||||
System.out.println("[SEVERE] MOB " + mid + " failed to load. Issue: " + npe.getMessage() + "\n\n");
|
System.out.println("[SEVERE] MOB " + mid + " failed to load. Issue: " + npe.getMessage() + "\n\n");
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class MobAttackInfoFactory {
|
|||||||
private static Map<String, MobAttackInfo> mobAttacks = new HashMap<>();
|
private static Map<String, MobAttackInfo> mobAttacks = new HashMap<>();
|
||||||
private static DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.MOB);
|
private static DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.MOB);
|
||||||
|
|
||||||
public static MobAttackInfo getMobAttackInfo(MapleMonster mob, int attack) {
|
public static MobAttackInfo getMobAttackInfo(Monster mob, int attack) {
|
||||||
MobAttackInfo ret = mobAttacks.get(mob.getId() + "" + attack);
|
MobAttackInfo ret = mobAttacks.get(mob.getId() + "" + attack);
|
||||||
if (ret != null) {
|
if (ret != null) {
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class MobSkill {
|
|||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyDelayedEffect(final Character player, final MapleMonster monster, final boolean skill, int animationTime) {
|
public void applyDelayedEffect(final Character player, final Monster monster, final boolean skill, int animationTime) {
|
||||||
Runnable toRun = () -> {
|
Runnable toRun = () -> {
|
||||||
if (monster.isAlive()) {
|
if (monster.isAlive()) {
|
||||||
applyEffect(player, monster, skill, null);
|
applyEffect(player, monster, skill, null);
|
||||||
@@ -117,7 +117,7 @@ public class MobSkill {
|
|||||||
service.registerOverallAction(monster.getMap().getId(), toRun, animationTime);
|
service.registerOverallAction(monster.getMap().getId(), toRun, animationTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyEffect(Character player, MapleMonster monster, boolean skill, List<Character> banishPlayers) {
|
public void applyEffect(Character player, Monster monster, boolean skill, List<Character> banishPlayers) {
|
||||||
Disease disease = null;
|
Disease disease = null;
|
||||||
Map<MonsterStatus, Integer> stats = new ArrayMap<>();
|
Map<MonsterStatus, Integer> stats = new ArrayMap<>();
|
||||||
List<Integer> reflection = new LinkedList<>();
|
List<Integer> reflection = new LinkedList<>();
|
||||||
@@ -147,7 +147,7 @@ public class MobSkill {
|
|||||||
List<MapleMapObject> objects = getObjectsInRange(monster, MapleMapObjectType.MONSTER);
|
List<MapleMapObject> objects = getObjectsInRange(monster, MapleMapObjectType.MONSTER);
|
||||||
final int hps = (getX() / 1000) * (int) (950 + 1050 * Math.random());
|
final int hps = (getX() / 1000) * (int) (950 + 1050 * Math.random());
|
||||||
for (MapleMapObject mons : objects) {
|
for (MapleMapObject mons : objects) {
|
||||||
((MapleMonster) mons).heal(hps, getY());
|
((Monster) mons).heal(hps, getY());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
monster.heal(getX(), getY());
|
monster.heal(getX(), getY());
|
||||||
@@ -254,7 +254,7 @@ public class MobSkill {
|
|||||||
|
|
||||||
Collections.shuffle(summons);
|
Collections.shuffle(summons);
|
||||||
for (Integer mobId : summons.subList(0, summonLimit)) {
|
for (Integer mobId : summons.subList(0, summonLimit)) {
|
||||||
MapleMonster toSpawn = LifeFactory.getMonster(mobId);
|
Monster toSpawn = LifeFactory.getMonster(mobId);
|
||||||
if (toSpawn != null) {
|
if (toSpawn != null) {
|
||||||
if (bossRushMap) {
|
if (bossRushMap) {
|
||||||
toSpawn.disableDrops(); // no littering on BRPQ pls
|
toSpawn.disableDrops(); // no littering on BRPQ pls
|
||||||
@@ -318,7 +318,7 @@ public class MobSkill {
|
|||||||
if (stats.size() > 0) {
|
if (stats.size() > 0) {
|
||||||
if (lt != null && rb != null && skill) {
|
if (lt != null && rb != null && skill) {
|
||||||
for (MapleMapObject mons : getObjectsInRange(monster, MapleMapObjectType.MONSTER)) {
|
for (MapleMapObject mons : getObjectsInRange(monster, MapleMapObjectType.MONSTER)) {
|
||||||
((MapleMonster) mons).applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection);
|
((Monster) mons).applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
monster.applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection);
|
monster.applyMonsterBuff(stats, getX(), getSkillId(), getDuration(), this, reflection);
|
||||||
@@ -345,7 +345,7 @@ public class MobSkill {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Character> getPlayersInRange(MapleMonster monster) {
|
private List<Character> getPlayersInRange(Monster monster) {
|
||||||
return monster.getMap().getPlayersInRange(calculateBoundingBox(monster.getPosition()));
|
return monster.getMap().getPlayersInRange(calculateBoundingBox(monster.getPosition()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ public class MobSkill {
|
|||||||
return bounds;
|
return bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MapleMapObject> getObjectsInRange(MapleMonster monster, MapleMapObjectType objectType) {
|
private List<MapleMapObject> getObjectsInRange(Monster monster, MapleMapObjectType objectType) {
|
||||||
return monster.getMap().getMapObjectsInBox(calculateBoundingBox(monster.getPosition()), Collections.singletonList(objectType));
|
return monster.getMap().getMapObjectsInBox(calculateBoundingBox(monster.getPosition()), Collections.singletonList(objectType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+44
-53
@@ -64,28 +64,28 @@ import java.util.concurrent.ScheduledFuture;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
public class MapleMonster extends AbstractLoadedLife {
|
public class Monster extends AbstractLoadedLife {
|
||||||
|
|
||||||
private ChangeableStats ostats = null; //unused, v83 WZs offers no support for changeable stats.
|
private ChangeableStats ostats = null; //unused, v83 WZs offers no support for changeable stats.
|
||||||
private MapleMonsterStats stats;
|
private MapleMonsterStats stats;
|
||||||
private AtomicInteger hp = new AtomicInteger(1);
|
private final AtomicInteger hp = new AtomicInteger(1);
|
||||||
private AtomicLong maxHpPlusHeal = new AtomicLong(1);
|
private final AtomicLong maxHpPlusHeal = new AtomicLong(1);
|
||||||
private int mp;
|
private int mp;
|
||||||
private WeakReference<Character> controller = new WeakReference<>(null);
|
private WeakReference<Character> controller = new WeakReference<>(null);
|
||||||
private boolean controllerHasAggro, controllerKnowsAboutAggro, controllerHasPuppet;
|
private boolean controllerHasAggro, controllerKnowsAboutAggro, controllerHasPuppet;
|
||||||
private Collection<MonsterListener> listeners = new LinkedList<>();
|
private final Collection<MonsterListener> listeners = new LinkedList<>();
|
||||||
private EnumMap<MonsterStatus, MonsterStatusEffect> stati = new EnumMap<>(MonsterStatus.class);
|
private final EnumMap<MonsterStatus, MonsterStatusEffect> stati = new EnumMap<>(MonsterStatus.class);
|
||||||
private ArrayList<MonsterStatus> alreadyBuffed = new ArrayList<>();
|
private final ArrayList<MonsterStatus> alreadyBuffed = new ArrayList<>();
|
||||||
private MapleMap map;
|
private MapleMap map;
|
||||||
private int VenomMultiplier = 0;
|
private int VenomMultiplier = 0;
|
||||||
private boolean fake = false;
|
private boolean fake = false;
|
||||||
private boolean dropsDisabled = false;
|
private boolean dropsDisabled = false;
|
||||||
private List<Pair<Integer, Integer>> usedSkills = new ArrayList<>();
|
private final List<Pair<Integer, Integer>> usedSkills = new ArrayList<>();
|
||||||
private Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
|
private final Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
|
||||||
private Set<Integer> usedAttacks = new HashSet<>();
|
private final Set<Integer> usedAttacks = new HashSet<>();
|
||||||
private Set<Integer> calledMobOids = null;
|
private Set<Integer> calledMobOids = null;
|
||||||
private WeakReference<MapleMonster> callerMob = new WeakReference<>(null);
|
private WeakReference<Monster> callerMob = new WeakReference<>(null);
|
||||||
private List<Integer> stolenItems = new ArrayList<>(5);
|
private final List<Integer> stolenItems = new ArrayList<>(5);
|
||||||
private int team;
|
private int team;
|
||||||
private int parentMobOid = 0;
|
private int parentMobOid = 0;
|
||||||
private int spawnEffect = 0;
|
private int spawnEffect = 0;
|
||||||
@@ -98,14 +98,14 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true);
|
private MonitoredReentrantLock monsterLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB, true);
|
||||||
private MonitoredReentrantLock statiLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_STATI);
|
private MonitoredReentrantLock statiLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_STATI);
|
||||||
private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_ANI);
|
private MonitoredReentrantLock animationLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_ANI);
|
||||||
private MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO);
|
private final MonitoredReentrantLock aggroUpdateLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.MOB_AGGRO);
|
||||||
|
|
||||||
public MapleMonster(int id, MapleMonsterStats stats) {
|
public Monster(int id, MapleMonsterStats stats) {
|
||||||
super(id);
|
super(id);
|
||||||
initWithStats(stats);
|
initWithStats(stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster(MapleMonster monster) {
|
public Monster(Monster monster) {
|
||||||
super(monster);
|
super(monster);
|
||||||
initWithStats(monster.stats);
|
initWithStats(monster.stats);
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
return Math.min(summonsSize, skillLimit - summonsCount);
|
return Math.min(summonsSize, skillLimit - summonsCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSummonedMob(MapleMonster mob) {
|
public void addSummonedMob(Monster mob) {
|
||||||
Set<Integer> calledOids = this.calledMobOids;
|
Set<Integer> calledOids = this.calledMobOids;
|
||||||
if (calledOids == null) {
|
if (calledOids == null) {
|
||||||
calledOids = Collections.synchronizedSet(new HashSet<>());
|
calledOids = Collections.synchronizedSet(new HashSet<>());
|
||||||
@@ -190,12 +190,12 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSummonerMob(MapleMonster mob) {
|
private void setSummonerMob(Monster mob) {
|
||||||
this.callerMob = new WeakReference<>(mob);
|
this.callerMob = new WeakReference<>(mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispatchClearSummons() {
|
private void dispatchClearSummons() {
|
||||||
MapleMonster caller = this.callerMob.get();
|
Monster caller = this.callerMob.get();
|
||||||
if (caller != null) {
|
if (caller != null) {
|
||||||
caller.removeSummonedMob(this.getObjectId());
|
caller.removeSummonedMob(this.getObjectId());
|
||||||
}
|
}
|
||||||
@@ -428,7 +428,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param from the player that dealt the damage
|
* @param from the player that dealt the damage
|
||||||
* @param damage
|
* @param damage
|
||||||
* @param stayAlive
|
* @param stayAlive
|
||||||
@@ -514,7 +513,9 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
|
|
||||||
private void distributePlayerExperience(Character chr, float exp, float partyBonusMod, int totalPartyLevel, boolean highestPartyDamager, boolean whiteExpGain, boolean hasPartySharers) {
|
private void distributePlayerExperience(Character chr, float exp, float partyBonusMod, int totalPartyLevel, boolean highestPartyDamager, boolean whiteExpGain, boolean hasPartySharers) {
|
||||||
float playerExp = (YamlConfig.config.server.EXP_SPLIT_COMMON_MOD * chr.getLevel()) / totalPartyLevel;
|
float playerExp = (YamlConfig.config.server.EXP_SPLIT_COMMON_MOD * chr.getLevel()) / totalPartyLevel;
|
||||||
if (highestPartyDamager) playerExp += YamlConfig.config.server.EXP_SPLIT_MVP_MOD;
|
if (highestPartyDamager) {
|
||||||
|
playerExp += YamlConfig.config.server.EXP_SPLIT_MVP_MOD;
|
||||||
|
}
|
||||||
|
|
||||||
playerExp *= exp;
|
playerExp *= exp;
|
||||||
float bonusExp = partyBonusMod * playerExp;
|
float bonusExp = partyBonusMod * playerExp;
|
||||||
@@ -779,7 +780,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
boolean aggro = lastController.getRight();
|
boolean aggro = lastController.getRight();
|
||||||
|
|
||||||
for (Integer mid : toSpawn) {
|
for (Integer mid : toSpawn) {
|
||||||
final MapleMonster mob = LifeFactory.getMonster(mid);
|
final Monster mob = LifeFactory.getMonster(mid);
|
||||||
mob.setPosition(getPosition());
|
mob.setPosition(getPosition());
|
||||||
mob.setFh(getFh());
|
mob.setFh(getFh());
|
||||||
mob.setParentMobOid(getObjectId());
|
mob.setParentMobOid(getObjectId());
|
||||||
@@ -791,7 +792,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
|
|
||||||
if (mob.getId() >= 8810010 && mob.getId() <= 8810017 && reviveMap.isHorntailDefeated()) {
|
if (mob.getId() >= 8810010 && mob.getId() <= 8810017 && reviveMap.isHorntailDefeated()) {
|
||||||
boolean htKilled = false;
|
boolean htKilled = false;
|
||||||
MapleMonster ht = reviveMap.getMonsterById(8810018);
|
Monster ht = reviveMap.getMonsterById(8810018);
|
||||||
|
|
||||||
if (ht != null) {
|
if (ht != null) {
|
||||||
ht.lockMonster();
|
ht.lockMonster();
|
||||||
@@ -829,7 +830,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void dropFromFriendlyMonster(long delay) {
|
public void dropFromFriendlyMonster(long delay) {
|
||||||
final MapleMonster m = this;
|
final Monster m = this;
|
||||||
monsterItemDrop = TimerManager.getInstance().register(() -> {
|
monsterItemDrop = TimerManager.getInstance().register(() -> {
|
||||||
if (!m.isAlive()) {
|
if (!m.isAlive()) {
|
||||||
if (monsterItemDrop != null) {
|
if (monsterItemDrop != null) {
|
||||||
@@ -946,7 +947,9 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
private void giveFamilyRep(FamilyEntry entry) {
|
private void giveFamilyRep(FamilyEntry entry) {
|
||||||
if (entry != null) {
|
if (entry != null) {
|
||||||
int repGain = isBoss() ? YamlConfig.config.server.FAMILY_REP_PER_BOSS_KILL : YamlConfig.config.server.FAMILY_REP_PER_KILL;
|
int repGain = isBoss() ? YamlConfig.config.server.FAMILY_REP_PER_BOSS_KILL : YamlConfig.config.server.FAMILY_REP_PER_KILL;
|
||||||
if(getMaxHp() <= 1) repGain = 0; //don't count trash mobs
|
if (getMaxHp() <= 1) {
|
||||||
|
repGain = 0; //don't count trash mobs
|
||||||
|
}
|
||||||
entry.giveReputationToSenior(repGain, true);
|
entry.giveReputationToSenior(repGain, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -985,7 +988,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isControllerHasAggro() {
|
public boolean isControllerHasAggro() {
|
||||||
return fake ? false : controllerHasAggro;
|
return !fake && controllerHasAggro;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setControllerHasAggro(boolean controllerHasAggro) {
|
private void setControllerHasAggro(boolean controllerHasAggro) {
|
||||||
@@ -995,7 +998,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isControllerKnowsAboutAggro() {
|
public boolean isControllerKnowsAboutAggro() {
|
||||||
return fake ? false : controllerKnowsAboutAggro;
|
return !fake && controllerKnowsAboutAggro;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) {
|
private void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) {
|
||||||
@@ -1093,7 +1096,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
map.broadcastMessage(packet, getPosition());
|
map.broadcastMessage(packet, getPosition());
|
||||||
|
|
||||||
Character chrController = getActiveController();
|
Character chrController = getActiveController();
|
||||||
if (chrController != null && !chrController.isMapObjectVisible(MapleMonster.this)) {
|
if (chrController != null && !chrController.isMapObjectVisible(Monster.this)) {
|
||||||
chrController.sendPacket(packet);
|
chrController.sendPacket(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1504,7 +1507,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
monsterLock.unlock();
|
monsterLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
final MapleMonster mons = this;
|
final Monster mons = this;
|
||||||
MapleMap mmap = mons.getMap();
|
MapleMap mmap = mons.getMap();
|
||||||
Runnable r = () -> mons.clearSkill(skillId, level);
|
Runnable r = () -> mons.clearSkill(skillId, level);
|
||||||
|
|
||||||
@@ -1568,7 +1571,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
mp -= mpCon;
|
mp -= mpCon;
|
||||||
usedAttacks.add(attackPos);
|
usedAttacks.add(attackPos);
|
||||||
|
|
||||||
final MapleMonster mons = this;
|
final Monster mons = this;
|
||||||
MapleMap mmap = mons.getMap();
|
MapleMap mmap = mons.getMap();
|
||||||
Runnable r = () -> mons.clearAttack(attackPos);
|
Runnable r = () -> mons.clearAttack(attackPos);
|
||||||
|
|
||||||
@@ -1804,9 +1807,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
|
|
||||||
// check whether mob is currently under a puppet's field of action or not
|
// check whether mob is currently under a puppet's field of action or not
|
||||||
if (summon != null) {
|
if (summon != null) {
|
||||||
if (isPuppetInVicinity(summon)) {
|
return isPuppetInVicinity(summon);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
map.getAggroCoordinator().removePuppetAggro(chr.getId());
|
map.getAggroCoordinator().removePuppetAggro(chr.getId());
|
||||||
}
|
}
|
||||||
@@ -1819,9 +1820,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
Character chrController = this.getActiveController();
|
Character chrController = this.getActiveController();
|
||||||
|
|
||||||
if (chrController != null) {
|
if (chrController != null) {
|
||||||
if (this.isCharacterPuppetInVicinity(chrController)) {
|
return this.isCharacterPuppetInVicinity(chrController);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -1868,7 +1867,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes controllability status from the current controller of this mob.
|
* Removes controllability status from the current controller of this mob.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public Pair<Character, Boolean> aggroRemoveController() {
|
public Pair<Character, Boolean> aggroRemoveController() {
|
||||||
Character chrController;
|
Character chrController;
|
||||||
@@ -1887,7 +1885,9 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster
|
if (chrController != null) { // this can/should only happen when a hidden gm attacks the monster
|
||||||
if (!this.isFake()) chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId()));
|
if (!this.isFake()) {
|
||||||
|
chrController.sendPacket(PacketCreator.stopControllingMonster(this.getObjectId()));
|
||||||
|
}
|
||||||
chrController.stopControllingMonster(this);
|
chrController.stopControllingMonster(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1897,7 +1897,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Pass over the mob controllability and updates aggro status on the new
|
* Pass over the mob controllability and updates aggro status on the new
|
||||||
* player controller.
|
* player controller.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroSwitchController(Character newController, boolean immediateAggro) {
|
public void aggroSwitchController(Character newController, boolean immediateAggro) {
|
||||||
if (aggroUpdateLock.tryLock()) {
|
if (aggroUpdateLock.tryLock()) {
|
||||||
@@ -1951,7 +1950,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Automagically finds a new controller for the given monster from the chars
|
* Automagically finds a new controller for the given monster from the chars
|
||||||
* on the map it is from...
|
* on the map it is from...
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroUpdateController() {
|
public void aggroUpdateController() {
|
||||||
Character chrController = this.getActiveController();
|
Character chrController = this.getActiveController();
|
||||||
@@ -1970,7 +1968,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Finds a new controller for the given monster from the chars with deployed
|
* Finds a new controller for the given monster from the chars with deployed
|
||||||
* puppet nearby on the map it is from...
|
* puppet nearby on the map it is from...
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
private void aggroUpdatePuppetController(Character newController) {
|
private void aggroUpdatePuppetController(Character newController) {
|
||||||
Character chrController = this.getActiveController();
|
Character chrController = this.getActiveController();
|
||||||
@@ -2024,7 +2021,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Ensures controllability removal of the current player controller, and
|
* Ensures controllability removal of the current player controller, and
|
||||||
* fetches for any player on the map to start controlling in place.
|
* fetches for any player on the map to start controlling in place.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroRedirectController() {
|
public void aggroRedirectController() {
|
||||||
this.aggroRemoveController(); // don't care if new controller not found, at least remove current controller
|
this.aggroRemoveController(); // don't care if new controller not found, at least remove current controller
|
||||||
@@ -2034,7 +2030,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Returns the current aggro status on the specified player, or null if the
|
* Returns the current aggro status on the specified player, or null if the
|
||||||
* specified player is currently not this mob's controller.
|
* specified player is currently not this mob's controller.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public Boolean aggroMoveLifeUpdate(Character player) {
|
public Boolean aggroMoveLifeUpdate(Character player) {
|
||||||
Character chrController = getController();
|
Character chrController = getController();
|
||||||
@@ -2053,7 +2048,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Refreshes auto aggro for the player passed as parameter, does nothing if
|
* Refreshes auto aggro for the player passed as parameter, does nothing if
|
||||||
* there is already an active controller for this mob.
|
* there is already an active controller for this mob.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroAutoAggroUpdate(Character player) {
|
public void aggroAutoAggroUpdate(Character player) {
|
||||||
Character chrController = this.getActiveController();
|
Character chrController = this.getActiveController();
|
||||||
@@ -2071,7 +2065,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Applied damage input for this mob, enough damage taken implies an aggro
|
* Applied damage input for this mob, enough damage taken implies an aggro
|
||||||
* target update for the attacker shortly.
|
* target update for the attacker shortly.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroMonsterDamage(Character attacker, int damage) {
|
public void aggroMonsterDamage(Character attacker, int damage) {
|
||||||
MonsterAggroCoordinator mmac = this.getMapAggroCoordinator();
|
MonsterAggroCoordinator mmac = this.getMapAggroCoordinator();
|
||||||
@@ -2101,27 +2094,27 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void aggroMonsterControl(Client c, MapleMonster mob, boolean immediateAggro) {
|
private static void aggroMonsterControl(Client c, Monster mob, boolean immediateAggro) {
|
||||||
c.sendPacket(PacketCreator.controlMonster(mob, false, immediateAggro));
|
c.sendPacket(PacketCreator.controlMonster(mob, false, immediateAggro));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void aggroRefreshPuppetVisibility(Character chrController, MapleSummon puppet) {
|
private void aggroRefreshPuppetVisibility(Character chrController, MapleSummon puppet) {
|
||||||
// lame patch for client to redirect all aggro to the puppet
|
// lame patch for client to redirect all aggro to the puppet
|
||||||
|
|
||||||
List<MapleMonster> puppetControlled = new LinkedList<>();
|
List<Monster> puppetControlled = new LinkedList<>();
|
||||||
for (MapleMonster mob : chrController.getControlledMonsters()) {
|
for (Monster mob : chrController.getControlledMonsters()) {
|
||||||
if (mob.isPuppetInVicinity(puppet)) {
|
if (mob.isPuppetInVicinity(puppet)) {
|
||||||
puppetControlled.add(mob);
|
puppetControlled.add(mob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleMonster mob : puppetControlled) {
|
for (Monster mob : puppetControlled) {
|
||||||
chrController.sendPacket(PacketCreator.stopControllingMonster(mob.getObjectId()));
|
chrController.sendPacket(PacketCreator.stopControllingMonster(mob.getObjectId()));
|
||||||
}
|
}
|
||||||
chrController.sendPacket(PacketCreator.removeSummon(puppet, false));
|
chrController.sendPacket(PacketCreator.removeSummon(puppet, false));
|
||||||
|
|
||||||
Client c = chrController.getClient();
|
Client c = chrController.getClient();
|
||||||
for (MapleMonster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans
|
for (Monster mob : puppetControlled) { // thanks BHB for noticing puppets disrupting mobstatuses for bowmans
|
||||||
aggroMonsterControl(c, mob, mob.isControllerKnowsAboutAggro());
|
aggroMonsterControl(c, mob, mob.isControllerKnowsAboutAggro());
|
||||||
}
|
}
|
||||||
chrController.sendPacket(PacketCreator.spawnSummon(puppet, false));
|
chrController.sendPacket(PacketCreator.spawnSummon(puppet, false));
|
||||||
@@ -2135,7 +2128,7 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
availablePuppetUpdate = false;
|
availablePuppetUpdate = false;
|
||||||
Runnable r = () -> {
|
Runnable r = () -> {
|
||||||
try {
|
try {
|
||||||
Character chrController = MapleMonster.this.getActiveController();
|
Character chrController = Monster.this.getActiveController();
|
||||||
if (chrController == null) {
|
if (chrController == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2154,8 +2147,8 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
if (controllerHasPuppet) {
|
if (controllerHasPuppet) {
|
||||||
controllerHasPuppet = false;
|
controllerHasPuppet = false;
|
||||||
|
|
||||||
chrController.sendPacket(PacketCreator.stopControllingMonster(MapleMonster.this.getObjectId()));
|
chrController.sendPacket(PacketCreator.stopControllingMonster(Monster.this.getObjectId()));
|
||||||
aggroMonsterControl(chrController.getClient(), MapleMonster.this, MapleMonster.this.isControllerHasAggro());
|
aggroMonsterControl(chrController.getClient(), Monster.this, Monster.this.isControllerHasAggro());
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
availablePuppetUpdate = true;
|
availablePuppetUpdate = true;
|
||||||
@@ -2170,7 +2163,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
/**
|
/**
|
||||||
* Clears all applied damage input for this mob, doesn't refresh target
|
* Clears all applied damage input for this mob, doesn't refresh target
|
||||||
* aggro.
|
* aggro.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroClearDamages() {
|
public void aggroClearDamages() {
|
||||||
this.getMapAggroCoordinator().removeAggroEntries(this);
|
this.getMapAggroCoordinator().removeAggroEntries(this);
|
||||||
@@ -2178,7 +2170,6 @@ public class MapleMonster extends AbstractLoadedLife {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears this mob aggro on the current controller.
|
* Clears this mob aggro on the current controller.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void aggroResetAggro() {
|
public void aggroResetAggro() {
|
||||||
aggroUpdateLock.lock();
|
aggroUpdateLock.lock();
|
||||||
@@ -35,7 +35,7 @@ public class SpawnPoint {
|
|||||||
private AtomicInteger spawnedMonsters = new AtomicInteger(0);
|
private AtomicInteger spawnedMonsters = new AtomicInteger(0);
|
||||||
private boolean immobile, denySpawn = false;
|
private boolean immobile, denySpawn = false;
|
||||||
|
|
||||||
public SpawnPoint(final MapleMonster monster, Point pos, boolean immobile, int mobTime, int mobInterval, int team) {
|
public SpawnPoint(final Monster monster, Point pos, boolean immobile, int mobTime, int mobInterval, int team) {
|
||||||
this.monster = monster.getId();
|
this.monster = monster.getId();
|
||||||
this.pos = new Point(pos);
|
this.pos = new Point(pos);
|
||||||
this.mobTime = mobTime;
|
this.mobTime = mobTime;
|
||||||
@@ -74,8 +74,8 @@ public class SpawnPoint {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMonster() {
|
public Monster getMonster() {
|
||||||
MapleMonster mob = new MapleMonster(LifeFactory.getMonster(monster));
|
Monster mob = new Monster(LifeFactory.getMonster(monster));
|
||||||
mob.setPosition(new Point(pos));
|
mob.setPosition(new Point(pos));
|
||||||
mob.setTeam(team);
|
mob.setTeam(team);
|
||||||
mob.setFh(fh);
|
mob.setFh(fh);
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSelfDestructive(MapleMonster mob) {
|
public void addSelfDestructive(Monster mob) {
|
||||||
if (mob.getStats().selfDestruction() != null) {
|
if (mob.getStats().selfDestruction() != null) {
|
||||||
this.selfDestructives.add(mob.getObjectId());
|
this.selfDestructives.add(mob.getObjectId());
|
||||||
}
|
}
|
||||||
@@ -624,7 +624,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte dropItemsFromMonsterOnMap(List<MonsterDropEntry> dropEntry, Point pos, byte d, int chRate, byte droptype, int mobpos, Character chr, MapleMonster mob) {
|
private byte dropItemsFromMonsterOnMap(List<MonsterDropEntry> dropEntry, Point pos, byte d, int chRate, byte droptype, int mobpos, Character chr, Monster mob) {
|
||||||
if(dropEntry.isEmpty()) {
|
if(dropEntry.isEmpty()) {
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
@@ -673,7 +673,7 @@ public class MapleMap {
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte dropGlobalItemsFromMonsterOnMap(List<MonsterGlobalDropEntry> globalEntry, Point pos, byte d, byte droptype, int mobpos, Character chr, MapleMonster mob) {
|
private byte dropGlobalItemsFromMonsterOnMap(List<MonsterGlobalDropEntry> globalEntry, Point pos, byte d, byte droptype, int mobpos, Character chr, Monster mob) {
|
||||||
Collections.shuffle(globalEntry);
|
Collections.shuffle(globalEntry);
|
||||||
|
|
||||||
Item idrop;
|
Item idrop;
|
||||||
@@ -701,7 +701,7 @@ public class MapleMap {
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dropFromMonster(final Character chr, final MapleMonster mob, final boolean useBaseRate) {
|
private void dropFromMonster(final Character chr, final Monster mob, final boolean useBaseRate) {
|
||||||
if (mob.dropsDisabled() || !dropsOn) {
|
if (mob.dropsDisabled() || !dropsOn) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -738,7 +738,7 @@ public class MapleMap {
|
|||||||
registerMobItemDrops(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob);
|
registerMobItemDrops(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dropItemsFromMonster(List<MonsterDropEntry> list, final Character chr, final MapleMonster mob) {
|
public void dropItemsFromMonster(List<MonsterDropEntry> list, final Character chr, final Monster mob) {
|
||||||
if (mob.dropsDisabled() || !dropsOn) {
|
if (mob.dropsDisabled() || !dropsOn) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -752,7 +752,7 @@ public class MapleMap {
|
|||||||
dropItemsFromMonsterOnMap(list, pos, d, chRate, droptype, mobpos, chr, mob);
|
dropItemsFromMonsterOnMap(list, pos, d, chRate, droptype, mobpos, chr, mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dropFromFriendlyMonster(final Character chr, final MapleMonster mob) {
|
public void dropFromFriendlyMonster(final Character chr, final Monster mob) {
|
||||||
dropFromMonster(chr, mob, true);
|
dropFromMonster(chr, mob, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -935,7 +935,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerMobItemDrops(byte droptype, int mobpos, int chRate, Point pos, List<MonsterDropEntry> dropEntry, List<MonsterDropEntry> visibleQuestEntry, List<MonsterDropEntry> otherQuestEntry, List<MonsterGlobalDropEntry> globalEntry, Character chr, MapleMonster mob) {
|
private void registerMobItemDrops(byte droptype, int mobpos, int chRate, Point pos, List<MonsterDropEntry> dropEntry, List<MonsterDropEntry> visibleQuestEntry, List<MonsterDropEntry> otherQuestEntry, List<MonsterGlobalDropEntry> globalEntry, Character chr, Monster mob) {
|
||||||
MobLootEntry mle = new MobLootEntry(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob);
|
MobLootEntry mle = new MobLootEntry(droptype, mobpos, chRate, pos, dropEntry, visibleQuestEntry, otherQuestEntry, globalEntry, chr, mob);
|
||||||
|
|
||||||
if(YamlConfig.config.server.USE_SPAWN_LOOT_ON_ANIMATION) {
|
if(YamlConfig.config.server.USE_SPAWN_LOOT_ON_ANIMATION) {
|
||||||
@@ -1154,13 +1154,13 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMonsterById(int id) {
|
public Monster getMonsterById(int id) {
|
||||||
objectRLock.lock();
|
objectRLock.lock();
|
||||||
try {
|
try {
|
||||||
for (MapleMapObject obj : mapobjects.values()) {
|
for (MapleMapObject obj : mapobjects.values()) {
|
||||||
if (obj.getType() == MapleMapObjectType.MONSTER) {
|
if (obj.getType() == MapleMapObjectType.MONSTER) {
|
||||||
if (((MapleMonster) obj).getId() == id) {
|
if (((Monster) obj).getId() == id) {
|
||||||
return (MapleMonster) obj;
|
return (Monster) obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1177,7 +1177,7 @@ public class MapleMap {
|
|||||||
public int countMonster(int minid, int maxid) {
|
public int countMonster(int minid, int maxid) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (MapleMapObject m : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
for (MapleMapObject m : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
||||||
MapleMonster mob = (MapleMonster) m;
|
Monster mob = (Monster) m;
|
||||||
if (mob.getId() >= minid && mob.getId() <= maxid) {
|
if (mob.getId() >= minid && mob.getId() <= maxid) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -1210,10 +1210,10 @@ public class MapleMap {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final List<MapleMonster> getAllMonsters() {
|
public final List<Monster> getAllMonsters() {
|
||||||
List<MapleMonster> list = new LinkedList<>();
|
List<Monster> list = new LinkedList<>();
|
||||||
for (MapleMapObject mmo : getMonsters()) {
|
for (MapleMapObject mmo : getMonsters()) {
|
||||||
list.add((MapleMonster) mmo);
|
list.add((Monster) mmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
@@ -1287,7 +1287,7 @@ public class MapleMap {
|
|||||||
public int countBosses() {
|
public int countBosses() {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for(MapleMonster mob: getAllMonsters()) {
|
for(Monster mob: getAllMonsters()) {
|
||||||
if (mob.isBoss()) {
|
if (mob.isBoss()) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -1296,10 +1296,10 @@ public class MapleMap {
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean damageMonster(final Character chr, final MapleMonster monster, final int damage) {
|
public boolean damageMonster(final Character chr, final Monster monster, final int damage) {
|
||||||
if (monster.getId() == 8800000) {
|
if (monster.getId() == 8800000) {
|
||||||
for (MapleMapObject object : chr.getMap().getMapObjects()) {
|
for (MapleMapObject object : chr.getMap().getMapObjects()) {
|
||||||
MapleMonster mons = chr.getMap().getMonsterByOid(object.getObjectId());
|
Monster mons = chr.getMap().getMonsterByOid(object.getObjectId());
|
||||||
if (mons != null) {
|
if (mons != null) {
|
||||||
if (mons.getId() >= 8800003 && mons.getId() <= 8800010) {
|
if (mons.getId() >= 8800003 && mons.getId() <= 8800010) {
|
||||||
return true;
|
return true;
|
||||||
@@ -1341,7 +1341,7 @@ public class MapleMap {
|
|||||||
getWorldServer().dropMessage(6, "[Victory] In a swift stroke of sorts, the crew that has attempted Pink Bean at channel " + channel + " has ultimately defeated it. The Temple of Time shines radiantly once again, the day finally coming back, as the crew that managed to finally conquer it returns victoriously from the battlefield!!");
|
getWorldServer().dropMessage(6, "[Victory] In a swift stroke of sorts, the crew that has attempted Pink Bean at channel " + channel + " has ultimately defeated it. The Temple of Time shines radiantly once again, the day finally coming back, as the crew that managed to finally conquer it returns victoriously from the battlefield!!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean removeKilledMonsterObject(MapleMonster monster) {
|
private boolean removeKilledMonsterObject(Monster monster) {
|
||||||
monster.lockMonster();
|
monster.lockMonster();
|
||||||
try {
|
try {
|
||||||
if(monster.getHp() < 0) {
|
if(monster.getHp() < 0) {
|
||||||
@@ -1361,11 +1361,11 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killMonster(final MapleMonster monster, final Character chr, final boolean withDrops) {
|
public void killMonster(final Monster monster, final Character chr, final boolean withDrops) {
|
||||||
killMonster(monster, chr, withDrops, 1);
|
killMonster(monster, chr, withDrops, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killMonster(final MapleMonster monster, final Character chr, final boolean withDrops, int animation) {
|
public void killMonster(final Monster monster, final Character chr, final boolean withDrops, int animation) {
|
||||||
if (monster == null) {
|
if (monster == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1412,7 +1412,7 @@ public class MapleMap {
|
|||||||
boolean makeZakReal = true;
|
boolean makeZakReal = true;
|
||||||
Collection<MapleMapObject> objects = getMapObjects();
|
Collection<MapleMapObject> objects = getMapObjects();
|
||||||
for (MapleMapObject object : objects) {
|
for (MapleMapObject object : objects) {
|
||||||
MapleMonster mons = getMonsterByOid(object.getObjectId());
|
Monster mons = getMonsterByOid(object.getObjectId());
|
||||||
if (mons != null) {
|
if (mons != null) {
|
||||||
if (mons.getId() >= 8800003 && mons.getId() <= 8800010) {
|
if (mons.getId() >= 8800003 && mons.getId() <= 8800010) {
|
||||||
makeZakReal = false;
|
makeZakReal = false;
|
||||||
@@ -1424,7 +1424,7 @@ public class MapleMap {
|
|||||||
MapleMap map = chr.getMap();
|
MapleMap map = chr.getMap();
|
||||||
|
|
||||||
for (MapleMapObject object : objects) {
|
for (MapleMapObject object : objects) {
|
||||||
MapleMonster mons = map.getMonsterByOid(object.getObjectId());
|
Monster mons = map.getMonsterByOid(object.getObjectId());
|
||||||
if (mons != null) {
|
if (mons != null) {
|
||||||
if (mons.getId() == 8800000) {
|
if (mons.getId() == 8800000) {
|
||||||
makeMonsterReal(mons);
|
makeMonsterReal(mons);
|
||||||
@@ -1460,15 +1460,15 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killFriendlies(MapleMonster mob) {
|
public void killFriendlies(Monster mob) {
|
||||||
this.killMonster(mob, (Character) getPlayers().get(0), false);
|
this.killMonster(mob, (Character) getPlayers().get(0), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killMonster(int mobId) {
|
public void killMonster(int mobId) {
|
||||||
Character chr = (Character) getPlayers().get(0);
|
Character chr = (Character) getPlayers().get(0);
|
||||||
List<MapleMonster> mobList = getAllMonsters();
|
List<Monster> mobList = getAllMonsters();
|
||||||
|
|
||||||
for (MapleMonster mob : mobList) {
|
for (Monster mob : mobList) {
|
||||||
if (mob.getId() == mobId) {
|
if (mob.getId() == mobId) {
|
||||||
this.killMonster(mob, chr, false);
|
this.killMonster(mob, chr, false);
|
||||||
}
|
}
|
||||||
@@ -1480,9 +1480,9 @@ public class MapleMap {
|
|||||||
|
|
||||||
if(!mapChars.isEmpty()) {
|
if(!mapChars.isEmpty()) {
|
||||||
Character defaultChr = mapChars.entrySet().iterator().next().getValue();
|
Character defaultChr = mapChars.entrySet().iterator().next().getValue();
|
||||||
List<MapleMonster> mobList = getAllMonsters();
|
List<Monster> mobList = getAllMonsters();
|
||||||
|
|
||||||
for (MapleMonster mob : mobList) {
|
for (Monster mob : mobList) {
|
||||||
if (mob.getId() == mobId) {
|
if (mob.getId() == mobId) {
|
||||||
Character chr = mapChars.get(mob.getHighestDamagerId());
|
Character chr = mapChars.get(mob.getHighestDamagerId());
|
||||||
if (chr == null) {
|
if (chr == null) {
|
||||||
@@ -1499,7 +1499,7 @@ public class MapleMap {
|
|||||||
closeMapSpawnPoints();
|
closeMapSpawnPoints();
|
||||||
|
|
||||||
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
||||||
MapleMonster monster = (MapleMonster) monstermo;
|
Monster monster = (Monster) monstermo;
|
||||||
if (monster.getStats().isFriendly()) {
|
if (monster.getStats().isFriendly()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1514,7 +1514,7 @@ public class MapleMap {
|
|||||||
closeMapSpawnPoints();
|
closeMapSpawnPoints();
|
||||||
|
|
||||||
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
||||||
MapleMonster monster = (MapleMonster) monstermo;
|
Monster monster = (Monster) monstermo;
|
||||||
if (monster.getStats().isFriendly()) {
|
if (monster.getStats().isFriendly()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1527,7 +1527,7 @@ public class MapleMap {
|
|||||||
closeMapSpawnPoints();
|
closeMapSpawnPoints();
|
||||||
|
|
||||||
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
|
||||||
MapleMonster monster = (MapleMonster) monstermo;
|
Monster monster = (Monster) monstermo;
|
||||||
|
|
||||||
killMonster(monster, null, false, 1);
|
killMonster(monster, null, false, 1);
|
||||||
}
|
}
|
||||||
@@ -1749,9 +1749,9 @@ public class MapleMap {
|
|||||||
* @param oid
|
* @param oid
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public MapleMonster getMonsterByOid(int oid) {
|
public Monster getMonsterByOid(int oid) {
|
||||||
MapleMapObject mmo = getMapObject(oid);
|
MapleMapObject mmo = getMapObject(oid);
|
||||||
return (mmo != null && mmo.getType() == MapleMapObjectType.MONSTER) ? (MapleMonster) mmo : null;
|
return (mmo != null && mmo.getType() == MapleMapObjectType.MONSTER) ? (Monster) mmo : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleReactor getReactorByOid(int oid) {
|
public MapleReactor getReactorByOid(int oid) {
|
||||||
@@ -1813,11 +1813,11 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonsterOnGroundBelow(int id, int x, int y) {
|
public void spawnMonsterOnGroundBelow(int id, int x, int y) {
|
||||||
MapleMonster mob = LifeFactory.getMonster(id);
|
Monster mob = LifeFactory.getMonster(id);
|
||||||
spawnMonsterOnGroundBelow(mob, new Point(x, y));
|
spawnMonsterOnGroundBelow(mob, new Point(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonsterOnGroundBelow(MapleMonster mob, Point pos) {
|
public void spawnMonsterOnGroundBelow(Monster mob, Point pos) {
|
||||||
Point spos = new Point(pos.x, pos.y - 1);
|
Point spos = new Point(pos.x, pos.y - 1);
|
||||||
spos = calcPointBelow(spos);
|
spos = calcPointBelow(spos);
|
||||||
spos.y--;
|
spos.y--;
|
||||||
@@ -1825,7 +1825,7 @@ public class MapleMap {
|
|||||||
spawnMonster(mob);
|
spawnMonster(mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnCPQMonster(MapleMonster mob, Point pos, int team) {
|
public void spawnCPQMonster(Monster mob, Point pos, int team) {
|
||||||
Point spos = new Point(pos.x, pos.y - 1);
|
Point spos = new Point(pos.x, pos.y - 1);
|
||||||
spos = calcPointBelow(spos);
|
spos = calcPointBelow(spos);
|
||||||
spos.y--;
|
spos.y--;
|
||||||
@@ -1834,11 +1834,11 @@ public class MapleMap {
|
|||||||
spawnMonster(mob);
|
spawnMonster(mob);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void monsterItemDrop(final MapleMonster m, long delay) {
|
private void monsterItemDrop(final Monster m, long delay) {
|
||||||
m.dropFromFriendlyMonster(delay);
|
m.dropFromFriendlyMonster(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnFakeMonsterOnGroundBelow(MapleMonster mob, Point pos) {
|
public void spawnFakeMonsterOnGroundBelow(Monster mob, Point pos) {
|
||||||
Point spos = getGroundBelow(pos);
|
Point spos = getGroundBelow(pos);
|
||||||
mob.setPosition(spos);
|
mob.setPosition(spos);
|
||||||
spawnFakeMonster(mob);
|
spawnFakeMonster(mob);
|
||||||
@@ -1855,7 +1855,7 @@ public class MapleMap {
|
|||||||
return calcPointBelow(pos);
|
return calcPointBelow(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnRevives(final MapleMonster monster) {
|
public void spawnRevives(final Monster monster) {
|
||||||
monster.setMap(this);
|
monster.setMap(this);
|
||||||
if (getEventInstance() != null) {
|
if (getEventInstance() != null) {
|
||||||
getEventInstance().registerMonster(monster);
|
getEventInstance().registerMonster(monster);
|
||||||
@@ -1871,7 +1871,7 @@ public class MapleMap {
|
|||||||
applyRemoveAfter(monster);
|
applyRemoveAfter(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyRemoveAfter(final MapleMonster monster) {
|
private void applyRemoveAfter(final Monster monster) {
|
||||||
final selfDestruction selfDestruction = monster.getStats().selfDestruction();
|
final selfDestruction selfDestruction = monster.getStats().selfDestruction();
|
||||||
if (monster.getStats().removeAfter() > 0 || selfDestruction != null && selfDestruction.getHp() < 0) {
|
if (monster.getStats().removeAfter() > 0 || selfDestruction != null && selfDestruction.getHp() < 0) {
|
||||||
Runnable removeAfterAction;
|
Runnable removeAfterAction;
|
||||||
@@ -1890,7 +1890,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismissRemoveAfter(final MapleMonster monster) {
|
public void dismissRemoveAfter(final Monster monster) {
|
||||||
Runnable removeAfterAction = monster.popRemoveAfterAction();
|
Runnable removeAfterAction = monster.popRemoveAfterAction();
|
||||||
if (removeAfterAction != null) {
|
if (removeAfterAction != null) {
|
||||||
OverallService service = (OverallService) this.getChannelServer().getServiceAccess(ChannelServices.OVERALL);
|
OverallService service = (OverallService) this.getChannelServer().getServiceAccess(ChannelServices.OVERALL);
|
||||||
@@ -1932,11 +1932,11 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonster(final MapleMonster monster) {
|
public void spawnMonster(final Monster monster) {
|
||||||
spawnMonster(monster, 1, false);
|
spawnMonster(monster, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonster(final MapleMonster monster, int difficulty, boolean isPq) {
|
public void spawnMonster(final Monster monster, int difficulty, boolean isPq) {
|
||||||
if (mobCapacity != -1 && mobCapacity == spawnedMonstersOnMap.get()) {
|
if (mobCapacity != -1 && mobCapacity == spawnedMonstersOnMap.get()) {
|
||||||
return;//PyPQ
|
return;//PyPQ
|
||||||
}
|
}
|
||||||
@@ -1988,12 +1988,12 @@ public class MapleMap {
|
|||||||
applyRemoveAfter(monster); // thanks LightRyuzaki for pointing issues with spawned CWKPQ mobs not applying this
|
applyRemoveAfter(monster); // thanks LightRyuzaki for pointing issues with spawned CWKPQ mobs not applying this
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnDojoMonster(final MapleMonster monster) {
|
public void spawnDojoMonster(final Monster monster) {
|
||||||
Point[] pts = {new Point(140, 0), new Point(190, 7), new Point(187, 7)};
|
Point[] pts = {new Point(140, 0), new Point(190, 7), new Point(187, 7)};
|
||||||
spawnMonsterWithEffect(monster, 15, pts[Randomizer.nextInt(3)]);
|
spawnMonsterWithEffect(monster, 15, pts[Randomizer.nextInt(3)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnMonsterWithEffect(final MapleMonster monster, final int effect, Point pos) {
|
public void spawnMonsterWithEffect(final Monster monster, final int effect, Point pos) {
|
||||||
monster.setMap(this);
|
monster.setMap(this);
|
||||||
Point spos = new Point(pos.x, pos.y - 1);
|
Point spos = new Point(pos.x, pos.y - 1);
|
||||||
spos = calcPointBelow(spos);
|
spos = calcPointBelow(spos);
|
||||||
@@ -2019,7 +2019,7 @@ public class MapleMap {
|
|||||||
applyRemoveAfter(monster);
|
applyRemoveAfter(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnFakeMonster(final MapleMonster monster) {
|
public void spawnFakeMonster(final Monster monster) {
|
||||||
monster.setMap(this);
|
monster.setMap(this);
|
||||||
monster.setFake(true);
|
monster.setFake(true);
|
||||||
spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnFakeMonster(monster, 0)));
|
spawnAndAddRangedMapObject(monster, c -> c.sendPacket(PacketCreator.spawnFakeMonster(monster, 0)));
|
||||||
@@ -2028,7 +2028,7 @@ public class MapleMap {
|
|||||||
addSelfDestructive(monster);
|
addSelfDestructive(monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void makeMonsterReal(final MapleMonster monster) {
|
public void makeMonsterReal(final Monster monster) {
|
||||||
monster.setFake(false);
|
monster.setFake(false);
|
||||||
broadcastMessage(PacketCreator.makeMonsterReal(monster));
|
broadcastMessage(PacketCreator.makeMonsterReal(monster));
|
||||||
monster.aggroUpdateController();
|
monster.aggroUpdateController();
|
||||||
@@ -2079,7 +2079,7 @@ public class MapleMap {
|
|||||||
for (MapleMapObject mo : affectedMonsters) {
|
for (MapleMapObject mo : affectedMonsters) {
|
||||||
if (mist.makeChanceResult()) {
|
if (mist.makeChanceResult()) {
|
||||||
MonsterStatusEffect poisonEffect = new MonsterStatusEffect(Collections.singletonMap(MonsterStatus.POISON, 1), mist.getSourceSkill(), null, false);
|
MonsterStatusEffect poisonEffect = new MonsterStatusEffect(Collections.singletonMap(MonsterStatus.POISON, 1), mist.getSourceSkill(), null, false);
|
||||||
((MapleMonster) mo).applyStatus(mist.getOwner(), poisonEffect, true, duration);
|
((Monster) mo).applyStatus(mist.getOwner(), poisonEffect, true, duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -2650,13 +2650,13 @@ public class MapleMap {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public void addPlayerPuppet(Character player) {
|
public void addPlayerPuppet(Character player) {
|
||||||
for (MapleMonster mm : this.getAllMonsters()) {
|
for (Monster mm : this.getAllMonsters()) {
|
||||||
mm.aggroAddPuppet(player);
|
mm.aggroAddPuppet(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePlayerPuppet(Character player) {
|
public void removePlayerPuppet(Character player) {
|
||||||
for (MapleMonster mm : this.getAllMonsters()) {
|
for (Monster mm : this.getAllMonsters()) {
|
||||||
mm.aggroRemovePuppet(player);
|
mm.aggroRemovePuppet(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2787,7 +2787,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateBossSpawn(MapleMonster monster) {
|
private void updateBossSpawn(Monster monster) {
|
||||||
if (monster.hasBossHPBar()) {
|
if (monster.hasBossHPBar()) {
|
||||||
broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition());
|
broadcastBossHpMessage(monster, monster.hashCode(), monster.makeBossHPBarPacket(), monster.getPosition());
|
||||||
}
|
}
|
||||||
@@ -2802,15 +2802,15 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet) {
|
public void broadcastBossHpMessage(Monster mm, int bossHash, Packet packet) {
|
||||||
broadcastBossHpMessage(mm, bossHash, null, packet, Double.POSITIVE_INFINITY, null);
|
broadcastBossHpMessage(mm, bossHash, null, packet, Double.POSITIVE_INFINITY, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastBossHpMessage(MapleMonster mm, int bossHash, Packet packet, Point rangedFrom) {
|
public void broadcastBossHpMessage(Monster mm, int bossHash, Packet packet, Point rangedFrom) {
|
||||||
broadcastBossHpMessage(mm, bossHash, null, packet, getRangedDistance(), rangedFrom);
|
broadcastBossHpMessage(mm, bossHash, null, packet, getRangedDistance(), rangedFrom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void broadcastBossHpMessage(MapleMonster mm, int bossHash, Character source, Packet packet, double rangeSq, Point rangedFrom) {
|
private void broadcastBossHpMessage(Monster mm, int bossHash, Character source, Packet packet, double rangeSq, Point rangedFrom) {
|
||||||
chrRLock.lock();
|
chrRLock.lock();
|
||||||
try {
|
try {
|
||||||
for (Character chr : characters) {
|
for (Character chr : characters) {
|
||||||
@@ -2966,7 +2966,7 @@ public class MapleMap {
|
|||||||
chr.addVisibleMapObject(o);
|
chr.addVisibleMapObject(o);
|
||||||
|
|
||||||
if (o.getType() == MapleMapObjectType.MONSTER) {
|
if (o.getType() == MapleMapObjectType.MONSTER) {
|
||||||
((MapleMonster) o).aggroUpdateController();
|
((Monster) o).aggroUpdateController();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3062,7 +3062,7 @@ public class MapleMap {
|
|||||||
* @param monster
|
* @param monster
|
||||||
* @param mobTime
|
* @param mobTime
|
||||||
*/
|
*/
|
||||||
public void addMonsterSpawn(MapleMonster monster, int mobTime, int team) {
|
public void addMonsterSpawn(Monster monster, int mobTime, int team) {
|
||||||
Point newpos = calcPointBelow(monster.getPosition());
|
Point newpos = calcPointBelow(monster.getPosition());
|
||||||
newpos.y -= 1;
|
newpos.y -= 1;
|
||||||
SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team);
|
SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team);
|
||||||
@@ -3072,7 +3072,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addAllMonsterSpawn(MapleMonster monster, int mobTime, int team) {
|
public void addAllMonsterSpawn(Monster monster, int mobTime, int team) {
|
||||||
Point newpos = calcPointBelow(monster.getPosition());
|
Point newpos = calcPointBelow(monster.getPosition());
|
||||||
newpos.y -= 1;
|
newpos.y -= 1;
|
||||||
SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team);
|
SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team);
|
||||||
@@ -3182,7 +3182,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void moveMonster(MapleMonster monster, Point reportedPos) {
|
public void moveMonster(Monster monster, Point reportedPos) {
|
||||||
monster.setPosition(reportedPos);
|
monster.setPosition(reportedPos);
|
||||||
for (Character chr : getAllPlayers()) {
|
for (Character chr : getAllPlayers()) {
|
||||||
updateMapObjectVisibility(chr, monster);
|
updateMapObjectVisibility(chr, monster);
|
||||||
@@ -3378,9 +3378,9 @@ public class MapleMap {
|
|||||||
private List<MonsterDropEntry> otherQuestEntry;
|
private List<MonsterDropEntry> otherQuestEntry;
|
||||||
private List<MonsterGlobalDropEntry> globalEntry;
|
private List<MonsterGlobalDropEntry> globalEntry;
|
||||||
private Character chr;
|
private Character chr;
|
||||||
private MapleMonster mob;
|
private Monster mob;
|
||||||
|
|
||||||
protected MobLootEntry(byte droptype, int mobpos, int chRate, Point pos, List<MonsterDropEntry> dropEntry, List<MonsterDropEntry> visibleQuestEntry, List<MonsterDropEntry> otherQuestEntry, List<MonsterGlobalDropEntry> globalEntry, Character chr, MapleMonster mob) {
|
protected MobLootEntry(byte droptype, int mobpos, int chRate, Point pos, List<MonsterDropEntry> dropEntry, List<MonsterDropEntry> visibleQuestEntry, List<MonsterDropEntry> otherQuestEntry, List<MonsterGlobalDropEntry> globalEntry, Character chr, Monster mob) {
|
||||||
this.droptype = droptype;
|
this.droptype = droptype;
|
||||||
this.mobpos = mobpos;
|
this.mobpos = mobpos;
|
||||||
this.chRate = chRate;
|
this.chRate = chRate;
|
||||||
@@ -3620,7 +3620,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void mobMpRecovery() {
|
public void mobMpRecovery() {
|
||||||
for (MapleMonster mob : this.getAllMonsters()) {
|
for (Monster mob : this.getAllMonsters()) {
|
||||||
if (mob.isAlive()) {
|
if (mob.isAlive()) {
|
||||||
mob.heal(0, mob.getLevel());
|
mob.heal(0, mob.getLevel());
|
||||||
}
|
}
|
||||||
@@ -4039,10 +4039,10 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void spawnHorntailOnGroundBelow(final Point targetPoint) { // ayy lmao
|
public void spawnHorntailOnGroundBelow(final Point targetPoint) { // ayy lmao
|
||||||
MapleMonster htIntro = LifeFactory.getMonster(8810026);
|
Monster htIntro = LifeFactory.getMonster(8810026);
|
||||||
spawnMonsterOnGroundBelow(htIntro, targetPoint); // htintro spawn animation converting into horntail detected thanks to Arnah
|
spawnMonsterOnGroundBelow(htIntro, targetPoint); // htintro spawn animation converting into horntail detected thanks to Arnah
|
||||||
|
|
||||||
final MapleMonster ht = LifeFactory.getMonster(8810018);
|
final Monster ht = LifeFactory.getMonster(8810018);
|
||||||
ht.setParentMobOid(htIntro.getObjectId());
|
ht.setParentMobOid(htIntro.getObjectId());
|
||||||
ht.addListener(new MonsterListener() {
|
ht.addListener(new MonsterListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -4061,7 +4061,7 @@ public class MapleMap {
|
|||||||
spawnMonsterOnGroundBelow(ht, targetPoint);
|
spawnMonsterOnGroundBelow(ht, targetPoint);
|
||||||
|
|
||||||
for (int x = 8810002; x <= 8810009; x++) {
|
for (int x = 8810002; x <= 8810009; x++) {
|
||||||
MapleMonster m = LifeFactory.getMonster(x);
|
Monster m = LifeFactory.getMonster(x);
|
||||||
m.setParentMobOid(htIntro.getObjectId());
|
m.setParentMobOid(htIntro.getObjectId());
|
||||||
|
|
||||||
m.addListener(new MonsterListener() {
|
m.addListener(new MonsterListener() {
|
||||||
@@ -4323,7 +4323,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
for (MapleMapObject mmo : this.mapobjects.values()) {
|
for (MapleMapObject mmo : this.mapobjects.values()) {
|
||||||
if (mmo.getType() == MapleMapObjectType.MONSTER) {
|
if (mmo.getType() == MapleMapObjectType.MONSTER) {
|
||||||
MapleMonster mob = (MapleMonster) mmo;
|
Monster mob = (Monster) mmo;
|
||||||
if (mob.getTeam() == team) {
|
if (mob.getTeam() == team) {
|
||||||
skill.getSkill().applyEffect(null, mob, false, null);
|
skill.getSkill().applyEffect(null, mob, false, null);
|
||||||
}
|
}
|
||||||
@@ -4395,7 +4395,7 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void dispose() {
|
public void dispose() {
|
||||||
for(MapleMonster mm : this.getAllMonsters()) {
|
for(Monster mm : this.getAllMonsters()) {
|
||||||
mm.dispose();
|
mm.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,8 +110,8 @@ public class MapleMapFactory {
|
|||||||
|
|
||||||
private static void loadLifeRaw(MapleMap map, int id, String type, int cy, int f, int fh, int rx0, int rx1, int x, int y, int hide, int mobTime, int team) {
|
private static void loadLifeRaw(MapleMap map, int id, String type, int cy, int f, int fh, int rx0, int rx1, int x, int y, int hide, int mobTime, int team) {
|
||||||
AbstractLoadedLife myLife = loadLife(id, type, cy, f, fh, rx0, rx1, x, y, hide);
|
AbstractLoadedLife myLife = loadLife(id, type, cy, f, fh, rx0, rx1, x, y, hide);
|
||||||
if (myLife instanceof MapleMonster) {
|
if (myLife instanceof Monster) {
|
||||||
MapleMonster monster = (MapleMonster) myLife;
|
Monster monster = (Monster) myLife;
|
||||||
|
|
||||||
if (mobTime == -1) { //does not respawn, force spawn once
|
if (mobTime == -1) { //does not respawn, force spawn once
|
||||||
map.spawnMonster(monster);
|
map.spawnMonster(monster);
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ import client.SkillFactory;
|
|||||||
import constants.skills.*;
|
import constants.skills.*;
|
||||||
import net.packet.Packet;
|
import net.packet.Packet;
|
||||||
import server.MapleStatEffect;
|
import server.MapleStatEffect;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
|
import server.life.Monster;
|
||||||
import tools.PacketCreator;
|
import tools.PacketCreator;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -41,13 +41,13 @@ import java.awt.*;
|
|||||||
public class MapleMist extends AbstractMapleMapObject {
|
public class MapleMist extends AbstractMapleMapObject {
|
||||||
private Rectangle mistPosition;
|
private Rectangle mistPosition;
|
||||||
private Character owner = null;
|
private Character owner = null;
|
||||||
private MapleMonster mob = null;
|
private Monster mob = null;
|
||||||
private MapleStatEffect source;
|
private MapleStatEffect source;
|
||||||
private MobSkill skill;
|
private MobSkill skill;
|
||||||
private boolean isMobMist, isPoisonMist, isRecoveryMist;
|
private boolean isMobMist, isPoisonMist, isRecoveryMist;
|
||||||
private int skillDelay;
|
private int skillDelay;
|
||||||
|
|
||||||
public MapleMist(Rectangle mistPosition, MapleMonster mob, MobSkill skill) {
|
public MapleMist(Rectangle mistPosition, Monster mob, MobSkill skill) {
|
||||||
this.mistPosition = mistPosition;
|
this.mistPosition = mistPosition;
|
||||||
this.mob = mob;
|
this.mob = mob;
|
||||||
this.skill = skill;
|
this.skill = skill;
|
||||||
@@ -112,7 +112,7 @@ public class MapleMist extends AbstractMapleMapObject {
|
|||||||
return skillDelay;
|
return skillDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMonster getMobOwner() {
|
public Monster getMobOwner() {
|
||||||
return mob;
|
return mob;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,10 +61,10 @@ import server.CashShop.CashItemFactory;
|
|||||||
import server.CashShop.SpecialCashItem;
|
import server.CashShop.SpecialCashItem;
|
||||||
import server.*;
|
import server.*;
|
||||||
import server.events.gm.Snowball;
|
import server.events.gm.Snowball;
|
||||||
import server.life.MapleMonster;
|
|
||||||
import server.life.MapleNPC;
|
import server.life.MapleNPC;
|
||||||
import server.life.MaplePlayerNPC;
|
import server.life.MaplePlayerNPC;
|
||||||
import server.life.MobSkill;
|
import server.life.MobSkill;
|
||||||
|
import server.life.Monster;
|
||||||
import server.maps.*;
|
import server.maps.*;
|
||||||
import server.maps.MapleMiniGame.MiniGameResult;
|
import server.maps.MapleMiniGame.MiniGameResult;
|
||||||
import server.movement.LifeMovementFragment;
|
import server.movement.LifeMovementFragment;
|
||||||
@@ -1327,7 +1327,7 @@ public class PacketCreator {
|
|||||||
* @param newSpawn Is it a new spawn?
|
* @param newSpawn Is it a new spawn?
|
||||||
* @return The spawn monster packet.
|
* @return The spawn monster packet.
|
||||||
*/
|
*/
|
||||||
public static Packet spawnMonster(MapleMonster life, boolean newSpawn) {
|
public static Packet spawnMonster(Monster life, boolean newSpawn) {
|
||||||
return spawnMonsterInternal(life, false, newSpawn, false, 0, false);
|
return spawnMonsterInternal(life, false, newSpawn, false, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1339,7 +1339,7 @@ public class PacketCreator {
|
|||||||
* @param effect The spawn effect.
|
* @param effect The spawn effect.
|
||||||
* @return The spawn monster packet.
|
* @return The spawn monster packet.
|
||||||
*/
|
*/
|
||||||
public static Packet spawnMonster(MapleMonster life, boolean newSpawn, int effect) {
|
public static Packet spawnMonster(Monster life, boolean newSpawn, int effect) {
|
||||||
return spawnMonsterInternal(life, false, newSpawn, false, effect, false);
|
return spawnMonsterInternal(life, false, newSpawn, false, effect, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1351,7 +1351,7 @@ public class PacketCreator {
|
|||||||
* @param aggro Aggressive monster?
|
* @param aggro Aggressive monster?
|
||||||
* @return The monster control packet.
|
* @return The monster control packet.
|
||||||
*/
|
*/
|
||||||
public static Packet controlMonster(MapleMonster life, boolean newSpawn, boolean aggro) {
|
public static Packet controlMonster(Monster life, boolean newSpawn, boolean aggro) {
|
||||||
return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false);
|
return spawnMonsterInternal(life, true, newSpawn, aggro, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1361,7 +1361,7 @@ public class PacketCreator {
|
|||||||
* @param life
|
* @param life
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Packet removeMonsterInvisibility(MapleMonster life) {
|
public static Packet removeMonsterInvisibility(Monster life) {
|
||||||
final OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
final OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
||||||
p.writeByte(1);
|
p.writeByte(1);
|
||||||
p.writeInt(life.getObjectId());
|
p.writeInt(life.getObjectId());
|
||||||
@@ -1374,7 +1374,7 @@ public class PacketCreator {
|
|||||||
* @param life
|
* @param life
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Packet makeMonsterInvisible(MapleMonster life) {
|
public static Packet makeMonsterInvisible(Monster life) {
|
||||||
return spawnMonsterInternal(life, true, false, false, 0, true);
|
return spawnMonsterInternal(life, true, false, false, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1444,7 +1444,7 @@ public class PacketCreator {
|
|||||||
* @param effect The spawn effect to use.
|
* @param effect The spawn effect to use.
|
||||||
* @return The spawn/control packet.
|
* @return The spawn/control packet.
|
||||||
*/
|
*/
|
||||||
private static Packet spawnMonsterInternal(MapleMonster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) {
|
private static Packet spawnMonsterInternal(Monster life, boolean requestController, boolean newSpawn, boolean aggro, int effect, boolean makeInvis) {
|
||||||
if (makeInvis) {
|
if (makeInvis) {
|
||||||
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
||||||
p.writeByte(0);
|
p.writeByte(0);
|
||||||
@@ -1485,7 +1485,7 @@ public class PacketCreator {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (life.getParentMobOid() != 0) {
|
if (life.getParentMobOid() != 0) {
|
||||||
MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid());
|
Monster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid());
|
||||||
if (parentMob != null && parentMob.isAlive()) {
|
if (parentMob != null && parentMob.isAlive()) {
|
||||||
p.writeByte(effect != 0 ? effect : -3);
|
p.writeByte(effect != 0 ? effect : -3);
|
||||||
p.writeInt(life.getParentMobOid());
|
p.writeInt(life.getParentMobOid());
|
||||||
@@ -1508,7 +1508,7 @@ public class PacketCreator {
|
|||||||
* @param effect The effect to show when spawning.
|
* @param effect The effect to show when spawning.
|
||||||
* @return The packet to spawn the mob as non-targettable.
|
* @return The packet to spawn the mob as non-targettable.
|
||||||
*/
|
*/
|
||||||
public static Packet spawnFakeMonster(MapleMonster life, int effect) {
|
public static Packet spawnFakeMonster(Monster life, int effect) {
|
||||||
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER_CONTROL);
|
||||||
p.writeByte(1);
|
p.writeByte(1);
|
||||||
p.writeInt(life.getObjectId());
|
p.writeInt(life.getObjectId());
|
||||||
@@ -1536,7 +1536,7 @@ public class PacketCreator {
|
|||||||
* @param life The mob to make targettable.
|
* @param life The mob to make targettable.
|
||||||
* @return The packet to make the mob targettable.
|
* @return The packet to make the mob targettable.
|
||||||
*/
|
*/
|
||||||
public static Packet makeMonsterReal(MapleMonster life) {
|
public static Packet makeMonsterReal(Monster life) {
|
||||||
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER);
|
OutPacket p = OutPacket.create(SendOpcode.SPAWN_MONSTER);
|
||||||
p.writeInt(life.getObjectId());
|
p.writeInt(life.getObjectId());
|
||||||
p.writeByte(5);
|
p.writeByte(5);
|
||||||
@@ -6692,7 +6692,7 @@ public class PacketCreator {
|
|||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Packet MobDamageMobFriendly(MapleMonster mob, int damage, int remainingHp) {
|
public static Packet MobDamageMobFriendly(Monster mob, int damage, int remainingHp) {
|
||||||
final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_MONSTER);
|
final OutPacket p = OutPacket.create(SendOpcode.DAMAGE_MONSTER);
|
||||||
p.writeInt(mob.getObjectId());
|
p.writeInt(mob.getObjectId());
|
||||||
p.writeByte(1); // direction ?
|
p.writeByte(1); // direction ?
|
||||||
|
|||||||
Reference in new issue
Block a user