/* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package net.sf.l2j.gameserver.model.entity;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.Announcements;
/** This class is the TvTTask which is called upon by the L2J Oneo Event Manager.
* This class runs the TvT Engine by FBIagent.
*
* @author Ahmed
*/
public class TvTTask implements Runnable
{
public void run()
{
for (;;)
{
if (Config.TVT_EVENT_ENABLED)
{
waiter(Config.TIME_BETWEEN_EVENTS * 60); // Waits the delay before starting the event (in minutes)
TvTEvent.init();
Announcements.getInstance().announceToAll("TvT Event registration opened for " + Config.TVT_EVENT_PARTICIPATION_TIME + " minutes.");
waiter(Config.TVT_EVENT_PARTICIPATION_TIME * 60); // in config given as minutes
Announcements.getInstance().announceToAll("TvT Event Participation period has ended.");
TvTEvent.sysMsgToAllParticipants("TvT Event participants will be teleported in " + Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY + "seconds.");
waiter(Config.TVT_EVENT_RUNNING_TIME * 60); // in config given as minutes
Announcements.getInstance().announceToAll(TvTEvent.calculateRewards());
TvTEvent.sysMsgToAllParticipants("TvT Event participants will be teleported back to registration area in " + Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY + " seconds.");
TvTEvent.stopFight();
}
else
if (!Config.TVT_EVENT_ENABLED)
{
return;
}
}
}
/**
* This method waits for a period time delay
*
* @param interval
*/
void waiter(int seconds)
{
while (seconds > 1)
{
seconds--; // here because we don't want to see two time announce at the same time
if (TvTEvent.isParticipating() || TvTEvent.isStarted())
{
switch (seconds)
{
case 3600: // 1 hour left
if (TvTEvent.isParticipating())
{
Announcements.getInstance().announceToAll("TvT Event registration opened for: " + seconds / 60 / 60 + "hour(s)!");
} else
if (TvTEvent.isStarted())
{
TvTEvent.sysMsgToAllParticipants("TvT Event will finish in " + seconds / 60 / 60 + "hour(s)!");
}
break;
case 1800: // 30 minutes left
case 900: // 15 minutes left
case 600: // 10 minutes left
case 300: // 5 minutes left
case 240: // 4 minutes left
case 180: // 3 minutes left
case 120: // 2 minutes left
case 60: // 1 minute left
if (TvTEvent.isParticipating())
{
Announcements.getInstance().announceToAll("TvT Event registration opened for: " + seconds / 60 + "minute(s)!");
} else
if (TvTEvent.isStarted())
{
TvTEvent.sysMsgToAllParticipants("TvT Event will finish in " + seconds / 60 + "minute(s)!");
}
break;
case 30: // 30 seconds left
case 15: // 15 seconds left
case 10: // 10 seconds left
case 5: // 5 seconds left
case 4: // 4 seconds left
case 3: // 3 seconds left
case 2: // 2 seconds left
case 1: // 1 seconds left
if (TvTEvent.isParticipating())
{
Announcements.getInstance().announceToAll("TvT Event registration opened for: " + seconds + " second(s)!");
} else
if (TvTEvent.isStarted())
{
TvTEvent.sysMsgToAllParticipants("TvT Event will finish in " + seconds + " second(s)!");
}
break;
}
}
long oneSecWaitStart = System.currentTimeMillis();
// only the try catch with Thread.sleep(1000) give bad count-down on high wait times
while (oneSecWaitStart + 1000L > System.currentTimeMillis())
{
try
{
Thread.sleep(1);
}
catch (InterruptedException ie)
{}
}
}
}
}