diff --git a/build/built-jar.properties b/build/built-jar.properties
index c1af47060e..476ec762d0 100644
--- a/build/built-jar.properties
+++ b/build/built-jar.properties
@@ -1,4 +1,4 @@
-#Fri, 30 Jun 2017 01:05:52 -0300
+#Fri, 30 Jun 2017 16:23:30 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=
diff --git a/build/classes/client/MapleCharacter$10.class b/build/classes/client/MapleCharacter$10.class
index b67c6f61e7..f59103f126 100644
Binary files a/build/classes/client/MapleCharacter$10.class and b/build/classes/client/MapleCharacter$10.class differ
diff --git a/build/classes/client/MapleCharacter$11.class b/build/classes/client/MapleCharacter$11.class
index eb153602be..059690954d 100644
Binary files a/build/classes/client/MapleCharacter$11.class and b/build/classes/client/MapleCharacter$11.class differ
diff --git a/build/classes/client/MapleCharacter$12.class b/build/classes/client/MapleCharacter$12.class
index 68d0e2892c..5af21d3e27 100644
Binary files a/build/classes/client/MapleCharacter$12.class and b/build/classes/client/MapleCharacter$12.class differ
diff --git a/build/classes/client/MapleCharacter$13.class b/build/classes/client/MapleCharacter$13.class
index 169859abc9..cbac120c48 100644
Binary files a/build/classes/client/MapleCharacter$13.class and b/build/classes/client/MapleCharacter$13.class differ
diff --git a/build/classes/client/MapleCharacter$14.class b/build/classes/client/MapleCharacter$14.class
index 383e84f82a..c4f15487b5 100644
Binary files a/build/classes/client/MapleCharacter$14.class and b/build/classes/client/MapleCharacter$14.class differ
diff --git a/build/classes/client/MapleCharacter$15.class b/build/classes/client/MapleCharacter$15.class
index df356b1d43..307d9f7342 100644
Binary files a/build/classes/client/MapleCharacter$15.class and b/build/classes/client/MapleCharacter$15.class differ
diff --git a/build/classes/client/MapleCharacter$16.class b/build/classes/client/MapleCharacter$16.class
index fa7389cd0a..8e5df2a66e 100644
Binary files a/build/classes/client/MapleCharacter$16.class and b/build/classes/client/MapleCharacter$16.class differ
diff --git a/build/classes/client/MapleCharacter$17.class b/build/classes/client/MapleCharacter$17.class
index e6d852318b..637cfcb88e 100644
Binary files a/build/classes/client/MapleCharacter$17.class and b/build/classes/client/MapleCharacter$17.class differ
diff --git a/build/classes/client/MapleCharacter$18.class b/build/classes/client/MapleCharacter$18.class
index 08ec6b6ba0..6ab6c2ce18 100644
Binary files a/build/classes/client/MapleCharacter$18.class and b/build/classes/client/MapleCharacter$18.class differ
diff --git a/build/classes/client/MapleCharacter$19.class b/build/classes/client/MapleCharacter$19.class
new file mode 100644
index 0000000000..4d4f435391
Binary files /dev/null and b/build/classes/client/MapleCharacter$19.class differ
diff --git a/build/classes/client/MapleCharacter$7.class b/build/classes/client/MapleCharacter$7.class
index 42aec2d8ac..9b94987aa0 100644
Binary files a/build/classes/client/MapleCharacter$7.class and b/build/classes/client/MapleCharacter$7.class differ
diff --git a/build/classes/client/MapleCharacter$8.class b/build/classes/client/MapleCharacter$8.class
index 4b6f927a08..d5a286dbc4 100644
Binary files a/build/classes/client/MapleCharacter$8.class and b/build/classes/client/MapleCharacter$8.class differ
diff --git a/build/classes/client/MapleCharacter$9.class b/build/classes/client/MapleCharacter$9.class
index e1450e4fe8..51d8848466 100644
Binary files a/build/classes/client/MapleCharacter$9.class and b/build/classes/client/MapleCharacter$9.class differ
diff --git a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class
index ede07d49c1..b73b446b36 100644
Binary files a/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class and b/build/classes/client/MapleCharacter$MapleBuffStatValueHolder.class differ
diff --git a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class
index 840c20dc03..914a8d61af 100644
Binary files a/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class and b/build/classes/client/MapleCharacter$MapleCoolDownValueHolder.class differ
diff --git a/build/classes/client/MapleCharacter$SkillEntry.class b/build/classes/client/MapleCharacter$SkillEntry.class
index d3bf8ceb83..04ec280812 100644
Binary files a/build/classes/client/MapleCharacter$SkillEntry.class and b/build/classes/client/MapleCharacter$SkillEntry.class differ
diff --git a/build/classes/client/MapleCharacter.class b/build/classes/client/MapleCharacter.class
index 23ed1d1099..06b5e4e85a 100644
Binary files a/build/classes/client/MapleCharacter.class and b/build/classes/client/MapleCharacter.class differ
diff --git a/build/classes/client/MapleQuestStatus.class b/build/classes/client/MapleQuestStatus.class
index d6e2a2cc2e..2c8b660318 100644
Binary files a/build/classes/client/MapleQuestStatus.class and b/build/classes/client/MapleQuestStatus.class differ
diff --git a/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class b/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class
index 24c2863cf4..85136c3038 100644
Binary files a/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class and b/build/classes/net/server/channel/handlers/PlayerLoggedinHandler.class differ
diff --git a/build/classes/scripting/event/EventManager.class b/build/classes/scripting/event/EventManager.class
index 1d180488ab..d2beece16d 100644
Binary files a/build/classes/scripting/event/EventManager.class and b/build/classes/scripting/event/EventManager.class differ
diff --git a/build/classes/server/quest/MapleQuest$1.class b/build/classes/server/quest/MapleQuest$1.class
index 05c17c80c1..d0f505f6bc 100644
Binary files a/build/classes/server/quest/MapleQuest$1.class and b/build/classes/server/quest/MapleQuest$1.class differ
diff --git a/build/classes/server/quest/MapleQuest.class b/build/classes/server/quest/MapleQuest.class
index 50abf8bc1e..73a49d7865 100644
Binary files a/build/classes/server/quest/MapleQuest.class and b/build/classes/server/quest/MapleQuest.class differ
diff --git a/dist/MapleSolaxia.jar b/dist/MapleSolaxia.jar
index e06b5f87a1..7255829e25 100644
Binary files a/dist/MapleSolaxia.jar and b/dist/MapleSolaxia.jar differ
diff --git a/feature_list.txt b/feature_list.txt
index 76c9812e34..d56d411033 100644
--- a/feature_list.txt
+++ b/feature_list.txt
@@ -7,42 +7,47 @@ Vcoc - Freelance Developer
Feature list:
---------------------------
-PQs/Quests:
-* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ 100%
-* CWKPQ as Expedition-based event 100%
-* GuildPQ 100% + Guild queue and multi-lobby systems available.
-* Brand-new PQ: Boss Rush PQ 100%
-* BalrogPQ semi-functional
-* Doll house quest 100%
+PQs:
+* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ 100%.
+* CWKPQ as Expedition-based event 100%.
+* GuildPQ 100% + Guild queue with multi-lobby systems available.
+* Brand-new PQ: Boss Rush PQ 100%.
+* BalrogPQ semi-functional.
+
+Quests:
+* Doll house quest 100%.
+* Quests can now reward properly items when matching a reward item with the player's job.
* Loads of quests have been patched.
Player Social Network:
* Guild and Alliance system fully functional.
Cash:
-* EXP/DROP/Cosmetic Coupons 100%
+* EXP/DROP/Cosmetic Coupons 100%.
+* EXP/DROP coupons now appears as a buff effect when on active time.
* Great deal of cash items functional.
PQ potentials:
-* Lobby system - Limited multiple PQ instances on same channel.
-* Guild queue system - Guilds can register themselves on a queue for GPQ.
+* Lobby system - Multiple PQ instances on same channel.
+* Expedition system - Multiples parties can attempt on a same instance (lobbies and expeds are mutually-exclusive).
+* Guild queue system - Guilds can register themselves on a queue for the GPQ.
Server potentials:
-* Multi-worlds 100%
-* Adventurer Mount quests 100%
+* Multi-worlds 100%.
+* Adventurer Mount quests 100%.
* All Equipment levels up.
* Player level rates.
* Gain fame by quests.
* Every monsterbook card is now droppable by overworld mobs.
-* Added Boss HP Bar for dozens of bosses (needs provided custom wz)
-* Custom jail system (needs provided custom wz)
-* Delete Character 100% (requires ENABLE_PIC activated)
+* Added Boss HP Bar for dozens of bosses (needs provided custom wz);
+* Custom jail system (needs provided custom wz).
+* Delete Character 100% (requires ENABLE_PIC activated).
Admin/GM commands:
-* New commands
-* Zakum/Horntail/Pinkbean 100%
+* New commands.
+* Zakum/Horntail/Pinkbean 100%.
Project:
-* Organized project code
-* Highly configurable server (see server flags at ServerConstants)
+* Organized project code.
+* Highly configurable server (see server flags at ServerConstants).
---------------------------
\ No newline at end of file
diff --git a/mychanges_ptbr.txt b/mychanges_ptbr.txt
index f6049e1f6f..8edd5d64e1 100644
--- a/mychanges_ptbr.txt
+++ b/mychanges_ptbr.txt
@@ -347,4 +347,8 @@ Reestrutura
28 - 29 Junho 2017,
Acabamento final da CWKPQ.
-Corrigido bug no esquema de recuperação de diretórios dos mapas, referenciados em String.wz.
\ No newline at end of file
+Corrigido bug no esquema de recuperação de diretórios dos mapas, referenciados em String.wz.
+
+30 Junho 2017,
+Corrigido bug em mecânica de hpDec que permitia aos jogadores postergarem o efeito de decréscimo de HP.
+Elaborada funcionalidade que permite salvar o "tempo até expirar" para quests com janela de tempo muito alta (as que usam "timeLimit2").
\ No newline at end of file
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index bc3b4885dd..5af0ed1acc 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -2,20 +2,6 @@
-
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMapFactory.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpeditionType.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/CWKPQ.js
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpedition.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201112.js
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/AbstractPlayerInteraction.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201110.js
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201113.js
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/provider/MapleDataTool.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java
- file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventManager.java
-
+
diff --git a/sql/db_database.sql b/sql/db_database.sql
index 0504bb3249..e24d96ddf4 100644
--- a/sql/db_database.sql
+++ b/sql/db_database.sql
@@ -16433,6 +16433,7 @@ CREATE TABLE IF NOT EXISTS `queststatus` (
`quest` int(11) NOT NULL DEFAULT '0',
`status` int(11) NOT NULL DEFAULT '0',
`time` int(11) NOT NULL DEFAULT '0',
+ `expires` bigint(20) NOT NULL DEFAULT '0',
`forfeited` int(11) NOT NULL DEFAULT '0',
`info` tinyint(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`queststatusid`)
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
index 1d202868c7..e1564bc10d 100644
--- a/src/client/MapleCharacter.java
+++ b/src/client/MapleCharacter.java
@@ -1974,7 +1974,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
public void run() {
doHurtHp();
}
- }, lastHpTask);
+ }, 10000 - lastHpTask);
}
}
@@ -2999,6 +2999,17 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
return 0;
}
}
+
+ public final MapleQuestStatus getMapleQuestStatus(final int quest) {
+ synchronized (quests) {
+ for (final MapleQuestStatus q : quests.values()) {
+ if (q.getQuest().getId() == quest) {
+ return q;
+ }
+ }
+ return null;
+ }
+ }
public MapleQuestStatus getQuest(MapleQuest quest) {
synchronized (quests) {
@@ -4072,6 +4083,12 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
if (cTime > -1) {
status.setCompletionTime(cTime * 1000);
}
+
+ long eTime = rs.getLong("expires");
+ if (eTime > 0) {
+ status.setExpirationTime(eTime);
+ }
+
status.setForfeited(rs.getInt("forfeited"));
ret.quests.put(q.getId(), status);
pse.setInt(1, rs.getInt("queststatusid"));
@@ -4179,6 +4196,14 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
return null;
}
+
+ public void reloadQuestExpirations() {
+ for(MapleQuestStatus mqs: quests.values()) {
+ if(mqs.getExpirationTime() > 0) {
+ questTimeLimit2(mqs.getQuest(), mqs.getExpirationTime());
+ }
+ }
+ }
public static String makeMapleReadable(String in) {
String i = in.replace('I', 'i');
@@ -5078,7 +5103,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ps.executeBatch();
deleteWhereCharacterId(con, "DELETE FROM eventstats WHERE characterid = ?");
deleteWhereCharacterId(con, "DELETE FROM queststatus WHERE characterid = ?");
- ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `forfeited`) VALUES (DEFAULT, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
+ ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `expires`, `forfeited`) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
PreparedStatement psf;
try (PreparedStatement pse = con.prepareStatement("INSERT INTO questprogress VALUES (DEFAULT, ?, ?, ?)")) {
psf = con.prepareStatement("INSERT INTO medalmaps VALUES (DEFAULT, ?, ?)");
@@ -5089,7 +5114,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ps.setInt(2, q.getQuest().getId());
ps.setInt(3, q.getStatus().getId());
ps.setInt(4, (int) (q.getCompletionTime() / 1000));
- ps.setInt(5, q.getForfeited());
+ ps.setLong(5, q.getExpirationTime());
+ ps.setInt(6, q.getForfeited());
ps.executeUpdate();
try (ResultSet rs = ps.getGeneratedKeys()) {
rs.next();
@@ -5917,22 +5943,43 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
}
}
+ private void expireQuest(MapleQuest quest) {
+ if(getQuestStatus(quest.getId()) == MapleQuestStatus.Status.COMPLETED.getId()) return;
+ if(System.currentTimeMillis() < getMapleQuestStatus(quest.getId()).getExpirationTime()) return;
+
+ announce(MaplePacketCreator.questExpire(quest.getId()));
+ MapleQuestStatus newStatus = new MapleQuestStatus(quest, MapleQuestStatus.Status.NOT_STARTED);
+ newStatus.setForfeited(getQuest(quest).getForfeited() + 1);
+ updateQuest(newStatus);
+ }
+
public void questTimeLimit(final MapleQuest quest, int seconds) {
- final MapleCharacter chr = this;
ScheduledFuture> sf = TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
- if(chr.getQuestStatus(quest.getId()) == MapleQuestStatus.Status.COMPLETED.getId()) return;
-
- announce(MaplePacketCreator.questExpire(quest.getId()));
- MapleQuestStatus newStatus = new MapleQuestStatus(quest, MapleQuestStatus.Status.NOT_STARTED);
- newStatus.setForfeited(getQuest(quest).getForfeited() + 1);
- updateQuest(newStatus);
+ expireQuest(quest);
}
}, seconds * 1000);
announce(MaplePacketCreator.addQuestTimeLimit(quest.getId(), seconds * 1000));
timers.add(sf);
}
+
+ public void questTimeLimit2(final MapleQuest quest, long expires) {
+ long timeLeft = expires - System.currentTimeMillis();
+
+ if(timeLeft <= 0) {
+ expireQuest(quest);
+ } else {
+ ScheduledFuture> sf = TimerManager.getInstance().schedule(new Runnable() {
+ @Override
+ public void run() {
+ expireQuest(quest);
+ }
+ }, timeLeft);
+
+ timers.add(sf);
+ }
+ }
public void updateSingleStat(MapleStat stat, int newval) {
updateSingleStat(stat, newval, false);
diff --git a/src/client/MapleQuestStatus.java b/src/client/MapleQuestStatus.java
index 4254176786..0f8464fa58 100644
--- a/src/client/MapleQuestStatus.java
+++ b/src/client/MapleQuestStatus.java
@@ -63,7 +63,7 @@ public class MapleQuestStatus {
private Map progress = new LinkedHashMap();
private List medalProgress = new LinkedList();
private int npc;
- private long completionTime;
+ private long completionTime, expirationTime;
private int forfeited = 0;
private String customData;
@@ -71,6 +71,7 @@ public class MapleQuestStatus {
this.questID = quest.getId();
this.setStatus(status);
this.completionTime = System.currentTimeMillis();
+ this.expirationTime = 0;
if (status == Status.STARTED)
registerMobs();
}
@@ -80,6 +81,7 @@ public class MapleQuestStatus {
this.setStatus(status);
this.setNpc(npc);
this.completionTime = System.currentTimeMillis();
+ this.expirationTime = 0;
if (status == Status.STARTED) {
registerMobs();
}
@@ -89,9 +91,9 @@ public class MapleQuestStatus {
return MapleQuest.getInstance(questID);
}
- public short getQuestID() {
- return questID;
- }
+ public short getQuestID() {
+ return questID;
+ }
public Status getStatus() {
return status;
@@ -178,6 +180,14 @@ public class MapleQuestStatus {
public void setCompletionTime(long completionTime) {
this.completionTime = completionTime;
}
+
+ public long getExpirationTime() {
+ return expirationTime;
+ }
+
+ public void setExpirationTime(long expirationTime) {
+ this.expirationTime = expirationTime;
+ }
public int getForfeited() {
return forfeited;
diff --git a/src/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/net/server/channel/handlers/PlayerLoggedinHandler.java
index e5c0735c07..d8dc3dafa9 100644
--- a/src/net/server/channel/handlers/PlayerLoggedinHandler.java
+++ b/src/net/server/channel/handlers/PlayerLoggedinHandler.java
@@ -242,6 +242,8 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
if(pet != null)
player.startFullnessSchedule(PetDataFactory.getHunger(pet.getItemId()), pet, player.getPetIndex(pet));
}
+
+ player.reloadQuestExpirations();
}
c.announce(MaplePacketCreator.updateGender(player));
@@ -264,7 +266,6 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
Server.getInstance().broadcastGMMessage(MaplePacketCreator.earnTitleMessage("GM " + player.getName() + " has logged in"));
}
-
}
if (player.getMap().getHPDec() > 0) player.resetHpDecreaseTask();
diff --git a/src/scripting/event/EventManager.java b/src/scripting/event/EventManager.java
index c2eb47bc85..6014047206 100644
--- a/src/scripting/event/EventManager.java
+++ b/src/scripting/event/EventManager.java
@@ -69,7 +69,7 @@ public class EventManager {
private List openedLobbys;
private Properties props = new Properties();
private String name;
- private Lock l = new ReentrantLock();
+ private Lock lobbyLock = new ReentrantLock();
private static final int limitGuilds = 10; // max numbers of guilds in queue for GPQ.
private static final int maxLobbys = 8; // an event manager holds up to this amount of concurrent lobbys
@@ -202,32 +202,32 @@ public class EventManager {
}
private boolean getLockLobby(int lobbyId) {
- l.lock();
+ lobbyLock.lock();
try {
return openedLobbys.get(lobbyId);
} finally {
- l.unlock();
+ lobbyLock.unlock();
}
}
private void setLockLobby(int lobbyId, boolean lock) {
- l.lock();
+ lobbyLock.lock();
try {
openedLobbys.set(lobbyId, lock);
} finally {
- l.unlock();
+ lobbyLock.unlock();
}
}
private boolean startLobbyInstance(int lobbyId) {
- l.lock();
+ lobbyLock.lock();
try {
if(!openedLobbys.get(lobbyId)) {
openedLobbys.set(lobbyId, true);
return true;
}
} finally {
- l.unlock();
+ lobbyLock.unlock();
}
return false;
diff --git a/src/server/quest/MapleQuest.java b/src/server/quest/MapleQuest.java
index b48d823499..c5beb0ae6a 100644
--- a/src/server/quest/MapleQuest.java
+++ b/src/server/quest/MapleQuest.java
@@ -47,7 +47,7 @@ public class MapleQuest {
private static Map quests = new HashMap<>();
protected short infoNumber, id;
- protected int timeLimit;
+ protected int timeLimit, timeLimit2;
protected String infoex;
protected Map startReqs = new EnumMap<>(MapleQuestRequirementType.class);
protected Map completeReqs = new EnumMap<>(MapleQuestRequirementType.class);
@@ -74,7 +74,7 @@ public class MapleQuest {
MapleData reqInfo = questInfo.getChildByPath(String.valueOf(id));
if(reqInfo != null) {
timeLimit = MapleDataTool.getInt("timeLimit", reqInfo, 0);
- timeLimit = Math.max(timeLimit, MapleDataTool.getInt("timeLimit2", reqInfo, 0)); // alas, nexon made we deal with 2 timeLimits
+ timeLimit2 = MapleDataTool.getInt("timeLimit2", reqInfo, 0);
autoStart = MapleDataTool.getInt("autoStart", reqInfo, 0) == 1;
autoPreComplete = MapleDataTool.getInt("autoPreComplete", reqInfo, 0) == 1;
autoComplete = MapleDataTool.getInt("autoComplete", reqInfo, 0) == 1;
@@ -287,8 +287,13 @@ public class MapleQuest {
newStatus.setForfeited(c.getQuest(this).getForfeited());
if (timeLimit > 0) {
+ newStatus.setExpirationTime(System.currentTimeMillis() + (timeLimit * 1000));
c.questTimeLimit(this, timeLimit);
}
+ if (timeLimit2 > 0) {
+ newStatus.setExpirationTime(System.currentTimeMillis() + timeLimit2);
+ c.questTimeLimit2(this, newStatus.getExpirationTime());
+ }
c.updateQuest(newStatus);
return true;
diff --git a/todo.txt b/todo.txt
index 5a5d298176..179e6a1760 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1 +1,5 @@
+gaviota?
+cash drop from equipped
+NPCs masteria
+
PQs
\ No newline at end of file