More QuestState related cleanups.

This commit is contained in:
MobiusDev 2017-08-15 15:22:42 +00:00
parent 4328a8dc6a
commit e8a760de9c
42 changed files with 109 additions and 159 deletions

View File

@ -59,7 +59,7 @@ public class QuestTimer
private final L2Npc _npc; private final L2Npc _npc;
private final L2PcInstance _player; private final L2PcInstance _player;
private final boolean _isRepeating; private final boolean _isRepeating;
private ScheduledFuture<?> _schedular; private final ScheduledFuture<?> _schedular;
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating)
{ {
@ -68,14 +68,7 @@ public class QuestTimer
_player = player; _player = player;
_npc = npc; _npc = npc;
_isRepeating = repeating; _isRepeating = repeating;
if (repeating) _schedular = repeating ? ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time) : ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time);
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time); // Prepare auto end task
}
else
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time); // Prepare auto end task
}
} }
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player)

View File

@ -44,11 +44,17 @@ public class State
switch (state) switch (state)
{ {
case 1: case 1:
{
return "Started"; return "Started";
}
case 2: case 2:
{
return "Completed"; return "Completed";
}
default: default:
{
return "Start"; return "Start";
}
} }
} }
@ -62,11 +68,17 @@ public class State
switch (statename) switch (statename)
{ {
case "Started": case "Started":
{
return 1; return 1;
}
case "Completed": case "Completed":
{
return 2; return 2;
}
default: default:
{
return 0; return 0;
}
} }
} }
} }

View File

@ -59,7 +59,7 @@ public class QuestTimer
private final L2Npc _npc; private final L2Npc _npc;
private final L2PcInstance _player; private final L2PcInstance _player;
private final boolean _isRepeating; private final boolean _isRepeating;
private ScheduledFuture<?> _schedular; private final ScheduledFuture<?> _schedular;
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating)
{ {
@ -68,14 +68,7 @@ public class QuestTimer
_player = player; _player = player;
_npc = npc; _npc = npc;
_isRepeating = repeating; _isRepeating = repeating;
if (repeating) _schedular = repeating ? ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time) : ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time);
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time); // Prepare auto end task
}
else
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time); // Prepare auto end task
}
} }
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player)

View File

@ -44,11 +44,17 @@ public class State
switch (state) switch (state)
{ {
case 1: case 1:
{
return "Started"; return "Started";
}
case 2: case 2:
{
return "Completed"; return "Completed";
}
default: default:
{
return "Start"; return "Start";
}
} }
} }
@ -62,11 +68,17 @@ public class State
switch (statename) switch (statename)
{ {
case "Started": case "Started":
{
return 1; return 1;
}
case "Completed": case "Completed":
{
return 2; return 2;
}
default: default:
{
return 0; return 0;
}
} }
} }
} }

View File

