Removed quest_global_data SQL table.
This commit is contained in:
parent
e8a760de9c
commit
c06f5fb5db
@ -1,6 +1,6 @@
|
||||
DROP TABLE IF EXISTS `global_variables`;
|
||||
CREATE TABLE IF NOT EXISTS `global_variables` (
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -1,12 +0,0 @@
|
||||
-- Table structure for global quest data (i.e. quest data not particular to a player)
|
||||
-- Note: We had considered using character_quests with char_id = 0 for this, but decided
|
||||
-- against it, primarily for aesthetic purposes, cleaningness of code, expectability, and
|
||||
-- to keep char-related data purely as char-related data, global purely as global.
|
||||
|
||||
DROP TABLE IF EXISTS `quest_global_data`;
|
||||
CREATE TABLE IF NOT EXISTS `quest_global_data` (
|
||||
`quest_name` VARCHAR(40) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`quest_name`,`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -21,6 +21,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
@ -82,7 +83,7 @@ public final class Core extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
final String test = loadGlobalQuestVar("Core_Attacked");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Core_Attacked");
|
||||
if (test.equalsIgnoreCase("true"))
|
||||
{
|
||||
_firstAttacked = true;
|
||||
@ -102,7 +103,7 @@ public final class Core extends AbstractNpcAI
|
||||
@Override
|
||||
public void onSave()
|
||||
{
|
||||
saveGlobalQuestVar("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
GlobalVariablesManager.getInstance().set("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
}
|
||||
|
||||
public void spawnBoss(L2GrandBossInstance npc)
|
||||
|
@ -279,7 +279,7 @@ public final class Q00401_PathOfTheWarrior extends Quest
|
||||
addExpAndSp(player, 6080, 0); // Player now only gets EXP Fixed rate.
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30010-13.html";
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -232,7 +232,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -451,7 +451,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30417-12.html";
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ public final class Q00403_PathOfTheRogue extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30379-09.html";
|
||||
}
|
||||
else if (!hasQuestItems(player, HORSESHOE_OF_LIGHT) && hasQuestItems(player, BEZIQUES_LETTER))
|
||||
|
@ -224,7 +224,7 @@ public final class Q00404_PathOfTheHumanWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30391-06.html";
|
||||
}
|
||||
break;
|
||||
|
@ -179,7 +179,7 @@ public final class Q00405_PathOfTheCleric extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30022-09.html";
|
||||
}
|
||||
else if (hasQuestItems(player, LETTER_OF_ORDER_1ST))
|
||||
|
@ -228,7 +228,7 @@ public final class Q00406_PathOfTheElvenKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30327-10.html";
|
||||
}
|
||||
break;
|
||||
|
@ -255,7 +255,7 @@ public final class Q00407_PathOfTheElvenScout extends Quest
|
||||
giveAdena(player, 163800, true);
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30328-07.html";
|
||||
}
|
||||
break;
|
||||
|
@ -347,7 +347,7 @@ public final class Q00408_PathOfTheElvenWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30414-20.html";
|
||||
}
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30293-08.html";
|
||||
}
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ public final class Q00410_PathOfThePalusKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30329-11.html";
|
||||
}
|
||||
else if (hasAtLeastOneQuestItem(player, VIRGILS_LETTER, MORTE_TALISMAN))
|
||||
|
@ -226,7 +226,7 @@ public final class Q00411_PathOfTheAssassin extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30416-06.html";
|
||||
}
|
||||
else if (!hasAtLeastOneQuestItem(player, LEIKANS_NOTE, SHILENS_TEARS, ARKENIAS_RECOMMENDATION, IRON_HEART, SHILENS_CALL) && hasQuestItems(player, ARKENIAS_LETTER))
|
||||
|
@ -285,7 +285,7 @@ public final class Q00412_PathOfTheDarkWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30421-13.html";
|
||||
}
|
||||
else if (hasQuestItems(player, SEEDS_OF_DESPAIR))
|
||||
|
@ -247,7 +247,7 @@ public final class Q00413_PathOfTheShillienOracle extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30330-10.html";
|
||||
}
|
||||
break;
|
||||
|
@ -309,7 +309,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30501-03.html";
|
||||
}
|
||||
break;
|
||||
@ -345,7 +345,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "31978-05.html";
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -562,7 +562,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30501-04.html";
|
||||
}
|
||||
break;
|
||||
|
@ -189,7 +189,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
|
||||
giveAdena(player, 163800, true);
|
||||
st.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -503,7 +503,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
|
||||
giveAdena(player, 81900, true);
|
||||
st.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "31979-03.html";
|
||||
}
|
||||
break;
|
||||
|
@ -323,7 +323,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -670,7 +670,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30316-05.html";
|
||||
}
|
||||
break;
|
||||
|
@ -218,7 +218,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -244,7 +244,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -270,7 +270,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -296,7 +296,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -370,7 +370,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -406,7 +406,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
|
@ -1655,97 +1655,6 @@ public class Quest extends AbstractScript implements IIdentifiable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert (or update) in the database variables that need to stay persistent for this quest after a reboot.<br>
|
||||
* This function is for storage of values that do not related to a specific player but are global for all characters.<br>
|
||||
* For example, if we need to disable a quest-gatekeeper until a certain time (as is done with some grand-boss gatekeepers), we can save that time in the DB.
|
||||
* @param var the name of the variable to save
|
||||
* @param value the value of the variable
|
||||
*/
|
||||
public final void saveGlobalQuestVar(String var, String value)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("REPLACE INTO quest_global_data (quest_name,var,value) VALUES (?,?,?)"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.setString(3, value);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not insert global quest variable:", 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 to load
|
||||
* @return the current value of the specified variable, or an empty string if the variable does not exist
|
||||
*/
|
||||
public final String loadGlobalQuestVar(String var)
|
||||
{
|
||||
String result = "";
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("SELECT value FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
try (ResultSet rs = statement.executeQuery())
|
||||
{
|
||||
if (rs.first())
|
||||
{
|
||||
result = rs.getString(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not load global quest variable:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database a global quest variable that was previously saved for this quest.
|
||||
* @param var the name of the variable to delete
|
||||
*/
|
||||
public final void deleteGlobalQuestVar(String var)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variable:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database all global quest variables that were previously saved for this quest.
|
||||
*/
|
||||
public final void deleteAllGlobalQuestVars()
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variables:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert in the database the quest for the player.
|
||||
* @param qs the {@link QuestState} object whose variable to insert
|
||||
|
@ -1,6 +1,6 @@
|
||||
DROP TABLE IF EXISTS `global_variables`;
|
||||
CREATE TABLE IF NOT EXISTS `global_variables` (
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -1,12 +0,0 @@
|
||||
-- Table structure for global quest data (i.e. quest data not particular to a player)
|
||||
-- Note: We had considered using character_quests with char_id = 0 for this, but decided
|
||||
-- against it, primarily for aesthetic purposes, cleaningness of code, expectability, and
|
||||
-- to keep char-related data purely as char-related data, global purely as global.
|
||||
|
||||
DROP TABLE IF EXISTS `quest_global_data`;
|
||||
CREATE TABLE IF NOT EXISTS `quest_global_data` (
|
||||
`quest_name` VARCHAR(40) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`quest_name`,`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -23,6 +23,7 @@ import java.util.Map;
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@ -227,18 +228,18 @@ public final class SeedOfAnnihilation extends AbstractNpcAI
|
||||
});
|
||||
|
||||
int buffsNow = 0;
|
||||
final String var = loadGlobalQuestVar("SeedNextStatusChange");
|
||||
final String var = GlobalVariablesManager.getInstance().getString("SeedNextStatusChange");
|
||||
if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis()))
|
||||
{
|
||||
buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
}
|
||||
else
|
||||
{
|
||||
_seedsNextStatusChange = Long.parseLong(var);
|
||||
buffsNow = Integer.parseInt(loadGlobalQuestVar("SeedBuffsList"));
|
||||
buffsNow = Integer.parseInt(GlobalVariablesManager.getInstance().getString("SeedBuffsList"));
|
||||
}
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
@ -301,9 +302,9 @@ public final class SeedOfAnnihilation extends AbstractNpcAI
|
||||
if (event.equalsIgnoreCase("ChangeSeedsStatus"))
|
||||
{
|
||||
final int buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
_regionsData[i].activeBuff = ZONE_BUFFS_LIST[buffsNow][i];
|
||||
|
@ -21,6 +21,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
@ -82,7 +83,7 @@ public final class Core extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
final String test = loadGlobalQuestVar("Core_Attacked");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Core_Attacked");
|
||||
if (test.equalsIgnoreCase("true"))
|
||||
{
|
||||
_firstAttacked = true;
|
||||
@ -102,7 +103,7 @@ public final class Core extends AbstractNpcAI
|
||||
@Override
|
||||
public void onSave()
|
||||
{
|
||||
saveGlobalQuestVar("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
GlobalVariablesManager.getInstance().set("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
}
|
||||
|
||||
public void spawnBoss(L2GrandBossInstance npc)
|
||||
|
@ -17,6 +17,7 @@
|
||||
package ai.bosses.QueenShyeed;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
@ -81,7 +82,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
|
||||
private void spawnShyeed()
|
||||
{
|
||||
final String respawn = loadGlobalQuestVar("Respawn");
|
||||
final String respawn = GlobalVariablesManager.getInstance().getString("QueenShyeedRespawn");
|
||||
final long remain = (!respawn.isEmpty()) ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -98,7 +99,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
private void startRespawn()
|
||||
{
|
||||
final int respawnTime = RESPAWN - getRandom(RANDOM_RESPAWN);
|
||||
saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
GlobalVariablesManager.getInstance().set("QueenShyeedRespawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
startQuestTimer("respawn", respawnTime, null, null);
|
||||
MOB_BUFF_ZONE.setEnabled(false);
|
||||
MOB_BUFF_DISPLAY_ZONE.setEnabled(false);
|
||||
|
@ -79,14 +79,14 @@ public final class FreyaCelebration extends LongTimeEvent
|
||||
if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
|
||||
{
|
||||
final long _curr_time = System.currentTimeMillis();
|
||||
final String value = loadGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("FreyaCelebration");
|
||||
final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
|
||||
|
||||
if (_curr_time > _reuse_time)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, 1);
|
||||
giveItems(player, FREYA_POTION, 1);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
player.getVariables().set("FreyaCelebration", Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -92,7 +92,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
else if (event.equalsIgnoreCase("buy_scroll_24"))
|
||||
{
|
||||
final long curTime = System.currentTimeMillis();
|
||||
final String value = loadGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("MasterOfEnchanting");
|
||||
final long reuse = value == "" ? 0 : Long.parseLong(value);
|
||||
if (player.getCreateDate().after(EVENT_START))
|
||||
{
|
||||
@ -105,7 +105,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
@ -139,7 +139,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
|
@ -1655,97 +1655,6 @@ public class Quest extends AbstractScript implements IIdentifiable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert (or update) in the database variables that need to stay persistent for this quest after a reboot.<br>
|
||||
* This function is for storage of values that do not related to a specific player but are global for all characters.<br>
|
||||
* For example, if we need to disable a quest-gatekeeper until a certain time (as is done with some grand-boss gatekeepers), we can save that time in the DB.
|
||||
* @param var the name of the variable to save
|
||||
* @param value the value of the variable
|
||||
*/
|
||||
public final void saveGlobalQuestVar(String var, String value)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("REPLACE INTO quest_global_data (quest_name,var,value) VALUES (?,?,?)"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.setString(3, value);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not insert global quest variable:", 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 to load
|
||||
* @return the current value of the specified variable, or an empty string if the variable does not exist
|
||||
*/
|
||||
public final String loadGlobalQuestVar(String var)
|
||||
{
|
||||
String result = "";
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("SELECT value FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
try (ResultSet rs = statement.executeQuery())
|
||||
{
|
||||
if (rs.first())
|
||||
{
|
||||
result = rs.getString(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not load global quest variable:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database a global quest variable that was previously saved for this quest.
|
||||
* @param var the name of the variable to delete
|
||||
*/
|
||||
public final void deleteGlobalQuestVar(String var)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variable:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database all global quest variables that were previously saved for this quest.
|
||||
*/
|
||||
public final void deleteAllGlobalQuestVars()
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variables:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert in the database the quest for the player.
|
||||
* @param qs the {@link QuestState} object whose variable to insert
|
||||
|
@ -1,5 +1,5 @@
|
||||
CREATE TABLE IF NOT EXISTS `global_variables` (
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
@ -1,11 +0,0 @@
|
||||
-- Table structure for global quest data (i.e. quest data not particular to a player)
|
||||
-- Note: We had considered using character_quests with char_id = 0 for this, but decided
|
||||
-- against it, primarily for aesthetic purposes, cleaningness of code, expectability, and
|
||||
-- to keep char-related data purely as char-related data, global purely as global.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `quest_global_data` (
|
||||
`quest_name` VARCHAR(40) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`quest_name`,`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -21,6 +21,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
@ -79,7 +80,7 @@ public final class Core extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
final String test = getGlobalQuestVar("Core_Attacked");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Core_Attacked");
|
||||
if (test.equalsIgnoreCase("true"))
|
||||
{
|
||||
_firstAttacked = true;
|
||||
@ -99,7 +100,7 @@ public final class Core extends AbstractNpcAI
|
||||
@Override
|
||||
public void onSave()
|
||||
{
|
||||
saveGlobalQuestVar("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
GlobalVariablesManager.getInstance().set("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
}
|
||||
|
||||
public void spawnBoss(L2GrandBossInstance npc)
|
||||
|
@ -17,6 +17,7 @@
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
@ -86,7 +87,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
|
||||
private void spawnShyeed()
|
||||
{
|
||||
final String respawn = getGlobalQuestVar("Respawn");
|
||||
final String respawn = GlobalVariablesManager.getInstance().getString("QueenShyeedRespawn");
|
||||
final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -103,7 +104,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
private void startRespawn()
|
||||
{
|
||||
final int respawnTime = RESPAWN - getRandom(RANDOM_RESPAWN);
|
||||
saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
GlobalVariablesManager.getInstance().set("QueenShyeedRespawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
startQuestTimer("respawn", respawnTime, null, null);
|
||||
MOB_BUFF_ZONE.setEnabled(false);
|
||||
MOB_BUFF_DISPLAY_ZONE.setEnabled(false);
|
||||
|
@ -195,7 +195,7 @@ public class AvantGarde extends AbstractNpcAI
|
||||
{
|
||||
for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
|
||||
{
|
||||
final String qvar = getGlobalQuestVar(varName + i);
|
||||
final String qvar = player.getVariables().getString(varName + i);
|
||||
if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0")))
|
||||
{
|
||||
activeCertifications++;
|
||||
@ -213,7 +213,7 @@ public class AvantGarde extends AbstractNpcAI
|
||||
for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
|
||||
{
|
||||
final String qvarName = varName + i;
|
||||
final String qvar = getGlobalQuestVar(qvarName);
|
||||
final String qvar = player.getVariables().getString(qvarName);
|
||||
if (qvar.endsWith(";"))
|
||||
{
|
||||
final String skillIdVar = qvar.replace(";", "");
|
||||
@ -224,7 +224,7 @@ public class AvantGarde extends AbstractNpcAI
|
||||
if (sk != null)
|
||||
{
|
||||
player.removeSkill(sk);
|
||||
saveGlobalQuestVar(qvarName, "0");
|
||||
player.getVariables().set(qvarName, "0");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -255,7 +255,7 @@ public class AvantGarde extends AbstractNpcAI
|
||||
_log.warning("Somehow " + player.getName() + " deleted a certification book!");
|
||||
}
|
||||
}
|
||||
saveGlobalQuestVar(qvarName, "0");
|
||||
player.getVariables().set(qvarName, "0");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -109,14 +109,14 @@ public final class PriestOfBlessing extends AbstractNpcAI
|
||||
{
|
||||
if (player.getAdena() >= PRICE_VOICE)
|
||||
{
|
||||
final String value = getGlobalQuestVar(player.getAccountName() + "_voice");
|
||||
final String value = player.getVariables().getString("PriestOfBlessing_voice");
|
||||
final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
|
||||
|
||||
if (System.currentTimeMillis() > _reuse_time)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, PRICE_VOICE);
|
||||
giveItems(player, NEVIT_VOICE, 1);
|
||||
saveGlobalQuestVar(player.getAccountName() + "_voice", Long.toString(System.currentTimeMillis() + (20 * 3600000)));
|
||||
player.getVariables().set("PriestOfBlessing_voice", Long.toString(System.currentTimeMillis() + (20 * 3600000)));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -140,7 +140,7 @@ public final class PriestOfBlessing extends AbstractNpcAI
|
||||
|
||||
if (player.getAdena() >= _price_hourglass)
|
||||
{
|
||||
final String value = getGlobalQuestVar(player.getAccountName() + "_hg_" + _index);
|
||||
final String value = player.getVariables().getString("PriestOfBlessing_hg_" + _index);
|
||||
final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
|
||||
|
||||
if (System.currentTimeMillis() > _reuse_time)
|
||||
@ -149,7 +149,7 @@ public final class PriestOfBlessing extends AbstractNpcAI
|
||||
final int _nevit_hourglass = _hg[getRandom(0, _hg.length - 1)];
|
||||
takeItems(player, Inventory.ADENA_ID, _price_hourglass);
|
||||
giveItems(player, _nevit_hourglass, 1);
|
||||
saveGlobalQuestVar(player.getAccountName() + "_hg_" + _index, Long.toString(System.currentTimeMillis() + (20 * 3600000)));
|
||||
player.getVariables().set("PriestOfBlessing_hg_" + _index, Long.toString(System.currentTimeMillis() + (20 * 3600000)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -245,7 +245,7 @@ public final class SubclassCertification extends AbstractNpcAI
|
||||
|
||||
String htmltext;
|
||||
final String tmp = variable + level + "-" + player.getClassIndex();
|
||||
final String globalVariable = getGlobalQuestVar(tmp);
|
||||
final String globalVariable = player.getVariables().getString(tmp);
|
||||
|
||||
if (!globalVariable.equals("") && !globalVariable.equals("0"))
|
||||
{
|
||||
@ -268,7 +268,7 @@ public final class SubclassCertification extends AbstractNpcAI
|
||||
smsg.addItemName(item);
|
||||
player.sendPacket(smsg);
|
||||
|
||||
saveGlobalQuestVar(tmp, String.valueOf(item.getObjectId()));
|
||||
player.getVariables().set(tmp, String.valueOf(item.getObjectId()));
|
||||
htmltext = "GetAbility.html";
|
||||
}
|
||||
return htmltext;
|
||||
|
@ -150,7 +150,7 @@ public final class SubClassSkills extends Quest
|
||||
for (int j = Config.MAX_SUBCLASS; j > 0; j--)
|
||||
{
|
||||
qName = VARS[i] + String.valueOf(j);
|
||||
qValue = getGlobalQuestVar(qName);
|
||||
qValue = player.getVariables().getString(qName);
|
||||
if ((qValue == null) || qValue.isEmpty())
|
||||
{
|
||||
continue;
|
||||
|
@ -80,14 +80,14 @@ public final class FreyaCelebration extends LongTimeEvent
|
||||
if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
|
||||
{
|
||||
final long _curr_time = System.currentTimeMillis();
|
||||
final String value = getGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("FreyaCelebration");
|
||||
final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
|
||||
|
||||
if (_curr_time > _reuse_time)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, 1);
|
||||
giveItems(player, FREYA_POTION, 1);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
player.getVariables().set("FreyaCelebration", Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -131,12 +131,9 @@ public final class FreyaCelebration extends LongTimeEvent
|
||||
|
||||
caster.addItem("FreyaCelebration", FREYA_GIFT, 1, npc, true);
|
||||
}
|
||||
else
|
||||
else if (getRandom(10) < 2)
|
||||
{
|
||||
if (getRandom(10) < 2)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getName(), FREYA_TEXT[getRandom(FREYA_TEXT.length - 1)]));
|
||||
}
|
||||
npc.broadcastPacket(new CreatureSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getName(), FREYA_TEXT[getRandom(FREYA_TEXT.length - 1)]));
|
||||
}
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isSummon);
|
||||
|
@ -93,7 +93,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
else if (event.equalsIgnoreCase("buy_scroll_24"))
|
||||
{
|
||||
final long curTime = System.currentTimeMillis();
|
||||
final String value = getGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("MasterOfEnchanting");
|
||||
final long reuse = value == "" ? 0 : Long.parseLong(value);
|
||||
if (player.getCreateDate().after(EVENT_START))
|
||||
{
|
||||
@ -106,7 +106,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
@ -134,21 +134,18 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
player.sendPacket(sm);
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
// Little glitch. There is no SystemMessage with seconds only.
|
||||
// If time is less than 1 minute player can buy scrolls
|
||||
else if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Little glitch. There is no SystemMessage with seconds only.
|
||||
// If time is less than 1 minute player can buy scrolls
|
||||
if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "32599-s24-no.htm";
|
||||
}
|
||||
htmltext = "32599-s24-no.htm";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,76 +182,118 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
switch (getEnchantLevel(player, MASTER_YOGI_STAFF))
|
||||
{
|
||||
case 4:
|
||||
{
|
||||
giveItems(player, 6406, 1); // Firework
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
giveItems(player, 6406, 2); // Firework
|
||||
giveItems(player, 6407, 1); // Large Firework
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
giveItems(player, 6406, 3); // Firework
|
||||
giveItems(player, 6407, 2); // Large Firework
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
giveItems(player, HAT_SHADOW_REWARD[getRandom(3)], 1);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
|
||||
giveItems(player, 956, 1); // Scroll: Enchant Armor (D)
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
|
||||
break;
|
||||
}
|
||||
case 11:
|
||||
{
|
||||
giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
|
||||
giveItems(player, 952, 1); // Scroll: Enchant Armor (C)
|
||||
break;
|
||||
}
|
||||
case 12:
|
||||
{
|
||||
giveItems(player, 948, 1); // Scroll: Enchant Armor (B)
|
||||
break;
|
||||
}
|
||||
case 13:
|
||||
{
|
||||
giveItems(player, 729, 1); // Scroll: Enchant Weapon (A)
|
||||
break;
|
||||
}
|
||||
case 14:
|
||||
{
|
||||
giveItems(player, HAT_EVENT_REWARD[getRandom(3)], 1);
|
||||
break;
|
||||
}
|
||||
case 15:
|
||||
{
|
||||
giveItems(player, 13992, 1); // Grade S Accessory Chest (Event)
|
||||
break;
|
||||
}
|
||||
case 16:
|
||||
{
|
||||
giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
|
||||
break;
|
||||
}
|
||||
case 17:
|
||||
{
|
||||
giveItems(player, 959, 1); // Scroll: Enchant Weapon (S)
|
||||
break;
|
||||
}
|
||||
case 18:
|
||||
{
|
||||
giveItems(player, 13991, 1); // Grade S Armor Chest (Event)
|
||||
break;
|
||||
}
|
||||
case 19:
|
||||
{
|
||||
giveItems(player, 13990, 1); // Grade S Weapon Chest (Event)
|
||||
break;
|
||||
}
|
||||
case 20:
|
||||
{
|
||||
giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
|
||||
break;
|
||||
}
|
||||
case 21:
|
||||
{
|
||||
giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
|
||||
giveItems(player, 8752, 1); // High-Grade Life Stone: level 76
|
||||
giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
|
||||
break;
|
||||
}
|
||||
case 22:
|
||||
{
|
||||
giveItems(player, 13989, 1); // S80 Grade Armor Chest (Event)
|
||||
break;
|
||||
}
|
||||
case 23:
|
||||
{
|
||||
giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (getEnchantLevel(player, MASTER_YOGI_STAFF) > 23)
|
||||
{
|
||||
giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
takeItems(player, MASTER_YOGI_STAFF, 1);
|
||||
htmltext = "32599-rewardok.htm";
|
||||
|
@ -21,6 +21,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.gameserver.datatables.SkillData;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
@ -40,6 +41,14 @@ import ai.AbstractNpcAI;
|
||||
public class SeedOfAnnihilation extends AbstractNpcAI
|
||||
{
|
||||
private static final Map<Integer, Location> TELEPORT_ZONES = new HashMap<>();
|
||||
static
|
||||
{
|
||||
TELEPORT_ZONES.put(60002, new Location(-213175, 182648, -10992));
|
||||
TELEPORT_ZONES.put(60003, new Location(-181217, 186711, -10528));
|
||||
TELEPORT_ZONES.put(60004, new Location(-180211, 182984, -15152));
|
||||
TELEPORT_ZONES.put(60005, new Location(-179275, 186802, -10720));
|
||||
}
|
||||
|
||||
private static final int ANNIHILATION_FURNACE = 18928;
|
||||
|
||||
// Strength, Agility, Wisdom
|
||||
@ -67,14 +76,6 @@ public class SeedOfAnnihilation extends AbstractNpcAI
|
||||
private final SeedRegion[] _regionsData = new SeedRegion[3];
|
||||
private Long _seedsNextStatusChange;
|
||||
|
||||
static
|
||||
{
|
||||
TELEPORT_ZONES.put(60002, new Location(-213175, 182648, -10992));
|
||||
TELEPORT_ZONES.put(60003, new Location(-181217, 186711, -10528));
|
||||
TELEPORT_ZONES.put(60004, new Location(-180211, 182984, -15152));
|
||||
TELEPORT_ZONES.put(60005, new Location(-179275, 186802, -10720));
|
||||
}
|
||||
|
||||
public SeedOfAnnihilation()
|
||||
{
|
||||
super(SeedOfAnnihilation.class.getSimpleName(), "gracia/AI");
|
||||
@ -226,18 +227,18 @@ public class SeedOfAnnihilation extends AbstractNpcAI
|
||||
});
|
||||
|
||||
int buffsNow = 0;
|
||||
final String var = getGlobalQuestVar("SeedNextStatusChange");
|
||||
final String var = GlobalVariablesManager.getInstance().getString("SeedNextStatusChange");
|
||||
if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis()))
|
||||
{
|
||||
buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
}
|
||||
else
|
||||
{
|
||||
_seedsNextStatusChange = Long.parseLong(var);
|
||||
buffsNow = Integer.parseInt(getGlobalQuestVar("SeedBuffsList"));
|
||||
buffsNow = Integer.parseInt(GlobalVariablesManager.getInstance().getString("SeedBuffsList"));
|
||||
}
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
@ -300,9 +301,9 @@ public class SeedOfAnnihilation extends AbstractNpcAI
|
||||
if (event.equalsIgnoreCase("ChangeSeedsStatus"))
|
||||
{
|
||||
final int buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
_regionsData[i].activeBuff = ZONE_BUFFS_LIST[buffsNow][i];
|
||||
|
@ -231,7 +231,7 @@ public final class Q00062_PathOfTheTrooper extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "32197-10.html";
|
||||
}
|
||||
break;
|
||||
|
@ -465,7 +465,7 @@ public final class Q00063_PathOfTheWarder extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "32198-19.html";
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
package quests.Q00307_ControlDeviceOfTheGiants;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.QuestSound;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
@ -100,7 +101,7 @@ public class Q00307_ControlDeviceOfTheGiants extends Quest
|
||||
{
|
||||
return "32711-09.html";
|
||||
}
|
||||
final String respawn = getGlobalQuestVar("Respawn");
|
||||
final String respawn = GlobalVariablesManager.getInstance().getString("GiantsControlDeviceRespawn");
|
||||
final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -170,7 +171,7 @@ public class Q00307_ControlDeviceOfTheGiants extends Quest
|
||||
qst.setCond(2, true);
|
||||
}
|
||||
}
|
||||
saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + RESPAWN_DELAY));
|
||||
GlobalVariablesManager.getInstance().set("GiantsControlDeviceRespawn", Long.toString(System.currentTimeMillis() + RESPAWN_DELAY));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -291,7 +291,7 @@ public final class Q00401_PathOfTheWarrior extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30010-13.html";
|
||||
}
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -196,7 +196,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -409,7 +409,7 @@ public final class Q00402_PathOfTheHumanKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30417-12.html";
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ public final class Q00403_PathOfTheRogue extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30379-09.html";
|
||||
}
|
||||
else if (!hasQuestItems(player, HORSESHOE_OF_LIGHT) && hasQuestItems(player, BEZIQUES_LETTER))
|
||||
|
@ -224,7 +224,7 @@ public final class Q00404_PathOfTheHumanWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30391-06.html";
|
||||
}
|
||||
break;
|
||||
|
@ -179,7 +179,7 @@ public final class Q00405_PathOfTheCleric extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30022-09.html";
|
||||
}
|
||||
else if (hasQuestItems(player, LETTER_OF_ORDER_1ST))
|
||||
|
@ -228,7 +228,7 @@ public final class Q00406_PathOfTheElvenKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30327-10.html";
|
||||
}
|
||||
break;
|
||||
|
@ -255,7 +255,7 @@ public final class Q00407_PathOfTheElvenScout extends Quest
|
||||
giveAdena(player, 163800, true);
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30328-07.html";
|
||||
}
|
||||
break;
|
||||
|
@ -347,7 +347,7 @@ public final class Q00408_PathOfTheElvenWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30414-20.html";
|
||||
}
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ public final class Q00409_PathOfTheElvenOracle extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30293-08.html";
|
||||
}
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ public final class Q00410_PathOfThePalusKnight extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30329-11.html";
|
||||
}
|
||||
else if (hasAtLeastOneQuestItem(player, VIRGILS_LETTER, MORTE_TALISMAN))
|
||||
|
@ -226,7 +226,7 @@ public final class Q00411_PathOfTheAssassin extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30416-06.html";
|
||||
}
|
||||
else if (!hasAtLeastOneQuestItem(player, LEIKANS_NOTE, SHILENS_TEARS, ARKENIAS_RECOMMENDATION, IRON_HEART, SHILENS_CALL) && hasQuestItems(player, ARKENIAS_LETTER))
|
||||
|
@ -285,7 +285,7 @@ public final class Q00412_PathOfTheDarkWizard extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30421-13.html";
|
||||
}
|
||||
else if (hasQuestItems(player, SEEDS_OF_DESPAIR))
|
||||
|
@ -247,7 +247,7 @@ public final class Q00413_PathOfTheShillienOracle extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30330-10.html";
|
||||
}
|
||||
break;
|
||||
|
@ -309,7 +309,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30501-03.html";
|
||||
}
|
||||
break;
|
||||
@ -345,7 +345,7 @@ public final class Q00414_PathOfTheOrcRaider extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "31978-05.html";
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -562,7 +562,7 @@ public final class Q00415_PathOfTheOrcMonk extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30501-04.html";
|
||||
}
|
||||
break;
|
||||
|
@ -189,7 +189,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
|
||||
giveAdena(player, 163800, true);
|
||||
st.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -503,7 +503,7 @@ public final class Q00416_PathOfTheOrcShaman extends Quest
|
||||
giveAdena(player, 81900, true);
|
||||
st.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "31979-03.html";
|
||||
}
|
||||
break;
|
||||
|
@ -323,7 +323,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -671,7 +671,7 @@ public final class Q00417_PathOfTheScavenger extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = "30316-05.html";
|
||||
}
|
||||
break;
|
||||
|
@ -218,7 +218,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -244,7 +244,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -270,7 +270,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -296,7 +296,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -370,7 +370,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
@ -406,7 +406,7 @@ public final class Q00418_PathOfTheArtisan extends Quest
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
player.sendPacket(new SocialAction(player.getObjectId(), 3));
|
||||
saveGlobalQuestVar("1ClassQuestFinished", "1");
|
||||
player.getVariables().set("1ClassQuestFinished", "1");
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
|
@ -18,6 +18,7 @@ package quests.Q00610_MagicalPowerOfWaterPart2;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
@ -52,7 +53,7 @@ public class Q00610_MagicalPowerOfWaterPart2 extends Quest
|
||||
addKillId(ASHUTAR);
|
||||
registerQuestItems(GREEN_TOTEM, ASHUTAR_HEART);
|
||||
|
||||
final String test = getGlobalQuestVar("Q00610_respawn");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Q00610_respawn");
|
||||
final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -146,7 +147,7 @@ public class Q00610_MagicalPowerOfWaterPart2 extends Quest
|
||||
final int respawnMaxDelay = (int) (129600000 * Config.RAID_MAX_RESPAWN_MULTIPLIER);
|
||||
final int respawnDelay = getRandom(respawnMinDelay, respawnMaxDelay);
|
||||
cancelQuestTimer("despawn_ashutar", npc, null);
|
||||
saveGlobalQuestVar("Q00610_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
|
||||
GlobalVariablesManager.getInstance().set("Q00610_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
|
||||
startQuestTimer("spawn_npc", respawnDelay, null, null);
|
||||
executeForEachPlayer(killer, npc, isSummon, true, false);
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
|
@ -18,6 +18,7 @@ package quests.Q00616_MagicalPowerOfFirePart2;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
@ -52,7 +53,7 @@ public class Q00616_MagicalPowerOfFirePart2 extends Quest
|
||||
addKillId(NASTRON);
|
||||
registerQuestItems(RED_TOTEM, NASTRON_HEART);
|
||||
|
||||
final String test = getGlobalQuestVar("Q00616_respawn");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Q00616_respawn");
|
||||
final long remain = (!test.isEmpty()) ? (Long.parseLong(test) - System.currentTimeMillis()) : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -146,7 +147,7 @@ public class Q00616_MagicalPowerOfFirePart2 extends Quest
|
||||
final int respawnMaxDelay = (int) (129600000 * Config.RAID_MAX_RESPAWN_MULTIPLIER);
|
||||
final int respawnDelay = getRandom(respawnMinDelay, respawnMaxDelay);
|
||||
cancelQuestTimer("despawn_nastron", npc, null);
|
||||
saveGlobalQuestVar("Q00616_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
|
||||
GlobalVariablesManager.getInstance().set("Q00616_respawn", String.valueOf(System.currentTimeMillis() + respawnDelay));
|
||||
startQuestTimer("spawn_npc", respawnDelay, null, null);
|
||||
executeForEachPlayer(killer, npc, isSummon, true, false);
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
|
@ -264,7 +264,6 @@ public abstract class IdFactory
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM heroes_diary WHERE heroes_diary.charId NOT IN (SELECT charId FROM characters);");
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM character_offline_trade WHERE character_offline_trade.charId NOT IN (SELECT charId FROM characters);");
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM character_offline_trade_items WHERE character_offline_trade_items.charId NOT IN (SELECT charId FROM characters);");
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM character_quest_global_data WHERE character_quest_global_data.charId NOT IN (SELECT charId FROM characters);");
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM character_tpbookmark WHERE character_tpbookmark.charId NOT IN (SELECT charId FROM characters);");
|
||||
cleanCount += stmt.executeUpdate("DELETE FROM character_variables WHERE character_variables.charId NOT IN (SELECT charId FROM characters);");
|
||||
|
||||
|
@ -1536,97 +1536,6 @@ public class Quest extends AbstractScript implements IIdentifiable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert (or update) in the database variables that need to stay persistent for this quest after a reboot.<br>
|
||||
* This function is for storage of values that do not related to a specific player but are global for all characters.<br>
|
||||
* For example, if we need to disable a quest-gatekeeper until a certain time (as is done with some grand-boss gatekeepers), we can save that time in the DB.
|
||||
* @param var the name of the variable to save
|
||||
* @param value the value of the variable
|
||||
*/
|
||||
public final void saveGlobalQuestVar(String var, String value)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("REPLACE INTO quest_global_data (quest_name,var,value) VALUES (?,?,?)"))
|
||||
{
|
||||
ps.setString(1, getName());
|
||||
ps.setString(2, var);
|
||||
ps.setString(3, value);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not insert global quest variable:", 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 to load
|
||||
* @return the current value of the specified variable, or an empty string if the variable does not exist
|
||||
*/
|
||||
public final String getGlobalQuestVar(String var)
|
||||
{
|
||||
String result = "";
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("SELECT value FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
ps.setString(1, getName());
|
||||
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 global quest variable:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database a global quest variable that was previously saved for this quest.
|
||||
* @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 quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
ps.setString(1, getName());
|
||||
ps.setString(2, var);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variable:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database all global quest variables that were previously saved for this quest.
|
||||
*/
|
||||
public final void deleteAllGlobalQuestVars()
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ?"))
|
||||
{
|
||||
ps.setString(1, getName());
|
||||
ps.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variables:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert in the database the quest for the player.
|
||||
* @param qs the {@link QuestState} object whose variable to insert
|
||||
|
@ -457,12 +457,6 @@ public final class L2GameClient extends MMOClient<MMOConnection<L2GameClient>> i
|
||||
ps.execute();
|
||||
}
|
||||
|
||||
try (PreparedStatement ps = con.prepareStatement("DELETE FROM character_quest_global_data WHERE charId=?"))
|
||||
{
|
||||
ps.setInt(1, objid);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
|
||||
try (PreparedStatement ps = con.prepareStatement("DELETE FROM character_recipebook WHERE charId=?"))
|
||||
{
|
||||
ps.setInt(1, objid);
|
||||
|
@ -328,7 +328,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
|
||||
{
|
||||
for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
|
||||
{
|
||||
final String itemOID = st.getQuest().getGlobalQuestVar(varName + i);
|
||||
final String itemOID = activeChar.getVariables().getString(varName + i);
|
||||
if (!itemOID.isEmpty() && !itemOID.endsWith(";") && !itemOID.equals("0"))
|
||||
{
|
||||
if (Util.isDigit(itemOID))
|
||||
@ -345,7 +345,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
|
||||
{
|
||||
giveSkill(activeChar, trainer, skill);
|
||||
// Logging the given skill.
|
||||
st.getQuest().saveGlobalQuestVar(varName + i, skill.getId() + ";");
|
||||
activeChar.getVariables().set(varName + i, skill.getId() + ";");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
DROP TABLE IF EXISTS `global_variables`;
|
||||
CREATE TABLE IF NOT EXISTS `global_variables` (
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -1,12 +0,0 @@
|
||||
-- Table structure for global quest data (i.e. quest data not particular to a player)
|
||||
-- Note: We had considered using character_quests with char_id = 0 for this, but decided
|
||||
-- against it, primarily for aesthetic purposes, cleaningness of code, expectability, and
|
||||
-- to keep char-related data purely as char-related data, global purely as global.
|
||||
|
||||
DROP TABLE IF EXISTS `quest_global_data`;
|
||||
CREATE TABLE IF NOT EXISTS `quest_global_data` (
|
||||
`quest_name` VARCHAR(40) NOT NULL DEFAULT '',
|
||||
`var` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) ,
|
||||
PRIMARY KEY (`quest_name`,`var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
@ -23,6 +23,7 @@ import java.util.Map;
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
@ -227,18 +228,18 @@ public final class SeedOfAnnihilation extends AbstractNpcAI
|
||||
});
|
||||
|
||||
int buffsNow = 0;
|
||||
final String var = loadGlobalQuestVar("SeedNextStatusChange");
|
||||
final String var = GlobalVariablesManager.getInstance().getString("SeedNextStatusChange");
|
||||
if (var.equalsIgnoreCase("") || (Long.parseLong(var) < System.currentTimeMillis()))
|
||||
{
|
||||
buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
}
|
||||
else
|
||||
{
|
||||
_seedsNextStatusChange = Long.parseLong(var);
|
||||
buffsNow = Integer.parseInt(loadGlobalQuestVar("SeedBuffsList"));
|
||||
buffsNow = Integer.parseInt(GlobalVariablesManager.getInstance().getString("SeedBuffsList"));
|
||||
}
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
@ -301,9 +302,9 @@ public final class SeedOfAnnihilation extends AbstractNpcAI
|
||||
if (event.equalsIgnoreCase("ChangeSeedsStatus"))
|
||||
{
|
||||
final int buffsNow = getRandom(ZONE_BUFFS_LIST.length);
|
||||
saveGlobalQuestVar("SeedBuffsList", String.valueOf(buffsNow));
|
||||
GlobalVariablesManager.getInstance().set("SeedBuffsList", String.valueOf(buffsNow));
|
||||
_seedsNextStatusChange = getNextSeedsStatusChangeTime();
|
||||
saveGlobalQuestVar("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
GlobalVariablesManager.getInstance().set("SeedNextStatusChange", String.valueOf(_seedsNextStatusChange));
|
||||
for (int i = 0; i < _regionsData.length; i++)
|
||||
{
|
||||
_regionsData[i].activeBuff = ZONE_BUFFS_LIST[buffsNow][i];
|
||||
|
@ -21,6 +21,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
@ -82,7 +83,7 @@ public final class Core extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
final String test = loadGlobalQuestVar("Core_Attacked");
|
||||
final String test = GlobalVariablesManager.getInstance().getString("Core_Attacked");
|
||||
if (test.equalsIgnoreCase("true"))
|
||||
{
|
||||
_firstAttacked = true;
|
||||
@ -102,7 +103,7 @@ public final class Core extends AbstractNpcAI
|
||||
@Override
|
||||
public void onSave()
|
||||
{
|
||||
saveGlobalQuestVar("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
GlobalVariablesManager.getInstance().set("Core_Attacked", Boolean.toString(_firstAttacked));
|
||||
}
|
||||
|
||||
public void spawnBoss(L2GrandBossInstance npc)
|
||||
|
@ -17,6 +17,7 @@
|
||||
package ai.bosses.QueenShyeed;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
@ -81,7 +82,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
|
||||
private void spawnShyeed()
|
||||
{
|
||||
final String respawn = loadGlobalQuestVar("Respawn");
|
||||
final String respawn = GlobalVariablesManager.getInstance().getString("QueenShyeedRespawn");
|
||||
final long remain = (!respawn.isEmpty()) ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -98,7 +99,7 @@ public final class QueenShyeed extends AbstractNpcAI
|
||||
private void startRespawn()
|
||||
{
|
||||
final int respawnTime = RESPAWN - getRandom(RANDOM_RESPAWN);
|
||||
saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
GlobalVariablesManager.getInstance().set("QueenShyeedRespawn", Long.toString(System.currentTimeMillis() + respawnTime));
|
||||
startQuestTimer("respawn", respawnTime, null, null);
|
||||
MOB_BUFF_ZONE.setEnabled(false);
|
||||
MOB_BUFF_DISPLAY_ZONE.setEnabled(false);
|
||||
|
@ -79,14 +79,14 @@ public final class FreyaCelebration extends LongTimeEvent
|
||||
if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
|
||||
{
|
||||
final long _curr_time = System.currentTimeMillis();
|
||||
final String value = loadGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("FreyaCelebration");
|
||||
final long _reuse_time = value == "" ? 0 : Long.parseLong(value);
|
||||
|
||||
if (_curr_time > _reuse_time)
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, 1);
|
||||
giveItems(player, FREYA_POTION, 1);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
player.getVariables().set("FreyaCelebration", Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -92,7 +92,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
else if (event.equalsIgnoreCase("buy_scroll_24"))
|
||||
{
|
||||
final long curTime = System.currentTimeMillis();
|
||||
final String value = loadGlobalQuestVar(player.getAccountName());
|
||||
final String value = player.getVariables().getString("MasterOfEnchanting");
|
||||
final long reuse = value == "" ? 0 : Long.parseLong(value);
|
||||
if (player.getCreateDate().after(EVENT_START))
|
||||
{
|
||||
@ -105,7 +105,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
@ -139,7 +139,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
|
||||
{
|
||||
takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
|
||||
giveItems(player, MASTER_YOGI_SCROLL, 24);
|
||||
saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
player.getVariables().set("MasterOfEnchanting", Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
|
||||
htmltext = "32599-scroll24.htm";
|
||||
}
|
||||
else
|
||||
|
@ -17,6 +17,7 @@
|
||||
package quests.Q00307_ControlDeviceOfTheGiants;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.QuestSound;
|
||||
import com.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
@ -100,7 +101,7 @@ public class Q00307_ControlDeviceOfTheGiants extends Quest
|
||||
{
|
||||
return "32711-09.html";
|
||||
}
|
||||
final String respawn = loadGlobalQuestVar("Respawn");
|
||||
final String respawn = GlobalVariablesManager.getInstance().getString("GiantsControlDeviceRespawn");
|
||||
final long remain = !respawn.isEmpty() ? Long.parseLong(respawn) - System.currentTimeMillis() : 0;
|
||||
if (remain > 0)
|
||||
{
|
||||
@ -170,7 +171,7 @@ public class Q00307_ControlDeviceOfTheGiants extends Quest
|
||||
qst.setCond(2, true);
|
||||
}
|
||||
}
|
||||
saveGlobalQuestVar("Respawn", Long.toString(System.currentTimeMillis() + RESPAWN_DELAY));
|
||||
GlobalVariablesManager.getInstance().set("GiantsControlDeviceRespawn", Long.toString(System.currentTimeMillis() + RESPAWN_DELAY));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1655,97 +1655,6 @@ public class Quest extends AbstractScript implements IIdentifiable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert (or update) in the database variables that need to stay persistent for this quest after a reboot.<br>
|
||||
* This function is for storage of values that do not related to a specific player but are global for all characters.<br>
|
||||
* For example, if we need to disable a quest-gatekeeper until a certain time (as is done with some grand-boss gatekeepers), we can save that time in the DB.
|
||||
* @param var the name of the variable to save
|
||||
* @param value the value of the variable
|
||||
*/
|
||||
public final void saveGlobalQuestVar(String var, String value)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("REPLACE INTO quest_global_data (quest_name,var,value) VALUES (?,?,?)"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.setString(3, value);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not insert global quest variable:", 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 to load
|
||||
* @return the current value of the specified variable, or an empty string if the variable does not exist
|
||||
*/
|
||||
public final String loadGlobalQuestVar(String var)
|
||||
{
|
||||
String result = "";
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("SELECT value FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
try (ResultSet rs = statement.executeQuery())
|
||||
{
|
||||
if (rs.first())
|
||||
{
|
||||
result = rs.getString(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not load global quest variable:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database a global quest variable that was previously saved for this quest.
|
||||
* @param var the name of the variable to delete
|
||||
*/
|
||||
public final void deleteGlobalQuestVar(String var)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ? AND var = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.setString(2, var);
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variable:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permanently delete from the database all global quest variables that were previously saved for this quest.
|
||||
*/
|
||||
public final void deleteAllGlobalQuestVars()
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement("DELETE FROM quest_global_data WHERE quest_name = ?"))
|
||||
{
|
||||
statement.setString(1, getName());
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_log.log(Level.WARNING, "could not delete global quest variables:", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert in the database the quest for the player.
|
||||
* @param qs the {@link QuestState} object whose variable to insert
|
||||
|
Loading…
Reference in New Issue
Block a user