-
Posts
-
package custom.events.RandomZoneEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledFuture; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.time.SchedulingPattern; import org.l2jmobius.commons.time.TimeUtil; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.managers.ZoneManager; import org.l2jmobius.gameserver.model.StatSet; 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.model.quest.Event; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneType; import org.l2jmobius.gameserver.model.zone.type.RandomZone; import org.l2jmobius.gameserver.util.Broadcast; /** * Random Zone Event - Activates one random PvP zone temporarily. No modifica la clase de la zona: usa flags PvP en runtime. * @author Juan */ public class RandomZoneEvent extends Event { private static final String CONFIG_FILE = "data/scripts/custom/events/RandomZoneEvent/config.xml"; private static int EVENT_DURATION_MINUTES = 15; private static boolean _isActive = false; private ScheduledFuture<?> _eventTask = null; private final List<ZoneType> _availableZones = new ArrayList<>(); private ZoneType _activeZone = null; public RandomZoneEvent() { loadConfig(); loadZones(); registerZoneListeners(); } /** * Registra listeners a TODAS LAS ZONAS random */ private void registerZoneListeners() { for (ZoneType zone : _availableZones) { addEnterZoneId(zone.getId()); addExitZoneId(zone.getId()); LOGGER.info("[RandomZoneEvent] Registered listener for zone: " + zone.getName()); } } private void loadConfig() { new IXmlReader() { @Override public void load() { parseDatapackFile(CONFIG_FILE); } @Override public void parseDocument(Document doc, File file) { forEach(doc, "event", eventNode -> { final StatSet att = new StatSet(parseAttributes(eventNode)); final String name = att.getString("name"); for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) { if ("schedule".equals(node.getNodeName())) { final StatSet attributes = new StatSet(parseAttributes(node)); final String pattern = attributes.getString("pattern"); final SchedulingPattern schedulingPattern = new SchedulingPattern(pattern); final StatSet params = new StatSet(); params.set("Name", name); params.set("SchedulingPattern", pattern); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer("Schedule_" + name, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Event " + name + " scheduled at " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } }); } }.load(); } private void loadZones() { for (ZoneType zone : ZoneManager.getInstance().getAllZones(RandomZone.class)) { if ((zone.getName() != null) && zone.getName().toLowerCase().startsWith("random_zone")) { _availableZones.add(zone); LOGGER.info("[RandomZoneEvent] Loaded zone: " + zone.getName() + " (id=" + zone.getId() + ")"); } } LOGGER.info("[RandomZoneEvent] Total random zones loaded: " + _availableZones.size()); } @Override public void onTimerEvent(String event, StatSet params, Npc npc, Player player) { if (event.startsWith("Schedule_")) { eventStart(null); final SchedulingPattern schedulingPattern = new SchedulingPattern(params.getString("SchedulingPattern")); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer(event, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Rescheduled for " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } @Override public boolean eventStart(Player eventMaker) { if (_isActive) { if (eventMaker != null) { eventMaker.sendMessage("RandomZoneEvent already active."); } return false; } if (_availableZones.isEmpty()) { Broadcast.toAllOnlinePlayers("[RandomZoneEvent] No zones configured."); return false; } _isActive = true; Broadcast.toAllOnlinePlayers("⚔️ Random Zone Event has started!"); _eventTask = ThreadPool.schedule(this::activateRandomZone, 5_000); return true; } private void activateRandomZone() { _activeZone = _availableZones.get(new Random().nextInt(_availableZones.size())); _activeZone.setEnabled(true); Broadcast.toAllOnlinePlayers("🔥 Random Zone Event: " + _activeZone.getName() + " is now PvP for " + EVENT_DURATION_MINUTES + " minutes!"); _eventTask = ThreadPool.schedule(this::eventStop, EVENT_DURATION_MINUTES * 60 * 1000L); } @Override public boolean eventStop() { if (!_isActive) { return false; } _isActive = false; if (_eventTask != null) { _eventTask.cancel(true); _eventTask = null; } if (_activeZone != null) { _activeZone.setEnabled(false); Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended. " + _activeZone.getName() + " is back to normal."); _activeZone = null; } else { Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended."); } return true; } @Override public void onEnterZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, true); if (creature.isPlayer()) { creature.sendMessage("Esta zona está en modo PvP temporalmente."); } } } @Override public void onExitZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, false); if (creature.isPlayer()) { creature.sendMessage("Abandonaste la zona PvP temporal."); } } } @Override public boolean eventBypass(Player player, String bypass) { return true; } @Override public String onEvent(String event, Npc npc, Player player) { return super.onEvent(event, npc, player); } @Override public String onFirstTalk(Npc npc, Player player) { return null; } public static void main(String[] args) { new RandomZoneEvent(); } } i have this but its not working
-
ZonePvPSpawnBossRadio=0 ZonePvPSpawnBossBarakiel=0 at the Customs.ini in L2Server folder. Im prety sure this is it because i had the same problem with you in cruma 1 floor for example and i couldn't fix it but i fixed it finally by changing these 2 lines
-
Topics