@ -79,7 +79,7 @@ public final class Core extends AbstractNpcAI
} }
else else
{ {
final String test = loadGlobalQuestVar("Core_Attacked"); final String test = getGlobalQuestVar("Core_Attacked");
if (test.equalsIgnoreCase("true")) if (test.equalsIgnoreCase("true"))
{ {
_firstAttacked = true; _firstAttacked = true;

View File

@ -86,7 +86,7 @@ public final class QueenShyeed extends AbstractNpcAI
private void spawnShyeed() private void spawnShyeed()
{ {
final String respawn = loadGlobalQuestVar("Respawn"); final String respawn = getGlobalQuestVar("Respawn");
final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0; final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
if (remain > 0) if (remain > 0)
{ {

View File

@ -195,7 +195,7 @@ public class AvantGarde extends AbstractNpcAI
{ {
for (int i = 1; i <= Config.MAX_SUBCLASS; i++) for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
{ {
final String qvar = st.getGlobalQuestVar(varName + i); final String qvar = getGlobalQuestVar(varName + i);
if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0"))) if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0")))
{ {
activeCertifications++; activeCertifications++;
@ -213,7 +213,7 @@ public class AvantGarde extends AbstractNpcAI
for (int i = 1; i <= Config.MAX_SUBCLASS; i++) for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
{ {
final String qvarName = varName + i; final String qvarName = varName + i;
final String qvar = st.getGlobalQuestVar(qvarName); final String qvar = getGlobalQuestVar(qvarName);
if (qvar.endsWith(";")) if (qvar.endsWith(";"))
{ {
final String skillIdVar = qvar.replace(";", ""); final String skillIdVar = qvar.replace(";", "");
@ -224,7 +224,7 @@ public class AvantGarde extends AbstractNpcAI
if (sk != null) if (sk != null)
{ {
player.removeSkill(sk); player.removeSkill(sk);
st.saveGlobalQuestVar(qvarName, "0"); saveGlobalQuestVar(qvarName, "0");
} }
} }
else else
@ -255,7 +255,7 @@ public class AvantGarde extends AbstractNpcAI
_log.warning("Somehow " + player.getName() + " deleted a certification book!"); _log.warning("Somehow " + player.getName() + " deleted a certification book!");
} }
} }
st.saveGlobalQuestVar(qvarName, "0"); saveGlobalQuestVar(qvarName, "0");
} }
else else
{ {

View File

@ -109,7 +109,7 @@ public final class PriestOfBlessing extends AbstractNpcAI
{ {
if (player.getAdena() >= PRICE_VOICE) if (player.getAdena() >= PRICE_VOICE)
{ {
final String value = loadGlobalQuestVar(player.getAccountName() + "_voice"); final String value = getGlobalQuestVar(player.getAccountName() + "_voice");
final long _reuse_time = value == "" ? 0 : Long.parseLong(value); final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
if (System.currentTimeMillis() > _reuse_time) if (System.currentTimeMillis() > _reuse_time)
@ -140,7 +140,7 @@ public final class PriestOfBlessing extends AbstractNpcAI
if (player.getAdena() >= _price_hourglass) if (player.getAdena() >= _price_hourglass)
{ {
final String value = loadGlobalQuestVar(player.getAccountName() + "_hg_" + _index); final String value = getGlobalQuestVar(player.getAccountName() + "_hg_" + _index);
final long _reuse_time = value == "" ? 0 : Long.parseLong(value); final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
if (System.currentTimeMillis() > _reuse_time) if (System.currentTimeMillis() > _reuse_time)

View File

@ -245,7 +245,7 @@ public final class SubclassCertification extends AbstractNpcAI
String htmltext; String htmltext;
final String tmp = variable + level + "-" + player.getClassIndex(); final String tmp = variable + level + "-" + player.getClassIndex();
final String globalVariable = qs.getGlobalQuestVar(tmp); final String globalVariable = getGlobalQuestVar(tmp);
if (!globalVariable.equals("") && !globalVariable.equals("0")) if (!globalVariable.equals("") && !globalVariable.equals("0"))
{ {
@ -268,7 +268,7 @@ public final class SubclassCertification extends AbstractNpcAI
smsg.addItemName(item); smsg.addItemName(item);
player.sendPacket(smsg); player.sendPacket(smsg);
qs.saveGlobalQuestVar(tmp, String.valueOf(item.getObjectId())); saveGlobalQuestVar(tmp, String.valueOf(item.getObjectId()));
htmltext = "GetAbility.html"; htmltext = "GetAbility.html";
} }
return htmltext; return htmltext;

View File

@ -150,7 +150,7 @@ public final class SubClassSkills extends Quest
for (int j = Config.MAX_SUBCLASS; j > 0; j--) for (int j = Config.MAX_SUBCLASS; j > 0; j--)
{ {
qName = VARS[i] + String.valueOf(j); qName = VARS[i] + String.valueOf(j);
qValue = st.getGlobalQuestVar(qName); qValue = getGlobalQuestVar(qName);
if ((qValue == null) || qValue.isEmpty()) if ((qValue == null) || qValue.isEmpty())
{ {
continue; continue;

View File

@ -80,7 +80,7 @@ public final class FreyaCelebration extends LongTimeEvent
if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1) if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
{ {
final long _curr_time = System.currentTimeMillis(); final long _curr_time = System.currentTimeMillis();
final String value = loadGlobalQuestVar(player.getAccountName()); final String value = getGlobalQuestVar(player.getAccountName());
final long _reuse_time = value == "" ? 0 : Long.parseLong(value); final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
if (_curr_time > _reuse_time) if (_curr_time > _reuse_time)

View File

@ -93,7 +93,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
else if (event.equalsIgnoreCase("buy_scroll_24")) else if (event.equalsIgnoreCase("buy_scroll_24"))
{ {
final long curTime = System.currentTimeMillis(); final long curTime = System.currentTimeMillis();
final String value = loadGlobalQuestVar(player.getAccountName()); final String value = getGlobalQuestVar(player.getAccountName());
final long reuse = value == "" ? 0 : Long.parseLong(value); final long reuse = value == "" ? 0 : Long.parseLong(value);
if (player.getCreateDate().after(EVENT_START)) if (player.getCreateDate().after(EVENT_START))
{ {

View File

@ -226,7 +226,7 @@ public class SeedOfAnnihilation extends AbstractNpcAI
}); });
int buffsNow = 0; int buffsNow = 0;
final String var = loadGlobalQuestVar("SeedNextStatusChange"); final String var = getGlobalQuestVar("SeedNextStatusChange");
if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis())) if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis()))
{ {
buffsNow = getRandom(ZONE_BUFFS_LIST.length); buffsNow = getRandom(ZONE_BUFFS_LIST.length);
@ -237,7 +237,7 @@ public class SeedOfAnnihilation extends AbstractNpcAI
else else
{ {
_seedsNextStatusChange = Long.parseLong(var); _seedsNextStatusChange = Long.parseLong(var);
buffsNow = Integer.parseInt(loadGlobalQuestVar("SeedBuffsList")); buffsNow = Integer.parseInt(getGlobalQuestVar("SeedBuffsList"));
} }
for (int i = 0; i < _regionsData.length; i++) for (int i = 0; i < _regionsData.length; i++)
{ {

View File

@ -231,7 +231,7 @@ public final class Q00062_PathOfTheTrooper extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "32197-10.html"; htmltext = "32197-10.html";
} }
break; break;

View File

@ -465,7 +465,7 @@ public final class Q00063_PathOfTheWarder extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "32198-19.html"; htmltext = "32198-19.html";
} }
} }

View File

@ -100,7 +100,7 @@ public class Q00307_ControlDeviceOfTheGiants extends Quest
{ {
return "32711-09.html"; return "32711-09.html";
} }
final String respawn = loadGlobalQuestVar("Respawn"); final String respawn = getGlobalQuestVar("Respawn");
final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0; final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
if (remain > 0) if (remain > 0)
{ {

View File

@ -291,7 +291,7 @@ public final class Q00401_PathOfTheWarrior extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30010-13.html"; htmltext = "30010-13.html";
} }
} }

View File

@ -169,7 +169,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -196,7 +196,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -409,7 +409,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30417-12.html"; htmltext = "30417-12.html";
} }
} }

View File

@ -308,7 +308,7 @@ public final class Q00403_PathOfTheRogue extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30379-09.html"; htmltext = "30379-09.html";
} }
else if (!hasQuestItems(player, HORSESHOE_OF_LIGHT) && hasQuestItems(player, BEZIQUES_LETTER)) else if (!hasQuestItems(player, HORSESHOE_OF_LIGHT) && hasQuestItems(player, BEZIQUES_LETTER))

View File

@ -224,7 +224,7 @@ public final class Q00404_PathOfTheHumanWizard extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30391-06.html"; htmltext = "30391-06.html";
} }
break; break;

View File

@ -179,7 +179,7 @@ public final class Q00405_PathOfTheCleric extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30022-09.html"; htmltext = "30022-09.html";
} }
else if (hasQuestItems(player, LETTER_OF_ORDER_1ST)) else if (hasQuestItems(player, LETTER_OF_ORDER_1ST))

View File

@ -228,7 +228,7 @@ public final class Q00406_PathOfTheElvenKnight extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30327-10.html"; htmltext = "30327-10.html";
} }
break; break;

