/*
* 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 events.FifthAnniversary;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import com.l2jserver.gameserver.Announcements;
import com.l2jserver.gameserver.datatables.EventDroplist;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.script.DateRange;
import com.l2jserver.util.Rnd;
public class FifthAnniversary extends Quest
{
private static final String EVENT_DATE = "28 03 2011-05 05 2011"; // Change date as you want
private static final DateRange EVENT_DATES = DateRange.parse(EVENT_DATE, new SimpleDateFormat("dd MM yyyy", Locale.US));
private static final String[] EVENT_ANNOUNCE = {"5th Anniversary Event is currently active."};
private static final Date EndDate = EVENT_DATES.getEndDate();
private static final Date currentDate = new Date();
//Items
private final static int letterL = 3882;
private final static int letterI = 3881;
private final static int letterN = 3883;
private final static int letterE = 3877;
private final static int letterA = 3875;
private final static int letterG = 3879;
private final static int letterII = 3888;
private final static int letter5 = 13418;
private final static int letterY = 13417;
private final static int letterR = 3885;
private final static int letterS = 3886;
private final static int letterC = 3876;
private final static int[] dropList = { letterL, letterI, letterN, letterE, letterA, letterG, letterII, letter5, letterY, letterR, letterS, letterC };
private int[] dropCount = {1,1};
private final static int dropChance = 25000; // actually 2.5%
// Goddard,Aden,Giran, Oren,Dion,Heine,Gludio,Schuttgart,Gludin,Hunters,Rune,SoDA,Dark Elf,TI,Dwarf,Orc,Kamael
private final static int[] EventSpawnX = { 147698,147443,82227,82754,15064,111067,-12965,87362, -81037,117412,43983,-45907,12153,-84458,114750,-45656,-117195 };
private final static int[] EventSpawnY = { -56025,26942,148609,53573,143254,218933,122914,143166,150092,76642,-47758,49387,16753,244761,-178692,-113119,46837 };
private final static int[] EventSpawnZ = { -2775,-2205,-3472,-1496,-2668,-3543,-3117,-1293, -3044,-2695,-797,-3060,-4584,-3730,-820,-240,367 };
private final static int EventNPC = 31854;
private static List<L2Npc> eventManagers = new ArrayList<L2Npc>();
private static boolean FifthAnniversaryEvent = false;
public FifthAnniversary(int questId, String name, String descr)
{
super(questId, name, descr);
EventDroplist.getInstance().addGlobalDrop(dropList, dropCount, dropChance, EVENT_DATES);
Announcements.getInstance().addEventAnnouncement(EVENT_DATES,EVENT_ANNOUNCE);
addStartNpc(EventNPC);
addFirstTalkId(EventNPC);
addTalkId(EventNPC);
startQuestTimer("EventCheck",1800000,null,null);
if (EVENT_DATES.isWithinRange(currentDate))
FifthAnniversaryEvent = true;
if (FifthAnniversaryEvent)
{
_log.info("5th Anniversary Event - ON");
for (int i = 0; i < EventSpawnX.length; i++)
{
L2Npc eventManager = addSpawn(EventNPC,EventSpawnX[i],EventSpawnY[i],EventSpawnZ[i],0,false,0);
eventManagers.add(eventManager);
}
}
else
{
_log.info("5th Anniversary Event - OFF");
Calendar endWeek = Calendar.getInstance();
endWeek.setTime(EndDate);
endWeek.add(Calendar.DATE, 7);
if (EndDate.before(currentDate) && endWeek.getTime().after(currentDate))
{
for (int i = 0; i < EventSpawnX.length; i++)
{
L2Npc eventManager = addSpawn(EventNPC,EventSpawnX[i],EventSpawnY[i],EventSpawnZ[i],0,false,0);
eventManagers.add(eventManager);
}
}
}
}
public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
{
String htmltext = "";
QuestState st;
int prize;
if (npc == null)
{
if (event.equalsIgnoreCase("EventCheck"))
{
startQuestTimer("EventCheck",1800000,null,null);
boolean Event1 = false;
if (EVENT_DATES.isWithinRange(currentDate))
Event1 = true;
if (!FifthAnniversaryEvent && Event1)
{
FifthAnniversaryEvent = true;
_log.info("5th Anniversary Event - ON");
Announcements.getInstance().announceToAll("5th Anniversary Event is currently active. See the Event NPCs to participate!");
for (int i = 0; i < EventSpawnX.length; i++)
{
L2Npc eventManager = addSpawn(EventNPC,EventSpawnX[i],EventSpawnY[i],EventSpawnZ[i],0,false,0);
eventManagers.add(eventManager);
}
}
else if (FifthAnniversaryEvent && !Event1)
{
FifthAnniversaryEvent = false;
_log.info("5th Anniversary Event - OFF");
for (L2Npc eventManager : eventManagers)
{
eventManager.deleteMe();
}
}
}
}
else if (player != null && event.equalsIgnoreCase("LINEAGEII"))
{
st = player.getQuestState(getName());
if ( st.getQuestItemsCount(letterL) >= 1
&& st.getQuestItemsCount(letterI) >= 1
&& st.getQuestItemsCount(letterN) >= 1
&& st.getQuestItemsCount(letterE) >= 2
&& st.getQuestItemsCount(letterA) >= 1
&& st.getQuestItemsCount(letterG) >= 1
&& st.getQuestItemsCount(letterII) >= 1)
{
st.takeItems(letterL,1);
st.takeItems(letterI,1);
st.takeItems(letterN,1);
st.takeItems(letterE,2);
st.takeItems(letterA,1);
st.takeItems(letterG,1);
st.takeItems(letterII,1);
prize = Rnd.get(1000);
if (prize <= 5)
st.giveItems(6662,1); // 1 - Ring of Core
else if (prize <= 10)
st.giveItems(8752,1); // 1 - High grade Life Stone 76
else if (prize <= 25)
st.giveItems(8742,1); // 1 - Mid grade Life Stone 76
else if (prize <= 50)
st.giveItems(9157,1); // 1 - L2day Blessed SoR
else if (prize <= 75)
st.giveItems(9156,1); // 1 - L2day Blessed SoE
else if (prize <= 100)
st.giveItems(13429,1); // 1 - Teddy Bear Hat
else if (prize <= 200)
st.giveItems(13430,1); // 1 - Piggy Hat
else if (prize <= 300)
st.giveItems(13431,1); // 1 - Jester Hat
else if (prize <= 400)
st.giveItems(13425,1); // 1 - Small Parchement Box (1x Village Soe)
else if (prize <= 500)
st.giveItems(13426,1); // 1 - Small Mineral Box (1x Elemental Stone)
else
st.giveItems(13428,1); // 1 - Small Libation Box (1x L2Day Juice)
}
else
htmltext = "31854-03.htm";
}
else if (player != null && event.equalsIgnoreCase("5YEARS"))
{
st = player.getQuestState(getName());
if (st.getQuestItemsCount(letter5) >= 1
&& st.getQuestItemsCount(letterY) >= 1
&& st.getQuestItemsCount(letterE) >= 1
&& st.getQuestItemsCount(letterA) >= 1
&& st.getQuestItemsCount(letterR) >= 1
&& st.getQuestItemsCount(letterS) >= 1)
{
st.takeItems(letter5,1);
st.takeItems(letterY,1);
st.takeItems(letterE,1);
st.takeItems(letterA,1);
st.takeItems(letterR,1);
st.takeItems(letterS,1);
prize = Rnd.get(1000);
if (prize <= 5)
st.giveItems(6660,1); // 1 - Ring of Queen Ant
else if (prize <= 10)
st.giveItems(8762,1); // 1 - Top grade Life Stone 76
else if (prize <= 25)
st.giveItems(8752,2); // 2 - High grade Life Stones 76
else if (prize <= 50)
st.giveItems(9157,2); // 2 - L2day Blessed SoRs
else if (prize <= 75)
st.giveItems(9156,2); // 2 - L2day Blessed SoEs
else if (prize <= 100)
st.giveItems(13429,1); // 1 - Teddy Bear Hat
else if (prize <= 150)
st.giveItems(13430,1); // 1 - Piggy Hat
else if (prize <= 200)
st.giveItems(13431,1); // 1 - Jester Hat
else if (prize <= 300)
st.giveItems(13422,2); // 1 - Medium Parchement Box (2x Village Soes)
else if (prize <= 400)
st.giveItems(13423,2); // 1 - Medium Mineral Box (2x Elemental Stones)
else
st.giveItems(13424,3); // 1 - Large Libation Box (3x L2Day Juices)
}
else
htmltext = "31854-03.htm";
}
else if (player != null && event.equalsIgnoreCase("GRACIA"))
{
st = player.getQuestState(getName());
if (st.getQuestItemsCount(letterG) >= 1
&& st.getQuestItemsCount(letterR) >= 1
&& st.getQuestItemsCount(letterA) >= 2
&& st.getQuestItemsCount(letterC) >= 1
&& st.getQuestItemsCount(letterI) >= 1)
{
st.takeItems(letterG,1);
st.takeItems(letterR,1);
st.takeItems(letterA,2);
st.takeItems(letterC,1);
st.takeItems(letterI,1);
prize = Rnd.get(1000);
if (prize <= 5)
st.giveItems(6661,1); // 1 - Earring of Orfen
else if (prize <= 10)
st.giveItems(8752,1); // 1 - High grade Life Stone 76
else if (prize <= 25)
st.giveItems(8742,2); // 2 - Mid grade Life Stones 76
else if (prize <= 50)
st.giveItems(9157,1); // 1 - L2day Blessed SoR
else if (prize <= 75)
st.giveItems(9156,1); // 1 - L2day Blessed SoE
else if (prize <= 100)
st.giveItems(13429,1); // 1 - Teddy Bear Hat
else if (prize <= 150)
st.giveItems(13430,1); // 1 - Piggy Hat
else if (prize <= 200)
st.giveItems(13431,1); // 1 - Jester Hat
else if (prize <= 300)
st.giveItems(13425,1); // 1 - Small Parchement Box (1x Village Soe)
else if (prize <= 400)
st.giveItems(13426,1); // 1 - Small Mineral Box (1x Elemental Stone)
else
st.giveItems(13424,2); // 1 - Medium Libation Box (2x L2Day Juices)
}
else
htmltext = "31854-03.htm";
}
else if (event.equalsIgnoreCase("chat0"))
htmltext = "31854.htm";
else if (event.equalsIgnoreCase("chat1"))
htmltext = "31854-02.htm";
return htmltext;
}
@Override
public String onFirstTalk(L2Npc npc,L2PcInstance player)
{
QuestState st = player.getQuestState(getName());
if (st == null)
st = newQuestState(player);
return "31854.htm";
}
public static void main(String[] args)
{
new FifthAnniversary(-1, "FifthAnniversary", "events");
}
}