/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.datatables;
import java.util.Date;
import java.util.List;
import javolution.util.FastList;
import com.l2jserver.gameserver.script.DateRange;
/**
* This class manage drop of Special Events created by GM for a defined period.
* During a Special Event all L2Attackable can drop extra Items.
* Those extra Items are defined in the table <B>allNpcDateDrops</B>.
* Each Special Event has a start and end date to stop to drop extra Items automaticaly.<BR><BR>
*/
public class EventDroplist
{
//private static Logger _log = Logger.getLogger(EventDroplist.class.getName());
/** The table containing all DataDrop object */
private List<DateDrop> _allNpcDateDrops;
public static EventDroplist getInstance()
{
return SingletonHolder._instance;
}
public static class DateDrop
{
/** Start and end date of the Event */
public DateRange dateRange;
/** The table containing Item identifier that can be dropped as extra Items during the Event */
public int[] items;
/** The min number of Item dropped in one time during this Event */
public int min;
/** The max number of Item dropped in one time during this Event */
public int max;
/** The rate of drop for this Event */
public int chance;
}
/**
* Constructor of EventDroplist.<BR><BR>
*/
private EventDroplist()
{
_allNpcDateDrops = new FastList<DateDrop>();
}
/**
* Create and Init a new DateDrop then add it to the allNpcDateDrops of EventDroplist .<BR><BR>
*
* @param items The table containing all item identifier of this DateDrop
* @param count The table containing min and max value of this DateDrop
* @param chance The chance to obtain this drop
* @param range The DateRange object to add to this DateDrop
*
*/
public void addGlobalDrop(int[] items, int[] count, int chance, DateRange range)
{
DateDrop date = new DateDrop();
date.dateRange = range;
date.items = items;
date.min = count[0];
date.max = count[1];
date.chance = chance;
_allNpcDateDrops.add(date);
}
/**
* Return all DateDrop of EventDroplist allNpcDateDrops within the date range.<BR><BR>
*/
public List<DateDrop> getAllDrops()
{
List<DateDrop> list = new FastList<DateDrop>();
for (DateDrop drop : _allNpcDateDrops)
{
Date currentDate = new Date();
//_log.info("From: "+drop.from+" To: "+drop.to+" Now: "+ currentDate);
if (drop.dateRange.isWithinRange(currentDate))
{
list.add(drop);
}
}
return list;
}
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final EventDroplist _instance = new EventDroplist();
}
}