/*
* 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 silentium.gameserver.model.actor.instance;
import java.util.Collection;
import java.util.StringTokenizer;
import silentium.gameserver.ThreadPoolManager;
import silentium.gameserver.data.html.StaticHtmPath;
import silentium.gameserver.data.xml.MapRegionData;
import silentium.gameserver.model.L2World;
import silentium.gameserver.network.serverpackets.NpcHtmlMessage;
import silentium.gameserver.network.serverpackets.NpcSay;
import silentium.gameserver.templates.chars.L2NpcTemplate;
/**
* @author Kerberos
*/
public class L2CastleTeleporterInstance extends L2NpcInstance
{
private boolean _currentTask = false;
private int delay;
public L2CastleTeleporterInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}
@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
StringTokenizer st = new StringTokenizer(command, " ");
String actualCommand = st.nextToken(); // Get actual command
if (actualCommand.equalsIgnoreCase("tele"))
{
if (!getTask())
{
if (getCastle().getSiege().getIsInProgress() && getCastle().getSiege().getControlTowerCount() == 0)
delay = 480000;
else if (getCastle().getSiege().getIsInProgress())
delay = 30000;
else
delay = 0;
setTask(true);
ThreadPoolManager.getInstance().scheduleGeneral(new oustAllPlayers(), delay);
}
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setFile(StaticHtmPath.CastleTeleporterHtmPath + "/MassGK-1.htm", player);
html.replace("%delay%", String.valueOf(getDelayInSeconds()));
player.sendPacket(html);
return;
}
super.onBypassFeedback(player, command);
}
@Override
public void showChatWindow(L2PcInstance player)
{
String filename;
if (!getTask())
{
if (getCastle().getSiege().getIsInProgress() && getCastle().getSiege().getControlTowerCount() == 0)
filename = StaticHtmPath.CastleTeleporterHtmPath + "/MassGK-2.htm";
else
filename = StaticHtmPath.CastleTeleporterHtmPath + "/MassGK.htm";
}
else
filename = StaticHtmPath.CastleTeleporterHtmPath + "/MassGK-1.htm";
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setFile(filename, player);
html.replace("%objectId%", String.valueOf(getObjectId()));
player.sendPacket(html);
}
void oustAllPlayers()
{
getCastle().oustAllPlayers();
}
class oustAllPlayers implements Runnable
{
@Override
public void run()
{
try
{
// Make the region talk only during a siege
if (getCastle().getSiege().getIsInProgress())
{
NpcSay cs = new NpcSay(getObjectId(), 1, getNpcId(), "The defenders of " + getCastle().getName() + " castle have been teleported to the inner castle.");
int region = MapRegionData.getInstance().getMapRegion(getX(), getY());
Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
for (L2PcInstance player : pls)
{
if (region == MapRegionData.getInstance().getMapRegion(player.getX(), player.getY()))
player.sendPacket(cs);
}
}
oustAllPlayers();
setTask(false);
}
catch (NullPointerException e)
{
e.printStackTrace();
}
}
}
private final int getDelayInSeconds()
{
if (delay > 0)
return delay / 1000;
return 0;
}
public boolean getTask()
{
return _currentTask;
}
public void setTask(boolean state)
{
_currentTask = state;
}
}