Jump to content

L2J Simple Drop Event


Recommended Posts

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 by Kishin
  • Thanks 1
Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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 by Kishin
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • ??? error   https://ibb.co/Srn4LsX No support  :S   No support : S ? :S
    • I also think this feature would bring more harm than good... another example is a dwarf rushing against your mobs so he takes priority, then he plays fake death and proceeds to grief the shit out of you. A minimum damage threshold is necessary, which would basically converge to what is the default feature (i.e. biggest damage dealer)
    • I bought the premium to watch the video and it's private. 😢
    • For some Majestic reason OP can't edit their topics anymore?    Let me update the potential offers, I got up to 2 spots to fill.   CONTACT TELEGRAM ONLY: https://t.me/asupport_g1     A credible team that SGuard represents is looking for java developers.    These positions is full time only i.e. your time is mostly dedicated within the team and team tasks, side gigs are fine, as long as you are able to combine your gig and main.  All necessary tools are provided.  The team is consistent with > 10 team members and the team is looking to expand to meet various goals. A decent Lineage 2 Essense OR Main (GOD) knowledge is needed.  Experience with l2r/l2p/l2s. mobius is fine too for referrence only. The team is friendly and goal oriented, very active and resourceful.   Requirements are standard, java knowledge is optional.  Multi language is a plus but not necessary (English/Russian), any is accepted.   Terms and conditions including compensation are reasonable and considered to be up for the industry standards. Details are negotiable with suitable candidates.   You will need to have a headset and a mic just for the initial processing, there're no team meetings or conferences after that. There's a small 30min interview process to demonstrate knowledge and just to meet each other.   The team has decided it is in their best interest to not publish their information at this time. Details will be available only for suitable candidates.   CONTACT TELEGRAM ONLY: https://t.me/asupport_g1
    • Thanks for the detailed info. I also have some ideas in mind but the execution may be hard. Thanks again!
  • Topics

×
×
  • Create New...