diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/.project b/L2J_Mobius_Classic_2.9.5_Saviors/.project index 0ab63d22a2..fa15cba1d1 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/.project +++ b/L2J_Mobius_Classic_2.9.5_Saviors/.project @@ -1,6 +1,6 @@ - L2J_Mobius_Classic_2.9_SecretOfEmpire + L2J_Mobius_Classic_2.9.5_Saviors diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/build.xml b/L2J_Mobius_Classic_2.9.5_Saviors/build.xml index 5510e0ed13..7539642657 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/build.xml +++ b/L2J_Mobius_Classic_2.9.5_Saviors/build.xml @@ -1,6 +1,6 @@ - + This file is part of the L2J Mobius project. @@ -134,15 +134,15 @@ - + - + - + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Character.ini index 41a8a68d42..99782522c0 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Character.ini @@ -716,6 +716,10 @@ MaxOffsetOnTeleport = 50 # Classic: True TeleportWhileSiegeInProgress = True +# Enable teleporting while player in combat. +# Default: False +TeleportWhilePlayerInCombat = False + # This option is to enable or disable the use of in game petitions. # The MaxPetitionsPerPlayer is the amount of petitions a player can make. # The MaximumPendingPetitions is the total amount of petitions in the server. diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Custom/PcCafe.ini b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/GameAssistant.ini similarity index 78% rename from L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Custom/PcCafe.ini rename to L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/GameAssistant.ini index 446f64c1fd..60a790a70b 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Custom/PcCafe.ini +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/GameAssistant.ini @@ -1,5 +1,5 @@ # --------------------------------------------------------------------------- -# PC Cafe (PC Bang) System +# PC Cafe (PC Bang) # --------------------------------------------------------------------------- # PC CAFE POINTS ID = -100 @@ -43,3 +43,10 @@ RewardLowExpKills = True # Used when RewardLowExpKills is enabled. # Default 50 (%) RewardLowExpKillsChance = 50 + + +# --------------------------------------------------------------------------- +# Game Assistant (Dimensional Merchant) +# --------------------------------------------------------------------------- +# Enable Game Assistant functions. +GameAssistantEnabled = True diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/General.ini b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/General.ini index 4a303da2fc..7c71996884 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/General.ini +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/General.ini @@ -640,6 +640,28 @@ BotReportDelay = 30 # Default: False AllowReportsFromSameClanMembers = False + +# --------------------------------------------------------------------------- +# Auto Play Settings +# --------------------------------------------------------------------------- + +# Default: True +EnableAutoPlay = True + +# Default: True +EnableAutoPotion = True + +# Default: True +EnableAutoSkill = True + +# Default: True +EnableAutoItem = True + +# Resume auto play upon enter game. +# Retail: False +ResumeAutoPlay = False + + # --------------------------------------------------------------------------- # Developer Settings # --------------------------------------------------------------------------- diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Server.ini b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Server.ini index 0e87b726f6..395575f8b4 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Server.ini +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/config/Server.ini @@ -101,8 +101,8 @@ MaximumOnlineUsers = 2000 # Numbers of protocol revisions that server allows to connect. # Delimiter is ; # WARNING: Changing the protocol revision may result in incompatible communication and many errors in game! -# Secret of Empire: 166 -AllowedProtocolRevisions = 166 +# Saviors (NA): 196 +AllowedProtocolRevisions = 196 # Displays server type next to the server name on character selection. # Notes: diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml index 107ec58f3d..de82cfb806 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/DailyMission.xml @@ -2493,10 +2493,8 @@ - + 81 @@ -2513,8 +2511,8 @@ - When you reach Lv. 82, you will get 1 special token for learning certification skill. - + + 82 @@ -2522,8 +2520,8 @@ - When you reach Lv. 83, you will get 1 special token for learning certification skill. - + + 83 @@ -2531,8 +2529,8 @@ - When you reach Lv. 84, you will get 1 special token for learning certification skill. - + + 84 @@ -2540,8 +2538,8 @@ - When you reach Lv. 85, you will get 1 special token for learning certification skill. - + + 85 @@ -2549,13 +2547,12 @@ - When you reach Lv. 86, you will get 1 special token for learning certification skill. - + + 86 - --> diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/TeleportListData.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/TeleportListData.xml new file mode 100644 index 0000000000..a2af287f6a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/TeleportListData.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/Vip.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/Vip.xml index 90bac78d7f..7ce3d2c357 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/Vip.xml +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/Vip.xml @@ -15,7 +15,7 @@ UseVipInfoWnd=false # Prime shop needs to be true aswell! -ProductName_Classic-eu.dat +ProductName_Classic-e.dat 44-47 -> L2 Point purchases product_name_begin id=2090044 outer_name=[Normal VIP Gain Scroll] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end product_name_begin id=2090045 outer_name=[Medium VIP Gain Scroll] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-1.htm b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-1.htm index d8ca0c5a5f..bc8311dd67 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-1.htm +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-1.htm @@ -1,6 +1,10 @@ Head Blacksmith Ferris:
-Have you heard of the crystals that contain the desires of spirits? They've been appearing in various places throughout Aden, and the elders and blacksmiths found out that they can be used to increase the level of equipment.
-I learned from the elders how to bring out the power from the crystals, and I'm able to upgrade equipment with that. Are you ready?
- +Have you heard of the crystals that contain the desires of spirits? They've been appearing in various places throughout Aden, and the sages and blacksmiths discovered that they can be used to increase the level and grade of equipment.
+I learned from the sages how to bring out the power from the crystals, and I'm able to use it to upgrade equipment.
+Various materials are required to upgrade, and it must already be enhanced.
+ + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-2.htm b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-2.htm new file mode 100644 index 0000000000..b8cc5928a9 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-2.htm @@ -0,0 +1,7 @@ +Head Blacksmith Ferris:
+It looks like you are really curious about upgrading equipment. I understand. I was also surprised when I first learned about it.
+Just let me know if you have any questions. I'll tell you all about it as long as I know the answer. What do you want to know?
+ + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-3.htm b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-3.htm new file mode 100644 index 0000000000..37bc1d995c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-3.htm @@ -0,0 +1,19 @@ +Head Blacksmith Ferris:
+Equipment upgrade is available for rare items as well as normal weapons, armor, and accessories. You can only upgrade enchanted items, and you need the necessary materials. +Keep in mind that for all upgrades (excluding rare upgrades), weapons must be enchanted at least to +12, armor to +10, and accessories to +8.
+Also remember that each upgrade type has a certain chance to fail and that you cannot upgrade weapons with Augment or Rune effects.
+Remember that for gloves, boots, and helmets of B-grade and above, upgrades are only possible when the armor is sealed.
+Lastly, the items you obtain through the special armor upgrade are always sealed.
+ + +
Upgrade type
+ + + + +
Rare upgrade - Upgrade paid and rare items to a higher grade
Normal upgrade - Level up D- to A-grade items
Special upgrade - Obtain S-grade items (includes exchange chance)
+ + +
+ + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-4.htm b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-4.htm new file mode 100644 index 0000000000..c9dccf3555 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847-4.htm @@ -0,0 +1,14 @@ +Head Blacksmith Ferris:
+If you want to upgrade equipment, just let me know. I'll tell you how you can upgrade your items. Keep this in mind.
+ + + +
How To Upgrade Equipment

+1. Items that can be upgraded will be shown on the Upgrade Equipment window +2. Once you click on the item you want to upgrade, the Upgrade button will be activated +3. Click on the Upgrade button, and the ingredients you need to upgrade the item will be shown, along with the amount of ingredients you currently have +4. Below the description of the ingredients, you can check the item that you can obtain from upgrading +5. Click on the Upgrade button to proceed
+
+
+ \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847.htm b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847.htm index fa407967d9..93ec8c8f59 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847.htm +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/html/villagemaster/30847.htm @@ -1,7 +1,6 @@ Head Blacksmith Ferris:
-Before, us blacksmiths had a lot of work to be do here. Since our enemy Elmore was just a short distance away. The Black Anvil Guild also made good money back then.
-With the war over, I thought we would have some down time, but I guess that's not gonna happen.
- +Blacksmiths used to have a lot of things to do. Especially during the war with Elmore always hovering on the horizon. The Black Anvil Guild made a killing.
With the war over, I thought I would get some free time, but I guess I was wrong.
+ diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/ClanHallAuctioneer/ClanHallAuctioneer-map.html b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/ClanHallAuctioneer/ClanHallAuctioneer-map.html index 59c7e1cc78..aa54f60ecf 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/ClanHallAuctioneer/ClanHallAuctioneer-map.html +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/ClanHallAuctioneer/ClanHallAuctioneer-map.html @@ -1,7 +1,7 @@
[The Town of %TOWN_NAME%]
-

+

\ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/32478.html b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/32478.html new file mode 100644 index 0000000000..6457f7be8c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/32478.html @@ -0,0 +1,6 @@ +Dimensional MerchantDimensional Merchant:
+Hi! You can deal with Dimensional items here. Dimensional items can be obtained in the item catalogue. However, if the inventory is full you can't put any Dimensional items in it.
+ + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/DimensionalMerchant.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/DimensionalMerchant.java new file mode 100644 index 0000000000..2bc3798609 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/DimensionalMerchant/DimensionalMerchant.java @@ -0,0 +1,121 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package ai.others.DimensionalMerchant; + +import org.l2jmobius.gameserver.data.xml.MultisellData; +import org.l2jmobius.gameserver.model.actor.Npc; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.ListenerRegisterType; +import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent; +import org.l2jmobius.gameserver.model.events.annotations.RegisterType; +import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.itemcontainer.PlayerFreight; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.PackageToList; +import org.l2jmobius.gameserver.network.serverpackets.WareHouseWithdrawalList; + +import ai.AbstractNpcAI; + +/** + * Dimensional Merchant AI. + * @author Mobius + */ +public class DimensionalMerchant extends AbstractNpcAI +{ + // NPC + private static final int MERCHANT = 32478; // Dimensional Merchant + // Others + private static final int ATTENDANCE_REWARD_MULTISELL = 3247801; + private static final String COMMAND_BYPASS = "Quest DimensionalMerchant "; + + private DimensionalMerchant() + { + addStartNpc(MERCHANT); + addFirstTalkId(MERCHANT); + addTalkId(MERCHANT); + } + + @Override + public String onAdvEvent(String event, Npc npc, Player player) + { + final String htmltext = null; + switch (event) + { + case "package_deposit": + { + if (player.getAccountChars().size() < 1) + { + player.sendPacket(SystemMessageId.THAT_CHARACTER_DOES_NOT_EXIST); + } + else + { + player.sendPacket(new PackageToList(player.getAccountChars())); + } + break; + } + case "package_withdraw": + { + final PlayerFreight freight = player.getFreight(); + if (freight != null) + { + if (freight.getSize() > 0) + { + player.setActiveWarehouse(freight); + for (Item i : player.getActiveWarehouse().getItems()) + { + if (i.isTimeLimitedItem() && (i.getRemainingTime() <= 0)) + { + player.getActiveWarehouse().destroyItem("ItemInstance", i, player, null); + } + } + player.sendPacket(new WareHouseWithdrawalList(1, player, WareHouseWithdrawalList.FREIGHT)); + player.sendPacket(new WareHouseWithdrawalList(2, player, WareHouseWithdrawalList.FREIGHT)); + } + else + { + player.sendPacket(SystemMessageId.YOU_HAVE_NOT_DEPOSITED_ANY_ITEMS_IN_YOUR_WAREHOUSE); + } + } + break; + } + case "attendance_rewards": + { + MultisellData.getInstance().separateAndSend(ATTENDANCE_REWARD_MULTISELL, player, null, false); + break; + } + } + return htmltext; + } + + @RegisterEvent(EventType.ON_PLAYER_BYPASS) + @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) + public void OnPlayerBypass(OnPlayerBypass event) + { + final Player player = event.getPlayer(); + if (event.getCommand().startsWith(COMMAND_BYPASS)) + { + notifyEvent(event.getCommand().replace(COMMAND_BYPASS, ""), null, player); + } + } + + public static void main(String[] args) + { + new DimensionalMerchant(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/bypasshandlers/UpgradeEquipment.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/bypasshandlers/UpgradeEquipment.java index eb378b76b7..0ad6d4f47c 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/bypasshandlers/UpgradeEquipment.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/bypasshandlers/UpgradeEquipment.java @@ -16,11 +16,13 @@ */ package handlers.bypasshandlers; +import org.l2jmobius.gameserver.enums.UpgradeType; import org.l2jmobius.gameserver.handler.IBypassHandler; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExShowUpgradeSystem; +import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExShowUpgradeSystemNormal; /** * @author Mobius @@ -41,7 +43,17 @@ public class UpgradeEquipment implements IBypassHandler { return false; } - player.sendPacket(new ExShowUpgradeSystem()); + + final UpgradeType typeName = UpgradeType.valueOf(command.split(" ")[1]); + if (typeName == UpgradeType.RARE) + { + player.sendPacket(new ExShowUpgradeSystem()); + } + else + { + player.sendPacket(new ExShowUpgradeSystemNormal(typeName)); + } + return true; } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java index 884f8b3c05..e357a290ad 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/handlers/itemhandlers/ItemSkillsTemplate.java @@ -89,7 +89,7 @@ public class ItemSkillsTemplate implements IItemHandler hasConsumeSkill = true; } - if (!itemSkill.hasEffectType(EffectType.SUMMON_PET) && !itemSkill.checkCondition(playable, playable.getTarget())) + if (!itemSkill.hasEffectType(EffectType.SUMMON_PET) && !itemSkill.checkCondition(playable, playable.getTarget(), true)) { continue; } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/skillTrees/Certifications.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/skillTrees/Certifications.xml new file mode 100644 index 0000000000..f8e1e265a9 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/skillTrees/Certifications.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/spawns/RaidbossSpawns.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/spawns/RaidbossSpawns.xml index 7d8cb6d69f..aeb986d153 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/spawns/RaidbossSpawns.xml +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/spawns/RaidbossSpawns.xml @@ -237,7 +237,7 @@ - + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/experience.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/experience.xml index 52fe49f568..fbe36995b9 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/experience.xml +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/experience.xml @@ -2,89 +2,92 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00000-00100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00000-00100.xml new file mode 100644 index 0000000000..1f0a368562 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00000-00100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00100-00200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00100-00200.xml new file mode 100644 index 0000000000..f2dc528262 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00100-00200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00200-00300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00200-00300.xml new file mode 100644 index 0000000000..b4d6504623 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00200-00300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00300-00400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00300-00400.xml new file mode 100644 index 0000000000..2def53b19d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00300-00400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00400-00500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00400-00500.xml new file mode 100644 index 0000000000..7881db7723 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00400-00500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00500-00600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00500-00600.xml new file mode 100644 index 0000000000..b3cda244ae --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00500-00600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00600-00700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00600-00700.xml new file mode 100644 index 0000000000..1b302ef0eb --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00600-00700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00700-00800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00700-00800.xml new file mode 100644 index 0000000000..53dcd4ea7d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00700-00800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00800-00900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00800-00900.xml new file mode 100644 index 0000000000..0e849d078a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00800-00900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00900-01000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00900-01000.xml new file mode 100644 index 0000000000..f4ac8dc5db --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/00900-01000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01000-01100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01000-01100.xml new file mode 100644 index 0000000000..87d2d36c0c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01000-01100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01100-01200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01100-01200.xml new file mode 100644 index 0000000000..84461922a5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01100-01200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01200-01300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01200-01300.xml new file mode 100644 index 0000000000..fafefdcc27 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01200-01300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01300-01400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01300-01400.xml new file mode 100644 index 0000000000..94da4053fd --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01300-01400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01400-01500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01400-01500.xml new file mode 100644 index 0000000000..8c5e3fed31 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01400-01500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01500-01600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01500-01600.xml new file mode 100644 index 0000000000..9d6cd23b71 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01500-01600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01600-01700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01600-01700.xml new file mode 100644 index 0000000000..6ab1a9d618 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01600-01700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01700-01800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01700-01800.xml new file mode 100644 index 0000000000..9ac714de6c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01700-01800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01800-01900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01800-01900.xml new file mode 100644 index 0000000000..43d4f6b98f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01800-01900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01900-02000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01900-02000.xml new file mode 100644 index 0000000000..6d1b3a5e2f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/01900-02000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02000-02100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02000-02100.xml new file mode 100644 index 0000000000..fe23849d71 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02000-02100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02100-02200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02100-02200.xml new file mode 100644 index 0000000000..6cacc61479 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02100-02200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02200-02300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02200-02300.xml new file mode 100644 index 0000000000..fe6ce168fb --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02200-02300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02300-02400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02300-02400.xml new file mode 100644 index 0000000000..7c342da3a3 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02300-02400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02400-02500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02400-02500.xml new file mode 100644 index 0000000000..3ceb8074d8 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02400-02500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02500-02600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02500-02600.xml new file mode 100644 index 0000000000..9c5bc4c6e5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02500-02600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02600-02700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02600-02700.xml new file mode 100644 index 0000000000..7276dbf1cb --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02600-02700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02700-02800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02700-02800.xml new file mode 100644 index 0000000000..27b16efd83 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02700-02800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02800-02900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02800-02900.xml new file mode 100644 index 0000000000..f3d2254375 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02800-02900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02900-03000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02900-03000.xml new file mode 100644 index 0000000000..c435d43c79 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/02900-03000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03000-03100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03000-03100.xml new file mode 100644 index 0000000000..80fec0e65d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03000-03100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03100-03200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03100-03200.xml new file mode 100644 index 0000000000..04369658f4 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03100-03200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03200-03300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03200-03300.xml new file mode 100644 index 0000000000..1c454037aa --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03200-03300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03300-03400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03300-03400.xml new file mode 100644 index 0000000000..2b41f5ad81 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03300-03400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03400-03500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03400-03500.xml new file mode 100644 index 0000000000..2e43d12c06 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03400-03500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03500-03600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03500-03600.xml new file mode 100644 index 0000000000..984da93e7c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03500-03600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03600-03700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03600-03700.xml new file mode 100644 index 0000000000..135fb624b5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03600-03700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03700-03800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03700-03800.xml new file mode 100644 index 0000000000..011824547f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03700-03800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03800-03900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03800-03900.xml new file mode 100644 index 0000000000..0c4e357f77 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03800-03900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03900-04000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03900-04000.xml new file mode 100644 index 0000000000..6838f0162b --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/03900-04000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04000-04100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04000-04100.xml new file mode 100644 index 0000000000..99b0130285 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04000-04100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04100-04200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04100-04200.xml new file mode 100644 index 0000000000..7875c7ef65 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04100-04200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04200-04300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04200-04300.xml new file mode 100644 index 0000000000..caea9ad957 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04200-04300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04300-04400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04300-04400.xml new file mode 100644 index 0000000000..1337b31d1c --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04300-04400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04400-04500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04400-04500.xml new file mode 100644 index 0000000000..62edb05352 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04400-04500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04500-04600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04500-04600.xml new file mode 100644 index 0000000000..41ccaa0c27 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04500-04600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04600-04700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04600-04700.xml new file mode 100644 index 0000000000..513bbef385 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04600-04700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04700-04800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04700-04800.xml new file mode 100644 index 0000000000..c26ec888a5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04700-04800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04800-04900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04800-04900.xml new file mode 100644 index 0000000000..819da28d04 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04800-04900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04900-05000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04900-05000.xml new file mode 100644 index 0000000000..938274a95d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/04900-05000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05000-05100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05000-05100.xml new file mode 100644 index 0000000000..0fa8e7e844 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05000-05100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05100-05200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05100-05200.xml new file mode 100644 index 0000000000..16c0c3940a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05100-05200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05200-05300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05200-05300.xml new file mode 100644 index 0000000000..f993c79da6 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05200-05300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05300-05400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05300-05400.xml new file mode 100644 index 0000000000..d09c0a787e --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05300-05400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05400-05500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05400-05500.xml new file mode 100644 index 0000000000..755a16dd88 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05400-05500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05500-05600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05500-05600.xml new file mode 100644 index 0000000000..9fb62aaa29 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05500-05600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05600-05700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05600-05700.xml new file mode 100644 index 0000000000..cb8a44a61f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05600-05700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05700-05800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05700-05800.xml new file mode 100644 index 0000000000..59b03e5115 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05700-05800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05800-05900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05800-05900.xml new file mode 100644 index 0000000000..8f6b8ca1da --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05800-05900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05900-06000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05900-06000.xml new file mode 100644 index 0000000000..7feddb1bbc --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/05900-06000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06000-06100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06000-06100.xml new file mode 100644 index 0000000000..0813175aec --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06000-06100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06100-06200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06100-06200.xml new file mode 100644 index 0000000000..2b75f834c9 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06100-06200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06200-06300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06200-06300.xml new file mode 100644 index 0000000000..aed14d816a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06200-06300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06300-06400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06300-06400.xml new file mode 100644 index 0000000000..5d6a90a4ef --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06300-06400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06400-06500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06400-06500.xml new file mode 100644 index 0000000000..0b944fcd8d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06400-06500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06500-06600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06500-06600.xml new file mode 100644 index 0000000000..60bd432bf3 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06500-06600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06600-06700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06600-06700.xml new file mode 100644 index 0000000000..3ebc260aa6 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06600-06700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06700-06800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06700-06800.xml new file mode 100644 index 0000000000..b558c65ae3 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06700-06800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06800-06900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06800-06900.xml new file mode 100644 index 0000000000..fe968cabd7 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06800-06900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06900-07000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06900-07000.xml new file mode 100644 index 0000000000..8dd4d9ed93 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/06900-07000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07000-07100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07000-07100.xml new file mode 100644 index 0000000000..435102d9a5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07000-07100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07100-07200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07100-07200.xml new file mode 100644 index 0000000000..38b17540d0 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07100-07200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07200-07300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07200-07300.xml new file mode 100644 index 0000000000..c653a3b882 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07200-07300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07300-07400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07300-07400.xml new file mode 100644 index 0000000000..4579d7a974 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07300-07400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07400-07500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07400-07500.xml new file mode 100644 index 0000000000..4c5e78aa7f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07400-07500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07500-07600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07500-07600.xml new file mode 100644 index 0000000000..dd4fdd4f43 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07500-07600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07600-07700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07600-07700.xml new file mode 100644 index 0000000000..81fb6c8f40 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07600-07700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07700-07800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07700-07800.xml new file mode 100644 index 0000000000..3b6763812a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07700-07800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07800-07900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07800-07900.xml new file mode 100644 index 0000000000..602a1ea125 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07800-07900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07900-08000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07900-08000.xml new file mode 100644 index 0000000000..150ec0abdd --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/07900-08000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08000-08100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08000-08100.xml new file mode 100644 index 0000000000..2a64261a92 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08000-08100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08100-08200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08100-08200.xml new file mode 100644 index 0000000000..eb7ee4d522 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08100-08200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08200-08300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08200-08300.xml new file mode 100644 index 0000000000..2ae3335d87 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08200-08300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08300-08400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08300-08400.xml new file mode 100644 index 0000000000..8a680a565d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08300-08400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08400-08500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08400-08500.xml new file mode 100644 index 0000000000..b5bfd9fb12 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08400-08500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08500-08600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08500-08600.xml new file mode 100644 index 0000000000..861723bf25 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08500-08600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08600-08700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08600-08700.xml new file mode 100644 index 0000000000..8cf95c1991 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08600-08700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08700-08800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08700-08800.xml new file mode 100644 index 0000000000..c587e20421 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08700-08800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08800-08900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08800-08900.xml new file mode 100644 index 0000000000..ad3e8f5c5f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08800-08900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08900-09000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08900-09000.xml new file mode 100644 index 0000000000..ee4670232d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/08900-09000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09000-09100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09000-09100.xml new file mode 100644 index 0000000000..b1e3f98691 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09000-09100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09100-09200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09100-09200.xml new file mode 100644 index 0000000000..55cd173824 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09100-09200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09200-09300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09200-09300.xml new file mode 100644 index 0000000000..00f3d349a7 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09200-09300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09300-09400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09300-09400.xml new file mode 100644 index 0000000000..469f0810f0 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09300-09400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09400-09500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09400-09500.xml new file mode 100644 index 0000000000..2747c41329 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09400-09500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09500-09600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09500-09600.xml new file mode 100644 index 0000000000..c97e266bb4 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09500-09600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09600-09700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09600-09700.xml new file mode 100644 index 0000000000..3281c0cd12 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09600-09700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09700-09800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09700-09800.xml new file mode 100644 index 0000000000..ef5a8803e8 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09700-09800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09800-09900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09800-09900.xml new file mode 100644 index 0000000000..11dc2e10c3 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09800-09900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09900-10000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09900-10000.xml new file mode 100644 index 0000000000..8e48d903c6 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/09900-10000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10000-10100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10000-10100.xml new file mode 100644 index 0000000000..b9f1828931 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10000-10100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10100-10200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10100-10200.xml new file mode 100644 index 0000000000..b53b6cb0fd --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10100-10200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10200-10300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10200-10300.xml new file mode 100644 index 0000000000..2140e90d13 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10200-10300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10300-10400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10300-10400.xml new file mode 100644 index 0000000000..876a959233 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10300-10400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10400-10500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10400-10500.xml new file mode 100644 index 0000000000..c7b9207091 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10400-10500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10500-10600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10500-10600.xml new file mode 100644 index 0000000000..a7d28eeb82 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10500-10600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10600-10700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10600-10700.xml new file mode 100644 index 0000000000..855211e864 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10600-10700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10700-10800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10700-10800.xml new file mode 100644 index 0000000000..a23669bfe2 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10700-10800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10800-10900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10800-10900.xml new file mode 100644 index 0000000000..72e3205849 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10800-10900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10900-11000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10900-11000.xml new file mode 100644 index 0000000000..875114ec4f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/10900-11000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11000-11100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11000-11100.xml new file mode 100644 index 0000000000..8388b591da --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11000-11100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11100-11200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11100-11200.xml new file mode 100644 index 0000000000..5a5a6f77fc --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11100-11200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11200-11300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11200-11300.xml new file mode 100644 index 0000000000..2c39447c94 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11200-11300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11300-11400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11300-11400.xml new file mode 100644 index 0000000000..f160e20f2a --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11300-11400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11400-11500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11400-11500.xml new file mode 100644 index 0000000000..888414d16d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11400-11500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11500-11600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11500-11600.xml new file mode 100644 index 0000000000..2d8172ce4b --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11500-11600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11600-11700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11600-11700.xml new file mode 100644 index 0000000000..93f12df02e --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11600-11700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11700-11800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11700-11800.xml new file mode 100644 index 0000000000..18f0257ed5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11700-11800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11800-11900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11800-11900.xml new file mode 100644 index 0000000000..147ecaabf0 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11800-11900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11900-12000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11900-12000.xml new file mode 100644 index 0000000000..1165d34b51 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/11900-12000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12000-12100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12000-12100.xml new file mode 100644 index 0000000000..bdaa87680d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12000-12100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12100-12200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12100-12200.xml new file mode 100644 index 0000000000..6bf4d9e8d6 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12100-12200.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12200-12300.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12200-12300.xml new file mode 100644 index 0000000000..b37be896e1 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12200-12300.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12300-12400.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12300-12400.xml new file mode 100644 index 0000000000..ddba0826e2 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12300-12400.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12400-12500.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12400-12500.xml new file mode 100644 index 0000000000..6f0a223301 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12400-12500.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12500-12600.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12500-12600.xml new file mode 100644 index 0000000000..960a59f703 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12500-12600.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12600-12700.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12600-12700.xml new file mode 100644 index 0000000000..0490b6cb57 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12600-12700.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12700-12800.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12700-12800.xml new file mode 100644 index 0000000000..779cadc25d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12700-12800.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12800-12900.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12800-12900.xml new file mode 100644 index 0000000000..8431114368 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12800-12900.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12900-13000.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12900-13000.xml new file mode 100644 index 0000000000..7a55c8b783 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/12900-13000.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13000-13100.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13000-13100.xml new file mode 100644 index 0000000000..d9854712da --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13000-13100.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13100-13200.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13100-13200.xml new file mode 100644 index 0000000000..eaa5420320 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/13100-13200.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/rare-upgrade.xml b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/rare-upgrade.xml new file mode 100644 index 0000000000..1536f6cf23 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/stats/upgrade/rare-upgrade.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/EquipmentUpgradeData.xsd b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/EquipmentUpgradeData.xsd index 49398738d3..1a7c84dc9b 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/EquipmentUpgradeData.xsd +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/EquipmentUpgradeData.xsd @@ -6,11 +6,16 @@ - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/TeleportListData.xsd b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/TeleportListData.xsd new file mode 100644 index 0000000000..5501488cda --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/TeleportListData.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/skillTrees.xsd b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/skillTrees.xsd index fef3567aba..3520f82279 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/skillTrees.xsd +++ b/L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/xsd/skillTrees.xsd @@ -154,6 +154,7 @@ + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/Config.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/Config.java index df3259ea9b..1f26b09909 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/Config.java @@ -97,6 +97,7 @@ public class Config private static final String CHARACTER_CONFIG_FILE = "./config/Character.ini"; private static final String FEATURE_CONFIG_FILE = "./config/Feature.ini"; private static final String FLOOD_PROTECTOR_CONFIG_FILE = "./config/FloodProtector.ini"; + private static final String GAME_ASSISTANT_CONFIG_FILE = "./config/GameAssistant.ini"; private static final String GENERAL_CONFIG_FILE = "./config/General.ini"; private static final String GRACIASEEDS_CONFIG_FILE = "./config/GraciaSeeds.ini"; private static final String GRANDBOSS_CONFIG_FILE = "./config/GrandBoss.ini"; @@ -136,7 +137,6 @@ public class Config private static final String CUSTOM_OFFLINE_TRADE_CONFIG_FILE = "./config/Custom/OfflineTrade.ini"; private static final String CUSTOM_ONLINE_INFO_CONFIG_FILE = "./config/Custom/OnlineInfo.ini"; private static final String CUSTOM_PASSWORD_CHANGE_CONFIG_FILE = "./config/Custom/PasswordChange.ini"; - private static final String CUSTOM_PC_CAFE_CONFIG_FILE = "./config/Custom/PcCafe.ini"; private static final String CUSTOM_VIP_CONFIG_FILE = "./config/Custom/VipSystem.ini"; private static final String CUSTOM_PREMIUM_SYSTEM_CONFIG_FILE = "./config/Custom/PremiumSystem.ini"; private static final String CUSTOM_PRIVATE_STORE_RANGE_CONFIG_FILE = "./config/Custom/PrivateStoreRange.ini"; @@ -305,6 +305,7 @@ public class Config public static boolean OFFSET_ON_TELEPORT_ENABLED; public static int MAX_OFFSET_ON_TELEPORT; public static boolean TELEPORT_WHILE_SIEGE_IN_PROGRESS; + public static boolean TELEPORT_WHILE_PLAYER_IN_COMBAT; public static boolean PETITIONING_ALLOWED; public static int MAX_PETITIONS_PER_PLAYER; public static int MAX_PETITIONS_PENDING; @@ -619,6 +620,11 @@ public class Config public static String[] BOTREPORT_RESETPOINT_HOUR; public static long BOTREPORT_REPORT_DELAY; public static boolean BOTREPORT_ALLOW_REPORTS_FROM_SAME_CLAN_MEMBERS; + public static boolean ENABLE_AUTO_PLAY; + public static boolean ENABLE_AUTO_POTION; + public static boolean ENABLE_AUTO_SKILL; + public static boolean ENABLE_AUTO_ITEM; + public static boolean RESUME_AUTO_PLAY; // -------------------------------------------------- // FloodProtector Settings @@ -868,6 +874,7 @@ public class Config public static int TRAINING_CAMP_MAX_LEVEL; public static double TRAINING_CAMP_EXP_MULTIPLIER; public static double TRAINING_CAMP_SP_MULTIPLIER; + public static boolean GAME_ASSISTANT_ENABLED; public static boolean SHOW_LICENCE; public static boolean SHOW_PI_AGREEMENT; public static boolean ACCEPT_NEW_GAMESERVER; @@ -1867,6 +1874,7 @@ public class Config OFFSET_ON_TELEPORT_ENABLED = characterConfig.getBoolean("OffsetOnTeleportEnabled", true); MAX_OFFSET_ON_TELEPORT = characterConfig.getInt("MaxOffsetOnTeleport", 50); TELEPORT_WHILE_SIEGE_IN_PROGRESS = characterConfig.getBoolean("TeleportWhileSiegeInProgress", true); + TELEPORT_WHILE_PLAYER_IN_COMBAT = characterConfig.getBoolean("TeleportWhilePlayerInCombat", false); PETITIONING_ALLOWED = characterConfig.getBoolean("PetitioningAllowed", true); MAX_PETITIONS_PER_PLAYER = characterConfig.getInt("MaxPetitionsPerPlayer", 5); MAX_PETITIONS_PENDING = characterConfig.getInt("MaxPetitionsPending", 25); @@ -1921,6 +1929,40 @@ public class Config TRAINING_CAMP_EXP_MULTIPLIER = trainingCampConfig.getDouble("TrainingCampExpMultiplier", 1.0); TRAINING_CAMP_SP_MULTIPLIER = trainingCampConfig.getDouble("TrainingCampSpMultiplier", 1.0); + // Load GameAssistant config file (if exists) + final PropertiesParser gameAssistantConfig = new PropertiesParser(GAME_ASSISTANT_CONFIG_FILE); + PC_CAFE_ENABLED = gameAssistantConfig.getBoolean("PcCafeEnabled", false); + PC_CAFE_ONLY_PREMIUM = gameAssistantConfig.getBoolean("PcCafeOnlyPremium", false); + PC_CAFE_ONLY_VIP = gameAssistantConfig.getBoolean("PcCafeOnlyVip", false); + PC_CAFE_MAX_POINTS = gameAssistantConfig.getInt("MaxPcCafePoints", 200000); + if (PC_CAFE_MAX_POINTS < 0) + { + PC_CAFE_MAX_POINTS = 0; + } + PC_CAFE_ENABLE_DOUBLE_POINTS = gameAssistantConfig.getBoolean("DoublingAcquisitionPoints", false); + PC_CAFE_DOUBLE_POINTS_CHANCE = gameAssistantConfig.getInt("DoublingAcquisitionPointsChance", 1); + if ((PC_CAFE_DOUBLE_POINTS_CHANCE < 0) || (PC_CAFE_DOUBLE_POINTS_CHANCE > 100)) + { + PC_CAFE_DOUBLE_POINTS_CHANCE = 1; + } + PC_CAFE_POINT_RATE = gameAssistantConfig.getDouble("AcquisitionPointsRate", 1.0); + PC_CAFE_RANDOM_POINT = gameAssistantConfig.getBoolean("AcquisitionPointsRandom", false); + if (PC_CAFE_POINT_RATE < 0) + { + PC_CAFE_POINT_RATE = 1; + } + PC_CAFE_REWARD_LOW_EXP_KILLS = gameAssistantConfig.getBoolean("RewardLowExpKills", true); + PC_CAFE_LOW_EXP_KILLS_CHANCE = gameAssistantConfig.getInt("RewardLowExpKillsChance", 50); + if (PC_CAFE_LOW_EXP_KILLS_CHANCE < 0) + { + PC_CAFE_LOW_EXP_KILLS_CHANCE = 0; + } + if (PC_CAFE_LOW_EXP_KILLS_CHANCE > 100) + { + PC_CAFE_LOW_EXP_KILLS_CHANCE = 100; + } + GAME_ASSISTANT_ENABLED = gameAssistantConfig.getBoolean("GameAssistantEnabled", false); + // Load General config file (if exists) final PropertiesParser generalConfig = new PropertiesParser(GENERAL_CONFIG_FILE); DEFAULT_ACCESS_LEVEL = generalConfig.getInt("DefaultAccessLevel", 0); @@ -1993,6 +2035,7 @@ public class Config GRID_NEIGHBOR_TURNON_TIME = generalConfig.getInt("GridNeighborTurnOnTime", 1); GRID_NEIGHBOR_TURNOFF_TIME = generalConfig.getInt("GridNeighborTurnOffTime", 90); CORRECT_PRICES = generalConfig.getBoolean("CorrectPrices", true); + ENABLE_FALLING_DAMAGE = generalConfig.getBoolean("EnableFallingDamage", true); PEACE_ZONE_MODE = generalConfig.getInt("PeaceZoneMode", 0); DEFAULT_GLOBAL_CHAT = generalConfig.getString("GlobalChat", "ON"); DEFAULT_TRADE_CHAT = generalConfig.getString("TradeChat", "ON"); @@ -2079,7 +2122,11 @@ public class Config BOTREPORT_RESETPOINT_HOUR = generalConfig.getString("BotReportPointsResetHour", "00:00").split(":"); BOTREPORT_REPORT_DELAY = generalConfig.getInt("BotReportDelay", 30) * 60000; BOTREPORT_ALLOW_REPORTS_FROM_SAME_CLAN_MEMBERS = generalConfig.getBoolean("AllowReportsFromSameClanMembers", false); - ENABLE_FALLING_DAMAGE = generalConfig.getBoolean("EnableFallingDamage", true); + ENABLE_AUTO_PLAY = generalConfig.getBoolean("EnableAutoPlay", true); + ENABLE_AUTO_POTION = generalConfig.getBoolean("EnableAutoPotion", true); + ENABLE_AUTO_SKILL = generalConfig.getBoolean("EnableAutoSkill", true); + ENABLE_AUTO_ITEM = generalConfig.getBoolean("EnableAutoItem", true); + RESUME_AUTO_PLAY = generalConfig.getBoolean("ResumeAutoPlay", false); // Load FloodProtector config file final PropertiesParser floodProtectorConfig = new PropertiesParser(FLOOD_PROTECTOR_CONFIG_FILE); @@ -3276,39 +3323,6 @@ public class Config final PropertiesParser passwordChangeConfig = new PropertiesParser(CUSTOM_PASSWORD_CHANGE_CONFIG_FILE); ALLOW_CHANGE_PASSWORD = passwordChangeConfig.getBoolean("AllowChangePassword", false); - // Load PcCafe config file (if exists) - final PropertiesParser pcCafeConfig = new PropertiesParser(CUSTOM_PC_CAFE_CONFIG_FILE); - PC_CAFE_ENABLED = pcCafeConfig.getBoolean("PcCafeEnabled", false); - PC_CAFE_ONLY_PREMIUM = pcCafeConfig.getBoolean("PcCafeOnlyPremium", false); - PC_CAFE_ONLY_VIP = pcCafeConfig.getBoolean("PcCafeOnlyVip", false); - PC_CAFE_MAX_POINTS = pcCafeConfig.getInt("MaxPcCafePoints", 200000); - if (PC_CAFE_MAX_POINTS < 0) - { - PC_CAFE_MAX_POINTS = 0; - } - PC_CAFE_ENABLE_DOUBLE_POINTS = pcCafeConfig.getBoolean("DoublingAcquisitionPoints", false); - PC_CAFE_DOUBLE_POINTS_CHANCE = pcCafeConfig.getInt("DoublingAcquisitionPointsChance", 1); - if ((PC_CAFE_DOUBLE_POINTS_CHANCE < 0) || (PC_CAFE_DOUBLE_POINTS_CHANCE > 100)) - { - PC_CAFE_DOUBLE_POINTS_CHANCE = 1; - } - PC_CAFE_POINT_RATE = pcCafeConfig.getDouble("AcquisitionPointsRate", 1.0); - PC_CAFE_RANDOM_POINT = pcCafeConfig.getBoolean("AcquisitionPointsRandom", false); - if (PC_CAFE_POINT_RATE < 0) - { - PC_CAFE_POINT_RATE = 1; - } - PC_CAFE_REWARD_LOW_EXP_KILLS = pcCafeConfig.getBoolean("RewardLowExpKills", true); - PC_CAFE_LOW_EXP_KILLS_CHANCE = pcCafeConfig.getInt("RewardLowExpKillsChance", 50); - if (PC_CAFE_LOW_EXP_KILLS_CHANCE < 0) - { - PC_CAFE_LOW_EXP_KILLS_CHANCE = 0; - } - if (PC_CAFE_LOW_EXP_KILLS_CHANCE > 100) - { - PC_CAFE_LOW_EXP_KILLS_CHANCE = 100; - } - final PropertiesParser vipSystemConfig = new PropertiesParser(CUSTOM_VIP_CONFIG_FILE); VIP_SYSTEM_ENABLED = vipSystemConfig.getBoolean("VipEnabled", false); if (VIP_SYSTEM_ENABLED) diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/GameServer.java index 6c1680ebde..16050241a5 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/GameServer.java @@ -100,6 +100,7 @@ import org.l2jmobius.gameserver.data.xml.SkillData; import org.l2jmobius.gameserver.data.xml.SkillTreeData; import org.l2jmobius.gameserver.data.xml.SpawnData; import org.l2jmobius.gameserver.data.xml.StaticObjectData; +import org.l2jmobius.gameserver.data.xml.TeleportListData; import org.l2jmobius.gameserver.data.xml.TeleporterData; import org.l2jmobius.gameserver.data.xml.TransformData; import org.l2jmobius.gameserver.data.xml.VariationData; @@ -346,6 +347,7 @@ public class GameServer printSection("Cache"); HtmCache.getInstance(); CrestTable.getInstance(); + TeleportListData.getInstance(); TeleporterData.getInstance(); MatchingRoomManager.getInstance(); PetitionManager.getInstance(); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/EquipmentUpgradeData.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/EquipmentUpgradeData.java index 442232bfbb..d046cff475 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/EquipmentUpgradeData.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/EquipmentUpgradeData.java @@ -21,14 +21,17 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.logging.Logger; import org.w3c.dom.Document; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.data.ItemTable; +import org.l2jmobius.gameserver.enums.UpgradeType; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.holders.EquipmentUpgradeHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder; /** @@ -37,7 +40,7 @@ import org.l2jmobius.gameserver.model.holders.ItemHolder; public class EquipmentUpgradeData implements IXmlReader { private static final Logger LOGGER = Logger.getLogger(EquipmentUpgradeData.class.getName()); - private static final Map _upgrades = new HashMap<>(); + private static final Map> _upgrades = new HashMap<>(); protected EquipmentUpgradeData() { @@ -48,8 +51,13 @@ public class EquipmentUpgradeData implements IXmlReader public void load() { _upgrades.clear(); - parseDatapackFile("data/EquipmentUpgradeData.xml"); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _upgrades.size() + " upgrade equipment data."); + _upgrades.put(UpgradeType.RARE, new HashMap<>()); + _upgrades.put(UpgradeType.NORMAL, new HashMap<>()); + _upgrades.put(UpgradeType.SPECIAL, new HashMap<>()); + parseDatapackDirectory("data/stats/upgrade", false); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _upgrades.get(UpgradeType.RARE).size() + " rare upgrade equipment data."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _upgrades.get(UpgradeType.NORMAL).size() + " normal upgrade equipment data."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _upgrades.get(UpgradeType.SPECIAL).size() + " special upgrade equipment data."); } @Override @@ -58,12 +66,24 @@ public class EquipmentUpgradeData implements IXmlReader forEach(doc, "list", listNode -> forEach(listNode, "upgrade", upgradeNode -> { final StatSet set = new StatSet(parseAttributes(upgradeNode)); - final int id = set.getInt("id"); - final String[] item = set.getString("item").split(","); + final int id = set.getInt("id"); // Upgrade ID + final UpgradeType type = UpgradeType.valueOf(set.getString("type")); // Type + + final String[] item = set.getString("item").split(","); // Required Item final int requiredItemId = Integer.parseInt(item[0]); - final int requiredItemEnchant = Integer.parseInt(item[1]); - final String materials = set.getString("materials"); + ItemEnchantHolder requiredItem = null; + if (ItemTable.getInstance().getTemplate(requiredItemId) == null) + { + LOGGER.info(getClass().getSimpleName() + ": Required item with id " + requiredItemId + " does not exist."); + } + else + { + requiredItem = new ItemEnchantHolder(requiredItemId, 1, Integer.parseInt(item[1])); + } + + final String materials = set.getString("materials"); // Materials final List materialList = new ArrayList<>(); + if (!materials.isEmpty()) { for (String mat : materials.split(";")) @@ -80,24 +100,70 @@ public class EquipmentUpgradeData implements IXmlReader } } } - final long adena = set.getLong("adena", 0); - final String[] resultItem = set.getString("result").split(","); - final int resultItemId = Integer.parseInt(resultItem[0]); - final int resultItemEnchant = Integer.parseInt(resultItem[1]); - if (ItemTable.getInstance().getTemplate(requiredItemId) == null) + + final long adena = set.getLong("adena", 0); // Cost of Upgrade + + final List resultItems = new ArrayList<>(); + final String[] result = set.getString("result").split(","); // Result + final int resultId = Integer.parseInt(result[0]); + + if (ItemTable.getInstance().getTemplate(resultId) == null) { - LOGGER.info(getClass().getSimpleName() + ": Required item with id " + requiredItemId + " does not exist."); + LOGGER.info(getClass().getSimpleName() + ": Result item with id " + resultId + " does not exist."); } else { - _upgrades.put(id, new EquipmentUpgradeHolder(id, requiredItemId, requiredItemEnchant, materialList, adena, resultItemId, resultItemEnchant)); + resultItems.add(new ItemEnchantHolder(resultId, 1, Integer.parseInt(result[1]))); + } + + final int chance = set.getInt("chance", 100); + + final String onFailed = set.getString("on_fail", ""); + final List onFailedList = new ArrayList<>(); + if (!Objects.equals(onFailed, "")) + { + for (String fail : onFailed.split(";")) + { + final String[] failValues = fail.split(","); + final int failItemId = Integer.parseInt(failValues[0]); + if (ItemTable.getInstance().getTemplate(failItemId) == null) + { + LOGGER.info(getClass().getSimpleName() + ": Material item with id " + failItemId + " does not exist."); + } + else + { + onFailedList.add(new ItemEnchantHolder(failItemId, Long.parseLong(failValues[1]))); + } + } + } + + final String bonus = set.getString("bonus", ""); + final List bonusItems = new ArrayList<>(); + + if (!Objects.equals(bonus, "")) + { + final int bonusId = Integer.parseInt(bonus.split(",")[0]); + if (ItemTable.getInstance().getTemplate(bonusId) == null) + { + LOGGER.info(getClass().getSimpleName() + ": Required bonus with id " + bonusId + " does not exist."); + } + else + { + bonusItems.add(new ItemEnchantHolder(bonusId, Integer.parseInt(bonus.split(",")[1]))); + } + } + final int bonusChance = set.getInt("chance_bonus", 0); + + if ((requiredItem != null) || !resultItems.isEmpty() || !materialList.isEmpty()) + { + _upgrades.get(type).put(id, new EquipmentUpgradeHolder(id, requiredItem, adena, resultItems, chance, materialList, onFailedList.isEmpty() ? null : onFailedList, bonusItems.isEmpty() ? null : bonusItems, bonusChance)); } })); } - public EquipmentUpgradeHolder getUpgrade(int id) + public EquipmentUpgradeHolder getUpgrade(UpgradeType type, int id) { - return _upgrades.get(id); + return _upgrades.get(type).get(id); } public static EquipmentUpgradeData getInstance() diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java new file mode 100644 index 0000000000..47ca97d95e --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/data/xml/TeleportListData.java @@ -0,0 +1,87 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.data.xml; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +import org.w3c.dom.Document; + +import org.l2jmobius.commons.util.IXmlReader; +import org.l2jmobius.gameserver.model.StatSet; +import org.l2jmobius.gameserver.model.holders.TeleportListHolder; + +/** + * @author NviX, Mobius + */ +public class TeleportListData implements IXmlReader +{ + private static final Logger LOGGER = Logger.getLogger(TeleportListData.class.getName()); + private final Map _teleports = new HashMap<>(); + private int _teleportsCount = 0; + + protected TeleportListData() + { + load(); + } + + @Override + public void load() + { + _teleports.clear(); + parseDatapackFile("data/TeleportListData.xml"); + _teleportsCount = _teleports.size(); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _teleportsCount + " teleports."); + } + + @Override + public void parseDocument(Document doc, File f) + { + forEach(doc, "list", listNode -> forEach(listNode, "teleport", teleportNode -> + { + final StatSet set = new StatSet(parseAttributes(teleportNode)); + final int tpId = set.getInt("id"); + final int x = set.getInt("x"); + final int y = set.getInt("y"); + final int z = set.getInt("z"); + final int tpPrice = set.getInt("price"); + _teleports.put(tpId, new TeleportListHolder(tpId, x, y, z, tpPrice)); + })); + } + + public TeleportListHolder getTeleport(int teleportId) + { + return _teleports.get(teleportId); + } + + public int getTeleportsCount() + { + return _teleportsCount; + } + + public static TeleportListData getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final TeleportListData INSTANCE = new TeleportListData(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/HtmlActionScope.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/HtmlActionScope.java index 5611ac9bbb..e5c6450be7 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/HtmlActionScope.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/HtmlActionScope.java @@ -25,5 +25,6 @@ public enum HtmlActionScope NPC_ITEM_HTML, NPC_QUEST_HTML, TUTORIAL_HTML, - COMM_BOARD_HTML + COMM_BOARD_HTML, + PREMIUM_HTML } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UpgradeType.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UpgradeType.java new file mode 100644 index 0000000000..55f5de02d5 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UpgradeType.java @@ -0,0 +1,51 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.enums; + +/** + * Enumeration for Upgrade Type. + * @author kamikadzz + */ +public enum UpgradeType +{ + RARE, + NORMAL, + SPECIAL; + + public static UpgradeType ofId(int type) + { + switch (type) + { + case 0: + { + return RARE; + } + case 1: + { + return NORMAL; + } + case 2: + { + return SPECIAL; + } + default: + { + return null; + } + } + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UserInfoType.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UserInfoType.java index c285e64b1c..c57009e12c 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UserInfoType.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/enums/UserInfoType.java @@ -41,12 +41,12 @@ public enum UserInfoType implements IUpdateTypeComponent ATK_ELEMENTAL(0x0E, 5), CLAN(0x0F, 32), - SOCIAL(0x10, 22), - VITA_FAME(0x11, 15), - SLOTS(0x12, 9), + SOCIAL(0x10, 30), + VITA_FAME(0x11, 19), + SLOTS(0x12, 12), MOVEMENTS(0x13, 4), COLOR(0x14, 10), - INVENTORY_LIMIT(0x15, 9), + INVENTORY_LIMIT(0x15, 13), TRUE_HERO(0x16, 9), ATT_SPIRITS(0x17, 26); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/ShortCuts.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/ShortCuts.java index 36f3461010..0c2f5d59de 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/ShortCuts.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/ShortCuts.java @@ -30,15 +30,14 @@ import org.l2jmobius.gameserver.enums.ShortcutType; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.interfaces.IRestorable; import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.item.type.EtcItemType; -import org.l2jmobius.gameserver.network.serverpackets.ExAutoSoulShot; -import org.l2jmobius.gameserver.network.serverpackets.ShortCutInit; import org.l2jmobius.gameserver.network.serverpackets.ShortCutRegister; public class ShortCuts implements IRestorable { private static final Logger LOGGER = Logger.getLogger(ShortCuts.class.getName()); - private static final int MAX_SHORTCUTS_PER_BAR = 12; + + public static final int MAX_SHORTCUTS_PER_BAR = 12; + private final Player _owner; private final Map _shortCuts = new ConcurrentHashMap<>(); @@ -117,21 +116,6 @@ public class ShortCuts implements IRestorable return; } deleteShortCutFromDb(old); - if (old.getType() == ShortcutType.ITEM) - { - final Item item = _owner.getInventory().getItemByObjectId(old.getId()); - if ((item != null) && (item.getItemType() == EtcItemType.SOULSHOT) && _owner.removeAutoSoulShot(item.getId())) - { - _owner.sendPacket(new ExAutoSoulShot(item.getId(), false, 0)); - } - } - - _owner.sendPacket(new ShortCutInit(_owner)); - - for (int shotId : _owner.getAutoSoulShot()) - { - _owner.sendPacket(new ExAutoSoulShot(shotId, true, 0)); - } } public synchronized void deleteShortCutByObjectId(int objectId) @@ -230,6 +214,7 @@ public class ShortCuts implements IRestorable if ((sc.getId() == skillId) && (sc.getType() == ShortcutType.SKILL)) { final Shortcut newsc = new Shortcut(sc.getSlot(), sc.getPage(), sc.getType(), sc.getId(), skillLevel, skillSubLevel, 1); + newsc.setAutoUse(sc.isAutoUse()); _owner.sendPacket(new ShortCutRegister(newsc)); _owner.registerShortCut(newsc); } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/Shortcut.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/Shortcut.java index f29f45c185..4b48c0f950 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/Shortcut.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/Shortcut.java @@ -40,6 +40,8 @@ public class Shortcut private final int _characterType; /** Shared reuse group. */ private int _sharedReuseGroup = -1; + /** Auto use enabled. */ + private boolean _autoUse = false; public Shortcut(int slot, int page, ShortcutType type, int id, int level, int subLevel, int characterType) { @@ -132,4 +134,22 @@ public class Shortcut { _sharedReuseGroup = sharedReuseGroup; } + + /** + * Gets is shortcut is auto use enabled. + * @return if shortcut is auto use enabled. + */ + public boolean isAutoUse() + { + return _autoUse; + } + + /** + * Sets the auto use status. + * @param value of shortcut auto use status. + */ + public void setAutoUse(boolean value) + { + _autoUse = value; + } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java index bf7d343446..ba1ac8c573 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Creature.java @@ -4838,7 +4838,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe } else if (isPlayer()) { - getActingPlayer().getStatus().reduceHp(amount, attacker, (skill == null) || !skill.isToggle(), isDOT, false, directlyToHp); + getActingPlayer().getStatus().reduceHp(amount, attacker, skill, (skill == null) || !skill.isToggle(), isDOT, false, directlyToHp); } else { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java index 5fe98b195d..4aeefbb82e 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Player.java @@ -222,6 +222,9 @@ import org.l2jmobius.gameserver.model.events.returns.TerminateReturn; import org.l2jmobius.gameserver.model.events.timers.TimerHolder; import org.l2jmobius.gameserver.model.fishing.Fishing; import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder; +import org.l2jmobius.gameserver.model.holders.AutoPlaySettingsHolder; +import org.l2jmobius.gameserver.model.holders.AutoUseSettingsHolder; +import org.l2jmobius.gameserver.model.holders.DamageTakenHolder; import org.l2jmobius.gameserver.model.holders.ElementalSpiritDataHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder; import org.l2jmobius.gameserver.model.holders.MovieHolder; @@ -294,6 +297,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExAbnormalStatusUpdateFrom import org.l2jmobius.gameserver.network.serverpackets.ExAdenaInvenCount; import org.l2jmobius.gameserver.network.serverpackets.ExAutoSoulShot; import org.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; +import org.l2jmobius.gameserver.network.serverpackets.ExDieInfo; import org.l2jmobius.gameserver.network.serverpackets.ExDuelUpdateUserInfo; import org.l2jmobius.gameserver.network.serverpackets.ExGetBookMarkInfoPacket; import org.l2jmobius.gameserver.network.serverpackets.ExGetOnAirShip; @@ -349,11 +353,15 @@ import org.l2jmobius.gameserver.network.serverpackets.TradeOtherDone; import org.l2jmobius.gameserver.network.serverpackets.TradeStart; import org.l2jmobius.gameserver.network.serverpackets.UserInfo; import org.l2jmobius.gameserver.network.serverpackets.ValidateLocation; +import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExActivateAutoShortcut; +import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; import org.l2jmobius.gameserver.network.serverpackets.commission.ExResponseCommissionInfo; import org.l2jmobius.gameserver.network.serverpackets.elementalspirits.ElementalSpiritInfo; import org.l2jmobius.gameserver.network.serverpackets.friend.FriendStatus; import org.l2jmobius.gameserver.network.serverpackets.vip.ReceiveVipInfo; import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager; +import org.l2jmobius.gameserver.taskmanager.AutoPlayTaskManager; +import org.l2jmobius.gameserver.taskmanager.AutoUseTaskManager; import org.l2jmobius.gameserver.taskmanager.DecayTaskManager; import org.l2jmobius.gameserver.taskmanager.GameTimeTaskManager; import org.l2jmobius.gameserver.taskmanager.ItemsAutoDestroyTaskManager; @@ -413,7 +421,7 @@ public class Player extends Playable // Character Shortcut SQL String Definitions: private static final String DELETE_CHAR_SHORTCUTS = "DELETE FROM character_shortcuts WHERE charId=? AND class_index=?"; - // Character Recipe List Save + // Character Recipe List Save: private static final String DELETE_CHAR_RECIPE_SHOP = "DELETE FROM character_recipeshoplist WHERE charId=?"; private static final String INSERT_CHAR_RECIPE_SHOP = "REPLACE INTO character_recipeshoplist (`charId`, `recipeId`, `price`, `index`) VALUES (?, ?, ?, ?)"; private static final String RESTORE_CHAR_RECIPE_SHOP = "SELECT * FROM character_recipeshoplist WHERE charId=? ORDER BY `index`"; @@ -484,6 +492,8 @@ public class Player extends Playable /** The PvP Flag state of the Player (0=White, 1=Purple) */ private byte _pvpFlag; + private final List _lastDamageTaken = new ArrayList<>(21); + /** The Fame of this Player */ private int _fame; private ScheduledFuture _fameTask; @@ -716,8 +726,6 @@ public class Player extends Playable private final Map _chars = new ConcurrentSkipListMap<>(); - // private byte _updateKnownCounter = 0; - private int _expertiseArmorPenalty = 0; private int _expertiseWeaponPenalty = 0; private int _expertisePenaltyBonus = 0; @@ -866,6 +874,10 @@ public class Player extends Playable private byte _vipTier = 0; + private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder(); + private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder(); + private boolean _resumedAutoPlay = false; + private final List _questTimers = new ArrayList<>(); private final List> _timerHolders = new ArrayList<>(); @@ -2425,7 +2437,7 @@ public class Player extends Playable try { - if ((getLvlJoinedAcademy() != 0) && (_clan != null) && CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, id)) + if ((_lvlJoinedAcademy != 0) && (_clan != null) && CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, id)) { if (_lvlJoinedAcademy <= 16) { @@ -2732,6 +2744,7 @@ public class Player extends Playable sendPacket(new ShortCutInit(this)); sendMessage("You have learned " + skillCounter + " new skills."); } + restoreAutoShortcutVisual(); return skillCounter; } @@ -4844,6 +4857,8 @@ public class Player extends Playable @Override public boolean doDie(Creature killer) { + Collection droppedItems = null; + if (killer != null) { final Player pk = killer.getActingPlayer(); @@ -4948,7 +4963,7 @@ public class Player extends Playable final boolean insidePvpZone = isInsideZone(ZoneId.PVP) || isInsideZone(ZoneId.SIEGE); if ((pk == null) || !pk.isCursedWeaponEquipped()) { - onDieDropItem(killer); // Check if any item should be dropped + droppedItems = onDieDropItem(killer); // Check if any item should be dropped if (!insidePvpZone && (pk != null)) { final Clan pkClan = pk.getClan(); @@ -4970,6 +4985,8 @@ public class Player extends Playable } } + sendPacket(new ExDieInfo(droppedItems == null ? Collections.emptyList() : droppedItems, _lastDamageTaken)); + if (isMounted()) { stopFeed(); @@ -5019,19 +5036,45 @@ public class Player extends Playable return true; } - private void onDieDropItem(Creature killer) + public void addDamageTaken(Creature attacker, int skillId, double damage) { - if (isOnEvent() || (killer == null)) + if (attacker == this) { return; } + synchronized (_lastDamageTaken) + { + _lastDamageTaken.add(new DamageTakenHolder(attacker, skillId, damage)); + if (_lastDamageTaken.size() > 20) + { + _lastDamageTaken.remove(0); + } + } + } + + public void clearDamageTaken() + { + synchronized (_lastDamageTaken) + { + _lastDamageTaken.clear(); + } + } + + private Collection onDieDropItem(Creature killer) + { + final List droppedItems = new ArrayList<>(); + if (isOnEvent() || (killer == null)) + { + return droppedItems; + } + final Player pk = killer.getActingPlayer(); if ((getReputation() >= 0) && (pk != null) && (pk.getClan() != null) && (getClan() != null) && (pk.getClan().isAtWarWith(_clanId) // || _clan.isAtWarWith(((Player)killer).getClanId()) )) { - return; + return droppedItems; } if ((!isInsideZone(ZoneId.PVP) || (pk == null)) && (!isGM() || Config.KARMA_DROP_GM)) @@ -5096,6 +5139,8 @@ public class Player extends Playable if (Rnd.get(100) < itemDropPercent) { dropItem("DieDrop", itemDrop, killer, true); + droppedItems.add(itemDrop); + if (isKarmaDrop) { LOGGER.warning(getName() + " has karma and dropped id = " + itemDrop.getId() + ", count = " + itemDrop.getCount()); @@ -5113,6 +5158,8 @@ public class Player extends Playable } } } + + return droppedItems; } public void onPlayerKill(Playable target) @@ -8444,7 +8491,7 @@ public class Player extends Playable } // Check if all casting conditions are completed - if (!usedSkill.checkCondition(this, target)) + if (!usedSkill.checkCondition(this, target, true)) { sendPacket(ActionFailed.STATIC_PACKET); @@ -9873,6 +9920,14 @@ public class Player extends Playable // 9. Resend a class change animation effect to broadcast to all nearby players. for (Skill oldSkill : getAllSkills()) { + if (oldSkill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(this, oldSkill.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(this, oldSkill.getId()); + } removeSkill(oldSkill, false, true); } @@ -10178,6 +10233,8 @@ public class Player extends Playable { instance.doRevive(this); } + + clearDamageTaken(); } @Override @@ -10395,7 +10452,7 @@ public class Player extends Playable setLastServerPosition(getX(), getY(), getZ()); } - // Force a revalidation + // Force a revalidation. revalidateZone(true); checkItemRestriction(); @@ -10405,14 +10462,14 @@ public class Player extends Playable setTeleportProtection(true); } - // Trained beast is lost after teleport + // Trained beast is lost after teleport. for (TamedBeast tamedBeast : _tamedBeast) { tamedBeast.deleteMe(); } _tamedBeast.clear(); - // Modify the position of the pet if necessary + // Modify the position of the pet if necessary. if (_pet != null) { _pet.setFollowStatus(false); @@ -10433,13 +10490,19 @@ public class Player extends Playable s.updateAndBroadcastStatus(0); }); - // Show movie if available + // Show movie if available. if (_movieHolder != null) { sendPacket(new ExStartScenePlayer(_movieHolder.getMovie())); } - // send info to nearby players + // Stop auto play. + AutoPlayTaskManager.getInstance().stopAutoPlay(this); + AutoUseTaskManager.getInstance().stopAutoUseTask(this); + sendPacket(new ExAutoPlaySettingSend(_autoPlaySettings.getOptions(), false, _autoPlaySettings.doPickup(), _autoPlaySettings.getNextTargetMode(), _autoPlaySettings.isShortRange(), _autoPlaySettings.getAutoPotionPercent(), _autoPlaySettings.isRespectfulHunting())); + restoreAutoShortcutVisual(); + + // Send info to nearby players. broadcastInfo(); } @@ -12046,6 +12109,7 @@ public class Player extends Playable sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_BECAUSE_YOU_DO_NOT_HAVE_A_TELEPORT_ITEM); return; } + final SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED); sm.addItemName(13016); sendPacket(sm); @@ -14263,4 +14327,218 @@ public class Player extends Playable { return AttackStanceTaskManager.getInstance().hasAttackStanceTask(this); } + + public AutoPlaySettingsHolder getAutoPlaySettings() + { + return _autoPlaySettings; + } + + public AutoUseSettingsHolder getAutoUseSettings() + { + return _autoUseSettings; + } + + public void setResumedAutoPlay(boolean value) + { + _resumedAutoPlay = value; + } + + public boolean hasResumedAutoPlay() + { + return _resumedAutoPlay; + } + + public void restoreAutoSettings() + { + if (!Config.ENABLE_AUTO_PLAY || !getVariables().contains(PlayerVariables.AUTO_USE_SETTINGS)) + { + return; + } + + final List settings = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SETTINGS); + if (settings.isEmpty()) + { + return; + } + + final int options = settings.get(0); + final boolean active = Config.RESUME_AUTO_PLAY && (settings.get(1) == 1); + final boolean pickUp = settings.get(2) == 1; + final int nextTargetMode = settings.get(3); + final boolean shortRange = settings.get(4) == 1; + final int potionPercent = settings.get(5); + final boolean respectfulHunting = settings.get(6) == 1; + + getAutoPlaySettings().setAutoPotionPercent(potionPercent); + getAutoPlaySettings().setOptions(options); + getAutoPlaySettings().setPickup(pickUp); + getAutoPlaySettings().setNextTargetMode(nextTargetMode); + getAutoPlaySettings().setShortRange(shortRange); + getAutoPlaySettings().setRespectfulHunting(respectfulHunting); + + sendPacket(new ExAutoPlaySettingSend(options, active, pickUp, nextTargetMode, shortRange, potionPercent, respectfulHunting)); + + if (active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(this); + } + + _resumedAutoPlay = true; + } + + public void restoreAutoShortcutVisual() + { + if (!getVariables().contains(PlayerVariables.AUTO_USE_SHORTCUTS)) + { + return; + } + + final List positions = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS); + for (Shortcut shortcut : getAllShortCuts()) + { + final Integer position = shortcut.getSlot() + (shortcut.getPage() * ShortCuts.MAX_SHORTCUTS_PER_BAR); + if (!positions.contains(position)) + { + continue; + } + + if (shortcut.getType() == ShortcutType.SKILL) + { + final Skill knownSkill = getKnownSkill(shortcut.getId()); + if (knownSkill != null) + { + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + } + } + else if (shortcut.getType() == ShortcutType.ACTION) + { + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + } + else + { + final Item item = getInventory().getItemByObjectId(shortcut.getId()); + if (item != null) + { + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + } + } + } + } + + public void restoreAutoShortcuts() + { + if (!getVariables().contains(PlayerVariables.AUTO_USE_SHORTCUTS)) + { + return; + } + + final List positions = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS); + for (Shortcut shortcut : getAllShortCuts()) + { + final Integer position = shortcut.getSlot() + (shortcut.getPage() * ShortCuts.MAX_SHORTCUTS_PER_BAR); + if (!positions.contains(position)) + { + continue; + } + + if (shortcut.getType() == ShortcutType.ACTION) + { + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + AutoUseTaskManager.getInstance().addAutoAction(this, shortcut.getId()); + continue; + } + + final Skill knownSkill = getKnownSkill(shortcut.getId()); + if (knownSkill != null) + { + shortcut.setAutoUse(true); + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + if (knownSkill.isBad()) + { + AutoUseTaskManager.getInstance().addAutoSkill(this, shortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().addAutoBuff(this, shortcut.getId()); + } + } + else + { + final Item item = getInventory().getItemByObjectId(shortcut.getId()); + if (item != null) + { + shortcut.setAutoUse(true); + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + if (item.isPotion()) + { + AutoUseTaskManager.getInstance().addAutoPotionItem(this, item.getId()); + } + else + { + AutoUseTaskManager.getInstance().addAutoSupplyItem(this, item.getId()); + } + } + } + } + } + + public synchronized void addAutoShortcut(int slot, int page) + { + final List positions = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS); + final Shortcut usedShortcut = getShortCut(slot, page); + if (usedShortcut == null) + { + final Integer position = slot + (page * ShortCuts.MAX_SHORTCUTS_PER_BAR); + positions.remove(position); + } + else + { + for (Shortcut shortcut : getAllShortCuts()) + { + if ((usedShortcut.getId() == shortcut.getId()) && (usedShortcut.getType() == shortcut.getType())) + { + shortcut.setAutoUse(true); + sendPacket(new ExActivateAutoShortcut(shortcut, true)); + final Integer position = shortcut.getSlot() + (shortcut.getPage() * ShortCuts.MAX_SHORTCUTS_PER_BAR); + if (!positions.contains(position)) + { + positions.add(position); + } + } + } + } + + getVariables().setIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS, positions); + } + + public synchronized void removeAutoShortcut(int slot, int page) + { + if (!getVariables().contains(PlayerVariables.AUTO_USE_SHORTCUTS)) + { + return; + } + + final List positions = getVariables().getIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS); + final Shortcut usedShortcut = getShortCut(slot, page); + if (usedShortcut == null) + { + final Integer position = slot + (page * ShortCuts.MAX_SHORTCUTS_PER_BAR); + positions.remove(position); + } + else + { + for (Shortcut shortcut : getAllShortCuts()) + { + if ((usedShortcut.getId() == shortcut.getId()) && (usedShortcut.getType() == shortcut.getType())) + { + shortcut.setAutoUse(false); + sendPacket(new ExActivateAutoShortcut(shortcut, false)); + final Integer position = shortcut.getSlot() + (shortcut.getPage() * ShortCuts.MAX_SHORTCUTS_PER_BAR); + positions.remove(position); + } + } + } + + getVariables().setIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS, positions); + } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java index ed750e1146..7084ce9f57 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/Summon.java @@ -650,7 +650,7 @@ public abstract class Summon extends Playable } // Get the target for the skill - final WorldObject target; + WorldObject target; if (skill.getTargetType() == TargetType.OWNER_PET) { target = _owner; @@ -677,8 +677,16 @@ public abstract class Summon extends Playable // Check the validity of the target if (target == null) { - sendPacket(SystemMessageId.YOUR_TARGET_CANNOT_BE_FOUND); - return false; + if (!isMovementDisabled()) + { + setTarget(_owner.getTarget()); + target = skill.getTarget(this, forceUse, dontMove, false); + } + if (target == null) + { + sendPacket(SystemMessageId.YOUR_TARGET_CANNOT_BE_FOUND); + return false; + } } // Check if this skill is enabled (e.g. reuse time) @@ -705,7 +713,7 @@ public abstract class Summon extends Playable } // Check if all casting conditions are completed - if (!skill.checkCondition(this, target)) + if (!skill.checkCondition(this, target, true)) { // Send a Server->Client packet ActionFailed to the Player sendPacket(ActionFailed.STATIC_PACKET); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/Teleporter.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/Teleporter.java index 64dd2adb7b..f2f0d67ab5 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/Teleporter.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/instance/Teleporter.java @@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate; import org.l2jmobius.gameserver.model.holders.TeleporterQuestRecommendationHolder; import org.l2jmobius.gameserver.model.quest.QuestState; import org.l2jmobius.gameserver.model.teleporter.TeleportHolder; +import org.l2jmobius.gameserver.network.serverpackets.ExShowTeleportUi; import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import org.l2jmobius.gameserver.util.Util; @@ -87,6 +88,11 @@ public class Teleporter extends Npc holder.showTeleportList(player, this); break; } + case "showTeleportList": + { + player.sendPacket(ExShowTeleportUi.STATIC_PACKET); + break; + } case "showTeleportsHunting": { final String listName = (st.hasMoreTokens()) ? st.nextToken() : TeleportType.HUNTING.name(); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/status/PlayerStatus.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/status/PlayerStatus.java index 74466f52b1..bfd5166e3d 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/status/PlayerStatus.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/actor/status/PlayerStatus.java @@ -29,6 +29,7 @@ import org.l2jmobius.gameserver.model.actor.Summon; import org.l2jmobius.gameserver.model.actor.stat.PlayerStat; import org.l2jmobius.gameserver.model.effects.EffectFlag; import org.l2jmobius.gameserver.model.skill.AbnormalType; +import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.stats.Formulas; import org.l2jmobius.gameserver.model.stats.Stat; import org.l2jmobius.gameserver.network.SystemMessageId; @@ -61,16 +62,16 @@ public class PlayerStatus extends PlayableStatus @Override public void reduceHp(double value, Creature attacker) { - reduceHp(value, attacker, true, false, false, false); + reduceHp(value, attacker, null, true, false, false, false); } @Override public void reduceHp(double value, Creature attacker, boolean awake, boolean isDOT, boolean isHPConsumption) { - reduceHp(value, attacker, awake, isDOT, isHPConsumption, false); + reduceHp(value, attacker, null, awake, isDOT, isHPConsumption, false); } - public void reduceHp(double value, Creature attacker, boolean awake, boolean isDOT, boolean isHPConsumption, boolean ignoreCP) + public void reduceHp(double value, Creature attacker, Skill skill, boolean awake, boolean isDOT, boolean isHPConsumption, boolean ignoreCP) { if (getActiveChar().isDead()) { @@ -281,6 +282,8 @@ public class PlayerStatus extends PlayableStatus if (amount > 0) { + getActiveChar().addDamageTaken(attacker, skill != null ? skill.getDisplayId() : 0, amount); + double newHp = Math.max(getCurrentHp() - amount, getActiveChar().isUndying() ? 1 : 0); if (newHp <= 0) { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoPlaySettingsHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoPlaySettingsHolder.java new file mode 100644 index 0000000000..de5c753cbd --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoPlaySettingsHolder.java @@ -0,0 +1,97 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author Mobius + */ +public class AutoPlaySettingsHolder +{ + private final AtomicInteger _options = new AtomicInteger(); + private final AtomicBoolean _pickup = new AtomicBoolean(); + private final AtomicInteger _nextTargetMode = new AtomicInteger(); + private final AtomicBoolean _shortRange = new AtomicBoolean(); + private final AtomicBoolean _respectfulHunting = new AtomicBoolean(); + private final AtomicInteger _autoPotionPercent = new AtomicInteger(); + + public AutoPlaySettingsHolder() + { + } + + public int getOptions() + { + return _options.get(); + } + + public void setOptions(int options) + { + _options.set(options); + } + + public boolean doPickup() + { + return _pickup.get(); + } + + public void setPickup(boolean value) + { + _pickup.set(value); + } + + public int getNextTargetMode() + { + return _nextTargetMode.get(); + } + + public void setNextTargetMode(int nextTargetMode) + { + _nextTargetMode.set(nextTargetMode); + } + + public boolean isShortRange() + { + return _shortRange.get(); + } + + public void setShortRange(boolean value) + { + _shortRange.set(value); + } + + public boolean isRespectfulHunting() + { + return _respectfulHunting.get(); + } + + public void setRespectfulHunting(boolean value) + { + _respectfulHunting.set(value); + } + + public int getAutoPotionPercent() + { + return _autoPotionPercent.get(); + } + + public void setAutoPotionPercent(int value) + { + _autoPotionPercent.set(value); + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoUseSettingsHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoUseSettingsHolder.java new file mode 100644 index 0000000000..43f582c164 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/AutoUseSettingsHolder.java @@ -0,0 +1,104 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * @author Mobius + */ +public class AutoUseSettingsHolder +{ + private final Collection _autoSupplyItems = ConcurrentHashMap.newKeySet(); + private final Collection _autoPotionItems = ConcurrentHashMap.newKeySet(); + private final Collection _autoActions = ConcurrentHashMap.newKeySet(); + private final Collection _autoBuffs = ConcurrentHashMap.newKeySet(); + private final List _autoSkills = new CopyOnWriteArrayList<>(); + private int _skillIndex = 0; + + public AutoUseSettingsHolder() + { + } + + public Collection getAutoSupplyItems() + { + return _autoSupplyItems; + } + + public Collection getAutoPotionItems() + { + return _autoPotionItems; + } + + public Collection getAutoActions() + { + return _autoActions; + } + + public Collection getAutoBuffs() + { + return _autoBuffs; + } + + public List getAutoSkills() + { + return _autoSkills; + } + + public boolean isAutoSkill(int skillId) + { + return _autoSkills.contains(skillId) || _autoBuffs.contains(skillId); + } + + public Integer getNextSkillId() + { + if (_skillIndex >= _autoSkills.size()) + { + _skillIndex = 0; + } + + Integer skillId = Integer.MIN_VALUE; + try + { + skillId = _autoSkills.get(_skillIndex); + } + catch (Exception e) + { + resetSkillOrder(); + } + + return skillId; + } + + public void incrementSkillOrder() + { + _skillIndex++; + } + + public void resetSkillOrder() + { + _skillIndex = 0; + } + + public boolean isEmpty() + { + return _autoSupplyItems.isEmpty() && _autoPotionItems.isEmpty() && _autoSkills.isEmpty() && _autoActions.isEmpty(); + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/DamageTakenHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/DamageTakenHolder.java new file mode 100644 index 0000000000..6dbe165f26 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/DamageTakenHolder.java @@ -0,0 +1,51 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.actor.Creature; + +/** + * @author Mobius + */ +public class DamageTakenHolder +{ + private final Creature _creature; + private final int _skillId; + private final double _damage; + + public DamageTakenHolder(Creature creature, int skillId, double damage) + { + _creature = creature; + _skillId = skillId; + _damage = damage; + } + + public Creature getCreature() + { + return _creature; + } + + public int getSkillId() + { + return _skillId; + } + + public double getDamage() + { + return _damage; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/EquipmentUpgradeHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/EquipmentUpgradeHolder.java index 81f706730a..d9c7721811 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/EquipmentUpgradeHolder.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/EquipmentUpgradeHolder.java @@ -24,22 +24,26 @@ import java.util.List; public class EquipmentUpgradeHolder { private final int _id; - private final int _requiredItemId; - private final int _requiredItemEnchant; - private final List _materials; + private final ItemEnchantHolder _requiredItem; private final long _adena; - private final int _resultItemId; - private final int _resultItemEnchant; + private final List _results; + private final int _chance; + private final List _materials; + private final List _onFail; + private final List _bonus; + private final int _bonusChance; - public EquipmentUpgradeHolder(int id, int requiredItemId, int requiredItemEnchant, List materials, long adena, int resultItemId, int resultItemEnchant) + public EquipmentUpgradeHolder(int id, ItemEnchantHolder requiredItem, long adena, List results, int chance, List materials, List onFail, List bonus, int bonusChance) { _id = id; - _requiredItemId = requiredItemId; - _requiredItemEnchant = requiredItemEnchant; + _requiredItem = requiredItem; _materials = materials; _adena = adena; - _resultItemId = resultItemId; - _resultItemEnchant = resultItemEnchant; + _results = results; + _chance = chance; + _onFail = onFail; + _bonus = bonus; + _bonusChance = bonusChance; } public int getId() @@ -47,16 +51,6 @@ public class EquipmentUpgradeHolder return _id; } - public int getRequiredItemId() - { - return _requiredItemId; - } - - public int getRequiredItemEnchant() - { - return _requiredItemEnchant; - } - public List getMaterials() { return _materials; @@ -67,13 +61,33 @@ public class EquipmentUpgradeHolder return _adena; } - public int getResultItemId() + public List getResult() { - return _resultItemId; + return _results; } - public int getResultItemEnchant() + public int getChance() { - return _resultItemEnchant; + return _chance; + } + + public List getBonus() + { + return _bonus; + } + + public List getOnFail() + { + return _onFail; + } + + public int getBonusChance() + { + return _bonusChance; + } + + public ItemEnchantHolder getRequiredItem() + { + return _requiredItem; } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java new file mode 100644 index 0000000000..cd394f6bdb --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/ItemEnchantHolder.java @@ -0,0 +1,73 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import org.l2jmobius.gameserver.model.StatSet; + +/** + * @author Index, Mobius + */ +public class ItemEnchantHolder extends ItemHolder +{ + private final int _enchantLevel; + + public ItemEnchantHolder(StatSet set) + { + super(set); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count) + { + super(id, count); + _enchantLevel = 0; + } + + public ItemEnchantHolder(int id, long count, int enchantLevel) + { + super(id, count); + _enchantLevel = enchantLevel; + } + + /** + * @return enchant level of items contained in this object + */ + public int getEnchantLevel() + { + return _enchantLevel; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof ItemEnchantHolder objInstance)) + { + return false; + } + else if (obj == this) + { + return true; + } + return (getId() == objInstance.getId()) && ((getCount() == objInstance.getCount()) && (_enchantLevel == objInstance.getEnchantLevel())); + } + + @Override + public String toString() + { + return "[" + getClass().getSimpleName() + "] ID: " + getId() + ", count: " + getCount() + ", enchant level: " + _enchantLevel; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java new file mode 100644 index 0000000000..fdc8804e35 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/holders/TeleportListHolder.java @@ -0,0 +1,68 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.model.Location; + +/** + * @author NviX, Index + */ +public class TeleportListHolder +{ + private final int _locId; + private final List _locations; + private final int _price; + + public TeleportListHolder(int locId, int x, int y, int z, int price) + { + _locId = locId; + _locations = new ArrayList<>(1); + _locations.add(new Location(x, y, z)); + _price = price; + } + + public TeleportListHolder(int locId, List locations, int price) + { + _locId = locId; + _locations = locations; + _price = price; + } + + public int getLocId() + { + return _locId; + } + + public List getLocations() + { + return _locations; + } + + public int getPrice() + { + return _price; + } + + public Location getLocation() + { + return _locations.get(Rnd.get(_locations.size())); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/item/Weapon.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/item/Weapon.java index b293af7fd7..86ed8bbf17 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/item/Weapon.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/item/Weapon.java @@ -285,7 +285,7 @@ public class Weapon extends ItemTemplate } // Skill condition not met - if (!skill.checkCondition(caster, target)) + if (!skill.checkCondition(caster, target, true)) { return; } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/AbnormalVisualEffect.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/AbnormalVisualEffect.java index 639612d930..47c1ef0bd1 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/AbnormalVisualEffect.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/AbnormalVisualEffect.java @@ -291,6 +291,7 @@ public enum AbnormalVisualEffect BLESS_AVE(297), ANTHARAS_RAGE_AVE(298), G_BARRIER_AVE(302), + AVE_ATTACK_ALL_ANGLE(303), FIREWORKS_001T(304), FIREWORKS_002T(305), FIREWORKS_003T(306), @@ -308,6 +309,7 @@ public enum AbnormalVisualEffect FIREWORKS_015T(318), P_CAKE_AVE(319), ZARICHE_PRISION_AVE(323), + RUDOLPH(324), XMAS_HEART_AVE(325), XMAS_HAND_AVE(326), LUCKYBAG_AVE(327), @@ -454,7 +456,31 @@ public enum AbnormalVisualEffect COSTUME_LILITH_LV3(10134), COSTUME_FREYA(10135), COSTUME_FREYA_LV2(10136), - COSTUME_FREYA_LV3(10137); + COSTUME_FREYA_LV3(10137), + COSTUME_SHADOW_MASTER(10138), + COSTUME_SHADOW_MASTER_LV2(10139), + COSTUME_SHADOW_MASTER_LV3(10140), + COSTUME_NAVY(10141), + COSTUME_NAVY_LV2(10142), + COSTUME_NAVY_LV3(10143), + COSTUME_SKULL(10144), + COSTUME_SKULL_LV2(10145), + COSTUME_SKULL_LV3(10146), + COSTUME_ALICE(10147), + COSTUME_ALICE_LV2(10148), + COSTUME_ALICE_LV3(10149), + COSTUME_DEVIL(10150), + COSTUME_DEVIL_LV2(10151), + COSTUME_DEVIL_LV3(10152), + COSTUME_FERRY_YELLOW(10153), + COSTUME_FERRY_YELLOW_LV2(10154), + COSTUME_FERRY_YELLOW_LV3(10155), + COSTUME_NYNPH(10156), + COSTUME_NYNPH_LV2(10157), + COSTUME_NYNPH_LV3(10158), + COSTUME_MAID(10159), + COSTUME_MAID_LV2(10160), + COSTUME_MAID_LV3(10161); private final int _clientId; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/CommonSkill.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/CommonSkill.java index 44cc18eda9..bd99261a59 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/CommonSkill.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/CommonSkill.java @@ -48,6 +48,7 @@ public enum CommonSkill CREATE_COMMON(1320, 1), DIVINE_INSPIRATION(1405, 1), CARAVANS_SECRET_MEDICINE(2341, 1), + FEATHER_OF_BLESSING(7008, 1), IMPRIT_OF_LIGHT(19034, 1), IMPRIT_OF_DARKNESS(19035, 1), ABILITY_OF_LIGHT(19032, 1), @@ -57,7 +58,8 @@ public enum CommonSkill ALCHEMY_CUBE(17943, 1), ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1), PET_SWITCH_STANCE(6054, 1), - WEIGHT_PENALTY(4270, 1); + WEIGHT_PENALTY(4270, 1), + POTION_MASTERY(45184, 1); private final SkillHolder _holder; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/Skill.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/Skill.java index 89ed243da3..0747f91ca2 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/Skill.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/Skill.java @@ -1044,7 +1044,7 @@ public class Skill implements IIdentifiable return _effectPoint < 0; } - public boolean checkCondition(Creature creature, WorldObject object) + public boolean checkCondition(Creature creature, WorldObject object, boolean sendMessage) { if (creature.isFakePlayer() || (creature.canOverrideCond(PlayerCondOverride.SKILL_CONDITIONS) && !Config.GM_SKILL_RESTRICTION)) { @@ -1061,7 +1061,7 @@ public class Skill implements IIdentifiable if (!checkConditions(SkillConditionScope.GENERAL, creature, object) || !checkConditions(SkillConditionScope.TARGET, creature, object)) { - if (!((creature == object) && isBad())) // Self targeted bad skills should not send a message. + if (sendMessage && !((creature == object) && isBad())) // Self targeted bad skills should not send a message. { final SystemMessage sm = new SystemMessage(SystemMessageId.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS); sm.addSkillName(_id); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java index 5879b3ed81..39697e48f0 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java @@ -840,7 +840,7 @@ public class SkillCaster implements Runnable return; } - if (skill.checkCondition(creature, target)) + if (skill.checkCondition(creature, target, true)) { if (creature.isSkillDisabled(skill)) { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java index 1753e9d155..49c24690d9 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,8 @@ public class PlayerVariables extends AbstractVariables public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; public static final String DELUSION_RETURN = "DELUSION_RETURN"; + public static final String AUTO_USE_SETTINGS = "AUTO_USE_SETTINGS"; + public static final String AUTO_USE_SHORTCUTS = "AUTO_USE_SHORTCUTS"; private final int _objectId; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/zone/type/EffectZone.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/zone/type/EffectZone.java index fc9e051052..2ca756886e 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/zone/type/EffectZone.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/zone/type/EffectZone.java @@ -284,7 +284,7 @@ public class EffectZone extends ZoneType for (Entry e : _skills.entrySet()) { final Skill skill = SkillData.getInstance().getSkill(e.getKey().intValue(), e.getValue().intValue()); - if ((skill != null) && (_bypassConditions || skill.checkCondition(character, character))) + if ((skill != null) && (_bypassConditions || skill.checkCondition(character, character, false))) { if (character.getAffectedSkillLevel(skill.getId()) < skill.getLevel()) { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/ExIncomingPackets.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/ExIncomingPackets.java index 4150637edf..ab89939a01 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/ExIncomingPackets.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/ExIncomingPackets.java @@ -37,6 +37,10 @@ import org.l2jmobius.gameserver.network.clientpackets.attendance.RequestVipAtten import org.l2jmobius.gameserver.network.clientpackets.attributechange.RequestChangeAttributeCancel; import org.l2jmobius.gameserver.network.clientpackets.attributechange.RequestChangeAttributeItem; import org.l2jmobius.gameserver.network.clientpackets.attributechange.SendChangeAttributeTargetItem; +import org.l2jmobius.gameserver.network.clientpackets.autoplay.ExAutoPlaySetting; +import org.l2jmobius.gameserver.network.clientpackets.autoplay.ExRequestActivateAutoShortcut; +import org.l2jmobius.gameserver.network.clientpackets.classchange.ExRequestClassChange; +import org.l2jmobius.gameserver.network.clientpackets.classchange.ExRequestClassChangeVerifying; import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionBuyInfo; import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionBuyItem; import org.l2jmobius.gameserver.network.clientpackets.commission.RequestCommissionCancel; @@ -70,6 +74,7 @@ import org.l2jmobius.gameserver.network.clientpackets.elementalspirits.ExElement import org.l2jmobius.gameserver.network.clientpackets.ensoul.RequestItemEnsoul; import org.l2jmobius.gameserver.network.clientpackets.ensoul.RequestTryEnSoulExtraction; import org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade.RequestUpgradeSystemResult; +import org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade.ExUpgradeSystemNormalRequest; import org.l2jmobius.gameserver.network.clientpackets.friend.RequestFriendDetailInfo; import org.l2jmobius.gameserver.network.clientpackets.luckygame.RequestLuckyGamePlay; import org.l2jmobius.gameserver.network.clientpackets.luckygame.RequestLuckyGameStartInfo; @@ -280,6 +285,7 @@ public enum ExIncomingPackets implements IIncomingPackets REQUEST_FIRST_PLAY_START(0xAC, null, ConnectionState.IN_GAME), REQUEST_FLY_MOVE_START(0xAD, RequestFlyMoveStart::new, ConnectionState.IN_GAME), REQUEST_HARDWARE_INFO(0xAE, RequestHardWareInfo::new, ConnectionState.values()), + USER_INTERFACE_INFO(0xAF, null, ConnectionState.IN_GAME), SEND_CHANGE_ATTRIBUTE_TARGET_ITEM(0xB0, SendChangeAttributeTargetItem::new, ConnectionState.IN_GAME), REQUEST_CHANGE_ATTRIBUTE_ITEM(0xB1, RequestChangeAttributeItem::new, ConnectionState.IN_GAME), REQUEST_CHANGE_ATTRIBUTE_CANCEL(0xB2, RequestChangeAttributeCancel::new, ConnectionState.IN_GAME), @@ -342,118 +348,175 @@ public enum ExIncomingPackets implements IIncomingPackets REQUEST_STOP_MOVE(0xED, RequestStopMove::new, ConnectionState.IN_GAME), REQUEST_ABILITY_WND_OPEN(0xEE, null, ConnectionState.IN_GAME), REQUEST_ABILITY_WND_CLOSE(0xEF, null, ConnectionState.IN_GAME), - EX_PC_CAFE_REQUEST_OPEN_WINDOW_WITHOUT_NPC(0xF0, ExPCCafeRequestOpenWindowWithoutNPC::new, ConnectionState.IN_GAME), - REQUEST_LUCKY_GAME_START_INFO(0xF1, RequestLuckyGameStartInfo::new, ConnectionState.IN_GAME), - REQUEST_LUCKY_GAME_PLAY(0xF2, RequestLuckyGamePlay::new, ConnectionState.IN_GAME), - NOTIFY_TRAINING_ROOM_END(0xF3, NotifyTrainingRoomEnd::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_PUSH_ONE(0xF4, RequestNewEnchantPushOne::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_REMOVE_ONE(0xF5, RequestNewEnchantRemoveOne::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_PUSH_TWO(0xF6, RequestNewEnchantPushTwo::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_REMOVE_TWO(0xF7, RequestNewEnchantRemoveTwo::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_CLOSE(0xF8, RequestNewEnchantClose::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_TRY(0xF9, RequestNewEnchantTry::new, ConnectionState.IN_GAME), - REQUEST_NEW_ENCHANT_RETRY_TO_PUT_ITEMS(0xFA, RequestNewEnchantRetryToPutItems::new, ConnectionState.IN_GAME), - REQUEST_TARGET_ACTION_MENU(0xFE, RequestTargetActionMenu::new, ConnectionState.IN_GAME), - EX_SEND_SELECTED_QUEST_ZONE_ID(0xFF, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME), - REQUEST_ALCHEMY_SKILL_LIST(0x100, RequestAlchemySkillList::new, ConnectionState.IN_GAME), - REQUEST_ALCHEMY_TRY_MIX_CUBE(0x101, null, ConnectionState.IN_GAME), - REQUEST_ALCHEMY_CONVERSION(0x102, null, ConnectionState.IN_GAME), - SEND_EXECUTED_UI_EVENTS_COUNT(0x103, null, ConnectionState.IN_GAME), - EX_SEND_CLIENT_INI(0x104, null, ConnectionState.AUTHENTICATED), - REQUEST_EX_AUTO_FISH(0x105, ExRequestAutoFish::new, ConnectionState.IN_GAME), - REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x106, RequestVipAttendanceItemList::new, ConnectionState.IN_GAME), - REQUEST_VIP_ATTENDANCE_CHECK(0x107, RequestVipAttendanceCheck::new, ConnectionState.IN_GAME), - REQUEST_ITEM_ENSOUL(0x108, RequestItemEnsoul::new, ConnectionState.IN_GAME), - REQUEST_CASTLE_WAR_SEASON_REWARD(0x109, null, ConnectionState.IN_GAME), - REQUEST_VIP_PRODUCT_LIST(0x10A, RequestVipProductList::new, ConnectionState.IN_GAME), - REQUEST_VIP_LUCKY_GAME_INFO(0x10B, RequestVipLuckGameInfo::new, ConnectionState.IN_GAME), - REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10C, null, ConnectionState.IN_GAME), - REQUEST_VIP_LUCKY_GAME_BONUS(0x10D, null, ConnectionState.IN_GAME), - EX_REQUEST_VIP_INFO(0x10E, ExRequestVipInfo::new, ConnectionState.IN_GAME), - REQUEST_CAPTCHA_ANSWER(0x10F, null, ConnectionState.IN_GAME), - REQUEST_REFRESH_CAPTCHA_IMAGE(0x110, null, ConnectionState.IN_GAME), - REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x111, RequestPledgeSignInForOpenJoiningMethod::new, ConnectionState.IN_GAME), - EX_REQUEST_MATCH_ARENA(0x112, null, ConnectionState.IN_GAME), - EX_CONFIRM_MATCH_ARENA(0x113, null, ConnectionState.IN_GAME), - EX_CANCEL_MATCH_ARENA(0x114, null, ConnectionState.IN_GAME), - EX_CHANGE_CLASS_ARENA(0x115, null, ConnectionState.IN_GAME), - EX_CONFIRM_CLASS_ARENA(0x116, null, ConnectionState.IN_GAME), - REQUEST_OPEN_DECO_NPCUI(0x117, null, ConnectionState.IN_GAME), - REQUEST_CHECK_AGIT_DECO_AVAILABILITY(0x118, null, ConnectionState.IN_GAME), - REQUEST_USER_FACTION_INFO(0x119, null, ConnectionState.IN_GAME), - EX_EXIT_ARENA(0x11A, null, ConnectionState.IN_GAME), - REQUEST_EVENT_BALTHUS_TOKEN(0x11B, null, ConnectionState.IN_GAME), - REQUEST_PARTY_MATCHING_HISTORY(0x11C, null, ConnectionState.IN_GAME), - EX_ARENA_CUSTOM_NOTIFICATION(0x11D, null, ConnectionState.IN_GAME), - REQUEST_TODO_LIST(0x11E, RequestTodoList::new, ConnectionState.IN_GAME), - REQUEST_TODO_LIST_HTML(0x11F, null, ConnectionState.IN_GAME), - REQUEST_ONE_DAY_REWARD_RECEIVE(0x120, RequestOneDayRewardReceive::new, ConnectionState.IN_GAME), - REQUEST_QUEUE_TICKET(0x121, null, ConnectionState.IN_GAME), - REQUEST_PLEDGE_BONUS_OPEN(0x122, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME), - REQUEST_PLEDGE_BONUS_REWARD_LIST(0x123, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME), - REQUEST_PLEDGE_BONUS_REWARD(0x124, RequestPledgeBonusReward::new, ConnectionState.IN_GAME), - REQUEST_SSO_AUTHN_TOKEN(0x125, null, ConnectionState.IN_GAME), - REQUEST_QUEUE_TICKET_LOGIN(0x126, null, ConnectionState.IN_GAME), - REQUEST_BLOCK_MEMO_INFO(0x127, null, ConnectionState.IN_GAME), - REQUEST_TRY_EN_SOUL_EXTRACTION(0x128, RequestTryEnSoulExtraction::new, ConnectionState.IN_GAME), - REQUEST_RAIDBOSS_SPAWN_INFO(0x129, RequestRaidBossSpawnInfo::new, ConnectionState.IN_GAME), - REQUEST_RAID_SERVER_INFO(0x12A, RequestRaidServerInfo::new, ConnectionState.IN_GAME), - REQUEST_SHOW_AGIT_SIEGE_INFO(0x12B, null, ConnectionState.IN_GAME), - REQUEST_ITEM_AUCTION_STATUS(0x12C, null, ConnectionState.IN_GAME), - REQUEST_MONSTER_BOOK_OPEN(0x12D, null, ConnectionState.IN_GAME), - REQUEST_MONSTER_BOOK_CLOSE(0x12E, null, ConnectionState.IN_GAME), - REQUEST_MONSTER_BOOK_REWARD(0x12F, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP(0x130, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP_ASK(0x131, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP_ANSWER(0x132, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP_WITHDRAW(0x133, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP_OUST(0x134, null, ConnectionState.IN_GAME), - EXREQUEST_MATCH_GROUP_CHANGE_MASTER(0x135, null, ConnectionState.IN_GAME), - REQUEST_UPGRADE_SYSTEM_RESULT(0x136, RequestUpgradeSystemResult::new, ConnectionState.IN_GAME), - EX_CARD_UPDOWN_PICK_NUMB(0x137, null, ConnectionState.IN_GAME), - EX_CARD_UPDOWN_GAME_REWARD_REQUEST(0x138, null, ConnectionState.IN_GAME), - EX_CARD_UPDOWN_GAME_RETRY(0x139, null, ConnectionState.IN_GAME), - EX_CARD_UPDOWN_GAME_QUIT(0x13A, null, ConnectionState.IN_GAME), - EX_ARENA_RANK_ALL(0x13B, null, ConnectionState.IN_GAME), - EX_ARENA_MYRANK(0x13C, null, ConnectionState.IN_GAME), - EX_SWAP_AGATHION_SLOT_ITEMS(0x13D, null, ConnectionState.IN_GAME), - EX_PLEDGE_CONTRIBUTION_RANK(0x13E, null, ConnectionState.IN_GAME), - EX_PLEDGE_CONTRIBUTION_INFO(0x13F, null, ConnectionState.IN_GAME), - EX_PLEDGE_CONTRIBUTION_REWARD(0x140, null, ConnectionState.IN_GAME), - EX_PLEDGE_LEVEL_UP(0x141, null, ConnectionState.IN_GAME), - EX_PLEDGE_MISSION_INFO(0x142, null, ConnectionState.IN_GAME), - EX_PLEDGE_MISSION_REWARD(0x143, null, ConnectionState.IN_GAME), - EX_PLEDGE_MASTERY_INFO(0x144, null, ConnectionState.IN_GAME), - EX_PLEDGE_MASTERY_SET(0x145, null, ConnectionState.IN_GAME), - EX_PLEDGE_MASTERY_RESET(0x146, null, ConnectionState.IN_GAME), - EX_PLEDGE_SKILL_INFO(0x147, null, ConnectionState.IN_GAME), - EX_PLEDGE_SKILL_ACTIVATE(0x148, null, ConnectionState.IN_GAME), - EX_PLEDGE_ITEM_LIST(0x149, null, ConnectionState.IN_GAME), - EX_PLEDGE_ITEM_ACTIVATE(0x14A, null, ConnectionState.IN_GAME), - EX_PLEDGE_ANNOUNCE(0x14B, null, ConnectionState.IN_GAME), - EX_PLEDGE_ANNOUNCE_SET(0x14C, null, ConnectionState.IN_GAME), - EX_CREATE_PLEDGE(0x14D, null, ConnectionState.IN_GAME), - EX_PLEDGE_ITEM_INFO(0x14E, null, ConnectionState.IN_GAME), - EX_PLEDGE_ITEM_BUY(0x14F, null, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_INFO(0x150, ExElementalSpiritInfo::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_EXTRACT_INFO(0x151, ExElementalSpiritExtractInfo::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_EXTRACT(0x152, ExElementalSpiritExtract::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_EVOLUTION_INFO(0x153, ExElementalSpiritEvolutionInfo::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_EVOLUTION(0x154, ExElementalSpiritEvolution::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_SET_TALENT(0x155, ExElementalSpiritSetTalent::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_INIT_TALENT(0x156, ExElementalInitTalent::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_ABSORB_INFO(0x157, ExElementalSpiritAbsorbInfo::new, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_ABSORB(0x158, ExElementalSpiritAbsorb::new, ConnectionState.IN_GAME), - EX_REQUEST_LOCKED_ITEM(0x159, null, ConnectionState.IN_GAME), - EX_REQUEST_UNLOCKED_ITEM(0x15A, null, ConnectionState.IN_GAME), - EX_LOCKED_ITEM_CANCEL(0x15B, null, ConnectionState.IN_GAME), - EX_UNLOCKED_ITEM_CANCEL(0x15C, null, ConnectionState.IN_GAME), - EX_ELEMENTAL_SPIRIT_CHANGE_TYPE(0x15D, ExElementalSpiritChangeType::new, ConnectionState.IN_GAME), // 152 - REQUEST_BLOCK_LIST_FOR_AD(0x15E, null, ConnectionState.IN_GAME), - REQUEST_USER_BAN_INFO(0x15F, null, ConnectionState.IN_GAME), - EX_INTERACT_MODIFY(0x160, ExInteractModify::new, ConnectionState.IN_GAME), // 152 - EX_TRY_ENCHANT_ARTIFACT(0x161, null, ConnectionState.IN_GAME), // 152 - EX_XIGN_CODE(0x162, null, ConnectionState.IN_GAME); // 152 + REQUEST_LUCKY_GAME_START_INFO(0xF0, RequestLuckyGameStartInfo::new, ConnectionState.IN_GAME), + REQUEST_LUCKY_GAME_PLAY(0xF1, RequestLuckyGamePlay::new, ConnectionState.IN_GAME), + NOTIFY_TRAINING_ROOM_END(0xF2, NotifyTrainingRoomEnd::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_PUSH_ONE(0xF3, RequestNewEnchantPushOne::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_REMOVE_ONE(0xF4, RequestNewEnchantRemoveOne::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_PUSH_TWO(0xF5, RequestNewEnchantPushTwo::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_REMOVE_TWO(0xF6, RequestNewEnchantRemoveTwo::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_CLOSE(0xF7, RequestNewEnchantClose::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_TRY(0xF8, RequestNewEnchantTry::new, ConnectionState.IN_GAME), + REQUEST_NEW_ENCHANT_RETRY_TO_PUT_ITEMS(0xF9, RequestNewEnchantRetryToPutItems::new, ConnectionState.IN_GAME), + EX_REQUEST_CARD_REWARD_LIST(0xFA, null, ConnectionState.IN_GAME), + EX_REQUEST_ACCOUNT_ATTENDANCE_INFO(0xFB, null, ConnectionState.IN_GAME), + EX_REQUEST_ACCOUNT_ATTENDANCE_REWARD(0xFC, null, ConnectionState.IN_GAME), + REQUEST_TARGET_ACTION_MENU(0xFD, RequestTargetActionMenu::new, ConnectionState.IN_GAME), + EX_SEND_SELECTED_QUEST_ZONE_ID(0xFE, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME), + REQUEST_ALCHEMY_SKILL_LIST(0xFF, RequestAlchemySkillList::new, ConnectionState.IN_GAME), + REQUEST_ALCHEMY_TRY_MIX_CUBE(0x100, null, ConnectionState.IN_GAME), + REQUEST_ALCHEMY_CONVERSION(0x101, null, ConnectionState.IN_GAME), + SEND_EXECUTED_UI_EVENTS_COUNT(0x102, null, ConnectionState.IN_GAME), + EX_SEND_CLIENT_INI(0x103, null, ConnectionState.AUTHENTICATED), + REQUEST_EX_AUTO_FISH(0x104, ExRequestAutoFish::new, ConnectionState.IN_GAME), + REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x105, RequestVipAttendanceItemList::new, ConnectionState.IN_GAME), + REQUEST_VIP_ATTENDANCE_CHECK(0x106, RequestVipAttendanceCheck::new, ConnectionState.IN_GAME), + REQUEST_ITEM_ENSOUL(0x107, RequestItemEnsoul::new, ConnectionState.IN_GAME), + REQUEST_CASTLE_WAR_SEASON_REWARD(0x108, null, ConnectionState.IN_GAME), + REQUEST_VIP_PRODUCT_LIST(0x109, RequestVipProductList::new, ConnectionState.IN_GAME), + REQUEST_VIP_LUCKY_GAME_INFO(0x10A, RequestVipLuckGameInfo::new, ConnectionState.IN_GAME), + REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10B, null, ConnectionState.IN_GAME), + REQUEST_VIP_LUCKY_GAME_BONUS(0x10C, null, ConnectionState.IN_GAME), + EX_REQUEST_VIP_INFO(0x10D, ExRequestVipInfo::new, ConnectionState.IN_GAME), + REQUEST_CAPTCHA_ANSWER(0x10E, null, ConnectionState.IN_GAME), + REQUEST_REFRESH_CAPTCHA_IMAGE(0x10F, null, ConnectionState.IN_GAME), + REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x110, RequestPledgeSignInForOpenJoiningMethod::new, ConnectionState.IN_GAME), + EX_REQUEST_MATCH_ARENA(0x111, null, ConnectionState.IN_GAME), + EX_CONFIRM_MATCH_ARENA(0x112, null, ConnectionState.IN_GAME), + EX_CANCEL_MATCH_ARENA(0x113, null, ConnectionState.IN_GAME), + EX_CHANGE_CLASS_ARENA(0x114, null, ConnectionState.IN_GAME), + EX_CONFIRM_CLASS_ARENA(0x115, null, ConnectionState.IN_GAME), + REQUEST_OPEN_DECO_NPCUI(0x116, null, ConnectionState.IN_GAME), + REQUEST_CHECK_AGIT_DECO_AVAILABILITY(0x117, null, ConnectionState.IN_GAME), + REQUEST_USER_FACTION_INFO(0x118, null, ConnectionState.IN_GAME), + EX_EXIT_ARENA(0x119, null, ConnectionState.IN_GAME), + REQUEST_EVENT_BALTHUS_TOKEN(0x11A, null, ConnectionState.IN_GAME), + REQUEST_PARTY_MATCHING_HISTORY(0x11B, null, ConnectionState.IN_GAME), + EX_ARENA_CUSTOM_NOTIFICATION(0x11C, null, ConnectionState.IN_GAME), + REQUEST_TODO_LIST(0x11D, RequestTodoList::new, ConnectionState.IN_GAME), + REQUEST_TODO_LIST_HTML(0x11E, null, ConnectionState.IN_GAME), + REQUEST_ONE_DAY_REWARD_RECEIVE(0x11F, RequestOneDayRewardReceive::new, ConnectionState.IN_GAME), + REQUEST_QUEUE_TICKET(0x120, null, ConnectionState.IN_GAME), + REQUEST_PLEDGE_BONUS_OPEN(0x121, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME), + REQUEST_PLEDGE_BONUS_REWARD_LIST(0x122, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME), + REQUEST_PLEDGE_BONUS_REWARD(0x123, RequestPledgeBonusReward::new, ConnectionState.IN_GAME), + REQUEST_SSO_AUTHN_TOKEN(0x124, null, ConnectionState.IN_GAME), + REQUEST_QUEUE_TICKET_LOGIN(0x125, null, ConnectionState.IN_GAME), + REQUEST_BLOCK_MEMO_INFO(0x126, null, ConnectionState.IN_GAME), + REQUEST_TRY_EN_SOUL_EXTRACTION(0x127, RequestTryEnSoulExtraction::new, ConnectionState.IN_GAME), + REQUEST_RAIDBOSS_SPAWN_INFO(0x128, RequestRaidBossSpawnInfo::new, ConnectionState.IN_GAME), + REQUEST_RAID_SERVER_INFO(0x129, RequestRaidServerInfo::new, ConnectionState.IN_GAME), + REQUEST_SHOW_AGIT_SIEGE_INFO(0x12A, null, ConnectionState.IN_GAME), + REQUEST_ITEM_AUCTION_STATUS(0x12B, null, ConnectionState.IN_GAME), + REQUEST_MONSTER_BOOK_OPEN(0x12C, null, ConnectionState.IN_GAME), + REQUEST_MONSTER_BOOK_CLOSE(0x12D, null, ConnectionState.IN_GAME), + REQUEST_MONSTER_BOOK_REWARD(0x12E, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP(0x12F, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP_ASK(0x130, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP_ANSWER(0x131, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP_WITHDRAW(0x132, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP_OUST(0x133, null, ConnectionState.IN_GAME), + EXREQUEST_MATCH_GROUP_CHANGE_MASTER(0x134, null, ConnectionState.IN_GAME), + REQUEST_UPGRADE_SYSTEM_RESULT(0x135, RequestUpgradeSystemResult::new, ConnectionState.IN_GAME), + EX_CARD_UPDOWN_PICK_NUMB(0x136, null, ConnectionState.IN_GAME), + EX_CARD_UPDOWN_GAME_REWARD_REQUEST(0x137, null, ConnectionState.IN_GAME), + EX_CARD_UPDOWN_GAME_RETRY(0x138, null, ConnectionState.IN_GAME), + EX_CARD_UPDOWN_GAME_QUIT(0x139, null, ConnectionState.IN_GAME), + EX_ARENA_RANK_ALL(0x13A, null, ConnectionState.IN_GAME), + EX_ARENA_MYRANK(0x13B, null, ConnectionState.IN_GAME), + EX_SWAP_AGATHION_SLOT_ITEMS(0x13C, null, ConnectionState.IN_GAME), + EX_PLEDGE_CONTRIBUTION_RANK(0x13D, null, ConnectionState.IN_GAME), + EX_PLEDGE_CONTRIBUTION_INFO(0x13E, null, ConnectionState.IN_GAME), + EX_PLEDGE_CONTRIBUTION_REWARD(0x13F, null, ConnectionState.IN_GAME), + EX_PLEDGE_LEVEL_UP(0x140, null, ConnectionState.IN_GAME), + EX_PLEDGE_MISSION_INFO(0x141, null, ConnectionState.IN_GAME), + EX_PLEDGE_MISSION_REWARD(0x142, null, ConnectionState.IN_GAME), + EX_PLEDGE_MASTERY_INFO(0x143, null, ConnectionState.IN_GAME), + EX_PLEDGE_MASTERY_SET(0x144, null, ConnectionState.IN_GAME), + EX_PLEDGE_MASTERY_RESET(0x145, null, ConnectionState.IN_GAME), + EX_PLEDGE_SKILL_INFO(0x146, null, ConnectionState.IN_GAME), + EX_PLEDGE_SKILL_ACTIVATE(0x147, null, ConnectionState.IN_GAME), + EX_PLEDGE_ITEM_LIST(0x148, null, ConnectionState.IN_GAME), + EX_PLEDGE_ITEM_ACTIVATE(0x149, null, ConnectionState.IN_GAME), + EX_PLEDGE_ANNOUNCE(0x14A, null, ConnectionState.IN_GAME), + EX_PLEDGE_ANNOUNCE_SET(0x14B, null, ConnectionState.IN_GAME), + EX_CREATE_PLEDGE(0x14C, null, ConnectionState.IN_GAME), + EX_PLEDGE_ITEM_INFO(0x14D, null, ConnectionState.IN_GAME), + EX_PLEDGE_ITEM_BUY(0x14E, null, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_INFO(0x14F, ExElementalSpiritInfo::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_EXTRACT_INFO(0x150, ExElementalSpiritExtractInfo::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_EXTRACT(0x151, ExElementalSpiritExtract::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_EVOLUTION_INFO(0x152, ExElementalSpiritEvolutionInfo::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_EVOLUTION(0x153, ExElementalSpiritEvolution::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_SET_TALENT(0x154, ExElementalSpiritSetTalent::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_INIT_TALENT(0x155, ExElementalInitTalent::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_ABSORB_INFO(0x156, ExElementalSpiritAbsorbInfo::new, ConnectionState.IN_GAME), + EX_ELEMENTAL_SPIRIT_ABSORB(0x157, ExElementalSpiritAbsorb::new, ConnectionState.IN_GAME), + EX_REQUEST_LOCKED_ITEM(0x158, null, ConnectionState.IN_GAME), + EX_REQUEST_UNLOCKED_ITEM(0x159, null, ConnectionState.IN_GAME), + EX_LOCKED_ITEM_CANCEL(0x15A, null, ConnectionState.IN_GAME), + EX_UNLOCKED_ITEM_CANCEL(0x15B, null, ConnectionState.IN_GAME), + // 152 + EX_ELEMENTAL_SPIRIT_CHANGE_TYPE(0x15C, ExElementalSpiritChangeType::new, ConnectionState.IN_GAME), + REQUEST_BLOCK_LIST_FOR_AD(0x15D, null, ConnectionState.IN_GAME), + REQUEST_USER_BAN_INFO(0x15E, null, ConnectionState.IN_GAME), + EX_INTERACT_MODIFY(0x15F, ExInteractModify::new, ConnectionState.IN_GAME), + EX_TRY_ENCHANT_ARTIFACT(0x160, null, ConnectionState.IN_GAME), + EX_UPGRADE_SYSTEM_NORMAL_REQUEST(0x161, ExUpgradeSystemNormalRequest::new, ConnectionState.IN_GAME), + EX_PURCHASE_LIMIT_SHOP_ITEM_LIST(0x162, null, ConnectionState.IN_GAME), + EX_PURCHASE_LIMIT_SHOP_ITEM_BUY(0x163, null, ConnectionState.IN_GAME), + // 228 + EX_OPEN_HTML(0x164, ExOpenHtml::new, ConnectionState.IN_GAME), + EX_REQUEST_CLASS_CHANGE(0x165, ExRequestClassChange::new, ConnectionState.IN_GAME), + EX_REQUEST_CLASS_CHANGE_VERIFYING(0x166, ExRequestClassChangeVerifying::new, ConnectionState.IN_GAME), + EX_REQUEST_TELEPORT(0x167, ExRequestTeleport::new, ConnectionState.IN_GAME), + EX_COSTUME_USE_ITEM(0x168, null, ConnectionState.IN_GAME), + EX_COSTUME_LIST(0x169, null, ConnectionState.IN_GAME), + EX_COSTUME_COLLECTION_SKILL_ACTIVE(0x16A, null, ConnectionState.IN_GAME), + EX_COSTUME_EVOLUTION(0x16B, null, ConnectionState.IN_GAME), + EX_COSTUME_EXTRACT(0x16C, null, ConnectionState.IN_GAME), + EX_COSTUME_LOCK(0x16D, null, ConnectionState.IN_GAME), + EX_COSTUME_CHANGE_SHORTCUT(0x16E, null, ConnectionState.IN_GAME), + EX_MAGICLAMP_GAME_INFO(0x16F, null, ConnectionState.IN_GAME), + EX_MAGICLAMP_GAME_START(0x170, null, ConnectionState.IN_GAME), + EX_ACTIVATE_AUTO_SHORTCUT(0x171, ExRequestActivateAutoShortcut::new, ConnectionState.IN_GAME), + EX_PREMIUM_MANAGER_LINK_HTML(0x172, null, ConnectionState.IN_GAME), + EX_PREMIUM_MANAGER_PASS_CMD_TO_SERVER(0x173, null, ConnectionState.IN_GAME), + EX_ACTIVATED_CURSED_TREASURE_BOX_LOCATION(0x174, null, ConnectionState.IN_GAME), + EX_PAYBACK_LIST(0x175, null, ConnectionState.IN_GAME), + EX_PAYBACK_GIVE_REWARD(0x176, null, ConnectionState.IN_GAME), + EX_AUTOPLAY_SETTING(0x177, ExAutoPlaySetting::new, ConnectionState.IN_GAME), + EX_OLYMPIAD_MATCH_MAKING(0x178, null, ConnectionState.IN_GAME), + EX_OLYMPIAD_MATCH_MAKING_CANCEL(0x179, null, ConnectionState.IN_GAME), + EX_FESTIVAL_BM_INFO(0x17A, null, ConnectionState.IN_GAME), + EX_FESTIVAL_BM_GAME(0x17B, null, ConnectionState.IN_GAME), + EX_GACHA_SHOP_INFO(0x17C, null, ConnectionState.IN_GAME), + EX_GACHA_SHOP_GACHA_GROUP(0x17D, null, ConnectionState.IN_GAME), + EX_GACHA_SHOP_GACHA_ITEM(0x17E, null, ConnectionState.IN_GAME), + EX_RANKING_CHAR_HISTORY(0x182, null, ConnectionState.IN_GAME), + EX_PLEDGE_MERCENARY_RECRUIT_INFO_SET(0x184, null, ConnectionState.IN_GAME), + EX_PLEDGE_MERCENARY_CASTLEWAR_CASTLE_INFO(0x185, null, ConnectionState.IN_GAME), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_INFO(0x186, null, ConnectionState.IN_GAME), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_ATTACKER_LIST(0x187, null, ConnectionState.IN_GAME), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_DEFENDER_LIST(0x188, null, ConnectionState.IN_GAME), + EX_PLEDGE_MERCENARY_MEMBER_LIST(0x189, null, ConnectionState.IN_GAME), + EX_PLEDGE_MERCENARY_MEMBER_JOIN(0x18A, null, ConnectionState.IN_GAME), + EX_LETTER_COLLECTOR_TAKE_REWARD(0x18E, null, ConnectionState.IN_GAME), + EX_SET_STATUS_BONUS(0x18F, null, ConnectionState.IN_GAME), + EX_RESET_STATUS_BONUS(0x190, null, ConnectionState.IN_GAME), + EX_CASTLEWAR_OBSERVER_START(0x194, null, ConnectionState.IN_GAME), + EX_RAID_TELEPORT_INFO(0x195, null, ConnectionState.IN_GAME), + EX_TELEPORT_TO_RAID_POSITION(0x196, null, ConnectionState.IN_GAME), + EX_CRAFT_EXTRACT(0x197, null, ConnectionState.IN_GAME), + EX_CRAFT_RANDOM_INFO(0x198, null, ConnectionState.IN_GAME), + EX_CRAFT_RANDOM_LOCK_SLOT(0x199, null, ConnectionState.IN_GAME), + EX_CRAFT_RANDOM_REFRESH(0x19A, null, ConnectionState.IN_GAME), + EX_CRAFT_RANDOM_MAKE(0x19B, null, ConnectionState.IN_GAME), + EX_MULTI_SELL_LIST(0x19C, null, ConnectionState.IN_GAME), + EX_ANTIBOT(0x19E, null, ConnectionState.IN_GAME), + EX_DPSVR(0x19F, null, ConnectionState.IN_GAME), + EX_TENPROTECT_DECRYPT_ERROR(0x1A0, null, ConnectionState.IN_GAME), + EX_MAX(0x1A1, null, ConnectionState.IN_GAME); public static final ExIncomingPackets[] PACKET_ARRAY; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/OutgoingPackets.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/OutgoingPackets.java index 8c1a47058a..268d1bdea2 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/OutgoingPackets.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/OutgoingPackets.java @@ -785,18 +785,93 @@ public enum OutgoingPackets EX_ELEMENTAL_SPIRIT_ABSORB(0xFE, 0x1F6), EX_CHOOSE_LOCKED_ITEM(0xFE, 0x1F7), EX_LOCKED_RESULT(0xFE, 0x1F8), - EX_ELEMENTAL_SPIRIT_EXTRACT(0xFE, 0x1F9), // 152 - EX_OLYMPIAD_INFO(0xFE, 0x1FA), // 152 - EX_OLYMPIAD_RECORD(0xFE, 0x1FB), // 152 - EX_OLYMPIAD_MATCH_INFO(0xFE, 0x1FC), // 152 - EX_ELEMENTAL_SPIRIT_GET_EXP(0xFE, 0x1FD), // 152 - EX_ITEM_ANNOUNCE(0xFE, 0x1FE), // 152 + // 152 + EX_ELEMENTAL_SPIRIT_EXTRACT(0xFE, 0x1F9), + EX_OLYMPIAD_INFO(0xFE, 0x1FA), + EX_OLYMPIAD_RECORD(0xFE, 0x1FB), + EX_OLYMPIAD_MATCH_INFO(0xFE, 0x1FC), + EX_ELEMENTAL_SPIRIT_GET_EXP(0xFE, 0x1FD), + EX_ITEM_ANNOUNCE(0xFE, 0x1FE), EX_DRESS_ROOM_UI_OPEN(0xFE, 0x1FF), EX_DRESS_HANGER_LIST(0xFE, 0x200), EX_USER_BAN_INFO(0xFE, 0x201), - EX_TRY_ENCHANT_ARTIFACT_RESULT(0xFE, 0x202), // 152 - EX_XIGN_CODE(0xFE, 0x203), // 152 - EX_MAX(0xFE, 0x204); // 152 + EX_TRY_ENCHANT_ARTIFACT_RESULT(0xFE, 0x202), + // 196 + EX_SHOW_UPGRADE_SYSTEM_NORMAL(0xFE, 0x205), + EX_UPGRADE_SYSTEM_NORMAL_RESULT(0xFE, 0x206), + EX_PURCHASE_LIMIT_SHOP_ITEM_B(0xFE, 0x207), + EX_BLOODY_COIN_COUNT(0xFE, 0x208), + EX_CLASS_CHANGE_SET_ALARM(0xFE, 0x209), + EX_REQUEST_CLASS_CHANGE(0xFE, 0x20A), + EX_REQUEST_CLASS_CHANGE_VERIFY(0xFE, 0x20B), + EX_COSTUME_USE_ITEM(0xFE, 0x20C), + EX_CHOOSE_COSTUME_ITEM(0xFE, 0x20D), + EX_SEND_COSTUME_LIST(0xFE, 0x20E), + EX_SEND_COSTUME_LIST_FULL(0xFE, 0x20F), + EX_COSTUME_COLLECTION_SKILL_A(0xFE, 0x211), + EX_COSTUME_EVOLUTION(0xFE, 0x212), + EX_COSTUME_EXTRACT(0xFE, 0x213), + EX_COSTUME_LOCK(0xFE, 0x214), + EX_COSTUME_SHORTCUT_LIST(0xFE, 0x215), + EX_MAGICLAMP_EXP_INFO(0xFE, 0x216), + EX_MAGICLAMP_GAME_INFO(0xFE, 0x217), + EX_MAGICLAMP_GAME_RESULT(0xFE, 0x218), + // 228 + EX_SHOW_TELEPORT_UI(0xFE, 0x219), + EX_ACTIVATE_AUTO_SHORTCUT(0xFE, 0x21A), + EX_PREMIUM_MANAGER_SHOW_HTML(0xFE, 0x21B), + EX_ACTIVATED_CURSED_TREASURE(0xFE, 0x21C), + EX_PAYBACK_LIST(0xFE, 0x21D), + EX_PAYBACK_GIVE_REWARD(0xFE, 0x21E), + EX_PAYBACK_UI_LAUNCHER(0xFE, 0x21F), + EX_DIE_INFO(0xFE, 0x220), + EX_AUTOPLAY_SETTING(0xFE, 0x221), + EX_AUTOPLAY_DO_MACRO(0xFE, 0x222), + EX_OLYMPIAD_MATCH_MAKING_RESULT(0xFE, 0x223), + EX_FESTIVAL_BM_INFO(0xFE, 0x224), + EX_FESTIVAL_BM_ALL_ITEM_INFO(0xFE, 0x225), + EX_FESTIVAL_BM_TOP_ITEM_INFO(0xFE, 0x226), + EX_FESTIVAL_BM_GAME(0xFE, 0x227), + EX_GACHA_SHOP_INFO(0xFE, 0x228), + EX_GACHA_SHOP_GACHA_GROUP(0xFE, 0x229), + EX_GACHA_SHOP_GACHA_ITEM(0xFE, 0x22A), + EX_TIME_RESTRICT_FIELD_LIST(0xFE, 0x22B), + EX_TIME_RESTRICT_FIELD_USER_ENTER(0xFE, 0x22C), + EX_TIME_RESTRICT_FIELD_USER_CHARGE_RESULT(0xFE, 0x22D), + EX_TIME_RESTRICT_FIELD_USER_ALARM(0xFE, 0x22E), + EX_TIME_RESTRICT_FIELD_USER_EXIT(0xFE, 0x22F), + EX_RANKING_CHAR_INFO(0xFE, 0x230), + EX_RANKING_CHAR_HISTORY(0xFE, 0x231), + EX_RANKING_CHAR_RANKERS(0xFE, 0x232), + EX_BOW_ACTION_TO(0xFE, 0x233), + EX_LETTER_COLLECTOR_UI_LAUNCH(0xFE, 0x234), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_HUD_INFO(0xFE, 0x235), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_INFO(0xFE, 0x236), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_ATTACKER_LIST(0xFE, 0x237), + EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_DEFENDER_LIST(0xFE, 0x238), + EX_PLEDGE_MERCENARY_MEMBER_LIST(0xFE, 0x239), + EX_PVPBOOK_LIST(0xFE, 0x23A), + EX_PVPBOOK_KILLER_LOCATION(0xFE, 0x23B), + EX_PVPBOOK_NEW_PK(0xFE, 0x23C), + EX_PLEDGE_MERCENARY_MEMBER_JOIN(0xFE, 0x23D), + EX_RAID_DROP_ITEM_ANNOUNCE(0xFE, 0x23E), + EX_LETTER_COLLECTOR_UI_LAUNCER(0xFE, 0x23F), + EX_OLYMPIAD_MY_RANKING_INFO(0xFE, 0x240), + EX_OLYMPIAD_RANKING_INFO(0xFE, 0x241), + EX_OLYMPIAD_HERO_AND_LEGEND_INFO(0xFE, 0x242), + EX_RAID_TELEPORT_INFO(0xFE, 0x243), + EX_CRAFT_INFO(0xFE, 0x244), + EX_CRAFT_EXTRACT(0xFE, 0x245), + EX_CRAFT_RANDOM_INFO(0xFE, 0x246), + EX_CRAFT_RANDOM_LOCK_SLOT(0xFE, 0x247), + EX_CRAFT_RANDOM_REFRESH(0xFE, 0x248), + EX_CRAFT_RANDOM_MAKE(0xFE, 0x249), + EX_ITEM_ANNOUNCE_SETTING(0xFE, 0x24A), + EX_ANTIBOT(0xFE, 0x24B), + EX_DPSVR(0xFE, 0x24C), + EX_SEND_CMD_LIST(0xFE, 0x24D), + EX_SHANGHAI_HEALTHY_TIPS(0xFE, 0x24E), + EX_MAX(0xFE, 0x24F); private final int _id1; private final int _id2; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java index 00d1334fe9..322c1207e8 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java @@ -78,6 +78,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExAutoSoulShot; import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; import org.l2jmobius.gameserver.network.serverpackets.ExBeautyItemList; import org.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; +import org.l2jmobius.gameserver.network.serverpackets.ExEnterWorld; import org.l2jmobius.gameserver.network.serverpackets.ExGetBookMarkInfoPacket; import org.l2jmobius.gameserver.network.serverpackets.ExNoticePostArrived; import org.l2jmobius.gameserver.network.serverpackets.ExNotifyPremiumItem; @@ -325,6 +326,9 @@ public class EnterWorld implements IClientIncomingPacket player.sendPacket(new ExVitalityEffectInfo(player)); } + // Send time. + player.sendPacket(new ExEnterWorld()); + // Send Macro List player.getMacros().sendAllMacros(); @@ -497,16 +501,17 @@ public class EnterWorld implements IClientIncomingPacket PetitionManager.getInstance().checkPetitionMessages(player); } + player.onPlayerEnter(); + + player.sendPacket(new SkillCoolTime(player)); + player.sendPacket(new ExVoteSystemInfo(player)); + if (player.isAlikeDead()) // dead or fake dead { // no broadcast needed since the player will already spawn dead to others player.sendPacket(new Die(player)); } - player.onPlayerEnter(); - - player.sendPacket(new SkillCoolTime(player)); - player.sendPacket(new ExVoteSystemInfo(player)); for (Item item : player.getInventory().getItems()) { if (item.isTimeLimitedItem()) @@ -615,6 +620,10 @@ public class EnterWorld implements IClientIncomingPacket player.sendPacket(new ExAutoSoulShot(0, true, 2)); player.sendPacket(new ExAutoSoulShot(0, true, 3)); + // Auto use restore. + player.restoreAutoShortcuts(); + player.restoreAutoSettings(); + // Client settings restore. player.getClientSettings(); diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExOpenHtml.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExOpenHtml.java new file mode 100644 index 0000000000..b1e46456e9 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExOpenHtml.java @@ -0,0 +1,79 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.cache.HtmCache; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.PacketLogger; +import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; + +/** + * @author Mobius + */ +public class ExOpenHtml implements IClientIncomingPacket +{ + private int _type; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _type = packet.readC(); + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + switch (_type) + { + case 1: + { + if (Config.PC_CAFE_ENABLED) + { + final NpcHtmlMessage html = new NpcHtmlMessage(); + html.setFile(player, "data/html/pccafe.htm"); + player.sendPacket(html); + } + break; + } + case 5: + { + if (Config.GAME_ASSISTANT_ENABLED) + { + final NpcHtmlMessage html = new NpcHtmlMessage(); + html.setHtml(HtmCache.getInstance().getHtm(player, "data/scripts/ai/others/DimensionalMerchant/32478.html")); + player.sendPacket(html); + } + break; + } + default: + { + PacketLogger.warning("Unknown ExOpenHtml type (" + _type + ")"); + break; + } + } + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExRequestTeleport.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExRequestTeleport.java new file mode 100644 index 0000000000..a0981f04ec --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/ExRequestTeleport.java @@ -0,0 +1,126 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.data.xml.TeleportListData; +import org.l2jmobius.gameserver.instancemanager.CastleManager; +import org.l2jmobius.gameserver.model.Location; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.effects.EffectFlag; +import org.l2jmobius.gameserver.model.holders.TeleportListHolder; +import org.l2jmobius.gameserver.model.siege.Castle; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.PacketLogger; +import org.l2jmobius.gameserver.network.SystemMessageId; + +/** + * @author NviX, Mobius + */ +public class ExRequestTeleport implements IClientIncomingPacket +{ + private int _teleportId; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _teleportId = packet.readD(); + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + final TeleportListHolder teleport = TeleportListData.getInstance().getTeleport(_teleportId); + if (teleport == null) + { + PacketLogger.warning("No registered teleport location for id: " + _teleportId); + return; + } + + // Dead characters cannot use teleports. + if (player.isDead()) + { + player.sendMessage("Dead characters cannot use teleports."); + return; + } + + // Players should not be able to teleport if in a special location. + if ((player.getMovieHolder() != null) || player.isFishing() || player.isInInstance() || player.isOnEvent() || player.isInOlympiadMode() || player.inObserverMode() || player.isInTraingCamp()) + { + player.sendMessage("You cannot teleport right now."); + return; + } + + // Teleport in combat configuration. + if (!Config.TELEPORT_WHILE_PLAYER_IN_COMBAT && (player.isInCombat() || player.isCastingNow())) + { + player.sendMessage("You cannot teleport in combat."); + return; + } + + // Karma related configurations. + if ((!Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT || !Config.ALT_GAME_KARMA_PLAYER_CAN_USE_GK) && (player.getReputation() < 0)) + { + player.sendMessage("You cannot teleport right now."); + return; + } + + // Cannot escape effect. + if (player.isAffected(EffectFlag.CANNOT_ESCAPE)) + { + player.sendMessage("You cannot teleport right now."); + return; + } + + final Location location = teleport.getLocation(); + if (!Config.TELEPORT_WHILE_SIEGE_IN_PROGRESS) + { + final Castle castle = CastleManager.getInstance().getCastle(location.getX(), location.getY(), location.getZ()); + if ((castle != null) && castle.getSiege().isInProgress()) + { + player.sendPacket(SystemMessageId.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE); + return; + } + } + + if (player.getLevel() > Config.MAX_FREE_TELEPORT_LEVEL) + { + final int price = teleport.getPrice(); + if (price > 0) + { + if (player.getAdena() < price) + { + player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA); + return; + } + player.reduceAdena("Teleport", price, player, true); + } + } + + player.abortCast(); + player.stopMove(null); + player.teleToLocation(location); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestMagicSkillUse.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestMagicSkillUse.java index a228079092..d8e7a4df72 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestMagicSkillUse.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestMagicSkillUse.java @@ -54,18 +54,13 @@ public class RequestMagicSkillUse implements IClientIncomingPacket Skill skill = player.getKnownSkill(_magicId); if (skill == null) { - if ((_magicId == CommonSkill.HAIR_ACCESSORY_SET.getId()) // - || ((_magicId > 1565) && (_magicId < 1570))) // subClass change SkillTree + if ((_magicId == CommonSkill.HAIR_ACCESSORY_SET.getId()) || ((_magicId > 1565) && (_magicId < 1570))) // subClass change SkillTree { skill = SkillData.getInstance().getSkill(_magicId, 1); } else { player.sendPacket(ActionFailed.STATIC_PACKET); - // if (_magicId > 0) - // { - // PacketLogger.warning("Skill Id " + _magicId + " not found in player: " + player); - // } return; } } @@ -86,7 +81,6 @@ public class RequestMagicSkillUse implements IClientIncomingPacket } player.onActionRequest(); - player.useMagic(skill, null, _ctrlPressed, _shiftPressed); } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestartPoint.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestartPoint.java index 08ad2c7763..703b7702f9 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestartPoint.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestRestartPoint.java @@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; +import org.l2jmobius.gameserver.model.skill.CommonSkill; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.PacketLogger; @@ -245,9 +246,14 @@ public class RequestRestartPoint implements IClientIncomingPacket PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); return; } - if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) + if (player.isGM()) { - player.doRevive(100.00); + player.doRevive(100); + } + else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */) + { + player.doRevive(100); + CommonSkill.FEATHER_OF_BLESSING.getSkill().applyEffects(player, player); } else { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutDel.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutDel.java index e6e7a26fc3..c3f17e40a8 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutDel.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutDel.java @@ -17,8 +17,11 @@ package org.l2jmobius.gameserver.network.clientpackets; import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.model.ShortCuts; +import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.taskmanager.AutoUseTaskManager; /** * @version $Revision: 1.3.4.2 $ $Date: 2005/03/27 15:29:30 $ @@ -31,9 +34,9 @@ public class RequestShortCutDel implements IClientIncomingPacket @Override public boolean read(GameClient client, PacketReader packet) { - final int id = packet.readD(); - _slot = id % 12; - _page = id / 12; + final int position = packet.readD(); + _slot = position % ShortCuts.MAX_SHORTCUTS_PER_BAR; + _page = position / ShortCuts.MAX_SHORTCUTS_PER_BAR; return true; } @@ -46,12 +49,58 @@ public class RequestShortCutDel implements IClientIncomingPacket return; } - if ((_page > 19) || (_page < 0)) + if ((_page > 23) || (_page < 0)) { return; } + // Delete the shortcut. + final Shortcut oldShortcut = player.getShortCut(_slot, _page); player.deleteShortCut(_slot, _page); - // client needs no confirmation. this packet is just to inform the server + + if (oldShortcut != null) + { + boolean removed = true; + + // Keep other similar shortcuts activated. + if (oldShortcut.isAutoUse()) + { + player.removeAutoShortcut(_slot, _page); + for (Shortcut shortcut : player.getAllShortCuts()) + { + if ((oldShortcut.getId() == shortcut.getId()) && (oldShortcut.getType() == shortcut.getType())) + { + player.addAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + removed = false; + } + } + } + + // Remove auto used ids. + if (removed) + { + switch (oldShortcut.getType()) + { + case SKILL: + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, oldShortcut.getId()); + AutoUseTaskManager.getInstance().removeAutoSkill(player, oldShortcut.getId()); + break; + } + case ITEM: + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, oldShortcut.getId()); + break; + } + case ACTION: + { + AutoUseTaskManager.getInstance().removeAutoAction(player, oldShortcut.getId()); + break; + } + } + } + } + + player.restoreAutoShortcutVisual(); } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java index bf7d98030a..07e48b893f 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/RequestShortCutReg.java @@ -16,12 +16,18 @@ */ package org.l2jmobius.gameserver.network.clientpackets; +import java.util.List; + import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.enums.ShortcutType; +import org.l2jmobius.gameserver.model.ShortCuts; import org.l2jmobius.gameserver.model.Shortcut; import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.serverpackets.ShortCutRegister; +import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExActivateAutoShortcut; +import org.l2jmobius.gameserver.taskmanager.AutoUseTaskManager; public class RequestShortCutReg implements IClientIncomingPacket { @@ -32,15 +38,17 @@ public class RequestShortCutReg implements IClientIncomingPacket private int _level; private int _subLevel; private int _characterType; // 1 - player, 2 - pet + private boolean _active; @Override public boolean read(GameClient client, PacketReader packet) { final int typeId = packet.readD(); _type = ShortcutType.values()[(typeId < 1) || (typeId > 6) ? 0 : typeId]; - final int slot = packet.readD(); - _slot = slot % 12; - _page = slot / 12; + final int position = packet.readD(); + _slot = position % ShortCuts.MAX_SHORTCUTS_PER_BAR; + _page = position / ShortCuts.MAX_SHORTCUTS_PER_BAR; + _active = packet.readC() == 1; // 228 _id = packet.readD(); _level = packet.readH(); _subLevel = packet.readH(); // Sublevel @@ -57,13 +65,94 @@ public class RequestShortCutReg implements IClientIncomingPacket return; } - if ((_page > 19) || (_page < 0)) + if ((_page > 23) || (_page < 0)) { return; } + // Delete the shortcut. + final Shortcut oldShortcut = player.getShortCut(_slot, _page); + player.deleteShortCut(_slot, _page); + if (oldShortcut != null) + { + boolean removed = true; + // Keep other similar shortcuts activated. + if (oldShortcut.isAutoUse()) + { + player.removeAutoShortcut(_slot, _page); + for (Shortcut shortcut : player.getAllShortCuts()) + { + if ((oldShortcut.getId() == shortcut.getId()) && (oldShortcut.getType() == shortcut.getType())) + { + player.addAutoShortcut(shortcut.getSlot(), shortcut.getPage()); + removed = false; + } + } + } + // Remove auto used ids. + if (removed) + { + switch (oldShortcut.getType()) + { + case SKILL: + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, oldShortcut.getId()); + AutoUseTaskManager.getInstance().removeAutoSkill(player, oldShortcut.getId()); + break; + } + case ITEM: + { + if (player.getInventory().getItemByObjectId(oldShortcut.getId()).isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, oldShortcut.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, oldShortcut.getId()); + } + break; + } + case ACTION: + { + AutoUseTaskManager.getInstance().removeAutoAction(player, oldShortcut.getId()); + break; + } + } + } + } + player.restoreAutoShortcutVisual(); + final Shortcut sc = new Shortcut(_slot, _page, _type, _id, _level, _subLevel, _characterType); + sc.setAutoUse(_active); player.registerShortCut(sc); player.sendPacket(new ShortCutRegister(sc)); + player.sendPacket(new ExActivateAutoShortcut(sc, _active)); + + // When id is not auto used, deactivate auto shortcuts. + if (!player.getAutoUseSettings().isAutoSkill(_id) && !player.getAutoUseSettings().getAutoSupplyItems().contains(_id)) + { + final List positions = player.getVariables().getIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS); + final Integer position = _slot + (_page * ShortCuts.MAX_SHORTCUTS_PER_BAR); + if (!positions.contains(position)) + { + return; + } + + positions.remove(position); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SHORTCUTS, positions); + return; + } + + // Activate if any other similar shortcut is activated. + for (Shortcut shortcut : player.getAllShortCuts()) + { + if (!shortcut.isAutoUse() || (shortcut.getId() != _id) || (shortcut.getType() != _type)) + { + continue; + } + + player.addAutoShortcut(_slot, _page); + break; + } } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java new file mode 100644 index 0000000000..22807a6483 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExAutoPlaySetting.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets.autoplay; + +import java.util.ArrayList; +import java.util.List; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.variables.PlayerVariables; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySettingSend; +import org.l2jmobius.gameserver.taskmanager.AutoPlayTaskManager; + +/** + * @author Mobius + */ +public class ExAutoPlaySetting implements IClientIncomingPacket +{ + private int _options; + private boolean _active; + private boolean _pickUp; + private int _nextTargetMode; + private boolean _shortRange; + private int _potionPercent; + private boolean _respectfulHunting; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _options = packet.readH(); + _active = packet.readC() == 1; + _pickUp = packet.readC() == 1; + _nextTargetMode = packet.readH(); + _shortRange = packet.readC() == 1; + _potionPercent = 80; + _respectfulHunting = false; + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + // Skip first run. Fixes restored settings been overwritten. + // Client sends a disabled ExAutoPlaySetting upon player login. + if (player.hasResumedAutoPlay()) + { + player.setResumedAutoPlay(false); + return; + } + + player.sendPacket(new ExAutoPlaySettingSend(_options, _active, _pickUp, _nextTargetMode, _shortRange, _potionPercent, _respectfulHunting)); + player.getAutoPlaySettings().setAutoPotionPercent(_potionPercent); + + if (!Config.ENABLE_AUTO_PLAY) + { + return; + } + + final List settings = new ArrayList<>(7); + settings.add(0, _options); + settings.add(1, _active ? 1 : 0); + settings.add(2, _pickUp ? 1 : 0); + settings.add(3, _nextTargetMode); + settings.add(4, _shortRange ? 1 : 0); + settings.add(5, _potionPercent); + settings.add(6, _respectfulHunting ? 1 : 0); + player.getVariables().setIntegerList(PlayerVariables.AUTO_USE_SETTINGS, settings); + + player.getAutoPlaySettings().setOptions(_options); + player.getAutoPlaySettings().setPickup(_pickUp); + player.getAutoPlaySettings().setNextTargetMode(_nextTargetMode); + player.getAutoPlaySettings().setShortRange(_shortRange); + player.getAutoPlaySettings().setRespectfulHunting(_respectfulHunting); + + if (_active) + { + AutoPlayTaskManager.getInstance().doAutoPlay(player); + } + else + { + AutoPlayTaskManager.getInstance().stopAutoPlay(player); + } + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExRequestActivateAutoShortcut.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExRequestActivateAutoShortcut.java new file mode 100644 index 0000000000..dcf895f715 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/autoplay/ExRequestActivateAutoShortcut.java @@ -0,0 +1,187 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets.autoplay; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.data.xml.ActionData; +import org.l2jmobius.gameserver.enums.ShortcutType; +import org.l2jmobius.gameserver.handler.IPlayerActionHandler; +import org.l2jmobius.gameserver.handler.PlayerActionHandler; +import org.l2jmobius.gameserver.model.ActionDataHolder; +import org.l2jmobius.gameserver.model.ShortCuts; +import org.l2jmobius.gameserver.model.Shortcut; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Summon; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.taskmanager.AutoUseTaskManager; + +/** + * @author Mobius + */ +public class ExRequestActivateAutoShortcut implements IClientIncomingPacket +{ + private int _slot; + private int _page; + private boolean _active; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + final int position = packet.readH(); + _slot = position % ShortCuts.MAX_SHORTCUTS_PER_BAR; + _page = position / ShortCuts.MAX_SHORTCUTS_PER_BAR; + _active = packet.readC() == 1; + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + final Shortcut shortcut = player.getShortCut(_slot, _page); + if (shortcut == null) + { + return; + } + + if (_active) + { + player.addAutoShortcut(_slot, _page); + } + else + { + player.removeAutoShortcut(_slot, _page); + } + + Item item = null; + Skill skill = null; + if (shortcut.getType() == ShortcutType.SKILL) + { + skill = player.getKnownSkill(shortcut.getId()); + if (skill == null) + { + if (player.hasServitors()) + { + for (Summon summon : player.getServitors().values()) + { + skill = summon.getKnownSkill(shortcut.getId()); + if (skill != null) + { + break; + } + } + } + if ((skill == null) && player.hasPet()) + { + skill = player.getPet().getKnownSkill(shortcut.getId()); + } + } + } + else + { + item = player.getInventory().getItemByObjectId(shortcut.getId()); + } + + // stop + if (!_active) + { + if (item != null) + { + // auto supply + if (!item.isPotion()) + { + AutoUseTaskManager.getInstance().removeAutoSupplyItem(player, item.getId()); + } + else // auto potion + { + AutoUseTaskManager.getInstance().removeAutoPotionItem(player, item.getId()); + } + } + // auto skill + if (skill != null) + { + if (skill.isBad()) + { + AutoUseTaskManager.getInstance().removeAutoSkill(player, skill.getId()); + } + else + { + AutoUseTaskManager.getInstance().removeAutoBuff(player, skill.getId()); + } + } + else // action + { + AutoUseTaskManager.getInstance().removeAutoAction(player, shortcut.getId()); + } + return; + } + + // start + if ((item != null) && !item.isPotion()) + { + // auto supply + if (Config.ENABLE_AUTO_ITEM) + { + AutoUseTaskManager.getInstance().addAutoSupplyItem(player, item.getId()); + } + } + else + { + // auto potion + if ((_page == 23) && (_slot == 1)) + { + if (Config.ENABLE_AUTO_POTION && (item != null) && item.isPotion()) + { + AutoUseTaskManager.getInstance().addAutoPotionItem(player, item.getId()); + return; + } + } + // auto skill + if (Config.ENABLE_AUTO_SKILL && (skill != null)) + { + if (skill.isBad()) + { + AutoUseTaskManager.getInstance().addAutoSkill(player, skill.getId()); + } + else + { + AutoUseTaskManager.getInstance().addAutoBuff(player, skill.getId()); + } + return; + } + // action + final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(shortcut.getId()); + if (actionHolder != null) + { + final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler()); + if (actionHandler != null) + { + AutoUseTaskManager.getInstance().addAutoAction(player, shortcut.getId()); + } + } + } + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java new file mode 100644 index 0000000000..2cc8f78c60 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChange.java @@ -0,0 +1,141 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets.classchange; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.data.xml.CategoryData; +import org.l2jmobius.gameserver.enums.CategoryType; +import org.l2jmobius.gameserver.enums.ClassId; +import org.l2jmobius.gameserver.enums.UserInfoType; +import org.l2jmobius.gameserver.model.ElementalSpirit; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.PacketLogger; +import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.network.serverpackets.PlaySound; +import org.l2jmobius.gameserver.network.serverpackets.UserInfo; +import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi; +import org.l2jmobius.gameserver.network.serverpackets.elementalspirits.ElementalSpiritInfo; + +/** + * @author Mobius + */ +public class ExRequestClassChange implements IClientIncomingPacket +{ + private int _classId; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _classId = packet.readD(); + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + // Check if class id is valid. + boolean canChange = false; + for (ClassId cId : player.getClassId().getNextClassIds()) + { + if (cId.getId() == _classId) + { + canChange = true; + break; + } + } + if (!canChange) + { + PacketLogger.warning(player + " tried to change class from " + player.getClassId() + " to " + ClassId.getClassId(_classId) + "!"); + return; + } + + // Check for player proper class group and level. + canChange = false; + final int playerLevel = player.getLevel(); + if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP) && (playerLevel >= 18)) + { + canChange = CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, _classId); + } + else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38)) + { + canChange = CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, _classId); + } + else if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76)) + { + canChange = CategoryData.getInstance().isInCategory(CategoryType.FOURTH_CLASS_GROUP, _classId); + } + + // Change class. + if (canChange) + { + player.setClassId(_classId); + if (player.isSubClassActive()) + { + player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()); + } + else + { + player.setBaseClass(player.getActiveClass()); + } + + // Elemental Spirits. + if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP)) + { + if (player.getSpirits() == null) + { + player.initElementalSpirits(); + } + for (ElementalSpirit spirit : player.getSpirits()) + { + if (spirit.getStage() == 0) + { + spirit.upgrade(); + } + } + final UserInfo userInfo = new UserInfo(player); + userInfo.addComponentType(UserInfoType.ATT_SPIRITS); + player.sendPacket(userInfo); + player.sendPacket(new ElementalSpiritInfo(player, player.getActiveElementalSpiritType(), (byte) 0x01)); + } + + if (Config.AUTO_LEARN_SKILLS) + { + player.giveAvailableSkills(Config.AUTO_LEARN_FS_SKILLS, true, Config.AUTO_LEARN_SKILLS_WITHOUT_ITEMS); + } + + player.store(false); // Save player cause if server crashes before this char is saved, he will lose class. + player.broadcastUserInfo(); + player.sendSkillList(); + player.sendPacket(new PlaySound("ItemSound.quest_fanfare_2")); + + if (Config.DISABLE_TUTORIAL && !player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) // + && ((player.isInCategory(CategoryType.SECOND_CLASS_GROUP) && (playerLevel >= 38)) // + || (player.isInCategory(CategoryType.THIRD_CLASS_GROUP) && (playerLevel >= 76)))) + { + player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET); + } + } + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChangeVerifying.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChangeVerifying.java new file mode 100644 index 0000000000..c883e6c90d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/classchange/ExRequestClassChangeVerifying.java @@ -0,0 +1,146 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets.classchange; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.gameserver.enums.CategoryType; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.quest.QuestState; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi; + +/** + * @author Mobius + */ +public class ExRequestClassChangeVerifying implements IClientIncomingPacket +{ + private int _classId; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _classId = packet.readD(); + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if (player == null) + { + return; + } + + if (_classId != player.getClassId().getId()) + { + return; + } + + if (player.isInCategory(CategoryType.FOURTH_CLASS_GROUP)) + { + return; + } + + if (player.isInCategory(CategoryType.THIRD_CLASS_GROUP)) + { + if (!thirdClassCheck(player)) + { + return; + } + } + else if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP)) + { + if (!secondClassCheck(player)) + { + return; + } + } + else if (player.isInCategory(CategoryType.FIRST_CLASS_GROUP)) + { + if (!firstClassCheck(player)) + { + return; + } + } + + player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET); + } + + private boolean firstClassCheck(Player player) + { + if (Config.DISABLE_TUTORIAL) + { + return true; + } + + QuestState qs = null; + switch (player.getRace()) + { + case HUMAN: + { + qs = player.getQuestState("Q10982_SpiderHunt"); + break; + } + case ELF: + { + qs = player.getQuestState("Q10984_CollectSpiderweb"); + break; + } + case DARK_ELF: + { + qs = player.getQuestState("Q10986_SwampMonster"); + break; + } + case ORC: + { + qs = player.getQuestState("Q10988_Conspiracy"); + break; + } + case DWARF: + { + qs = player.getQuestState("Q10990_PoisonExtraction"); + break; + } + case KAMAEL: + { + qs = player.getQuestState("Q10962_NewHorizons"); + break; + } + } + return (qs != null) && qs.isCompleted(); + } + + private boolean secondClassCheck(Player player) + { + // SecondClassChange.java has only level check. + return player.getLevel() >= 40; + } + + private boolean thirdClassCheck(Player player) + { + if (Config.DISABLE_TUTORIAL) + { + return true; + } + + final QuestState qs = player.getQuestState("Q10673_SagaOfLegend"); + return (qs != null) && qs.isCompleted(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/ExUpgradeSystemNormalRequest.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/ExUpgradeSystemNormalRequest.java new file mode 100644 index 0000000000..8299ecc6a4 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/ExUpgradeSystemNormalRequest.java @@ -0,0 +1,173 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade; + +import org.l2jmobius.commons.network.PacketReader; +import org.l2jmobius.commons.util.Rnd; +import org.l2jmobius.gameserver.data.xml.EquipmentUpgradeData; +import org.l2jmobius.gameserver.enums.UpgradeType; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.holders.EquipmentUpgradeHolder; +import org.l2jmobius.gameserver.model.holders.ItemEnchantHolder; +import org.l2jmobius.gameserver.model.holders.ItemHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExUpgradeSystemNormalResult; +import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExUpgradeSystemResult; + +import io.netty.util.collection.IntObjectHashMap; +import io.netty.util.collection.IntObjectMap; + +public class ExUpgradeSystemNormalRequest implements IClientIncomingPacket +{ + private int _objectId; + private UpgradeType _type; + private int _upgradeId; + + @Override + public boolean read(GameClient client, PacketReader packet) + { + _objectId = packet.readD(); + _type = UpgradeType.ofId(packet.readD()); + _upgradeId = packet.readD(); + return true; + } + + @Override + public void run(GameClient client) + { + final Player player = client.getPlayer(); + if ((player == null) || (_type == null)) + { + return; + } + + final Item existingItem = player.getInventory().getItemByObjectId(_objectId); + if (existingItem == null) + { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_BECAUSE_THE_TARGET_ITEM_DOES_NOT_EXIST)); + player.sendPacket(new ExUpgradeSystemResult(0, 0)); + return; + } + + final EquipmentUpgradeHolder upgradeHolder = EquipmentUpgradeData.getInstance().getUpgrade(_type, _upgradeId); + if (upgradeHolder == null) + { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_THE_OPERATION)); + player.sendPacket(new ExUpgradeSystemResult(0, 0)); + return; + } + + for (ItemHolder material : upgradeHolder.getMaterials()) + { + if (player.getInventory().getInventoryItemCount(material.getId(), -1) < material.getCount()) + { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_BECAUSE_THERE_ARE_NOT_ENOUGH_INGREDIENTS)); + player.sendPacket(new ExUpgradeSystemResult(0, 0)); + return; + } + } + + final long adena = upgradeHolder.getAdena(); + if ((adena > 0) && (player.getAdena() < adena)) + { + player.sendPacket(new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA)); + player.sendPacket(new ExUpgradeSystemResult(0, 0)); + return; + } + + if ((existingItem.getTemplate().getId() != upgradeHolder.getRequiredItem().getId()) || (existingItem.getEnchantLevel() != upgradeHolder.getRequiredItem().getEnchantLevel()) || existingItem.isAugmented() || (existingItem.getAttributes() != null)) + { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_THE_OPERATION)); + player.sendPacket(new ExUpgradeSystemResult(0, 0)); + return; + } + + player.destroyItem("UpgradeEquipment", _objectId, 1, player, true); + for (ItemHolder material : upgradeHolder.getMaterials()) + { + player.destroyItemByItemId("UpgradeEquipment", material.getId(), material.getCount(), player, true); + } + if (adena > 0) + { + player.reduceAdena("UpgradeEquipment", adena, player, true); + } + + final double random = (Rnd.nextDouble() * 100); + final boolean success = random <= upgradeHolder.getChance(); + IntObjectMap items = new IntObjectHashMap<>(); + + if (success) + { + for (ItemEnchantHolder item : upgradeHolder.getResult()) + { + final Item addItem = player.addItem("UpgradeEquipment", item.getId(), item.getCount(), player, false); + items.put(addItem.getObjectId(), addItem); + if (item.getEnchantLevel() > 0) + { + addItem.setEnchantLevel(item.getEnchantLevel()); + } + player.sendPacket(new SystemMessage(SystemMessageId.C1_HAS_SUCCEEDED_IN_UPGRADING_EQUIPMENT_AND_OBTAINED_A_S2).addPcName(player).addItemName(addItem)); + } + if (upgradeHolder.getBonus() != null) + { + final double randomBonus = (Rnd.nextDouble() * 100); + final boolean successBonus = randomBonus <= upgradeHolder.getBonusChance(); + if (successBonus) + { + for (ItemEnchantHolder item : upgradeHolder.getBonus()) + { + final Item addItem = player.addItem("UpgradeEquipment", item.getId(), item.getCount(), player, false); + items.put(addItem.getObjectId(), addItem); + if (item.getEnchantLevel() > 0) + { + addItem.setEnchantLevel(item.getEnchantLevel()); + } + player.sendPacket(new SystemMessage(SystemMessageId.C1_HAS_SUCCEEDED_IN_UPGRADING_EQUIPMENT_AND_OBTAINED_A_S2).addPcName(player).addItemName(addItem)); + } + } + } + } + else + { + if (upgradeHolder.getOnFail() != null) + { + for (ItemEnchantHolder item : upgradeHolder.getOnFail()) + { + final Item addItem = player.addItem("UpgradeEquipment", item.getId(), item.getCount(), player, false); + items.put(addItem.getObjectId(), addItem); + if (item.getEnchantLevel() > 0) + { + addItem.setEnchantLevel(item.getEnchantLevel()); + } + player.sendPacket(new SystemMessage(SystemMessageId.C1_HAS_SUCCEEDED_IN_UPGRADING_EQUIPMENT_AND_OBTAINED_A_S2).addPcName(player).addItemName(addItem)); + } + } + } + items.forEach((id, item) -> + { + item.updateDatabase(true); + }); + + player.sendPacket(new InventoryUpdate()); + player.sendPacket(new ExUpgradeSystemNormalResult(upgradeHolder, success, items)); + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/RequestUpgradeSystemResult.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/RequestUpgradeSystemResult.java index a33544c3cc..919afa0315 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/RequestUpgradeSystemResult.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/clientpackets/equipmentupgrade/RequestUpgradeSystemResult.java @@ -18,17 +18,16 @@ package org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade; import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.gameserver.data.xml.EquipmentUpgradeData; -import org.l2jmobius.gameserver.enums.AttributeType; -import org.l2jmobius.gameserver.model.ItemInfo; +import org.l2jmobius.gameserver.enums.UpgradeType; import org.l2jmobius.gameserver.model.actor.Player; -import org.l2jmobius.gameserver.model.ensoul.EnsoulOption; import org.l2jmobius.gameserver.model.holders.EquipmentUpgradeHolder; import org.l2jmobius.gameserver.model.holders.ItemHolder; -import org.l2jmobius.gameserver.model.item.enchant.attribute.AttributeHolder; import org.l2jmobius.gameserver.model.item.instance.Item; -import org.l2jmobius.gameserver.model.variables.ItemVariables; import org.l2jmobius.gameserver.network.GameClient; +import org.l2jmobius.gameserver.network.SystemMessageId; import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket; +import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; +import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExUpgradeSystemResult; /** @@ -59,13 +58,15 @@ public class RequestUpgradeSystemResult implements IClientIncomingPacket final Item existingItem = player.getInventory().getItemByObjectId(_objectId); if (existingItem == null) { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_BECAUSE_THE_TARGET_ITEM_DOES_NOT_EXIST)); player.sendPacket(new ExUpgradeSystemResult(0, 0)); return; } - final EquipmentUpgradeHolder upgradeHolder = EquipmentUpgradeData.getInstance().getUpgrade(_upgradeId); + final EquipmentUpgradeHolder upgradeHolder = EquipmentUpgradeData.getInstance().getUpgrade(UpgradeType.RARE, _upgradeId); if (upgradeHolder == null) { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_THE_OPERATION)); player.sendPacket(new ExUpgradeSystemResult(0, 0)); return; } @@ -74,6 +75,7 @@ public class RequestUpgradeSystemResult implements IClientIncomingPacket { if (player.getInventory().getInventoryItemCount(material.getId(), -1) < material.getCount()) { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_BECAUSE_THERE_ARE_NOT_ENOUGH_INGREDIENTS)); player.sendPacket(new ExUpgradeSystemResult(0, 0)); return; } @@ -82,19 +84,18 @@ public class RequestUpgradeSystemResult implements IClientIncomingPacket final long adena = upgradeHolder.getAdena(); if ((adena > 0) && (player.getAdena() < adena)) { + player.sendPacket(new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA)); player.sendPacket(new ExUpgradeSystemResult(0, 0)); return; } - if ((existingItem.getTemplate().getId() != upgradeHolder.getRequiredItemId()) || (existingItem.getEnchantLevel() != upgradeHolder.getRequiredItemEnchant())) + if ((existingItem.getTemplate().getId() != upgradeHolder.getRequiredItem().getId()) || (existingItem.getEnchantLevel() != upgradeHolder.getRequiredItem().getEnchantLevel()) || existingItem.isAugmented() || (existingItem.getAttributes() != null)) { + player.sendPacket(new SystemMessage(SystemMessageId.FAILED_THE_OPERATION)); player.sendPacket(new ExUpgradeSystemResult(0, 0)); return; } - // Store old item enchantment info. - final ItemInfo itemEnchantment = new ItemInfo(existingItem); - // Get materials. player.destroyItem("UpgradeEquipment", _objectId, 1, player, true); for (ItemHolder material : upgradeHolder.getMaterials()) @@ -107,76 +108,10 @@ public class RequestUpgradeSystemResult implements IClientIncomingPacket } // Give item. - final Item addedItem = player.addItem("UpgradeEquipment", upgradeHolder.getResultItemId(), 1, player, true); - - // Transfer item enchantments. - if (addedItem.isEquipable()) - { - addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); - if (addedItem.isWeapon()) - { - if (itemEnchantment.getAttackElementPower() > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); - } - } - else - { - if (itemEnchantment.getAttributeDefence(AttributeType.FIRE) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); - } - if (itemEnchantment.getAttributeDefence(AttributeType.WATER) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); - } - if (itemEnchantment.getAttributeDefence(AttributeType.WIND) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); - } - if (itemEnchantment.getAttributeDefence(AttributeType.EARTH) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); - } - if (itemEnchantment.getAttributeDefence(AttributeType.HOLY) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); - } - if (itemEnchantment.getAttributeDefence(AttributeType.DARK) > 0) - { - addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); - } - } - if (itemEnchantment.getSoulCrystalOptions() != null) - { - int pos = -1; - for (EnsoulOption ensoul : itemEnchantment.getSoulCrystalOptions()) - { - pos++; - addedItem.addSpecialAbility(ensoul, pos, 1, false); - } - } - if (itemEnchantment.getSoulCrystalSpecialOptions() != null) - { - for (EnsoulOption ensoul : itemEnchantment.getSoulCrystalSpecialOptions()) - { - addedItem.addSpecialAbility(ensoul, 0, 2, false); - } - } - if (itemEnchantment.getVisualId() > 0) - { - final ItemVariables oldVars = existingItem.getVariables(); - final ItemVariables newVars = addedItem.getVariables(); - newVars.set(ItemVariables.VISUAL_ID, oldVars.getInt(ItemVariables.VISUAL_ID, 0)); - newVars.set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, oldVars.getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0)); - newVars.set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, oldVars.getLong(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, 0)); - newVars.storeMe(); - addedItem.scheduleVisualLifeTime(); - } - } + final Item addedItem = player.addItem("UpgradeEquipment", upgradeHolder.getResult().get(0).getId(), upgradeHolder.getResult().get(0).getCount(), player, false); // Apply update holder enchant. - final int enchantLevel = upgradeHolder.getResultItemEnchant(); + final int enchantLevel = upgradeHolder.getResult().get(0).getEnchantLevel(); if (enchantLevel > 0) { addedItem.setEnchantLevel(enchantLevel); @@ -186,6 +121,9 @@ public class RequestUpgradeSystemResult implements IClientIncomingPacket addedItem.updateDatabase(true); // Send result packet. + + player.sendPacket(new SystemMessage(SystemMessageId.C1_HAS_SUCCEEDED_IN_UPGRADING_EQUIPMENT_AND_OBTAINED_A_S2).addPcName(player).addItemName(addedItem)); + player.sendPacket(new InventoryUpdate()); player.sendPacket(new ExUpgradeSystemResult(addedItem.getObjectId(), 1)); } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExDieInfo.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExDieInfo.java new file mode 100644 index 0000000000..8bee464fb0 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExDieInfo.java @@ -0,0 +1,62 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets; + +import java.util.Collection; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.model.holders.DamageTakenHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.network.OutgoingPackets; + +/** + * @author Mobius + */ +public class ExDieInfo implements IClientOutgoingPacket +{ + private final Collection _droppedItems; + private final Collection _lastDamageTaken; + + public ExDieInfo(Collection droppedItems, Collection lastDamageTaken) + { + _droppedItems = droppedItems; + _lastDamageTaken = lastDamageTaken; + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_DIE_INFO.writeId(packet); + packet.writeH(_droppedItems.size()); + for (Item item : _droppedItems) + { + packet.writeD(item.getId()); + packet.writeD(item.getEnchantLevel()); + packet.writeD((int) item.getCount()); + } + packet.writeD(_lastDamageTaken.size()); + for (DamageTakenHolder damageHolder : _lastDamageTaken) + { + packet.writeS(damageHolder.getCreature().getName()); + packet.writeH(0); + packet.writeD(damageHolder.getSkillId()); + packet.writeF(damageHolder.getDamage()); + packet.writeD(0); + } + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExEnterWorld.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExEnterWorld.java new file mode 100644 index 0000000000..4ab169a934 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExEnterWorld.java @@ -0,0 +1,55 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.zone.ZoneRules; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.network.OutgoingPackets; + +/** + * @author Mobius + */ +public class ExEnterWorld implements IClientOutgoingPacket +{ + private final int _zoneIdOffsetSeconds; + private final int _epochInSeconds; + private final int _daylight; + + public ExEnterWorld() + { + Instant now = Instant.now(); + _epochInSeconds = (int) now.getEpochSecond(); + ZoneRules rules = ZoneId.systemDefault().getRules(); + _zoneIdOffsetSeconds = rules.getStandardOffset(now).getTotalSeconds(); + _daylight = (int) (rules.getDaylightSavings(now).toMillis() / 1000); + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_ENTER_WORLD.writeId(packet); + packet.writeD(_epochInSeconds); + packet.writeD(-_zoneIdOffsetSeconds); + packet.writeD(_daylight); + packet.writeD(Config.MAX_FREE_TELEPORT_LEVEL); + return true; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExPremiumManagerShowHtml.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExPremiumManagerShowHtml.java new file mode 100644 index 0000000000..426f884abf --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExPremiumManagerShowHtml.java @@ -0,0 +1,49 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.HtmlActionScope; +import org.l2jmobius.gameserver.network.OutgoingPackets; + +/** + * @author JoeAlisson + */ +public class ExPremiumManagerShowHtml extends AbstractHtmlPacket +{ + public ExPremiumManagerShowHtml(String html) + { + super(html); + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_PREMIUM_MANAGER_SHOW_HTML.writeId(packet); + packet.writeD(getNpcObjId()); + packet.writeS(getHtml()); + packet.writeD(-1); + packet.writeD(0); + return true; + } + + @Override + public HtmlActionScope getScope() + { + return HtmlActionScope.PREMIUM_HTML; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExShowTeleportUi.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExShowTeleportUi.java new file mode 100644 index 0000000000..74b8913c0d --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ExShowTeleportUi.java @@ -0,0 +1,39 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.network.OutgoingPackets; + +/** + * @author Mobius + */ +public class ExShowTeleportUi implements IClientOutgoingPacket +{ + public static final ExShowTeleportUi STATIC_PACKET = new ExShowTeleportUi(); + + public ExShowTeleportUi() + { + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_SHOW_TELEPORT_UI.writeId(packet); + return true; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAdd.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAdd.java index 8c97cac6b5..2a28a0025c 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAdd.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAdd.java @@ -51,6 +51,7 @@ public class PartySmallWindowAdd implements IClientOutgoingPacket packet.writeH(_member.getClassId().getId()); packet.writeC(0); packet.writeH(_member.getRace().ordinal()); + packet.writeD(0); // 196? return true; } } diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAll.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAll.java index 5ad91f5463..93bcd857ab 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAll.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/PartySmallWindowAll.java @@ -57,6 +57,7 @@ public class PartySmallWindowAll implements IClientOutgoingPacket packet.writeH(member.getClassId().getId()); packet.writeC(1); // Unk packet.writeH(member.getRace().ordinal()); + packet.writeD(0); // 196? final Summon pet = member.getPet(); packet.writeD(member.getServitors().size() + (pet != null ? 1 : 0)); // Summon size, one only atm if (pet != null) diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java index b8624ce4cd..4f6befaa8d 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutInit.java @@ -45,6 +45,7 @@ public class ShortCutInit implements IClientOutgoingPacket { packet.writeD(sc.getType().ordinal()); packet.writeD(sc.getSlot() + (sc.getPage() * 12)); + packet.writeC(0); // 196? switch (sc.getType()) { case ITEM: diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java index f099eab47e..0ecf768ab6 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/ShortCutRegister.java @@ -39,6 +39,7 @@ public class ShortCutRegister implements IClientOutgoingPacket OutgoingPackets.SHORT_CUT_REGISTER.writeId(packet); packet.writeD(_shortcut.getType().ordinal()); packet.writeD(_shortcut.getSlot() + (_shortcut.getPage() * 12)); // C4 Client + packet.writeC(0); // 196? switch (_shortcut.getType()) { case ITEM: @@ -71,6 +72,7 @@ public class ShortCutRegister implements IClientOutgoingPacket { packet.writeD(_shortcut.getId()); packet.writeD(_shortcut.getCharacterType()); + break; } } return true; diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java index 0e78d0162c..f20a033245 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java @@ -48,6 +48,7 @@ public class UserInfo extends AbstractMaskPacket private String _title; private final byte[] _masks = new byte[] { + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 @@ -133,7 +134,7 @@ public class UserInfo extends AbstractMaskPacket OutgoingPackets.USER_INFO.writeId(packet); packet.writeD(_player.getObjectId()); packet.writeD(_initSize); - packet.writeH(24); + packet.writeH(25); // 196 - 25 packet.writeB(_masks); if (containsMask(UserInfoType.RELATION)) { @@ -283,7 +284,7 @@ public class UserInfo extends AbstractMaskPacket } if (containsMask(UserInfoType.SOCIAL)) { - packet.writeH(22); + packet.writeH(30); // 196? packet.writeC(_player.getPvpFlag()); packet.writeD(_player.getReputation()); // Reputation packet.writeC(_player.isNoble() ? 1 : 0); @@ -293,14 +294,33 @@ public class UserInfo extends AbstractMaskPacket packet.writeD(_player.getPvpKills()); packet.writeH(_player.getRecomLeft()); packet.writeH(_player.getRecomHave()); + packet.writeD(0); // 196 + packet.writeD(0); // 196? } if (containsMask(UserInfoType.VITA_FAME)) { - packet.writeH(15); - packet.writeD(_player.getVitalityPoints()); - packet.writeC(0); // Vita Bonus - packet.writeD(_player.getFame()); - packet.writeD(_player.getRaidbossPoints()); + packet.writeH(19); // 196 + // packet.writeD(_player.getVitalityPoints()); + // packet.writeC(0); // Vita Bonus + // packet.writeD(_player.getFame()); + // packet.writeD(_player.getRaidbossPoints()); + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 } if (containsMask(UserInfoType.SLOTS)) { @@ -335,11 +355,15 @@ public class UserInfo extends AbstractMaskPacket } if (containsMask(UserInfoType.INVENTORY_LIMIT)) { - packet.writeH(9); + packet.writeH(13); packet.writeH(0); packet.writeH(0); packet.writeH(_player.getInventoryLimit()); packet.writeC(_player.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_player.getCursedWeaponEquippedId()) : 0); + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 + packet.writeC(0); // 196 } if (containsMask(UserInfoType.TRUE_HERO)) { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExActivateAutoShortcut.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExActivateAutoShortcut.java new file mode 100644 index 0000000000..9963a080c6 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExActivateAutoShortcut.java @@ -0,0 +1,47 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.autoplay; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.model.ShortCuts; +import org.l2jmobius.gameserver.model.Shortcut; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +/** + * @author Mobius + */ +public class ExActivateAutoShortcut implements IClientOutgoingPacket +{ + private final int _position; + private final boolean _active; + + public ExActivateAutoShortcut(Shortcut shortcut, boolean active) + { + _position = shortcut.getSlot() + (shortcut.getPage() * ShortCuts.MAX_SHORTCUTS_PER_BAR); + _active = active; + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_ACTIVATE_AUTO_SHORTCUT.writeId(packet); + packet.writeH(_position); + packet.writeC(_active ? 1 : 0); + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlayDoMacro.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlayDoMacro.java new file mode 100644 index 0000000000..fb4738cd0f --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlayDoMacro.java @@ -0,0 +1,41 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.autoplay; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +/** + * @author Mobius + */ +public class ExAutoPlayDoMacro implements IClientOutgoingPacket +{ + public static final ExAutoPlayDoMacro STATIC_PACKET = new ExAutoPlayDoMacro(); + + public ExAutoPlayDoMacro() + { + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_AUTOPLAY_DO_MACRO.writeId(packet); + packet.writeD(0x114); + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlaySettingSend.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlaySettingSend.java new file mode 100644 index 0000000000..16c6bee7ff --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/autoplay/ExAutoPlaySettingSend.java @@ -0,0 +1,60 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.autoplay; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +/** + * @author JoeAlisson + */ +public class ExAutoPlaySettingSend implements IClientOutgoingPacket +{ + private final int _options; + private final boolean _active; + private final boolean _pickUp; + private final int _nextTargetMode; + private final boolean _shortRange; + private final int _potionPercent; + private final boolean _respectfulHunting; + + public ExAutoPlaySettingSend(int options, boolean active, boolean pickUp, int nextTargetMode, boolean shortRange, int potionPercent, boolean respectfulHunting) + { + _options = options; + _active = active; + _pickUp = pickUp; + _nextTargetMode = nextTargetMode; + _shortRange = shortRange; + _potionPercent = potionPercent; + _respectfulHunting = respectfulHunting; + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_AUTOPLAY_SETTING.writeId(packet); + packet.writeH(_options); + packet.writeC(_active ? 1 : 0); + packet.writeC(_pickUp ? 1 : 0); + packet.writeH(_nextTargetMode); + packet.writeC(_shortRange ? 1 : 0); + packet.writeD(_potionPercent); + packet.writeC(_respectfulHunting ? 1 : 0); + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/classchange/ExRequestClassChangeUi.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/classchange/ExRequestClassChangeUi.java new file mode 100644 index 0000000000..8203d29460 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/classchange/ExRequestClassChangeUi.java @@ -0,0 +1,40 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.classchange; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +/** + * @author Mobius + */ +public class ExRequestClassChangeUi implements IClientOutgoingPacket +{ + public static final ExRequestClassChangeUi STATIC_PACKET = new ExRequestClassChangeUi(); + + public ExRequestClassChangeUi() + { + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_REQUEST_CLASS_CHANGE.writeId(packet); + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExShowUpgradeSystemNormal.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExShowUpgradeSystemNormal.java new file mode 100644 index 0000000000..72b221f4d1 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExShowUpgradeSystemNormal.java @@ -0,0 +1,45 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.UpgradeType; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +public class ExShowUpgradeSystemNormal implements IClientOutgoingPacket +{ + + private final UpgradeType _type; + + public ExShowUpgradeSystemNormal(UpgradeType type) + { + _type = type; + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_SHOW_UPGRADE_SYSTEM_NORMAL.writeId(packet); + packet.writeH(1); // Flag + packet.writeH(_type.ordinal()); + packet.writeH(100); // CommissionRatio + packet.writeD(0); // MaterialItemId (array) + packet.writeD(0); // MaterialRatio (array) + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExUpgradeSystemNormalResult.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExUpgradeSystemNormalResult.java new file mode 100644 index 0000000000..f6831bf06b --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/serverpackets/equipmentupgrade/ExUpgradeSystemNormalResult.java @@ -0,0 +1,61 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade; + +import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.model.holders.EquipmentUpgradeHolder; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.network.OutgoingPackets; +import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; + +import io.netty.util.collection.IntObjectMap; + +public class ExUpgradeSystemNormalResult implements IClientOutgoingPacket +{ + private final int _success; + private final EquipmentUpgradeHolder _upgrade; + private final IntObjectMap _items; + + public ExUpgradeSystemNormalResult(EquipmentUpgradeHolder upgrade, boolean success, IntObjectMap items) + { + _upgrade = upgrade; + _success = success ? 1 : 0; + _items = items; + } + + @Override + public boolean write(PacketWriter packet) + { + OutgoingPackets.EX_UPGRADE_SYSTEM_NORMAL_RESULT.writeId(packet); + packet.writeH(1); + packet.writeD(_upgrade.getId()); + packet.writeC(_success); + + packet.writeD(_items.size()); + _items.forEach((objectId, item) -> + { + packet.writeD(objectId); + packet.writeD(item.getId()); + packet.writeD(item.getEnchantLevel()); + packet.writeD((int) item.getCount()); + }); + + packet.writeH(0); + packet.writeD(0); + return true; + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java index 2dce74f533..0dbebbb6d0 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AttackStanceTaskManager.java @@ -73,6 +73,7 @@ public class AttackStanceTaskManager implements Runnable creature.getAI().setAutoAttacking(false); if (creature.isPlayer() && creature.hasSummon()) { + creature.getActingPlayer().clearDamageTaken(); final Summon pet = creature.getPet(); if (pet != null) { diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoPlayTaskManager.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoPlayTaskManager.java new file mode 100644 index 0000000000..ee9c80000b --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoPlayTaskManager.java @@ -0,0 +1,221 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.taskmanager; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.threads.ThreadPool; +import org.l2jmobius.gameserver.ai.CtrlIntention; +import org.l2jmobius.gameserver.enums.Race; +import org.l2jmobius.gameserver.geoengine.GeoEngine; +import org.l2jmobius.gameserver.model.World; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Summon; +import org.l2jmobius.gameserver.model.actor.instance.Monster; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlayDoMacro; + +/** + * @author Mobius + */ +public class AutoPlayTaskManager implements Runnable +{ + private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static boolean _working = false; + + protected AutoPlayTaskManager() + { + ThreadPool.scheduleAtFixedRate(this, 500, 500); + } + + @Override + public void run() + { + if (_working) + { + return; + } + _working = true; + + PLAY: for (Player player : PLAYERS) + { + if (!player.isOnline() || player.isInOfflineMode() || !Config.ENABLE_AUTO_PLAY) + { + stopAutoPlay(player); + continue PLAY; + } + + if (player.isCastingNow() || (player.getQueuedSkill() != null)) + { + continue PLAY; + } + + // Skip thinking. + final WorldObject target = player.getTarget(); + if ((target != null) && target.isMonster()) + { + final Monster monster = (Monster) target; + if (monster.isAlikeDead()) + { + player.setTarget(null); + } + else if (monster.getTarget() == player) + { + // We take granted that mage classes do not auto hit. + if (isMageCaster(player)) + { + continue PLAY; + } + + // Check if actually attacking. + if (player.hasAI() && player.getAI().isAutoAttacking() && !player.isAttackingNow() && !player.isCastingNow() && !player.isMoving()) + { + player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, monster); + } + continue PLAY; + } + } + + // Pickup. + if (player.getAutoPlaySettings().doPickup()) + { + PICKUP: for (Item droppedItem : World.getInstance().getVisibleObjectsInRange(player, Item.class, 200)) + { + // Check if item is reachable. + if ((droppedItem == null) // + || (!droppedItem.isSpawned()) // + || !GeoEngine.getInstance().canMoveToTarget(player.getX(), player.getY(), player.getZ(), droppedItem.getX(), droppedItem.getY(), droppedItem.getZ(), player.getInstanceWorld())) + { + continue PICKUP; + } + + // Move to item. + if (player.calculateDistance2D(droppedItem) > 70) + { + if (!player.isMoving()) + { + player.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, droppedItem); + } + continue PLAY; + } + + // Try to pick it up. + if (!droppedItem.isProtected() || (droppedItem.getOwnerId() == player.getObjectId())) + { + player.doPickupItem(droppedItem); + continue PLAY; // Avoid pickup being skipped. + } + } + } + + // Find target. + Monster monster = null; + double closestDistance = Double.MAX_VALUE; + TARGET: for (Monster nearby : World.getInstance().getVisibleObjectsInRange(player, Monster.class, player.getAutoPlaySettings().isShortRange() ? 600 : 1400)) + { + // Skip unavailable monsters. + if ((nearby == null) || nearby.isAlikeDead()) + { + continue TARGET; + } + // Check monster target. + if (player.getAutoPlaySettings().isRespectfulHunting() && (nearby.getTarget() != null) && (nearby.getTarget() != player) && !player.getServitors().containsKey(nearby.getTarget().getObjectId())) + { + continue TARGET; + } + // Check if monster is reachable. + if (nearby.isAutoAttackable(player) // + && GeoEngine.getInstance().canSeeTarget(player, nearby)// + && GeoEngine.getInstance().canMoveToTarget(player.getX(), player.getY(), player.getZ(), nearby.getX(), nearby.getY(), nearby.getZ(), player.getInstanceWorld())) + { + final double monsterDistance = player.calculateDistance2D(nearby); + if (monsterDistance < closestDistance) + { + monster = nearby; + closestDistance = monsterDistance; + } + } + } + + // New target was assigned. + if (monster != null) + { + player.setTarget(monster); + + // We take granted that mage classes do not auto hit. + if (isMageCaster(player)) + { + continue PLAY; + } + + player.sendPacket(ExAutoPlayDoMacro.STATIC_PACKET); + } + } + + _working = false; + } + + public void doAutoPlay(Player player) + { + if (!PLAYERS.contains(player)) + { + player.onActionRequest(); + PLAYERS.add(player); + } + } + + public void stopAutoPlay(Player player) + { + PLAYERS.remove(player); + + // Pets must follow their owner. + if (player.hasServitors()) + { + for (Summon summon : player.getServitors().values()) + { + summon.followOwner(); + } + } + if (player.hasPet()) + { + player.getPet().followOwner(); + } + } + + public boolean isAutoPlay(Player player) + { + return PLAYERS.contains(player); + } + + private boolean isMageCaster(Player player) + { + return player.isMageClass() && (player.getRace() != Race.ORC); + } + + public static AutoPlayTaskManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final AutoPlayTaskManager INSTANCE = new AutoPlayTaskManager(); + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java new file mode 100644 index 0000000000..4858b5d735 --- /dev/null +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/taskmanager/AutoUseTaskManager.java @@ -0,0 +1,513 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.l2jmobius.gameserver.taskmanager; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import org.l2jmobius.Config; +import org.l2jmobius.commons.threads.ThreadPool; +import org.l2jmobius.gameserver.data.xml.ActionData; +import org.l2jmobius.gameserver.handler.IItemHandler; +import org.l2jmobius.gameserver.handler.IPlayerActionHandler; +import org.l2jmobius.gameserver.handler.ItemHandler; +import org.l2jmobius.gameserver.handler.PlayerActionHandler; +import org.l2jmobius.gameserver.model.ActionDataHolder; +import org.l2jmobius.gameserver.model.WorldObject; +import org.l2jmobius.gameserver.model.actor.Creature; +import org.l2jmobius.gameserver.model.actor.Playable; +import org.l2jmobius.gameserver.model.actor.Player; +import org.l2jmobius.gameserver.model.actor.Summon; +import org.l2jmobius.gameserver.model.actor.instance.Guard; +import org.l2jmobius.gameserver.model.effects.AbstractEffect; +import org.l2jmobius.gameserver.model.holders.AttachSkillHolder; +import org.l2jmobius.gameserver.model.holders.ItemSkillHolder; +import org.l2jmobius.gameserver.model.item.EtcItem; +import org.l2jmobius.gameserver.model.item.ItemTemplate; +import org.l2jmobius.gameserver.model.item.instance.Item; +import org.l2jmobius.gameserver.model.skill.AbnormalType; +import org.l2jmobius.gameserver.model.skill.BuffInfo; +import org.l2jmobius.gameserver.model.skill.Skill; +import org.l2jmobius.gameserver.model.skill.targets.AffectScope; +import org.l2jmobius.gameserver.model.skill.targets.TargetType; +import org.l2jmobius.gameserver.model.zone.ZoneId; +import org.l2jmobius.gameserver.network.SystemMessageId; +import org.l2jmobius.gameserver.network.serverpackets.ExBasicActionList; + +/** + * @author Mobius + */ +public class AutoUseTaskManager implements Runnable +{ + private static final Set PLAYERS = ConcurrentHashMap.newKeySet(); + private static final int REUSE_MARGIN_TIME = 3; + private static boolean _working = false; + + protected AutoUseTaskManager() + { + ThreadPool.scheduleAtFixedRate(this, 500, 500); + } + + @Override + public void run() + { + if (_working) + { + return; + } + _working = true; + + for (Player player : PLAYERS) + { + if (!player.isOnline() || player.isInOfflineMode()) + { + stopAutoUseTask(player); + continue; + } + + if (player.hasBlockActions() || player.isControlBlocked() || player.isAlikeDead()) + { + continue; + } + + final boolean isInPeaceZone = player.isInsideZone(ZoneId.PEACE) || player.isInsideZone(ZoneId.SAYUNE); + + if (Config.ENABLE_AUTO_ITEM && !isInPeaceZone) + { + ITEMS: for (Integer itemId : player.getAutoUseSettings().getAutoSupplyItems()) + { + if (player.isTeleporting()) + { + break ITEMS; + } + + final Item item = player.getInventory().getItemByItemId(itemId.intValue()); + if (item == null) + { + player.getAutoUseSettings().getAutoSupplyItems().remove(itemId); + continue ITEMS; + } + + final ItemTemplate it = item.getTemplate(); + if (it != null) + { + if (!it.checkCondition(player, player, false)) + { + continue ITEMS; + } + + final List skills = it.getAllSkills(); + if (skills != null) + { + for (ItemSkillHolder itemSkillHolder : skills) + { + final Skill skill = itemSkillHolder.getSkill(); + if (player.isAffectedBySkill(skill.getId()) || player.hasSkillReuse(skill.getReuseHashCode()) || !skill.checkCondition(player, player, false)) + { + continue ITEMS; + } + } + } + } + + final int reuseDelay = item.getReuseDelay(); + if ((reuseDelay <= 0) || (player.getItemRemainingReuseTime(item.getObjectId()) <= 0)) + { + final EtcItem etcItem = item.getEtcItem(); + final IItemHandler handler = ItemHandler.getInstance().getHandler(etcItem); + if ((handler != null) && handler.useItem(player, item, false) && (reuseDelay > 0)) + { + player.addTimeStampItem(item, reuseDelay); + } + } + } + } + + if (Config.ENABLE_AUTO_POTION && !isInPeaceZone && (player.getCurrentHpPercent() < player.getAutoPlaySettings().getAutoPotionPercent())) + { + POTIONS: for (Integer itemId : player.getAutoUseSettings().getAutoPotionItems()) + { + final Item item = player.getInventory().getItemByItemId(itemId.intValue()); + if (item == null) + { + player.getAutoUseSettings().getAutoPotionItems().remove(itemId); + continue POTIONS; + } + + final int reuseDelay = item.getReuseDelay(); + if ((reuseDelay <= 0) || (player.getItemRemainingReuseTime(item.getObjectId()) <= 0)) + { + final EtcItem etcItem = item.getEtcItem(); + final IItemHandler handler = ItemHandler.getInstance().getHandler(etcItem); + if ((handler != null) && handler.useItem(player, item, false) && (reuseDelay > 0)) + { + player.addTimeStampItem(item, reuseDelay); + } + } + } + } + + if (Config.ENABLE_AUTO_SKILL) + { + BUFFS: for (Integer skillId : player.getAutoUseSettings().getAutoBuffs()) + { + // Fixes start area issue. + if (isInPeaceZone) + { + break BUFFS; + } + + // Already casting. + if (player.isCastingNow()) + { + break BUFFS; + } + + // Player is teleporting. + if (player.isTeleporting()) + { + break BUFFS; + } + + Playable pet = null; + Skill skill = player.getKnownSkill(skillId.intValue()); + if (skill == null) + { + if (player.hasServitors()) + { + SUMMON_SEARCH: for (Summon summon : player.getServitors().values()) + { + skill = summon.getKnownSkill(skillId.intValue()); + if (skill != null) + { + pet = summon; + break SUMMON_SEARCH; + } + } + } + if ((skill == null) && player.hasPet()) + { + pet = player.getPet(); + skill = pet.getKnownSkill(skillId.intValue()); + } + if (skill == null) + { + player.getAutoUseSettings().getAutoBuffs().remove(skillId); + continue BUFFS; + } + } + + final WorldObject target = player.getTarget(); + if (canCastBuff(player, target, skill)) + { + ATTACH_SEARCH: for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId())) + { + skill = holder.getSkill(); + break ATTACH_SEARCH; + } + } + + // Playable target cast. + final Playable caster = pet != null ? pet : player; + if ((target != null) && target.isPlayable() && (target.getActingPlayer().getPvpFlag() == 0) && (target.getActingPlayer().getReputation() >= 0)) + { + caster.doCast(skill); + } + else // Target self, cast and re-target. + { + final WorldObject savedTarget = target; + caster.setTarget(caster); + caster.doCast(skill); + caster.setTarget(savedTarget); + } + } + } + + // Continue when auto play is not enabled. + if (!AutoPlayTaskManager.getInstance().isAutoPlay(player)) + { + continue; + } + + SKILLS: + { + // Already casting. + if (player.isCastingNow()) + { + break SKILLS; + } + + // Player is teleporting. + if (player.isTeleporting()) + { + break SKILLS; + } + + // Acquire next skill. + Playable pet = null; + final Integer skillId = player.getAutoUseSettings().getNextSkillId(); + Skill skill = player.getKnownSkill(skillId.intValue()); + if (skill == null) + { + if (player.hasServitors()) + { + SUMMON_SEARCH: for (Summon summon : player.getServitors().values()) + { + skill = summon.getKnownSkill(skillId.intValue()); + if (skill != null) + { + pet = summon; + break SUMMON_SEARCH; + } + } + } + if ((skill == null) && player.hasPet()) + { + pet = player.getPet(); + skill = pet.getKnownSkill(skillId.intValue()); + } + if (skill == null) + { + player.getAutoUseSettings().getAutoSkills().remove(skillId); + player.getAutoUseSettings().resetSkillOrder(); + break SKILLS; + } + } + + // Casting on self stops movement. + final WorldObject target = player.getTarget(); + if (target == player) + { + break SKILLS; + } + + // Check bad skill target. + if ((target == null) || !target.isAttackable() || ((Creature) target).isDead()) + { + break SKILLS; + } + + // Do not attack guards. + if (target instanceof Guard) + { + break SKILLS; + } + + if (!canUseMagic(player, target, skill) || (pet != null ? pet : player).useMagic(skill, null, true, false)) + { + player.getAutoUseSettings().incrementSkillOrder(); + } + } + + ACTIONS: for (Integer actionId : player.getAutoUseSettings().getAutoActions()) + { + final BuffInfo info = player.getEffectList().getFirstBuffInfoByAbnormalType(AbnormalType.BOT_PENALTY); + if (info != null) + { + for (AbstractEffect effect : info.getEffects()) + { + if (!effect.checkCondition(actionId)) + { + player.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_AS_AN_ILLEGAL_PROGRAM_USER_SO_YOUR_ACTIONS_HAVE_BEEN_RESTRICTED); + break ACTIONS; + } + } + } + + // Do not allow to do some action if player is transformed. + if (player.isTransformed()) + { + final int[] allowedActions = player.isTransformed() ? ExBasicActionList.ACTIONS_ON_TRANSFORM : ExBasicActionList.DEFAULT_ACTION_LIST; + if (Arrays.binarySearch(allowedActions, actionId) < 0) + { + continue ACTIONS; + } + } + + final ActionDataHolder actionHolder = ActionData.getInstance().getActionData(actionId); + if (actionHolder != null) + { + final IPlayerActionHandler actionHandler = PlayerActionHandler.getInstance().getHandler(actionHolder.getHandler()); + if (actionHandler != null) + { + actionHandler.useAction(player, actionHolder, false, false); + } + } + } + } + } + + _working = false; + } + + private boolean canCastBuff(Player player, WorldObject target, Skill skill) + { + // Summon check. + if ((skill.getAffectScope() == AffectScope.SUMMON_EXCEPT_MASTER) || (skill.getTargetType() == TargetType.SUMMON)) + { + if (!player.hasServitors()) + { + return false; + } + int occurrences = 0; + for (Summon servitor : player.getServitors().values()) + { + if (servitor.isAffectedBySkill(skill.getId())) + { + occurrences++; + } + } + if (occurrences == player.getServitors().size()) + { + return false; + } + } + + if ((target != null) && target.isCreature() && ((Creature) target).isAlikeDead() && (skill.getTargetType() != TargetType.SELF) && (skill.getTargetType() != TargetType.NPC_BODY) && (skill.getTargetType() != TargetType.PC_BODY)) + { + return false; + } + + final Playable playableTarget = (target == null) || !target.isPlayable() || (skill.getTargetType() == TargetType.SELF) ? player : (Playable) target; + if (!canUseMagic(player, playableTarget, skill)) + { + return false; + } + + final BuffInfo buffInfo = playableTarget.getEffectList().getBuffInfoBySkillId(skill.getId()); + final BuffInfo abnormalBuffInfo = playableTarget.getEffectList().getFirstBuffInfoByAbnormalType(skill.getAbnormalType()); + if (abnormalBuffInfo != null) + { + if (buffInfo != null) + { + return (abnormalBuffInfo.getSkill().getId() == buffInfo.getSkill().getId()) && ((buffInfo.getTime() <= REUSE_MARGIN_TIME) || (buffInfo.getSkill().getLevel() < skill.getLevel())); + } + return (abnormalBuffInfo.getSkill().getAbnormalLevel() < skill.getAbnormalLevel()) || abnormalBuffInfo.isAbnormalType(AbnormalType.NONE); + } + return buffInfo == null; + } + + private boolean canUseMagic(Player player, WorldObject target, Skill skill) + { + if ((skill.getItemConsumeCount() > 0) && (player.getInventory().getInventoryItemCount(skill.getItemConsumeId(), -1) < skill.getItemConsumeCount())) + { + return false; + } + + for (AttachSkillHolder holder : skill.getAttachSkills()) + { + if (player.isAffectedBySkill(holder.getRequiredSkillId()) // + && (player.hasSkillReuse(holder.getSkill().getReuseHashCode()) || player.isAffectedBySkill(holder))) + { + return false; + } + } + + return !player.isSkillDisabled(skill) && skill.checkCondition(player, target, false); + } + + public void startAutoUseTask(Player player) + { + if (!PLAYERS.contains(player)) + { + PLAYERS.add(player); + } + } + + public void stopAutoUseTask(Player player) + { + player.getAutoUseSettings().resetSkillOrder(); + if (player.getAutoUseSettings().isEmpty() || !player.isOnline() || player.isInOfflineMode()) + { + PLAYERS.remove(player); + } + } + + public void addAutoSupplyItem(Player player, int itemId) + { + player.getAutoUseSettings().getAutoSupplyItems().add(itemId); + startAutoUseTask(player); + } + + public void removeAutoSupplyItem(Player player, int itemId) + { + player.getAutoUseSettings().getAutoSupplyItems().remove(itemId); + stopAutoUseTask(player); + } + + public void addAutoPotionItem(Player player, int itemId) + { + player.getAutoUseSettings().getAutoPotionItems().add(itemId); + startAutoUseTask(player); + } + + public void removeAutoPotionItem(Player player, int itemId) + { + player.getAutoUseSettings().getAutoPotionItems().remove(itemId); + stopAutoUseTask(player); + } + + public void addAutoBuff(Player player, int skillId) + { + player.getAutoUseSettings().getAutoBuffs().add(skillId); + startAutoUseTask(player); + } + + public void removeAutoBuff(Player player, int skillId) + { + player.getAutoUseSettings().getAutoBuffs().remove(skillId); + stopAutoUseTask(player); + } + + public void addAutoSkill(Player player, Integer skillId) + { + player.getAutoUseSettings().getAutoSkills().add(skillId); + startAutoUseTask(player); + } + + public void removeAutoSkill(Player player, Integer skillId) + { + player.getAutoUseSettings().getAutoSkills().remove(skillId); + stopAutoUseTask(player); + } + + public void addAutoAction(Player player, int actionId) + { + player.getAutoUseSettings().getAutoActions().add(actionId); + startAutoUseTask(player); + } + + public void removeAutoAction(Player player, int actionId) + { + player.getAutoUseSettings().getAutoActions().remove(actionId); + stopAutoUseTask(player); + } + + public static AutoUseTaskManager getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final AutoUseTaskManager INSTANCE = new AutoUseTaskManager(); + } +} diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/loginserver/network/serverpackets/AccountKicked.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/loginserver/network/serverpackets/AccountKicked.java index 1ab13a2183..9d6b803849 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/loginserver/network/serverpackets/AccountKicked.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/loginserver/network/serverpackets/AccountKicked.java @@ -44,4 +44,3 @@ public class AccountKicked implements IOutgoingPacket return true; } } - diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Gameserver.launch b/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Gameserver.launch index fe11736fce..528c0bc97f 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Gameserver.launch +++ b/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Gameserver.launch @@ -1,7 +1,7 @@ - + @@ -12,7 +12,7 @@ - - - + + + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Loginserver.launch b/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Loginserver.launch index f60753a853..95c68df64f 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Loginserver.launch +++ b/L2J_Mobius_Classic_2.9.5_Saviors/launcher/Loginserver.launch @@ -1,7 +1,7 @@ - + @@ -13,7 +13,7 @@ - - - + + + diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/readme.txt b/L2J_Mobius_Classic_2.9.5_Saviors/readme.txt index d6012b79a6..b5df6004ae 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/readme.txt +++ b/L2J_Mobius_Classic_2.9.5_Saviors/readme.txt @@ -1,108 +1,15 @@ -L2J-Mobius Secret of Empire +L2J-Mobius Saviors 2.9.5 (NA) JDK: https://www.mediafire.com/file/kb2nfx54wojys4f/bellsoft-jdk17.0.2%252B9-windows-amd64.msi XAMPP: https://www.mediafire.com/file/hkehxpyjn81ybsw/xampp-windows-x64-8.0.11-2-VS16-installer.exe Eclipse: https://www.mediafire.com/file/j208qw3s7zwx7c7/eclipse-java-2021-12-R-win32-x86_64.zip -Geodata: http://www.mediafire.com/file/0lcde1bxjg7bayz/L2J_Mobius_Classic_2.9_SecretOfEmpire_Geodata.zip +Geodata: https://www.mediafire.com/file/zia0oc6d0ypzznf/L2J_Mobius_Classic_2.9.5_Saviors_Geodata.zip -Client (password L2jMobius): https://drive.google.com/u/1/uc?id=1EW-r8oUNWuRXUXmQ_tPbY8zIBEATgvZV&export=download -System: https://mega.nz/#!xolCkYjD!TpdBo8SwYpPYJN86H_r5AxZljTZAfyj-o2H9cfy2bNc +Client (password L2jMobius): https://drive.google.com/u/0/uc?id=1V9xeFARNKYbrunAta5Um24MGf8cNjrWt&export=download +System: https://mega.nz/file/w1FgnAiJ#aVTuf33uaP2zzZiEbU-pwvHQmoSj5x4e5uhYzBbfjzM All provided download links are for personal use. Redistribution of these links is bannable. -Saviors: https://eu.4game.com/lineage2classic/play/saviors/ --Classic packet compatibility --Parsed item data from client --Proper Daily Mission rewards --Zone changes to match starting locations --Parsed recipes from client --Parsed skill names from client --Parsed NPC names from client --Temporary NPC info from Interlude retail files --Temporary spawns from Interlude retail files --Further manual spawn fixes --Skilltrees info from L2Wiki --Parsed NPC droplists from L2Wiki --Further manual NPC corrections from L2Wiki --Retail NPC dialogs --Retail NPC buylists --Basic Tutorial quest --Added 156 quest scripts --Village Master AI scripts --Fixed skill levels to match retail --Added new class mounts --Fisherman NPC updates --Fixed fishing to match retail --Added new fishing zone locations --Quest Fishing Specialist's Request --Olympiad NPC updates --Dimensional Merchant updates --Classic gatekeeper teleports --Admin menu teleport and shop cleanups --Blacksmith NPC updates --New Race Track arena zone --Giran Luxury Shop updates --Grandboss scripts and stats --Whisper of Dreams quests --Moon Knight quest --Item augmentation support --Retail Henna list --Floran Agricultural Area clan halls --Maille Lizardmen Barracks clan halls --Augmentation chances from L2Wiki --Working Runes system --Added new Savior skills --Classic 3rd class quests --Dungeon of Abyss --Attendance rewards --Various retail Classic events --Classic Olympiad shedule --Ruin area herb drops - -Zaken: https://eu.4game.com/lineage2classic/play/zaken/ --Parsed new system messages and npc strings from client. --Parsed new skills from client --Parsed new items from client --Parsed new NPCs from L2Wiki --Parsed recipes from client --Added raidbosses according to map --Giants Cave --Zaken boss AI --Newbie quest changes - -Antharas: https://eu.4game.com/lineage2classic/play/antharas/ --Parsed new system messages and npc strings from client. --Parsed new skills from client --Parsed new items from client --Parsed new NPCs from L2Wiki and client --Clan Arena --New Agathion item support - -Seven Signs: https://eu.4gameforum.com/threads/658543/ --Parsed new system messages and npc strings from client --Parsed new skills from client --Parsed new items from client --Parsed new NPCs from client --Updated skiltrees and skills from L2Wiki --Updated experience values from L2Wiki --Elemental Spirits --Elemental Spirit boss instances --Land of Winds spawns --Goddard territory spawns --Goddard clanhalls - -Secret of Empire: https://eu.4game.com/patchnotes/lineage2classic/133/ --Parsed new system messages and npc strings from client --Parsed new skills from client --Parsed new items from client --Parsed new recipes from client --Imperial tomb area spawns --Retail gatekeeper teleports --Equipment upgrade system - -Customs: --Newbie Helper NPC location info --Newbie Helper buff support until 40 level --Test Server Helper NPCs --Fake players engine +Saviors 2.9.5 (NA) patch notes. +https://www.lineage2.com/en-us/news/lineage-ii-classic-saviors-patch-notes