View File

@ -255,7 +255,7 @@ public final class Q00407_PathOfTheElvenScout extends Quest
giveAdena(player, 163800, true); giveAdena(player, 163800, true);
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30328-07.html"; htmltext = "30328-07.html";
} }
break; break;

View File

@ -347,7 +347,7 @@ public final class Q00408_PathOfTheElvenWizard extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30414-20.html"; htmltext = "30414-20.html";
} }
} }

View File

@ -307,7 +307,7 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30293-08.html"; htmltext = "30293-08.html";
} }
} }

View File

@ -261,7 +261,7 @@ public final class Q00410_PathOfThePalusKnight extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30329-11.html"; htmltext = "30329-11.html";
} }
else if (hasAtLeastOneQuestItem(player, VIRGILS_LETTER, MORTE_TALISMAN)) else if (hasAtLeastOneQuestItem(player, VIRGILS_LETTER, MORTE_TALISMAN))

View File

@ -226,7 +226,7 @@ public final class Q00411_PathOfTheAssassin extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30416-06.html"; htmltext = "30416-06.html";
} }
else if (!hasAtLeastOneQuestItem(player, LEIKANS_NOTE, SHILENS_TEARS, ARKENIAS_RECOMMENDATION, IRON_HEART, SHILENS_CALL) && hasQuestItems(player, ARKENIAS_LETTER)) else if (!hasAtLeastOneQuestItem(player, LEIKANS_NOTE, SHILENS_TEARS, ARKENIAS_RECOMMENDATION, IRON_HEART, SHILENS_CALL) && hasQuestItems(player, ARKENIAS_LETTER))

