diff --git a/L2J_Mobius_C6_Interlude/dist/game/config/custom/Buffer.ini b/L2J_Mobius_C6_Interlude/dist/game/config/custom/SchemeBuffer.ini similarity index 83% rename from L2J_Mobius_C6_Interlude/dist/game/config/custom/Buffer.ini rename to L2J_Mobius_C6_Interlude/dist/game/config/custom/SchemeBuffer.ini index f7f59f985b..681df5b2e4 100644 --- a/L2J_Mobius_C6_Interlude/dist/game/config/custom/Buffer.ini +++ b/L2J_Mobius_C6_Interlude/dist/game/config/custom/SchemeBuffer.ini @@ -1,6 +1,7 @@ # --------------------------------------------------------------------------- -# Buffer +# Scheme Buffer # --------------------------------------------------------------------------- +# Also check data\SchemeBufferSkills.xml # Maximum number of available schemes per player. BufferMaxSchemesPerChar = 4 diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008-1.htm b/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008-1.htm similarity index 100% rename from L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008-1.htm rename to L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008-1.htm diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008-2.htm b/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008-2.htm similarity index 100% rename from L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008-2.htm rename to L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008-2.htm diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008.htm b/L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008.htm similarity index 100% rename from L2J_Mobius_C6_Interlude/dist/game/data/html/mods/buffer/50008.htm rename to L2J_Mobius_C6_Interlude/dist/game/data/html/mods/SchemeBuffer/50008.htm diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java index 68ce7e8b30..ec397f59a6 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/Config.java @@ -90,10 +90,10 @@ public class Config // custom private static final String AWAY_CONFIG_FILE = "./config/custom/Away.ini"; private static final String BANK_CONFIG_FILE = "./config/custom/Bank.ini"; - private static final String BUFFER_CONFIG_FILE = "./config/custom/Buffer.ini"; private static final String EVENT_CHAMPION_CONFIG_FILE = "./config/custom/Champion.ini"; private static final String OFFLINE_CONFIG_FILE = "./config/custom/Offline.ini"; private static final String OTHER_CONFIG_FILE = "./config/custom/Other.ini"; + private static final String SCHEME_BUFFER_CONFIG_FILE = "./config/custom/SchemeBuffer.ini"; private static final String EVENT_REBIRTH_CONFIG_FILE = "./config/custom/Rebirth.ini"; private static final String EVENT_WEDDING_CONFIG_FILE = "./config/custom/Wedding.ini"; // login @@ -2109,18 +2109,18 @@ public class Config { try { - final Properties BufferSettings = new Properties(); - final InputStream is = new FileInputStream(new File(BUFFER_CONFIG_FILE)); - BufferSettings.load(is); + final Properties ShemeBufferSettings = new Properties(); + final InputStream is = new FileInputStream(new File(SCHEME_BUFFER_CONFIG_FILE)); + ShemeBufferSettings.load(is); is.close(); - BUFFER_MAX_SCHEMES = Integer.parseInt(BufferSettings.getProperty("BufferMaxSchemesPerChar", "4")); - BUFFER_STATIC_BUFF_COST = Integer.parseInt(BufferSettings.getProperty("BufferStaticCostPerBuff", "-1")); + BUFFER_MAX_SCHEMES = Integer.parseInt(ShemeBufferSettings.getProperty("BufferMaxSchemesPerChar", "4")); + BUFFER_STATIC_BUFF_COST = Integer.parseInt(ShemeBufferSettings.getProperty("BufferStaticCostPerBuff", "-1")); } catch (Exception e) { e.printStackTrace(); - throw new Error("Failed to Load " + BUFFER_CONFIG_FILE + " File."); + throw new Error("Failed to Load " + SCHEME_BUFFER_CONFIG_FILE + " File."); } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java index 490cefdad9..db7f06e696 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java @@ -41,7 +41,7 @@ import org.l2jmobius.commons.util.Util; import org.l2jmobius.gameserver.cache.CrestCache; import org.l2jmobius.gameserver.cache.HtmCache; import org.l2jmobius.gameserver.communitybbs.Manager.ForumsBBSManager; -import org.l2jmobius.gameserver.datatables.BufferTable; +import org.l2jmobius.gameserver.datatables.SchemeBufferTable; import org.l2jmobius.gameserver.datatables.HeroSkillTable; import org.l2jmobius.gameserver.datatables.NobleSkillTable; import org.l2jmobius.gameserver.datatables.OfflineTradeTable; @@ -257,7 +257,7 @@ public class GameServer } Util.printSection("Npc"); - BufferTable.getInstance(); + SchemeBufferTable.getInstance(); NpcWalkerRoutesTable.getInstance().load(); if (!NpcTable.getInstance().isInitialized()) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/Shutdown.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/Shutdown.java index c2d59431c8..f0abcab21e 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/Shutdown.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/Shutdown.java @@ -22,7 +22,7 @@ import org.l2jmobius.Config; import org.l2jmobius.commons.concurrent.ThreadPool; import org.l2jmobius.commons.database.DatabaseBackup; import org.l2jmobius.commons.database.DatabaseFactory; -import org.l2jmobius.gameserver.datatables.BufferTable; +import org.l2jmobius.gameserver.datatables.SchemeBufferTable; import org.l2jmobius.gameserver.datatables.OfflineTradeTable; import org.l2jmobius.gameserver.instancemanager.AutoSaveManager; import org.l2jmobius.gameserver.instancemanager.CastleManorManager; @@ -459,7 +459,7 @@ public class Shutdown extends Thread LOGGER.info("Fishing Championship data has been saved!!"); // Schemes save. - BufferTable.getInstance().saveSchemes(); + SchemeBufferTable.getInstance().saveSchemes(); LOGGER.info("BufferTable data has been saved!!"); // Save all global (non-player specific) Quest data that needs to persist after reboot diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java index 70b9b6e47d..44e387f918 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java @@ -23,7 +23,7 @@ import java.util.StringTokenizer; import org.l2jmobius.Config; import org.l2jmobius.commons.util.StringUtil; -import org.l2jmobius.gameserver.datatables.BufferTable; +import org.l2jmobius.gameserver.datatables.SchemeBufferTable; import org.l2jmobius.gameserver.datatables.SkillTable; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Summon; @@ -43,7 +43,10 @@ public class SchemeBufferInstance extends FolkInstance @Override public void onBypassFeedback(PlayerInstance player, String command) { - StringTokenizer st = new StringTokenizer(command, " "); + // Simple hack to use createscheme bypass with a space. + command = command.replace("createscheme ", "createscheme;"); + + StringTokenizer st = new StringTokenizer(command, ";"); String currentCommand = st.nextToken(); if (currentCommand.startsWith("menu")) @@ -113,7 +116,7 @@ public class SchemeBufferInstance extends FolkInstance } else if ((cost == 0) || player.reduceAdena("NPC Buffer", cost, this, true)) { - for (int skillId : BufferTable.getInstance().getScheme(player.getObjectId(), schemeName)) + for (int skillId : SchemeBufferTable.getInstance().getScheme(player.getObjectId(), schemeName)) { SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId, 1)).getEffects(this, target); } @@ -131,7 +134,7 @@ public class SchemeBufferInstance extends FolkInstance final int skillId = Integer.parseInt(st.nextToken()); final int page = Integer.parseInt(st.nextToken()); - final List skills = BufferTable.getInstance().getScheme(player.getObjectId(), schemeName); + final List skills = SchemeBufferTable.getInstance().getScheme(player.getObjectId(), schemeName); if (currentCommand.startsWith("skillselect") && !schemeName.equalsIgnoreCase("none")) { @@ -155,14 +158,20 @@ public class SchemeBufferInstance extends FolkInstance { try { - final String schemeName = st.nextToken(); + final String schemeName = st.nextToken().trim(); if (schemeName.length() > 14) { - player.sendMessage("Scheme's name must contain up to 14 chars. Spaces are trimmed."); + player.sendMessage("Scheme's name must contain up to 14 chars."); + return; + } + // Simple hack to use spaces, dots, commas, exclamations or question marks. + if (!Util.isAlphaNumeric(schemeName.replace(" ", "").replace(".", "").replace(",", "").replace("!", "").replace("?", ""))) + { + player.sendMessage("Please use plain alphanumeric characters."); return; } - final Map> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); + final Map> schemes = SchemeBufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if (schemes != null) { if (schemes.size() == Config.BUFFER_MAX_SCHEMES) @@ -178,12 +187,12 @@ public class SchemeBufferInstance extends FolkInstance } } - BufferTable.getInstance().setScheme(player.getObjectId(), schemeName.trim(), new ArrayList()); + SchemeBufferTable.getInstance().setScheme(player.getObjectId(), schemeName.trim(), new ArrayList<>()); showGiveBuffsWindow(player); } catch (Exception e) { - player.sendMessage("Scheme's name must contain up to 14 chars. Spaces are trimmed."); + player.sendMessage("Scheme's name must contain up to 14 chars."); } } else if (currentCommand.startsWith("deletescheme")) @@ -191,7 +200,7 @@ public class SchemeBufferInstance extends FolkInstance try { final String schemeName = st.nextToken(); - final Map> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); + final Map> schemes = SchemeBufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if ((schemes != null) && schemes.containsKey(schemeName)) { @@ -214,14 +223,14 @@ public class SchemeBufferInstance extends FolkInstance String filename = ""; if (val == 0) { - filename = "" + npcId; + filename = Integer.toString(npcId); } else { filename = npcId + "-" + val; } - return "data/html/mods/buffer/" + filename + ".htm"; + return "data/html/mods/SchemeBuffer/" + filename + ".htm"; } /** @@ -232,7 +241,7 @@ public class SchemeBufferInstance extends FolkInstance { final StringBuilder sb = new StringBuilder(200); - final Map> schemes = BufferTable.getInstance().getPlayerSchemes(player.getObjectId()); + final Map> schemes = SchemeBufferTable.getInstance().getPlayerSchemes(player.getObjectId()); if ((schemes == null) || schemes.isEmpty()) { sb.append("You haven't defined any scheme."); @@ -243,10 +252,10 @@ public class SchemeBufferInstance extends FolkInstance { final int cost = getFee(scheme.getValue()); StringUtil.append(sb, "", scheme.getKey(), " [", scheme.getValue().size(), " / ", player.getMaxBuffCount(), "]", ((cost > 0) ? " - cost: " + StringUtil.formatNumber(cost) : ""), ""); - StringUtil.append(sb, "Use on Me | "); - StringUtil.append(sb, "Use on Pet | "); - StringUtil.append(sb, "Edit | "); - StringUtil.append(sb, "Delete
"); + StringUtil.append(sb, "Use on Me | "); + StringUtil.append(sb, "Use on Pet | "); + StringUtil.append(sb, "Edit | "); + StringUtil.append(sb, "Delete
"); } } @@ -268,7 +277,7 @@ public class SchemeBufferInstance extends FolkInstance private void showEditSchemeWindow(PlayerInstance player, String groupType, String schemeName, int page) { final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); - final List schemeSkills = BufferTable.getInstance().getScheme(player.getObjectId(), schemeName); + final List schemeSkills = SchemeBufferTable.getInstance().getScheme(player.getObjectId(), schemeName); html.setFile(getHtmlPath(getNpcId(), 2)); html.replace("%schemename%", schemeName); @@ -289,7 +298,7 @@ public class SchemeBufferInstance extends FolkInstance private String getGroupSkillList(PlayerInstance player, String groupType, String schemeName, int page) { // Retrieve the entire skills list based on group type. - List skills = BufferTable.getInstance().getSkillsIdsByType(groupType); + List skills = SchemeBufferTable.getInstance().getSkillsIdsByType(groupType); if (skills.isEmpty()) { return "That group doesn't contain any skills."; @@ -305,7 +314,7 @@ public class SchemeBufferInstance extends FolkInstance // Cut skills list up to page number. skills = skills.subList((page - 1) * PAGE_LIMIT, Math.min(page * PAGE_LIMIT, skills.size())); - final List schemeSkills = BufferTable.getInstance().getScheme(player.getObjectId(), schemeName); + final List schemeSkills = SchemeBufferTable.getInstance().getScheme(player.getObjectId(), schemeName); final StringBuilder sb = new StringBuilder(skills.size() * 150); int row = 0; @@ -317,33 +326,33 @@ public class SchemeBufferInstance extends FolkInstance { if (schemeSkills.contains(skillId)) { - StringUtil.append(sb, "", SkillTable.getInstance().getInfo(skillId, 1).getName(), "", BufferTable.getInstance().getAvailableBuff(skillId).getDescription(), "