/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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 .
*/
package conquerablehalls.FortressOfResistance;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.data.sql.impl.ClanTable;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2Spawn;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.clanhall.ClanHallSiegeEngine;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.util.Util;
/**
* Fortress of Resistance clan hall siege Script.
* @author BiggBoss
*/
public final class FortressOfResistance extends ClanHallSiegeEngine
{
private final int MESSENGER = 35382;
private final int BLOODY_LORD_NURKA = 35375;
private final Location[] NURKA_COORDS =
{
new Location(45109, 112124, -1900), // 30%
new Location(47653, 110816, -2110), // 40%
new Location(47247, 109396, -2000)
// 30%
};
private L2Spawn _nurka;
private final Map _damageToNurka = new HashMap<>();
private NpcHtmlMessage _messengerMsg;
private FortressOfResistance()
{
super(FortressOfResistance.class.getSimpleName(), "conquerablehalls", FORTRESS_RESSISTANCE);
addFirstTalkId(MESSENGER);
addKillId(BLOODY_LORD_NURKA);
addAttackId(BLOODY_LORD_NURKA);
buildMessengerMessage();
try
{
_nurka = new L2Spawn(BLOODY_LORD_NURKA);
_nurka.setAmount(1);
_nurka.setRespawnDelay(10800);
// @formatter:off
// int chance = getRandom(100) + 1;
// if (chance <= 30)
// {
// coords = NURKA_COORDS[0];
// }
// else if ((chance > 30) && (chance <= 70))
// {
// coords = NURKA_COORDS[1];
// }
// else
// {
// coords = NURKA_COORDS[2];
// }
// @formatter:on
_nurka.setLocation(NURKA_COORDS[0]);
}
catch (Exception e)
{
_log.warn("{}: Couldnt set the Bloody Lord Nurka spawn!", getName(), e);
}
}
private final void buildMessengerMessage()
{
String html = HtmCache.getInstance().getHtm(null, "data/scripts/conquerablehalls/FortressOfResistance/partisan_ordery_brakel001.htm");
if (html != null)
{
// FIXME: We don't have an object id to put in here :(
_messengerMsg = new NpcHtmlMessage();
_messengerMsg.setHtml(html);
_messengerMsg.replace("%nextSiege%", Util.formatDate(_hall.getSiegeDate().getTime(), "yyyy-MM-dd HH:mm:ss"));
}
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
player.sendPacket(_messengerMsg);
return null;
}
@Override
public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
{
if (!_hall.isInSiege())
{
return null;
}
int clanId = player.getClanId();
if (clanId > 0)
{
long clanDmg = (_damageToNurka.containsKey(clanId)) ? _damageToNurka.get(clanId) + damage : damage;
_damageToNurka.put(clanId, clanDmg);
}
return null;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
if (!_hall.isInSiege())
{
return null;
}
_missionAccomplished = true;
synchronized (this)
{
npc.getSpawn().stopRespawn();
npc.deleteMe();
cancelSiegeTask();
endSiege();
}
return null;
}
@Override
public L2Clan getWinner()
{
int winnerId = 0;
long counter = 0;
for (Entry e : _damageToNurka.entrySet())
{
long dam = e.getValue();
if (dam > counter)
{
winnerId = e.getKey();
counter = dam;
}
}
return ClanTable.getInstance().getClan(winnerId);
}
@Override
public void onSiegeStarts()
{
_nurka.init();
}
@Override
public void onSiegeEnds()
{
buildMessengerMessage();
}
public static void main(String[] args)
{
new FortressOfResistance();
}
}