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.



×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock