Jump to content

Recommended Posts

Posted (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 by Kishin
  • Thanks 1
Posted
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

 

Posted (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 by Kishin
Posted
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

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...