diff --git a/README.md b/README.md index 61394d1710..694de2a7dd 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ You will start by installing the database server and client, and then run some s You will start by cloning the repository, then configure the database properties and lastly start the server. #### Prerequisites -* Java 21+ (I recommend [Amazon Corretto](https://aws.amazon.com/corretto)) +* Java 21 (I recommend [Amazon Corretto](https://aws.amazon.com/corretto)) * IDE (I recommend [IntelliJ IDEA](https://www.jetbrains.com/idea/)) #### Steps @@ -107,7 +107,7 @@ You will start by installing the game with the old installer, then overwrite som 1. Download _MapleGlobal-v83-setup.exe_ from my [Google Drive](https://drive.google.com/drive/folders/1hgnb92MGL6xqEp9szEMBh0K9pSJcJ6IT). This is the official installer from back then. 2. Install it in a directory of your choice. 3. Delete the following files from the installation directory: _HShield_ (entire directory), _ASPLnchr.exe_, _MapleStory.exe_, and _Patcher.exe_. -4. Download _CosmicWZ-2024-05-21-v0.13.0.zip_ from my [Google Drive](https://drive.google.com/drive/folders/1hgnb92MGL6xqEp9szEMBh0K9pSJcJ6IT). +4. Download _CosmicWZ-2024-07-17-v0.14.0.zip_ from my [Google Drive](https://drive.google.com/drive/folders/1hgnb92MGL6xqEp9szEMBh0K9pSJcJ6IT). 5. Unzip it and copy all .wz-files into the installation directory. Replace the existing ones. 6. Download _HeavenMS-localhost-WINDOW.exe_ from [hostr.co](https://hostr.co/amuX5SLeeVZx). This is a client modified to connect to your localhost instead of Nexon's server (along with some fixes and custom changes). - Your antivirus will likely detect the file as a trojan or similar and automatically delete it. To prevent this from happening, add your _Downloads_ directory and the installation directory as exclusions in your antivirus software. On W11, this is under "Virus & threat protection settings" -> "Add or remove exclusions". diff --git a/config.yaml b/config.yaml index bcbb1c37db..5765529882 100644 --- a/config.yaml +++ b/config.yaml @@ -257,7 +257,6 @@ server: USE_BUFF_MOST_SIGNIFICANT: true #When applying buffs, the player will stick with the highest stat boost among the listed, rather than overwriting stats. USE_BUFF_EVERLASTING: false #Every applied buff on players holds expiration time so high it'd be considered permanent. Suggestion thanks to Vcoc. USE_MULTIPLE_SAME_EQUIP_DROP: true #Enables multiple drops by mobs of the same equipment, number of possible drops based on the quantities provided at the drop data. - USE_BANISHABLE_TOWN_SCROLL: false #Enables town scrolls to act as if it's a "player banish", rendering the antibanish scroll effect available. USE_ENABLE_FULL_RESPAWN: false #At respawn task, always respawn missing mobs when they're available. Spawn count doesn't depend on how many players are currently there. USE_ENABLE_CHAT_LOG: false #Write in-game chat to log USE_REBIRTH_SYSTEM: false #Flag to enable/disable rebirth system @@ -395,7 +394,6 @@ server: USE_EQUIPMNT_LVLUP_SLOTS: false #Equips can upgrade slots at level up. USE_EQUIPMNT_LVLUP_POWER: false #Enable more powerful stat upgrades at equip level up. USE_EQUIPMNT_LVLUP_CASH: false #Enable equip leveling up on cash equipments as well. - USE_SPIKES_AVOID_BANISH: false #Shoes equipped with spikes prevents mobs from banishing wearer. MAX_EQUIPMNT_LVLUP_STAT_UP: 10000 #Max stat upgrade an equipment can have on a levelup. MAX_EQUIPMNT_STAT: 32767 #Max stat on an equipment by leveling up. USE_EQUIPMNT_LVLUP: 1 #All equips lvlup at max level of N, set 1 to disable. diff --git a/database/sql/3-db_shopupdate.sql b/database/sql/3-db_shopupdate.sql index f11b84e1cd..6ed4753bd2 100644 --- a/database/sql/3-db_shopupdate.sql +++ b/database/sql/3-db_shopupdate.sql @@ -131,39 +131,6 @@ INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position` (9201101, 2012008, 4200000, 0, 164), (9201101, 2022251, 3800000, 0, 168); -# adding antibanish scrolls -INSERT IGNORE INTO `shopitems` (`shopid`, `itemid`, `price`, `pitch`, `position`) VALUES -(1001100, 2030100, 450, 0, 130), -(1011100, 2030100, 450, 0, 142), -(1021100, 2030100, 450, 0, 142), -(1031100, 2030100, 450, 0, 146), -(1051002, 2030100, 450, 0, 142), -(1052116, 2030100, 450, 0, 118), -(1061001, 2030100, 450, 0, 126), -(1061002, 2030100, 450, 0, 130), -(1091002, 2030100, 450, 0, 130), -(1100002, 2030100, 450, 0, 138), -(2012005, 2030100, 450, 0, 126), -(2022001, 2030100, 450, 0, 126), -(2030009, 2030100, 450, 0, 126), -(2040051, 2030100, 450, 0, 102), -(2041006, 2030100, 450, 0, 134), -(2051000, 2030100, 450, 0, 134), -(2060004, 2030100, 450, 0, 134), -(2070001, 2030100, 450, 0, 134), -(2080001, 2030100, 450, 0, 134), -(2090003, 2030100, 450, 0, 126), -(2093002, 2030100, 450, 0, 126), -(2100004, 2030100, 450, 0, 130), -(2110001, 2030100, 450, 0, 130), -(2130000, 2030100, 450, 0, 126), -(9201060, 2030100, 450, 0, 114), -(9270021, 2030100, 450, 0, 118), -(9270022, 2030100, 450, 0, 114), -- Thanks Rednor for finding duplicate item on NPC -(1338, 2030100, 450, 0, 114), -(9270057, 2030100, 450, 0, 4), -(9270065, 2030100, 450, 0, 3); - -- Thanks to Vcoc -- GMShop: Sacks, GmEquip, Cheese & Onyx, Utils, -- Arrows, Bullets, Throwings and Capsules, @@ -301,7 +268,6 @@ INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `pitch`, `position`) VALU (1200002, 2070000, 500, 0, 108), (1200002, 2061000, 1, 0, 120), (1200002, 2060000, 1, 0, 124), - (1200002, 2030100, 400, 0, 128), (1200002, 2030000, 400, 0, 132), (1200002, 2020028, 3000, 0, 136), (1200002, 2010004, 310, 0, 140), @@ -323,7 +289,6 @@ INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `pitch`, `position`) VALU (1301000, 2070000, 500, 0, 108), (1301000, 2061000, 1, 0, 112), (1301000, 2060000, 1, 0, 116), - (1301000, 2030100, 400, 0, 120), (1301000, 2030000, 400, 0, 124), (1301000, 2022000, 1650, 0, 128), (1301000, 2022003, 1100, 0, 132), @@ -348,4 +313,4 @@ INSERT INTO `shopitems` ( `shopid`, `itemid`, `price`, `pitch`, `position`) VALU (9270019, 1482004, 75000, 0, 100), (9270020, 1052113, 120000, 0, 92), (9270020, 1052110, 100000, 0, 96), - (9270020, 1002625, 75000, 0, 100); \ No newline at end of file + (9270020, 1002625, 75000, 0, 100); diff --git a/database/sql/migration/README.md b/database/sql/migration/README.md new file mode 100644 index 0000000000..e7aca53693 --- /dev/null +++ b/database/sql/migration/README.md @@ -0,0 +1,13 @@ +# Migrations +The files contained in this directory are intended to be run manually when transitioning from an earlier version of Cosmic to a more recent one. + +Not every version comes with an associated migration script. Only those with breaking changes such as removal of custom assets that would otherwise crash the client. + +This is a temporary solution until automatic database migrations are in place. + +## How to +Each script is only intended to be run __once__. + +When a new migration is available, simply run the SQL script in HeidiSQL (or other SQL client of choice). + +If there are multiple new migrations that you haven't run, run them in order starting with the lowest version and ending with the highest version. diff --git a/database/sql/migration/v0.14.0.sql b/database/sql/migration/v0.14.0.sql new file mode 100644 index 0000000000..4cd57de7b7 --- /dev/null +++ b/database/sql/migration/v0.14.0.sql @@ -0,0 +1,2 @@ +DELETE FROM shopitems +WHERE itemid = 2030100; # Return Scroll - Banished Area (a custom item added in HeavenMS) diff --git a/handbook/Use.txt b/handbook/Use.txt index 3cc5d46e54..6bf39435e1 100644 --- a/handbook/Use.txt +++ b/handbook/Use.txt @@ -385,7 +385,6 @@ 2030016 - Phyllia's Warp Powder - Warp powder made by fairy Phyllia. Teleports you to Magatia when used inside the Nihal desert region. 2030019 - Return Scroll to Nautilus - This scroll enables you to return to the Pirate village, Nautilus. This is a one use item and will disappear after use. 2030020 - Return Scroll to New Leaf City - Use this scroll to venture back to New Leaf City whenever you want! -2030100 - Return Scroll - Banished Area - Returns you to the map where you were last banished. Requires immediate use and have changed neither maps nor channels. 2031000 - Masked Man's Invitation - An invitation from the Masked Man to the Halloween Party at the Haunted Mansion. Double-click to move straight to the mansion. 2031001 - Studio Invitation - An invitation to the studio for the event "For Guild Only". 2040000 - Scroll for Helmet for DEF - Improves the helmet's weapon def.\nSuccess rate:100%, weapon def. +1 diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index ea94e94acd..9962b5c822 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -116,6 +116,7 @@ import server.events.Events; import server.events.RescueGaga; import server.events.gm.Fitness; import server.events.gm.Ola; +import server.life.BanishInfo; import server.life.MobSkill; import server.life.MobSkillFactory; import server.life.MobSkillId; @@ -352,9 +353,6 @@ public class Character extends AbstractCharacterObject { private int targetHpBarHash = 0; private long targetHpBarTime = 0; private long nextWarningTime = 0; - private int banishMap = -1; - private int banishSp = -1; - private long banishTime = 0; private long lastExpGainTime; private boolean pendingNameChange; //only used to change name on logout, not to be relied upon elsewhere private long loginTime; @@ -1356,48 +1354,14 @@ public class Character extends AbstractCharacterObject { } } - public boolean canRecoverLastBanish() { - return System.currentTimeMillis() - this.banishTime < MINUTES.toMillis(5); - } - - public Pair getLastBanishData() { - return new Pair<>(this.banishMap, this.banishSp); - } - - public void clearBanishPlayerData() { - this.banishMap = -1; - this.banishSp = -1; - this.banishTime = 0; - } - - public void setBanishPlayerData(int banishMap, int banishSp, long banishTime) { - this.banishMap = banishMap; - this.banishSp = banishSp; - this.banishTime = banishTime; - } - - public void changeMapBanish(int mapid, String portal, String msg) { - if (YamlConfig.config.server.USE_SPIKES_AVOID_BANISH) { - for (Item it : this.getInventory(InventoryType.EQUIPPED).list()) { - if ((it.getFlag() & ItemConstants.SPIKES) == ItemConstants.SPIKES) { - return; - } - } - } - - int banMap = this.getMapId(); - int banSp = this.getMap().findClosestPlayerSpawnpoint(this.getPosition()).getId(); - long banTime = System.currentTimeMillis(); - - if (msg != null) { - dropMessage(5, msg); + public void changeMapBanish(BanishInfo banishInfo) { + if (banishInfo.msg() != null) { + dropMessage(5, banishInfo.msg()); } MapleMap map_ = getWarpMap(mapid); - Portal portal_ = map_.getPortal(portal); + Portal portal_ = map_.getPortal(banishInfo.portal()); changeMap(map_, portal_ != null ? portal_ : map_.getRandomPlayerSpawnpoint()); - - setBanishPlayerData(banMap, banSp, banTime); } public void changeMap(int map) { @@ -1780,7 +1744,6 @@ public class Character extends AbstractCharacterObject { this.mapTransitioning.set(true); this.unregisterChairBuff(); - this.clearBanishPlayerData(); Trade.cancelTrade(this, Trade.TradeResult.UNSUCCESSFUL_ANOTHER_MAP); this.closePlayerInteractions(); diff --git a/src/main/java/client/Client.java b/src/main/java/client/Client.java index b3292fd04d..2e0c2f94fc 100644 --- a/src/main/java/client/Client.java +++ b/src/main/java/client/Client.java @@ -1518,7 +1518,6 @@ public class Client extends ChannelInboundHandlerAdapter { player.getInventory(InventoryType.EQUIPPED).checked(false); //test player.getMap().removePlayer(player); - player.clearBanishPlayerData(); player.getClient().getChannelServer().removePlayer(player); player.saveCharToDB(); diff --git a/src/main/java/config/ServerConfig.java b/src/main/java/config/ServerConfig.java index 125675b68e..f22a9f44fe 100644 --- a/src/main/java/config/ServerConfig.java +++ b/src/main/java/config/ServerConfig.java @@ -105,7 +105,6 @@ public class ServerConfig { public boolean USE_BUFF_MOST_SIGNIFICANT; public boolean USE_BUFF_EVERLASTING; public boolean USE_MULTIPLE_SAME_EQUIP_DROP; - public boolean USE_BANISHABLE_TOWN_SCROLL; public boolean USE_ENABLE_FULL_RESPAWN; public boolean USE_ENABLE_CHAT_LOG; public boolean USE_REBIRTH_SYSTEM; @@ -243,7 +242,6 @@ public class ServerConfig { public boolean USE_EQUIPMNT_LVLUP_SLOTS; public boolean USE_EQUIPMNT_LVLUP_POWER; public boolean USE_EQUIPMNT_LVLUP_CASH; - public boolean USE_SPIKES_AVOID_BANISH; public int MAX_EQUIPMNT_LVLUP_STAT_UP; public int MAX_EQUIPMNT_STAT; public int USE_EQUIPMNT_LVLUP; diff --git a/src/main/java/constants/id/ItemId.java b/src/main/java/constants/id/ItemId.java index dda0323a2f..82044196c2 100644 --- a/src/main/java/constants/id/ItemId.java +++ b/src/main/java/constants/id/ItemId.java @@ -165,7 +165,6 @@ public class ItemId { public static final int EYEDROP = 2050001; public static final int TONIC = 2050002; public static final int HOLY_WATER = 2050003; - public static final int ANTI_BANISH_SCROLL = 2030100; private static final int DOJO_PARTY_ALL_CURE = 2022433; private static final int CARNIVAL_PARTY_ALL_CURE = 2022163; public static final int WHITE_ELIXIR = 2022544; diff --git a/src/main/java/constants/inventory/ItemConstants.java b/src/main/java/constants/inventory/ItemConstants.java index 537cfc7e2c..fa36aff350 100644 --- a/src/main/java/constants/inventory/ItemConstants.java +++ b/src/main/java/constants/inventory/ItemConstants.java @@ -134,11 +134,7 @@ public final class ItemConstants { } public static boolean isTownScroll(int itemId) { - return itemId >= 2030000 && itemId < ItemId.ANTI_BANISH_SCROLL; - } - - public static boolean isAntibanishScroll(int itemId) { - return itemId == ItemId.ANTI_BANISH_SCROLL; + return itemId >= 2030000; } public static boolean isCleanSlate(int scrollId) { diff --git a/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java b/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java index 25db10357a..1b084e59bf 100644 --- a/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java +++ b/src/main/java/net/server/channel/handlers/MobBanishPlayerHandler.java @@ -23,23 +23,25 @@ import client.Character; import client.Client; import net.AbstractPacketHandler; import net.packet.InPacket; -import server.life.LifeFactory.BanishInfo; +import server.life.BanishInfo; import server.life.Monster; public final class MobBanishPlayerHandler extends AbstractPacketHandler { @Override - public final void handlePacket(InPacket p, Client c) { - int mobid = p.readInt(); // mob banish handling detected thanks to MedicOP + public void handlePacket(InPacket p, Client c) { + int mobId = p.readInt(); // mob banish handling detected thanks to MedicOP Character chr = c.getPlayer(); - Monster mob = chr.getMap().getMonsterById(mobid); - - if (mob != null) { - BanishInfo banishInfo = mob.getBanish(); - if (banishInfo != null) { - chr.changeMapBanish(banishInfo.getMap(), banishInfo.getPortal(), banishInfo.getMsg()); - } + Monster mob = chr.getMap().getMonsterById(mobId); + if (mob == null) { + return; } + + BanishInfo banishInfo = mob.getBanish(); + if (banishInfo == null) { + return; + } + chr.changeMapBanish(banishInfo); } -} \ No newline at end of file +} diff --git a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java index 34ec1daad7..fd327edfa0 100644 --- a/src/main/java/net/server/channel/handlers/MoveLifeHandler.java +++ b/src/main/java/net/server/channel/handlers/MoveLifeHandler.java @@ -173,7 +173,7 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler { if (banishPlayers != null) { for (Character chr : banishPlayers) { - chr.changeMapBanish(monster.getBanish().getMap(), monster.getBanish().getPortal(), monster.getBanish().getMsg()); + chr.changeMapBanish(monster.getBanish()); } } } diff --git a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java index 234f56eb0c..5207307bfb 100644 --- a/src/main/java/net/server/channel/handlers/TakeDamageHandler.java +++ b/src/main/java/net/server/channel/handlers/TakeDamageHandler.java @@ -289,7 +289,7 @@ public final class TakeDamageHandler extends AbstractPacketHandler { } for (Character player : banishPlayers) { // chill, if this list ever gets non-empty an attacker does exist, trust me :) - player.changeMapBanish(attacker.getBanish().getMap(), attacker.getBanish().getPortal(), attacker.getBanish().getMsg()); + player.changeMapBanish(attacker.getBanish()); } } } diff --git a/src/main/java/net/server/channel/handlers/UseItemHandler.java b/src/main/java/net/server/channel/handlers/UseItemHandler.java index 7cdb773220..f6d1a0498f 100644 --- a/src/main/java/net/server/channel/handlers/UseItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseItemHandler.java @@ -27,7 +27,6 @@ import client.Disease; import client.inventory.InventoryType; import client.inventory.Item; import client.inventory.manipulator.InventoryManipulator; -import config.YamlConfig; import constants.id.ItemId; import constants.inventory.ItemConstants; import net.AbstractPacketHandler; @@ -73,23 +72,8 @@ public final class UseItemHandler extends AbstractPacketHandler { remove(c, slot); return; } else if (ItemConstants.isTownScroll(itemId)) { - int banMap = chr.getMapId(); - int banSp = chr.getMap().findClosestPlayerSpawnpoint(chr.getPosition()).getId(); - long banTime = currentServerTime(); - - if (ii.getItemEffect(toUse.getItemId()).applyTo(chr)) { - if (YamlConfig.config.server.USE_BANISHABLE_TOWN_SCROLL) { - chr.setBanishPlayerData(banMap, banSp, banTime); - } - - remove(c, slot); - } - return; - } else if (ItemConstants.isAntibanishScroll(itemId)) { if (ii.getItemEffect(toUse.getItemId()).applyTo(chr)) { remove(c, slot); - } else { - chr.dropMessage(5, "You cannot recover from a banish state at the moment."); } return; } diff --git a/src/main/java/server/StatEffect.java b/src/main/java/server/StatEffect.java index 44cf094b63..4d6e0d9d62 100644 --- a/src/main/java/server/StatEffect.java +++ b/src/main/java/server/StatEffect.java @@ -977,18 +977,8 @@ public class StatEffect { Portal pt; if (moveTo == MapId.NONE) { - if (sourceid != ItemId.ANTI_BANISH_SCROLL) { - target = applyto.getMap().getReturnMap(); - pt = target.getRandomPlayerSpawnpoint(); - } else { - if (!applyto.canRecoverLastBanish()) { - return false; - } - - Pair lastBanishInfo = applyto.getLastBanishData(); - target = applyto.getWarpMap(lastBanishInfo.getLeft()); - pt = target.getPortal(lastBanishInfo.getRight()); - } + target = applyto.getMap().getReturnMap(); + pt = target.getRandomPlayerSpawnpoint(); } else { target = applyto.getClient().getWorldServer().getChannel(applyto.getClient().getChannel()).getMapFactory().getMap(moveTo); int targetid = target.getId() / 10000000; diff --git a/src/main/java/server/life/BanishInfo.java b/src/main/java/server/life/BanishInfo.java new file mode 100644 index 0000000000..4f6cf388fd --- /dev/null +++ b/src/main/java/server/life/BanishInfo.java @@ -0,0 +1,9 @@ +package server.life; + +import java.util.Objects; + +public record BanishInfo(int map, String portal, String msg) { + public BanishInfo { + Objects.requireNonNull(portal, "BanishInfo portal"); + } +} diff --git a/src/main/java/server/life/LifeFactory.java b/src/main/java/server/life/LifeFactory.java index 04e6cabe2a..e280b314d3 100644 --- a/src/main/java/server/life/LifeFactory.java +++ b/src/main/java/server/life/LifeFactory.java @@ -231,7 +231,10 @@ public class LifeFactory { Data banishData = monsterInfoData.getChildByPath("ban"); if (banishData != null) { - stats.setBanishInfo(new BanishInfo(DataTool.getString("banMsg", banishData), DataTool.getInt("banMap/0/field", banishData, -1), DataTool.getString("banMap/0/portal", banishData, "sp"))); + int map = DataTool.getInt("banMap/0/field", banishData, -1); + String portal = DataTool.getString("banMap/0/portal", banishData, "sp"); + String msg = DataTool.getString("banMsg", banishData); + stats.setBanishInfo(new BanishInfo(map, portal, msg)); } int noFlip = DataTool.getInt("noFlip", monsterInfoData, 0); @@ -296,31 +299,6 @@ public class LifeFactory { return DataTool.getString(nid + "/d0", npcStringData, "(...)"); } - public static class BanishInfo { - - private final int map; - private final String portal; - private final String msg; - - public BanishInfo(String msg, int map, String portal) { - this.msg = msg; - this.map = map; - this.portal = portal; - } - - public int getMap() { - return map; - } - - public String getPortal() { - return portal; - } - - public String getMsg() { - return msg; - } - } - public static class loseItem { private final int id; diff --git a/src/main/java/server/life/Monster.java b/src/main/java/server/life/Monster.java index 71f9b66c45..ea3beb85dd 100644 --- a/src/main/java/server/life/Monster.java +++ b/src/main/java/server/life/Monster.java @@ -56,7 +56,6 @@ import org.slf4j.LoggerFactory; import scripting.event.EventInstanceManager; import server.StatEffect; import server.TimerManager; -import server.life.LifeFactory.BanishInfo; import server.loot.LootManager; import server.maps.AbstractAnimatedMapObject; import server.maps.MapObjectType; diff --git a/src/main/java/server/life/MonsterStats.java b/src/main/java/server/life/MonsterStats.java index 5c091fd76d..5d18ab8910 100644 --- a/src/main/java/server/life/MonsterStats.java +++ b/src/main/java/server/life/MonsterStats.java @@ -21,7 +21,6 @@ */ package server.life; -import server.life.LifeFactory.BanishInfo; import server.life.LifeFactory.loseItem; import server.life.LifeFactory.selfDestruction; import tools.Pair; diff --git a/src/main/java/tools/mapletools/MonsterStatFetcher.java b/src/main/java/tools/mapletools/MonsterStatFetcher.java index 38033757b8..9026e39532 100644 --- a/src/main/java/tools/mapletools/MonsterStatFetcher.java +++ b/src/main/java/tools/mapletools/MonsterStatFetcher.java @@ -8,9 +8,9 @@ import provider.DataProviderFactory; import provider.DataTool; import provider.wz.DataType; import provider.wz.WZFiles; +import server.life.BanishInfo; import server.life.Element; import server.life.ElementalEffectiveness; -import server.life.LifeFactory.BanishInfo; import server.life.LifeFactory.loseItem; import server.life.LifeFactory.selfDestruction; import server.life.MobSkillId; @@ -134,7 +134,10 @@ public class MonsterStatFetcher { } Data banishData = monsterInfoData.getChildByPath("ban"); if (banishData != null) { - stats.setBanishInfo(new BanishInfo(DataTool.getString("banMsg", banishData), DataTool.getInt("banMap/0/field", banishData, -1), DataTool.getString("banMap/0/portal", banishData, "sp"))); + int map = DataTool.getInt("banMap/0/field", banishData, -1); + String portal = DataTool.getString("banMap/0/portal", banishData, "sp"); + String msg = DataTool.getString("banMsg", banishData); + stats.setBanishInfo(new BanishInfo(map, portal, msg)); } monsterStats.put(mid, stats); diff --git a/tools/input/CouponCodes.img.xml b/tools/input/CouponCodes.img.xml index 8ce30f6212..d7db72c8d0 100644 --- a/tools/input/CouponCodes.img.xml +++ b/tools/input/CouponCodes.img.xml @@ -12,10 +12,6 @@ - - - - diff --git a/wz/Item.wz/Consume/0203.img.xml b/wz/Item.wz/Consume/0203.img.xml index 94d4dce668..b4c4cfa19d 100644 --- a/wz/Item.wz/Consume/0203.img.xml +++ b/wz/Item.wz/Consume/0203.img.xml @@ -210,7 +210,7 @@ - + @@ -218,10 +218,10 @@ - + - + @@ -380,18 +380,4 @@ - - - - - - - - - - - - - - diff --git a/wz/String.wz/Consume.img.xml b/wz/String.wz/Consume.img.xml index 3a4a74fc31..925939363e 100644 --- a/wz/String.wz/Consume.img.xml +++ b/wz/String.wz/Consume.img.xml @@ -1499,10 +1499,6 @@ - - - -