Removed quest_global_data SQL table.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user