Question
TEOGR_hItMaKeR
hello guys I want to have more options for private store currency except adena I want my coin also... I found this code
Index: java/com/l2jserver/Config.java =================================================================== --- java/com/l2jserver/Config.java (revision 4410) +++ java/com/l2jserver/Config.java (working copy) @@ -676,6 +676,8 @@ public static String L2JMOD_MULTILANG_DEFAULT; public static boolean L2JMOD_MULTILANG_VOICED_ALLOW; public static boolean L2WALKER_PROTECTION; + public static int STORE_BUY_CURRENCY; + public static int STORE_SELL_CURRENCY; //-------------------------------------------------- // NPC Settings @@ -2285,6 +2287,8 @@ L2JMOD_MULTILANG_VOICED_ALLOW = Boolean.parseBoolean(L2JModSettings.getProperty("MultiLangVoiceCommand", "True")); L2WALKER_PROTECTION = Boolean.parseBoolean(L2JModSettings.getProperty("L2WalkerProtection", "False")); + STORE_BUY_CURRENCY = Integer.parseInt(L2JModSettings.getProperty("PrivateStoreBuyMoneda", "57")); + STORE_SELL_CURRENCY = Integer.parseInt(L2JModSettings.getProperty("PrivateStoreSellMoneda", "57")); } catch (Exception e) { Index: java/com/l2jserver/gameserver/model/TradeList.java =================================================================== --- java/com/l2jserver/gameserver/model/TradeList.java (revision 4410) +++ java/com/l2jserver/gameserver/model/TradeList.java (working copy) @@ -802,9 +802,10 @@ slots++; } - if (totalPrice > playerInventory.getAdena()) + if (totalPrice > player.getBuyStoreCurrency()) { - player.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA)); + final String name = ItemTable.getInstance().getTemplate(Config.STORE_BUY_CURRENCY).getName(); + player.sendMessage("You dont have enough "+name); return 1; } @@ -823,12 +824,12 @@ // Prepare inventory update packets final InventoryUpdate ownerIU = new InventoryUpdate(); final InventoryUpdate playerIU = new InventoryUpdate(); - - final L2ItemInstance adenaItem = playerInventory.getAdenaInstance(); - playerInventory.reduceAdena("PrivateStore", totalPrice, player, _owner); + final int moneda = Config.STORE_BUY_CURRENCY; + final L2ItemInstance adenaItem = playerInventory.getItemByItemId(moneda); + player.destroyItemByItemId("PrivateStore", moneda, totalPrice, _owner, true); playerIU.addItem(adenaItem); - ownerInventory.addAdena("PrivateStore", totalPrice, _owner, player); - ownerIU.addItem(ownerInventory.getAdenaInstance()); + ownerInventory.addItem("PrivateStore", moneda, totalPrice, _owner, player); + ownerIU.addItem(ownerInventory.getItemByItemId(moneda)); boolean ok = true; @@ -965,7 +966,7 @@ break; } - if (ownerInventory.getAdena() < _totalPrice) + if (_owner.getSellStoreCurrency() < _totalPrice) continue; // Check if requested item is available for manipulation @@ -1043,11 +1044,12 @@ if (totalPrice > ownerInventory.getAdena()) // should not happens, just a precaution return false; - final L2ItemInstance adenaItem = ownerInventory.getAdenaInstance(); - ownerInventory.reduceAdena("PrivateStore", totalPrice, _owner, player); + final int moneda = Config.STORE_SELL_CURRENCY; + final L2ItemInstance adenaItem = ownerInventory.getItemByItemId(moneda); + ownerInventory.destroyItemByItemId("PrivateStore", moneda, totalPrice, _owner, player); ownerIU.addItem(adenaItem); - playerInventory.addAdena("PrivateStore", totalPrice, player, _owner); - playerIU.addItem(playerInventory.getAdenaInstance()); + playerInventory.addItem("PrivateStore", moneda, totalPrice, player, _owner); + playerIU.addItem(playerInventory.getItemByItemId(moneda)); } if (ok) Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4410) +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -14889,4 +14889,18 @@ addSkill(SkillTable.getInstance().getInfo(id, nextLevel), true); } } + + public synchronized long getBuyStoreCurrency() + { + L2ItemInstance item = this.getInventory().getItemByItemId(Config.STORE_BUY_CURRENCY); + + return item == null? 0 : item.getCount(); + } + + public synchronized long getSellStoreCurrency() + { + L2ItemInstance item = this.getInventory().getItemByItemId(Config.STORE_SELL_CURRENCY); + + return item == null? 0 : item.getCount(); + } } Index: java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java =================================================================== --- java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java (revision 4410) +++ java/com/l2jserver/gameserver/model/itemcontainer/PcInventory.java (working copy) @@ -85,11 +85,14 @@ FastList<L2ItemInstance> list = FastList.newInstance(); for (L2ItemInstance item : _items) { - if ((!allowAdena && item.getItemId() == 57)) + final int itemId = item.getItemId(); + if ((!allowAdena && itemId == 57)) continue; - if ((!allowAncientAdena && item.getItemId() == 5575)) + if ((!allowAncientAdena && itemId == 5575)) continue; - + if(itemId == Config.STORE_BUY_CURRENCY) + continue; + boolean isDuplicate = false; for (L2ItemInstance litem : list) { Index: java/com/l2jserver/gameserver/network/clientpackets/SetPrivateStoreListBuy.java =================================================================== --- java/com/l2jserver/gameserver/network/clientpackets/SetPrivateStoreListBuy.java (revision 4410) +++ java/com/l2jserver/gameserver/network/clientpackets/SetPrivateStoreListBuy.java (working copy) @@ -140,7 +140,7 @@ } // Check for available funds - if (totalCost > player.getAdena()) + if (totalCost > player.getBuyStoreCurrency()) { player.sendPacket(new PrivateStoreManageListBuy(player)); player.sendPacket(new SystemMessage(SystemMessageId.THE_PURCHASE_PRICE_IS_HIGHER_THAN_MONEY)); Index: java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListBuy.java =================================================================== --- java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListBuy.java (revision 4410) +++ java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListBuy.java (working copy) @@ -33,7 +33,7 @@ public PrivateStoreListBuy(L2PcInstance player, L2PcInstance storePlayer) { _objId = storePlayer.getObjectId(); - _playerAdena = player.getAdena(); + _playerAdena = player.getBuyStoreCurrency(); storePlayer.getSellList().updateItems(); // Update SellList for case inventory content has changed _items = storePlayer.getBuyList().getAvailableItems(player.getInventory()); } Index: java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListSell.java =================================================================== --- java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListSell.java (revision 4410) +++ java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreListSell.java (working copy) @@ -34,7 +34,7 @@ public PrivateStoreListSell(L2PcInstance player, L2PcInstance storePlayer) { _objId = storePlayer.getObjectId(); - _playerAdena = player.getAdena(); + _playerAdena = player.getSellStoreCurrency(); _items = storePlayer.getSellList().getItems(); _packageSale = storePlayer.getSellList().isPackaged(); } Index: java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListBuy.java =================================================================== --- java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListBuy.java (revision 4410) +++ java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListBuy.java (working copy) @@ -34,7 +34,7 @@ public PrivateStoreManageListBuy(L2PcInstance player) { _objId = player.getObjectId(); - _playerAdena = player.getAdena(); + _playerAdena = player.getBuyStoreCurrency(); _itemList = player.getInventory().getUniqueItems(false, true); _buyList = player.getBuyList().getItems(); } Index: java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListSell.java =================================================================== --- java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListSell.java (revision 4410) +++ java/com/l2jserver/gameserver/network/serverpackets/PrivateStoreManageListSell.java (working copy) @@ -42,7 +42,7 @@ public PrivateStoreManageListSell(L2PcInstance player, boolean isPackageSale) { _objId = player.getObjectId(); - _playerAdena = player.getAdena(); + _playerAdena = player.getSellStoreCurrency(); player.getSellList().updateItems(); _packageSale = isPackageSale; _itemList = player.getInventory().getAvailableItems(player.getSellList()); Index: java/config/l2jmods.properties =================================================================== --- java/config/l2jmods.properties (revision 4410) +++ java/config/l2jmods.properties (working copy) @@ -379,3 +379,14 @@ # Basic protection against L2Walker. # Default: False L2WalkerProtection = False + +# --------------------------------------------------------------------------- +# Private Store Buy/Sell - Moneda de cambio +# --------------------------------------------------------------------------- +# Elige que moneda quieres que se use como pago en los Private Store Buy (amarillos) +# Retail: 57, Por Defecto: 57 +PrivateStoreBuyMoneda = 57 + +# Elige que moneda quieres que se use como pago en los Private Store Sell (morados) +# Retail: 57, Por Defecto: 57 +PrivateStoreSellMoneda = 57but its structure it's a little bit different for acis and i don't know if it's going to work! Can someone adapt it for acis or give me another? Thanks!24 answers to this question
Recommended Posts