diff --git a/mychanges_ptbr.txt b/mychanges_ptbr.txt
index fc09183ebb..a1368a5fcc 100644
--- a/mychanges_ptbr.txt
+++ b/mychanges_ptbr.txt
@@ -2,6 +2,8 @@ NEW NPC SCRIPTS:
Coco -> 9000017
Agent E -> 9000036
+NEW NPC SHOP:
+ Spindle -> 9201082
LOGS:
@@ -116,4 +118,7 @@ Inclus
01 - 02 Abril 2017,
Correção de bug que impedia carregamento do mapa Singapore: Spooky World.
-Adição dos cards de mob restantes no drop_data do BD.
\ No newline at end of file
+Adição dos cards de mob restantes no drop_data do BD.
+
+03 Abril 2017,
+Inclusão de scripts para interceptar condições de corrida em eventos de viagem.
\ No newline at end of file
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index f3a54d3653..2f34f13695 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -3,8 +3,9 @@
- file:/C:/Nexon/MapleSolaxia/src/provider/MapleDataTool.java
- file:/C:/Nexon/MapleSolaxia/src/server/maps/MapleMapFactory.java
+ file:/C:/Nexon/MapleSolaxia/src/tools/LogHelper.java
+ file:/C:/Nexon/MapleSolaxia/src/tools/FilePrinter.java
+ file:/C:/Nexon/MapleSolaxia/src/tools/MapleLogger.java
diff --git a/scripts/event/Genie.js b/scripts/event/Genie.js
index 38bf6dca3c..b3d7cd3d7d 100644
--- a/scripts/event/Genie.js
+++ b/scripts/event/Genie.js
@@ -22,7 +22,7 @@
importPackage(Packages.tools);
//Time Setting is in millisecond
-var closeTime = 60 * 1000; //The time to close the gate
+var closeTime = 50 * 1000; //The time to close the gate
var beginTime = 60 * 1000; //The time to begin the ride
var rideTime = 60 * 1000; //The time that require move to destination
var Orbis_btf;
diff --git a/scripts/map/onUserEnter/101000300.js b/scripts/map/onUserEnter/101000300.js
new file mode 100644
index 0000000000..5965acd17a
--- /dev/null
+++ b/scripts/map/onUserEnter/101000300.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Boats";
+var toMap = 200090010;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/103000000.js b/scripts/map/onUserEnter/103000000.js
new file mode 100644
index 0000000000..04bc08a5ca
--- /dev/null
+++ b/scripts/map/onUserEnter/103000000.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "AirPlane";
+var toMap = 540010101;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/103000100.js b/scripts/map/onUserEnter/103000100.js
new file mode 100644
index 0000000000..450d1c0417
--- /dev/null
+++ b/scripts/map/onUserEnter/103000100.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Subway";
+var toMap = 600010005;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/200000111.js b/scripts/map/onUserEnter/200000111.js
new file mode 100644
index 0000000000..b9a0586ebb
--- /dev/null
+++ b/scripts/map/onUserEnter/200000111.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Boats";
+var toMap = 200090000;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/200000121.js b/scripts/map/onUserEnter/200000121.js
new file mode 100644
index 0000000000..575bc2399b
--- /dev/null
+++ b/scripts/map/onUserEnter/200000121.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Trains";
+var toMap = 200090100;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
\ No newline at end of file
diff --git a/scripts/map/onUserEnter/200000131.js b/scripts/map/onUserEnter/200000131.js
new file mode 100644
index 0000000000..90fa941bba
--- /dev/null
+++ b/scripts/map/onUserEnter/200000131.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Cabin";
+var toMap = 200090200;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/200000151.js b/scripts/map/onUserEnter/200000151.js
new file mode 100644
index 0000000000..7c015fc928
--- /dev/null
+++ b/scripts/map/onUserEnter/200000151.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Genie";
+var toMap = 200090400;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/220000110.js b/scripts/map/onUserEnter/220000110.js
new file mode 100644
index 0000000000..7cda564f10
--- /dev/null
+++ b/scripts/map/onUserEnter/220000110.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Trains";
+var toMap = 200090110;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
\ No newline at end of file
diff --git a/scripts/map/onUserEnter/240000110.js b/scripts/map/onUserEnter/240000110.js
new file mode 100644
index 0000000000..42f4da5c8a
--- /dev/null
+++ b/scripts/map/onUserEnter/240000110.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Cabin";
+var toMap = 200090210;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/260000100.js b/scripts/map/onUserEnter/260000100.js
new file mode 100644
index 0000000000..07d208a0bd
--- /dev/null
+++ b/scripts/map/onUserEnter/260000100.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Genie";
+var toMap = 200090410;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/540010000.js b/scripts/map/onUserEnter/540010000.js
new file mode 100644
index 0000000000..7e6ab137b6
--- /dev/null
+++ b/scripts/map/onUserEnter/540010000.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "AirPlane";
+var toMap = 540010002;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/scripts/map/onUserEnter/600010001.js b/scripts/map/onUserEnter/600010001.js
new file mode 100644
index 0000000000..f8d4979686
--- /dev/null
+++ b/scripts/map/onUserEnter/600010001.js
@@ -0,0 +1,13 @@
+importPackage(Packages.tools);
+
+var eventName = "Subway";
+var toMap = 600010003;
+
+function start(ms) {
+ var em = ms.getClient().getEventManager(eventName);
+
+ //is the player late to start the travel?
+ if(em.getProperty("docked") == "false") {
+ ms.getClient().getPlayer().warp(toMap);
+ }
+}
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
index aebd0e9e95..0cbacb454b 100644
--- a/src/client/MapleCharacter.java
+++ b/src/client/MapleCharacter.java
@@ -1071,6 +1071,20 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
keymap.remove(Integer.valueOf(key));
}
}
+
+ protected MapleMap getWarpMap(int map) {
+ MapleMap target;
+ if (getEventInstance() == null) {
+ target = client.getChannelServer().getMapFactory().getMap(map);
+ } else {
+ target = getEventInstance().getMapInstance(map);
+ }
+ return target;
+ }
+
+ public void warp(int map) {
+ changeMap(getWarpMap(map), getWarpMap(map).getPortal(0));
+ }
public void changeMap(int map) {
changeMap(map, 0);
diff --git a/src/client/MapleClient.java b/src/client/MapleClient.java
index 5e513ede2d..b90159a091 100644
--- a/src/client/MapleClient.java
+++ b/src/client/MapleClient.java
@@ -60,6 +60,7 @@ import net.server.world.World;
import org.apache.mina.core.session.IoSession;
import client.inventory.MapleInventoryType;
+import scripting.event.EventManager;
import scripting.npc.NPCConversationManager;
import scripting.npc.NPCScriptManager;
import scripting.quest.QuestActionManager;
@@ -131,6 +132,10 @@ public class MapleClient {
public synchronized IoSession getSession() {
return session;
}
+
+ public EventManager getEventManager(String event) {
+ return getChannelServer().getEventSM().getEventManager(event);
+ }
public MapleCharacter getPlayer() {
return player;
diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java
index c1489175d1..e1d484fd47 100644
--- a/src/scripting/AbstractPlayerInteraction.java
+++ b/src/scripting/AbstractPlayerInteraction.java
@@ -139,11 +139,11 @@ public class AbstractPlayerInteraction {
}
public EventManager getEventManager(String event) {
- return getClient().getChannelServer().getEventSM().getEventManager(event);
+ return getClient().getEventManager(event);
}
public MapleInventory getInventory(MapleInventoryType type) {
- return getPlayer().getInventory(type);
+ return getPlayer().getInventory(type);
}
public boolean hasItem(int itemid){
diff --git a/src/tools/FilePrinter.java b/src/tools/FilePrinter.java
index c236f07160..cdb9c14b37 100644
--- a/src/tools/FilePrinter.java
+++ b/src/tools/FilePrinter.java
@@ -42,7 +42,7 @@ public class FilePrinter {
NPC_UNCODED = "uncodedNPCs.txt",
QUEST_UNCODED = "uncodedQuests.txt",
SAVING_CHARACTER = "saveChar.txt";//more to come (maps)
- private static final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
+ private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //for file system purposes, it's nice to use yyyy-MM-dd
private static final String FILE_PATH = "logs/" + sdf.format(Calendar.getInstance().getTime()) + "/";// + sdf.format(Calendar.getInstance().getTime()) + "/"
private static final String ERROR = "error/";