View File

@ -285,7 +285,7 @@ public final class Q00412_PathOfTheDarkWizard extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30421-13.html"; htmltext = "30421-13.html";
} }
else if (hasQuestItems(player, SEEDS_OF_DESPAIR)) else if (hasQuestItems(player, SEEDS_OF_DESPAIR))

View File

@ -247,7 +247,7 @@ public final class Q00413_PathOfTheShillienOracle extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30330-10.html"; htmltext = "30330-10.html";
} }
break; break;

View File

@ -309,7 +309,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30501-03.html"; htmltext = "30501-03.html";
} }
break; break;
@ -345,7 +345,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "31978-05.html"; htmltext = "31978-05.html";
} }
} }

View File

@ -191,7 +191,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -562,7 +562,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30501-04.html"; htmltext = "30501-04.html";
} }
break; break;

View File

@ -189,7 +189,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
giveAdena(player, 163800, true); giveAdena(player, 163800, true);
st.exitQuest(false, true); st.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
st.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -503,7 +503,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
giveAdena(player, 81900, true); giveAdena(player, 81900, true);
st.exitQuest(false, true); st.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
st.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "31979-03.html"; htmltext = "31979-03.html";
} }
break; break;

View File

@ -323,7 +323,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -671,7 +671,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = "30316-05.html"; htmltext = "30316-05.html";
} }
break; break;

View File

@ -218,7 +218,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -244,7 +244,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -270,7 +270,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -296,7 +296,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -370,7 +370,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;
@ -406,7 +406,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
} }
qs.exitQuest(false, true); qs.exitQuest(false, true);
player.sendPacket(new SocialAction(player.getObjectId(), 3)); player.sendPacket(new SocialAction(player.getObjectId(), 3));
qs.saveGlobalQuestVar("1ClassQuestFinished", "1"); saveGlobalQuestVar("1ClassQuestFinished", "1");
htmltext = event; htmltext = event;
} }
break; break;

View File

