Fix map spawn
Fix map failing to spawn in some cases.
This commit is contained in:
@@ -127,4 +127,8 @@ Sparta lv100 n
|
|||||||
Diversas alterações corretivas em itens das tabelas drop_data e reactordrops no BD.
|
Diversas alterações corretivas em itens das tabelas drop_data e reactordrops no BD.
|
||||||
|
|
||||||
04 Abril 2017,
|
04 Abril 2017,
|
||||||
Correção na API sobre progresso das quests.
|
Correção na API sobre progresso das quests.
|
||||||
|
|
||||||
|
06 Abril 2017,
|
||||||
|
Tentativa de correção em casos de falta de respawn em certas areas do jogo.
|
||||||
|
Otimização de funções que lidam com popular ou despopular areas.
|
||||||
@@ -3,17 +3,15 @@
|
|||||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||||
<group>
|
<group>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/server/CashShop.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/scripts/npc/world0/9201134.js</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/client/MapleQuestStatus.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/scripts/npc/world0/2030010.js</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/scripting/map/MapScriptMethods.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/scripts/npc/world0/2091005.js</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/scripting/AbstractPlayerInteraction.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/src/server/life/SpawnPoint.java</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/scripting/npc/NPCConversationManager.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/scripts/npc/world0/2012002.js</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/client/MapleClient.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/src/server/maps/MapleMapFactory.java</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/server/life/MapleMonster.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/src/server/life/MapleMonster.java</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/client/MapleCharacter.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/scripts/event/Boats.js</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/client/MonsterBook.java</file>
|
<file>file:/C:/Nexon/MapleSolaxia/src/server/maps/MapleMap.java</file>
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/tools/MaplePacketCreator.java</file>
|
|
||||||
<file>file:/C:/Nexon/MapleSolaxia/src/scripting/event/EventInstanceManager.java</file>
|
|
||||||
</group>
|
</group>
|
||||||
</open-files>
|
</open-files>
|
||||||
</project-private>
|
</project-private>
|
||||||
|
|||||||
0
scripts/map/onUserEnter/921100300.txt
Normal file
0
scripts/map/onUserEnter/921100300.txt
Normal file
0
scripts/map/onUserEnter/923010000.txt
Normal file
0
scripts/map/onUserEnter/923010000.txt
Normal file
@@ -41,9 +41,12 @@ if (mode == 0 && status == 1) {
|
|||||||
status++;
|
status++;
|
||||||
else
|
else
|
||||||
cm.dispose();
|
cm.dispose();
|
||||||
if (status == 1)
|
|
||||||
|
if (status == 1) {
|
||||||
cm.sendNext ("Alright, see you next time. Take care.");
|
cm.sendNext ("Alright, see you next time. Take care.");
|
||||||
else if (status == 2)
|
}
|
||||||
|
else if (status == 2) {
|
||||||
cm.warp(200000111, 0);// back to Orbis jetty
|
cm.warp(200000111, 0);// back to Orbis jetty
|
||||||
cm.dispose();
|
cm.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,18 @@ var sel;
|
|||||||
actionx = {"Mental" : false, "Physical" : false};
|
actionx = {"Mental" : false, "Physical" : false};
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
|
if(cm.isQuestStarted(6192)) {
|
||||||
|
if(cm.getWarpMap(921100300).getCharacters().size() > 0)
|
||||||
|
cm.sendOk("There is someone currently in this map, come back later.");
|
||||||
|
else {
|
||||||
|
cm.resetMapObjects(921100300);
|
||||||
|
cm.warp(921100300);
|
||||||
|
}
|
||||||
|
|
||||||
|
cm.dispose();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(cm.getPlayer().getLevel() >= 70 && parseInt(cm.getJobId() / 100) == 1)){
|
if (!(cm.getPlayer().getLevel() >= 70 && parseInt(cm.getJobId() / 100) == 1)){
|
||||||
cm.sendNext("Hi there.");
|
cm.sendNext("Hi there.");
|
||||||
cm.dispose();
|
cm.dispose();
|
||||||
|
|||||||
12
scripts/npc/world0/2022004.js
Normal file
12
scripts/npc/world0/2022004.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
function start() {
|
||||||
|
cm.sendNext("You did a great job back there, " + cm.getPlayer().getName() + ", well done. Now I will transport you back to El Nath. Have the pendant in your possession and talk to me when you feel ready to receive the new skill.");
|
||||||
|
}
|
||||||
|
|
||||||
|
function action(mode, type, selection) {
|
||||||
|
if (mode == -1) {
|
||||||
|
cm.dispose();
|
||||||
|
} else {
|
||||||
|
cm.warp(211000000,"in01");
|
||||||
|
cm.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,10 +22,13 @@
|
|||||||
function start() {
|
function start() {
|
||||||
if(cm.isQuestCompleted(6002))
|
if(cm.isQuestCompleted(6002))
|
||||||
cm.sendOk("Thanks for saving the pork.");
|
cm.sendOk("Thanks for saving the pork.");
|
||||||
else if(cm.getClient().getChannelServer().getMapFactory().getMap(923010000).getCharacters().size() > 0)
|
else if(cm.getWarpMap(923010000).getCharacters().size() > 0)
|
||||||
cm.sendOk("There is currently someone in this map, come back later.");
|
cm.sendOk("There is currently someone in this map, come back later.");
|
||||||
else if(cm.isQuestStarted(6002))
|
else if(cm.isQuestStarted(6002)) {
|
||||||
|
cm.resetMapObjects(923010000);
|
||||||
cm.warp(923010000);
|
cm.warp(923010000);
|
||||||
|
}
|
||||||
|
|
||||||
else cm.sendSimple("Only few adventurers, from a selected public, are eligible to protect the Watch Hog.");
|
else cm.sendSimple("Only few adventurers, from a selected public, are eligible to protect the Watch Hog.");
|
||||||
cm.dispose();
|
cm.dispose();
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ var belts = Array(1132000, 1132001, 1132002, 1132003, 1132004);
|
|||||||
var belt_level = Array(25, 35, 45, 60, 75);
|
var belt_level = Array(25, 35, 45, 60, 75);
|
||||||
|
|
||||||
/* var belt_points = Array(200, 1800, 4000, 9200, 17000); */
|
/* var belt_points = Array(200, 1800, 4000, 9200, 17000); */
|
||||||
var belt_points = Array(5, 45, 100, 230, 425); /* Watered down version */
|
var belt_points = Array(10, 90, 200, 460, 850); /* Watered down version */
|
||||||
|
|
||||||
var status = -1;
|
var status = -1;
|
||||||
var selectedMenu = -1;
|
var selectedMenu = -1;
|
||||||
|
|||||||
9
scripts/portal/s4common1_exit.js
Normal file
9
scripts/portal/s4common1_exit.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
//Author: Ronan
|
||||||
|
|
||||||
|
function enter(pi) {
|
||||||
|
if(pi.hasItem(4031495)) pi.warp(921100301);
|
||||||
|
else pi.warp(211040100);
|
||||||
|
|
||||||
|
pi.getWarpMap(921100300).clearMapObjects();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -25,8 +25,10 @@ function enter(pi) {
|
|||||||
pi.removeAll(4031508);
|
pi.removeAll(4031508);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pi.getClient().getChannelServer().getMapFactory().getMap(923010000).getCharacters().size() < 1)
|
|
||||||
pi.getClient().getChannelServer().getMapFactory().getMap(923010000).killAllMonsters();
|
|
||||||
pi.warp(230000003, "out00");
|
pi.warp(230000003, "out00");
|
||||||
|
if (pi.getClient().getChannelServer().getMapFactory().getMap(923010000).getCharacters().size() == 0) {
|
||||||
|
pi.getClient().getChannelServer().getMapFactory().getMap(923010000).clearMapObjects();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ public class AbstractPlayerInteraction {
|
|||||||
return chars;
|
return chars;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MapleMap getWarpMap(int map) {
|
public MapleMap getWarpMap(int map) {
|
||||||
MapleMap target;
|
MapleMap target;
|
||||||
if (getPlayer().getEventInstance() == null) {
|
if (getPlayer().getEventInstance() == null) {
|
||||||
target = c.getChannelServer().getMapFactory().getMap(map);
|
target = c.getChannelServer().getMapFactory().getMap(map);
|
||||||
@@ -137,6 +137,10 @@ public class AbstractPlayerInteraction {
|
|||||||
public MapleMap getMap(int map) {
|
public MapleMap getMap(int map) {
|
||||||
return getWarpMap(map);
|
return getWarpMap(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetMapObjects(int mapid) {
|
||||||
|
getWarpMap(mapid).resetMapObjects();
|
||||||
|
}
|
||||||
|
|
||||||
public EventManager getEventManager(String event) {
|
public EventManager getEventManager(String event) {
|
||||||
return getClient().getEventManager(event);
|
return getClient().getEventManager(event);
|
||||||
|
|||||||
@@ -439,14 +439,15 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
|||||||
eventInstance.monsterKilled(this);
|
eventInstance.monsterKilled(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// idk V just a troll
|
|
||||||
|
MapleCharacter looter = map.getCharacterById(getHighestDamagerId());
|
||||||
|
return looter != null ? looter : killer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispatchMonsterKilled() {
|
||||||
for (MonsterListener listener : listeners.toArray(new MonsterListener[listeners.size()])) {
|
for (MonsterListener listener : listeners.toArray(new MonsterListener[listeners.size()])) {
|
||||||
listener.monsterKilled(getAnimationTime("die1"));
|
listener.monsterKilled(getAnimationTime("die1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleCharacter looter = map.getCharacterById(getHighestDamagerId());
|
|
||||||
|
|
||||||
return looter != null ? looter : killer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// should only really be used to determine drop owner
|
// should only really be used to determine drop owner
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import java.awt.Point;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class SpawnPoint {
|
public class SpawnPoint {
|
||||||
|
|
||||||
private int monster, mobTime, team, fh, f;
|
private int monster, mobTime, team, fh, f;
|
||||||
private Point pos;
|
private Point pos;
|
||||||
private long nextPossibleSpawn;
|
private long nextPossibleSpawn;
|
||||||
@@ -45,9 +44,17 @@ public class SpawnPoint {
|
|||||||
this.mobInterval = mobInterval;
|
this.mobInterval = mobInterval;
|
||||||
this.nextPossibleSpawn = System.currentTimeMillis();
|
this.nextPossibleSpawn = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSpawned() {
|
||||||
|
return spawnedMonsters.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void denySpawn(boolean val) {
|
||||||
|
spawnedMonsters.set((val == false) ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean shouldSpawn() {
|
public boolean shouldSpawn() {
|
||||||
if (mobTime < 0 || ((mobTime != 0 || immobile) && spawnedMonsters.get() > 0) || spawnedMonsters.get() > 2) {//lol
|
if (mobTime < 0 || spawnedMonsters.get() > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +62,7 @@ public class SpawnPoint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldForceSpawn() {
|
public boolean shouldForceSpawn() {
|
||||||
if (mobTime < 0 || ((mobTime != 0 || immobile) && spawnedMonsters.get() > 0) || spawnedMonsters.get() > 2) {//lol
|
if (mobTime < 0 || spawnedMonsters.get() > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,4 +105,12 @@ public class SpawnPoint {
|
|||||||
public final int getFh() {
|
public final int getFh() {
|
||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMobTime() {
|
||||||
|
return mobTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTeam() {
|
||||||
|
return team;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ public class MapleMap {
|
|||||||
private static final List<MapleMapObjectType> rangedMapobjectTypes = Arrays.asList(MapleMapObjectType.SHOP, MapleMapObjectType.ITEM, MapleMapObjectType.NPC, MapleMapObjectType.MONSTER, MapleMapObjectType.DOOR, MapleMapObjectType.SUMMON, MapleMapObjectType.REACTOR);
|
private static final List<MapleMapObjectType> rangedMapobjectTypes = Arrays.asList(MapleMapObjectType.SHOP, MapleMapObjectType.ITEM, MapleMapObjectType.NPC, MapleMapObjectType.MONSTER, MapleMapObjectType.DOOR, MapleMapObjectType.SUMMON, MapleMapObjectType.REACTOR);
|
||||||
private Map<Integer, MapleMapObject> mapobjects = new LinkedHashMap<>();
|
private Map<Integer, MapleMapObject> mapobjects = new LinkedHashMap<>();
|
||||||
private Collection<SpawnPoint> monsterSpawn = Collections.synchronizedList(new LinkedList<SpawnPoint>());
|
private Collection<SpawnPoint> monsterSpawn = Collections.synchronizedList(new LinkedList<SpawnPoint>());
|
||||||
|
private Collection<SpawnPoint> allMonsterSpawn = Collections.synchronizedList(new LinkedList<SpawnPoint>());
|
||||||
private AtomicInteger spawnedMonstersOnMap = new AtomicInteger(0);
|
private AtomicInteger spawnedMonstersOnMap = new AtomicInteger(0);
|
||||||
private Collection<MapleCharacter> characters = new LinkedHashSet<>();
|
private Collection<MapleCharacter> characters = new LinkedHashSet<>();
|
||||||
private Map<Integer, MaplePortal> portals = new HashMap<>();
|
private Map<Integer, MaplePortal> portals = new HashMap<>();
|
||||||
@@ -672,6 +673,8 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
dropFromMonster(dropOwner, monster);
|
dropFromMonster(dropOwner, monster);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.dispatchMonsterKilled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killFriendlies(MapleMonster mob) {
|
public void killFriendlies(MapleMonster mob) {
|
||||||
@@ -713,20 +716,20 @@ public class MapleMap {
|
|||||||
if (monster.getStats().isFriendly()) {
|
if (monster.getStats().isFriendly()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
spawnedMonstersOnMap.decrementAndGet();
|
|
||||||
monster.setHp(0);
|
killMonster(monster, null, false, false, 1);
|
||||||
broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), true), monster.getPosition());
|
|
||||||
removeMapObject(monster);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void killAllMonsters() {
|
public void killAllMonsters() {
|
||||||
|
for (SpawnPoint spawnPoint : monsterSpawn) {
|
||||||
|
spawnPoint.denySpawn(true);
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
MapleMonster monster = (MapleMonster) monstermo;
|
||||||
spawnedMonstersOnMap.decrementAndGet();
|
|
||||||
monster.setHp(0);
|
killMonster(monster, null, false, false, 1);
|
||||||
broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), true), monster.getPosition());
|
|
||||||
removeMapObject(monster);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1032,6 +1035,7 @@ public class MapleMap {
|
|||||||
|
|
||||||
public void spawnMonster(final MapleMonster monster) {
|
public void spawnMonster(final MapleMonster monster) {
|
||||||
if (mobCapacity != -1 && mobCapacity == spawnedMonstersOnMap.get()) {
|
if (mobCapacity != -1 && mobCapacity == spawnedMonstersOnMap.get()) {
|
||||||
|
System.out.println("got here");
|
||||||
return;//PyPQ
|
return;//PyPQ
|
||||||
}
|
}
|
||||||
monster.setMap(this);
|
monster.setMap(this);
|
||||||
@@ -1050,11 +1054,13 @@ public class MapleMap {
|
|||||||
}, null);
|
}, null);
|
||||||
updateMonsterController(monster);
|
updateMonsterController(monster);
|
||||||
|
|
||||||
if (monster.getDropPeriodTime() > 0) { //9300102 - Watchhog, 9300061 - Moon Bunny (HPQ)
|
if (monster.getDropPeriodTime() > 0) { //9300102 - Watchhog, 9300061 - Moon Bunny (HPQ), 9300093 - Tylus
|
||||||
if (monster.getId() == 9300102) {
|
if (monster.getId() == 9300102) {
|
||||||
monsterItemDrop(monster, new Item(4031507, (short) 0, (short) 1), monster.getDropPeriodTime());
|
monsterItemDrop(monster, new Item(4031507, (short) 0, (short) 1), monster.getDropPeriodTime());
|
||||||
} else if (monster.getId() == 9300061) {
|
} else if (monster.getId() == 9300061) {
|
||||||
monsterItemDrop(monster, new Item(4001101, (short) 0, (short) 1), monster.getDropPeriodTime() / 3);
|
monsterItemDrop(monster, new Item(4001101, (short) 0, (short) 1), monster.getDropPeriodTime() / 3);
|
||||||
|
} else if (monster.getId() == 9300093) {
|
||||||
|
monsterItemDrop(monster, new Item(4031495, (short) 0, (short) 1), monster.getDropPeriodTime());
|
||||||
} else {
|
} else {
|
||||||
FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "UNCODED TIMED MOB DETECTED: " + monster.getId());
|
FilePrinter.printError(FilePrinter.UNHANDLED_EVENT, "UNCODED TIMED MOB DETECTED: " + monster.getId());
|
||||||
}
|
}
|
||||||
@@ -1782,7 +1788,13 @@ public class MapleMap {
|
|||||||
if (sp.shouldSpawn() || mobTime == -1) {// -1 does not respawn and should not either but force ONE spawn
|
if (sp.shouldSpawn() || mobTime == -1) {// -1 does not respawn and should not either but force ONE spawn
|
||||||
spawnMonster(sp.getMonster());
|
spawnMonster(sp.getMonster());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAllMonsterSpawn(MapleMonster monster, int mobTime, int team) {
|
||||||
|
Point newpos = calcPointBelow(monster.getPosition());
|
||||||
|
newpos.y -= 1;
|
||||||
|
SpawnPoint sp = new SpawnPoint(monster, newpos, !monster.isMobile(), mobTime, mobInterval, team);
|
||||||
|
allMonsterSpawn.add(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<MapleCharacter> getCharacters() {
|
public Collection<MapleCharacter> getCharacters() {
|
||||||
@@ -2029,6 +2041,13 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void instanceMapFirstSpawn() {
|
||||||
|
for(SpawnPoint spawnPoint: allMonsterSpawn) {
|
||||||
|
if(spawnPoint.getMobTime() == -1) //just those allowed to be spawned only once
|
||||||
|
spawnMonster(spawnPoint.getMonster());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void instanceMapRespawn() {
|
public void instanceMapRespawn() {
|
||||||
final int numShouldSpawn = (short) ((monsterSpawn.size() - spawnedMonstersOnMap.get()));//Fking lol'd
|
final int numShouldSpawn = (short) ((monsterSpawn.size() - spawnedMonstersOnMap.get()));//Fking lol'd
|
||||||
@@ -2045,6 +2064,12 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void restoreMapSpawnPoints() {
|
||||||
|
for (SpawnPoint spawnPoint : monsterSpawn) {
|
||||||
|
spawnPoint.denySpawn(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void respawn() {
|
public void respawn() {
|
||||||
if (characters.isEmpty()) {
|
if (characters.isEmpty()) {
|
||||||
@@ -2059,9 +2084,10 @@ public class MapleMap {
|
|||||||
if (spawnPoint.shouldSpawn()) {
|
if (spawnPoint.shouldSpawn()) {
|
||||||
spawnMonster(spawnPoint.getMonster());
|
spawnMonster(spawnPoint.getMonster());
|
||||||
spawned++;
|
spawned++;
|
||||||
}
|
|
||||||
if (spawned >= numShouldSpawn) {
|
if (spawned >= numShouldSpawn) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2395,4 +2421,17 @@ public class MapleMap {
|
|||||||
public short getMobInterval() {
|
public short getMobInterval() {
|
||||||
return mobInterval;
|
return mobInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearMapObjects() {
|
||||||
|
clearDrops();
|
||||||
|
killAllMonsters();
|
||||||
|
resetReactors();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetMapObjects() {
|
||||||
|
clearMapObjects();
|
||||||
|
|
||||||
|
restoreMapSpawnPoints();
|
||||||
|
instanceMapFirstSpawn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class MapleMapFactory {
|
|||||||
this.world = world;
|
this.world = world;
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapleMap getMap(int mapid) {
|
public MapleMap getMap(int mapid) {
|
||||||
Integer omapid = Integer.valueOf(mapid);
|
Integer omapid = Integer.valueOf(mapid);
|
||||||
MapleMap map = maps.get(omapid);
|
MapleMap map = maps.get(omapid);
|
||||||
@@ -148,6 +148,7 @@ public class MapleMapFactory {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MapleData life : mapData.getChildByPath("life")) {
|
for (MapleData life : mapData.getChildByPath("life")) {
|
||||||
String id = MapleDataTool.getString(life.getChildByPath("id"));
|
String id = MapleDataTool.getString(life.getChildByPath("id"));
|
||||||
String type = MapleDataTool.getString(life.getChildByPath("type"));
|
String type = MapleDataTool.getString(life.getChildByPath("type"));
|
||||||
@@ -164,10 +165,14 @@ public class MapleMapFactory {
|
|||||||
} else {
|
} else {
|
||||||
map.addMonsterSpawn(monster, mobTime, team);
|
map.addMonsterSpawn(monster, mobTime, team);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//should the map be reseted, use allMonsterSpawn list of monsters to spawn them again
|
||||||
|
map.addAllMonsterSpawn(monster, mobTime, team);
|
||||||
} else {
|
} else {
|
||||||
map.addMapObject(myLife);
|
map.addMapObject(myLife);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapData.getChildByPath("reactor") != null) {
|
if (mapData.getChildByPath("reactor") != null) {
|
||||||
for (MapleData reactor : mapData.getChildByPath("reactor")) {
|
for (MapleData reactor : mapData.getChildByPath("reactor")) {
|
||||||
String id = MapleDataTool.getString(reactor.getChildByPath("id"));
|
String id = MapleDataTool.getString(reactor.getChildByPath("id"));
|
||||||
|
|||||||
@@ -4253,15 +4253,12 @@
|
|||||||
<string name="tn" value=""/>
|
<string name="tn" value=""/>
|
||||||
</imgdir>
|
</imgdir>
|
||||||
<imgdir name="2">
|
<imgdir name="2">
|
||||||
<string name="pn" value="out00"/>
|
<string name="pn" value="sp"/>
|
||||||
<int name="pt" value="2"/>
|
<int name="pt" value="0"/>
|
||||||
<int name="x" value="-364"/>
|
<int name="x" value="-364"/>
|
||||||
<int name="y" value="-508"/>
|
<int name="y" value="-508"/>
|
||||||
<int name="tm" value="211000000"/>
|
<int name="tm" value="999999999"/>
|
||||||
<string name="tn" value="in01"/>
|
<string name="tn" value=""/>
|
||||||
<string name="script" value=""/>
|
|
||||||
<int name="hideTooltip" value="0"/>
|
|
||||||
<int name="delay" value="0"/>
|
|
||||||
</imgdir>
|
</imgdir>
|
||||||
<imgdir name="3">
|
<imgdir name="3">
|
||||||
<string name="pn" value="out01"/>
|
<string name="pn" value="out01"/>
|
||||||
@@ -4270,7 +4267,7 @@
|
|||||||
<int name="y" value="-207"/>
|
<int name="y" value="-207"/>
|
||||||
<int name="tm" value="999999999"/>
|
<int name="tm" value="999999999"/>
|
||||||
<string name="tn" value=""/>
|
<string name="tn" value=""/>
|
||||||
<string name="script" value="s4common1_clear"/>
|
<string name="script" value="s4common1_exit"/>
|
||||||
<int name="hideTooltip" value="0"/>
|
<int name="hideTooltip" value="0"/>
|
||||||
<int name="delay" value="0"/>
|
<int name="delay" value="0"/>
|
||||||
</imgdir>
|
</imgdir>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
<float name="fs" value="10.0"/>
|
<float name="fs" value="10.0"/>
|
||||||
<int name="summonType" value="1"/>
|
<int name="summonType" value="1"/>
|
||||||
<int name="damagedByMob" value="1"/>
|
<int name="damagedByMob" value="1"/>
|
||||||
|
<int name="dropItemPeriod" value="10"/>
|
||||||
</imgdir>
|
</imgdir>
|
||||||
<imgdir name="stand">
|
<imgdir name="stand">
|
||||||
<canvas name="0" width="68" height="81">
|
<canvas name="0" width="68" height="81">
|
||||||
|
|||||||
Reference in New Issue
Block a user