Acacia Posted June 5, 2020 Posted June 5, 2020 (edited) Okay , a simple drop event coded on l2j Sources it multiplies the drops of item only if its 100% rate you type //dropevent to start the event after 15 mins ex. and re-type //dropevent if you wish to force stop it there is a configuration on the rate default is x1.2 the event will last for 60 minutes , and it will announce back when it ends if event is active and a player logs in he will get a notification by pm Create a new class : DropEvent package com.event; import net.sf.l2j.Config; import net.sf.l2j.gameserver.Announcements; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.network.clientpackets.Say2; import net.sf.l2j.gameserver.network.serverpackets.CreatureSay; /** * @author Kishin */ public class DropEvent { private int startIn = Config.DROP_EVENT_START; private int stopIn = Config.DROP_EVENT_END; public void sendDropEventInfo(L2PcInstance player) { player.broadcastPacket(new CreatureSay(player.getObjectId() ,Say2.TELL," "+player.getName()+":","Drop Event is currently running!")); player.sendMessage("Drop event is currently running!"); } public void startEvent() { Announcements.getInstance().announceToAll("Double drop event will start in "+startIn+" minutes"); ThreadPoolManager.getInstance().scheduleGeneral(new startTimer(), (startIn *60 * 1000)); } public void forceStop() { setDoubleDrop(false); } public class startTimer implements Runnable { public void run() { setDoubleDrop(true); Announcements.getInstance().announceToAll("Double drop event has started !"); Announcements.getInstance().announceToAll("Event will end in "+stopIn+" minutes !"); ThreadPoolManager.getInstance().scheduleGeneral(new stopTimer(), (stopIn * 60 * 1000)); } } public class stopTimer implements Runnable { public void run() { if (isDoubleDrop()) { setDoubleDrop(false); Announcements.getInstance().announceToAll("Double drop event has ended"); } } } public static DropEvent getInstance() { return DropEvent.SingletonHolder._instance; } private static class SingletonHolder { protected static final DropEvent _instance = new DropEvent(); } private boolean _isDoubleDrop; public void setDoubleDrop(boolean isDoubleDrop) { _isDoubleDrop = isDoubleDrop; } public boolean isDoubleDrop() { return _isDoubleDrop; } } L2Attackable.java search this -> private RewardItem calculateCategorizedRewardItem and under this : dropChance *= Config.L2JMOD_CHAMPION_REWARDS; paste : if (DropEvent.getInstance().isDoubleDrop()) { if ( dropChance == 1000000) { dropChance *= Config.DROP_EVENT_RATE; } } EnterWorld.java -> paste somewhere if (DropEvent.getInstance().isDoubleDrop()) { DropEvent.getInstance().sendDropEventInfo(activeChar); } in Config.java paste somewhere this : public static int DROP_EVENT_START; public static int DROP_EVENT_END; public static float DROP_EVENT_RATE; pick your destination file mine is customSettings paste : DROP_EVENT_START = Integer.parseInt(customsSettings.getProperty("dropEventStart", "15")); DROP_EVENT_END = Integer.parseInt(customsSettings.getProperty("dropEventEnd", "60")); DROP_EVENT_RATE = Float.parseFloat(customsSettings.getProperty("dropEventRate", "1.2")); Create a new class in admincommandhandlers AdminDropEvent <- package net.sf.l2j.gameserver.handler.admincommandhandlers; import com.event.DropEvent; import net.sf.l2j.gameserver.Announcements; import net.sf.l2j.gameserver.handler.IAdminCommandHandler; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; /** * @author Kishin */ public class AdminDropEvent implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { "admin_dropevent" }; @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { try { if (command.equals("admin_dropevent")) { if (DropEvent.getInstance().isDoubleDrop()) { DropEvent.getInstance().forceStop(); Announcements.getInstance().announceToAll("Admin has ended the drop event"); } else { DropEvent.getInstance().startEvent(); } } } catch (Exception e) { e.printStackTrace(); } return false; } @Override public String[] getAdminCommandList() { return ADMIN_COMMANDS; } } Have fun :) register the command handler and good to go Edited May 15, 2021 by Kishin 1 Quote
EdithFinch Posted June 5, 2020 Posted June 5, 2020 if (DropEvent.getInstance().isDoubleDrop() == true) Possibly the poorest code i have seen in 10 years All this: @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { try { if (command.equals("admin_startdrop")) { if (DropEvent.getInstance().isDoubleDrop() == false) { DropEvent.getInstance().startEvent(); } } else if (command.equals("admin_stopdrop")) { if (DropEvent.getInstance().isDoubleDrop() == true) { DropEvent.getInstance().forceStop(); Announcements.getInstance().announceToAll("Admin has ended the drop event"); } } } catch (Exception e) { e.printStackTrace(); } return false; } Can be written as: @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { if (DropEvent.getInstance().isDoubleDrop()) { DropEvent.getInstance().forceStop(); } else { DropEvent.getInstance().startEvent(); } } The whole code is a mess, it's like we are in 2007 Quote
Acacia Posted June 5, 2020 Author Posted June 5, 2020 (edited) ohh forgot to remove the true false part on isdouble :D was typed to be readable then remove on the other hand yes admincommand i used an old code as pattern , thank you for reply :) Edited June 5, 2020 by Kishin Quote
Contessina* Posted June 5, 2020 Posted June 5, 2020 At least HE SHARE something in this dead forum , instead of judge .. u can tell him mistakes 2 Quote
Acacia Posted June 5, 2020 Author Posted June 5, 2020 19 minutes ago, Contessina* said: At least HE SHARE something in this dead forum , instead of judge .. u can tell him mistakes its fine mate and thank you , we all know how this forum works , everyone is a java diva around here so you dont have to take anything personal and argue about it . you walk in prepared :D Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.