@ -52,7 +52,7 @@ public class Q00610_MagicalPowerOfWaterPart2 extends Quest
addKillId(ASHUTAR); addKillId(ASHUTAR);
registerQuestItems(GREEN_TOTEM, ASHUTAR_HEART); registerQuestItems(GREEN_TOTEM, ASHUTAR_HEART);
final String test = loadGlobalQuestVar("Q00610_respawn"); final String test = getGlobalQuestVar("Q00610_respawn");
final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0; final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0;
if (remain > 0) if (remain > 0)
{ {

View File

@ -52,7 +52,7 @@ public class Q00616_MagicalPowerOfFirePart2 extends Quest
addKillId(NASTRON); addKillId(NASTRON);
registerQuestItems(RED_TOTEM, NASTRON_HEART); registerQuestItems(RED_TOTEM, NASTRON_HEART);
final String test = loadGlobalQuestVar("Q00616_respawn"); final String test = getGlobalQuestVar("Q00616_respawn");
final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0; final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0;
if (remain > 0) if (remain > 0)
{ {

View File

@ -1568,7 +1568,7 @@ public class Quest extends AbstractScript implements IIdentifiable
* @param var the name of the variable to load * @param var the name of the variable to load
* @return the current value of the specified variable, or an empty string if the variable does not exist * @return the current value of the specified variable, or an empty string if the variable does not exist
*/ */
public final String loadGlobalQuestVar(String var) public final String getGlobalQuestVar(String var)
{ {
String result = ""; String result = "";
try (Connection con = DatabaseFactory.getInstance().getConnection(); try (Connection con = DatabaseFactory.getInstance().getConnection();

View File

@ -16,16 +16,12 @@
*/ */
package com.l2jmobius.gameserver.model.quest; package com.l2jmobius.gameserver.model.quest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import com.l2jmobius.commons.database.DatabaseFactory;
import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.cache.HtmCache;
import com.l2jmobius.gameserver.enums.QuestSound; import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType; import com.l2jmobius.gameserver.enums.QuestType;
@ -388,87 +384,18 @@ public final class QuestState
return old; return old;
} }
/**
* Insert (or update) in the database variables that need to stay persistent for this player after a reboot. This function is for storage of values that are not related to a specific quest but are global instead, i.e. can be used by any script.
* @param var the name of the variable to save
* @param value the value of the variable
*/
// TODO: these methods should not be here, they could be used by other classes to save some variables, but they can't because they require to create a QuestState first.
public final void saveGlobalQuestVar(String var, String value)
{
try (Connection con = DatabaseFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement("REPLACE INTO character_quest_global_data (charId, var, value) VALUES (?, ?, ?)"))
{
ps.setInt(1, _player.getObjectId());
ps.setString(2, var);
ps.setString(3, value);
ps.executeUpdate();
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not insert player's global quest variable: " + e.getMessage(), e);
}
}
/**
* Read from the database a previously saved variable for this quest.<br>
* Due to performance considerations, this function should best be used only when the quest is first loaded.<br>
* Subclasses of this class can define structures into which these loaded values can be saved.<br>
* However, on-demand usage of this function throughout the script is not prohibited, only not recommended.<br>
* Values read from this function were entered by calls to "saveGlobalQuestVar".
* @param var the name of the variable whose value to get
* @return the value of the variable or an empty string if the variable does not exist in the database
*/
// TODO: these methods should not be here, they could be used by other classes to save some variables, but they can't because they require to create a QuestState first.
public final String getGlobalQuestVar(String var)
{
String result = "";
try (Connection con = DatabaseFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement("SELECT value FROM character_quest_global_data WHERE charId = ? AND var = ?"))
{
ps.setInt(1, _player.getObjectId());
ps.setString(2, var);
try (ResultSet rs = ps.executeQuery())
{
if (rs.first())
{
result = rs.getString(1);
}
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "Could not load player's global quest variable: " + e.getMessage(), e);
}
return result;
}
/**
* Permanently delete a global quest variable from the database.
* @param var the name of the variable to delete
*/
public final void deleteGlobalQuestVar(String var)
{
try (Connection con = DatabaseFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM character_quest_global_data WHERE charId = ? AND var = ?"))
{
ps.setInt(1, _player.getObjectId());
ps.setString(2, var);
ps.executeUpdate();
}
catch (Exception e)
{
_log.log(Level.WARNING, "could not delete player's global quest variable; charId = " + _player.getObjectId() + ", variable name = " + var + ". Exception: " + e.getMessage(), e);
}
}
/** /**
* @param var the name of the variable to get * @param var the name of the variable to get
* @return the value of the variable from the list of quest variables * @return the value of the variable from the list of quest variables
*/ */
public String get(String var) public String get(String var)
{ {
return _vars == null ? null : _vars.get(var); if (_vars == null)
{
return null;
}
return _vars.get(var);
} }
/** /**

View File

@ -112,7 +112,15 @@ public class QuestTimer
*/ */
public boolean isMatch(Quest quest, String name, L2Npc npc, L2PcInstance player) public boolean isMatch(Quest quest, String name, L2Npc npc, L2PcInstance player)
{ {
return (quest != null) && (name != null) && (quest == _quest) && name.equalsIgnoreCase(getName()) && (npc == _npc) && (player == _player); if ((quest == null) || (name == null))
{
return false;
}
if ((quest != _quest) || !name.equalsIgnoreCase(getName()))
{
return false;
}
return ((npc == _npc) && (player == _player));
} }
public final boolean getIsActive() public final boolean getIsActive()

View File

@ -328,7 +328,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
{ {
for (int i = 1; i <= Config.MAX_SUBCLASS; i++) for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
{ {
final String itemOID = st.getGlobalQuestVar(varName + i); final String itemOID = st.getQuest().getGlobalQuestVar(varName + i);
if (!itemOID.isEmpty() && !itemOID.endsWith(";") && !itemOID.equals("0")) if (!itemOID.isEmpty() && !itemOID.endsWith(";") && !itemOID.equals("0"))
{ {
if (Util.isDigit(itemOID)) if (Util.isDigit(itemOID))
@ -345,7 +345,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
{ {
giveSkill(activeChar, trainer, skill); giveSkill(activeChar, trainer, skill);
// Logging the given skill. // Logging the given skill.
st.saveGlobalQuestVar(varName + i, skill.getId() + ";"); st.getQuest().saveGlobalQuestVar(varName + i, skill.getId() + ";");
} }
return; return;
} }

View File

@ -59,7 +59,7 @@ public class QuestTimer
private final L2Npc _npc; private final L2Npc _npc;
private final L2PcInstance _player; private final L2PcInstance _player;
private final boolean _isRepeating; private final boolean _isRepeating;
private ScheduledFuture<?> _schedular; private final ScheduledFuture<?> _schedular;
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player, boolean repeating)
{ {
@ -68,14 +68,7 @@ public class QuestTimer
_player = player; _player = player;
_npc = npc; _npc = npc;
_isRepeating = repeating; _isRepeating = repeating;
if (repeating) _schedular = repeating ? ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time) : ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time);
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ScheduleTimerTask(), time, time); // Prepare auto end task
}
else
{
_schedular = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleTimerTask(), time); // Prepare auto end task
}
} }
public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player) public QuestTimer(Quest quest, String name, long time, L2Npc npc, L2PcInstance player)

View File

@ -44,11 +44,17 @@ public class State
switch (state) switch (state)
{ {
case 1: case 1:
{
return "Started"; return "Started";
}
case 2: case 2:
{
return "Completed"; return "Completed";
}
default: default:
{
return "Start"; return "Start";
}
} }
} }
@ -62,11 +68,17 @@ public class State
switch (statename) switch (statename)
{ {
case "Started": case "Started":
{
return 1; return 1;
}
case "Completed": case "Completed":
{
return 2; return 2;
}
default: default:
{
return 0; return 0;
}
} }
} }
} }