Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Solo Event

Iniciado por Swarlog, Ago 19, 2022, 12:53 AM

Tema anterior - Siguiente tema

Swarlog

/*
 * 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 net.sf.l2j.gameserver.model.entity.events;

import java.util.Vector;

import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.skills.AbnormalEffect;
import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
/**
 * @author Anarchy
 *
 */
public class SoloEvent
{
public static boolean full = false,
start = false;
public static int highLs = 0,
topLs = 0;
private static String playerName = null;
public static L2PcInstance player = null;
public static long enterTime = 0;
private static Vector<L2Spawn> _monsters = new Vector<L2Spawn>();
public static Vector<String> _savedPlayers = new Vector<String>();

public static void getInstance()
{
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
{
@Override
public void run()
{
if (start)
{
start = false;
startEvent();
return;
}
}
}, 5000, 5000);
}

private static void startEvent()
{
enterTime = System.currentTimeMillis();
playerName = player.getName();
player.teleToLocation(184133, 114298, -8221);
player.startAbnormalEffect(AbnormalEffect.ROOT);
player.setIsParalyzed(true);
player.sendMessage("10 seconds till the monsters get spawned.");
wait(10);
player.stopAbnormalEffect(AbnormalEffect.ROOT);
player.setIsParalyzed(false);
spawnMonsters();
player.sendMessage("The monsters were spawned. You have 2 minutes and 50 seconds to kill as many as possible.");
wait(50);
if (!checkPlayer())
{
return;
}
wait(30);
if (!checkPlayer())
{
return;
}
wait(30);
if (!checkPlayer())
{
return;
}
wait(30);
if (!checkPlayer())
{
return;
}
wait(30);
if (!checkPlayer())
{
return;
}
player.sendMessage("The event is over. You were rewarded and teleported back to Giran.");
reward();
}

private static boolean checkPlayer()
{
if (player == null || !player.isOnline())
{
_savedPlayers.add(playerName);
playerName = null;
highLs = 0;
topLs = 0;
full = false;
enterTime = 0;
for (L2Spawn s : _monsters)
{
s.getLastSpawn().deleteMe();
s.stopRespawn();
SpawnTable.getInstance().deleteSpawn(s, false);
}
_monsters.clear();
return false;
}

return true;
}

private static void reward()
{
player.addItem("Solo Event.", 8762, topLs, player, true);
player.addItem("Solo Event.", 8752, highLs, player, true);
player.teleToLocation(TeleportWhereType.Town);
player = null;
playerName = null;
highLs = 0;
topLs = 0;
full = false;
enterTime = 0;
for (L2Spawn s : _monsters)
{
s.getLastSpawn().deleteMe();
s.stopRespawn();
SpawnTable.getInstance().deleteSpawn(s, false);
}
_monsters.clear();
}

private static void spawnMonsters()
{
spawnAMonster(184868, 114281, -8219);
spawnAMonster(185044, 114442, -8219);
spawnAMonster(184880, 114720, -8219);
spawnAMonster(185206, 115010, -8219);
spawnAMonster(185474, 114886, -8219);
spawnAMonster(185789, 115153, -8219);
spawnAMonster(186002, 115058, -8219);
spawnAMonster(186077, 114780, -8219);
spawnAMonster(186018, 114594, -8219);
spawnAMonster(186503, 114608, -8219);
spawnAMonster(186717, 115616, -8219);
spawnAMonster(186285, 115503, -8219);
spawnAMonster(185990, 115797, -8219);
spawnAMonster(185698, 115763, -8219);
spawnAMonster(185571, 115514, -8219);
spawnAMonster(185269, 115602, -8219);
spawnAMonster(184880, 115599, -8219);
spawnAMonster(185027, 115063, -8219);
spawnAMonster(185220, 114434, -8219);
spawnAMonster(185616, 113609, -8219);
}

private static void spawnAMonster(int x, int y, int z)
{
L2Spawn _monster = null;
L2NpcTemplate monster = NpcTable.getInstance().getTemplate(65527);

try
{
_monster = new L2Spawn(monster);
_monster.setLocx(x);
_monster.setLocy(y);
_monster.setLocz(z);
_monster.setHeading(1);
_monster.setRespawnDelay(15);
_monster.init();
_monster.getLastSpawn().decayMe();
_monster.getLastSpawn().spawnMe(_monster.getLastSpawn().getX(), _monster.getLastSpawn().getY(), _monster.getLastSpawn().getZ());
SpawnTable.getInstance().addNewSpawn(_monster, false);
_monsters.add(_monster);
}
catch (Exception e)
{ }
}

private static void wait(int seconds)
{
try
{
Thread.sleep(seconds*1000);
}
catch (Exception e)
{ }
}
}

/*
 * 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 net.sf.l2j.gameserver.handler.itemhandlers;

import javolution.text.TextBuilder;

import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.actor.L2Playable;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.entity.events.SoloEvent;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
/**
 * @author Anarchy
 *
 */
public class SoloEventTeleportationCube implements IItemHandler
{
public void useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
{
if (!(playable instanceof L2PcInstance))
{
return;
}

L2PcInstance player = (L2PcInstance)playable;

if (player.isInOlympiadMode())
{
player.sendMessage("You may not enter Solo Event while being in olympiad mode.");
return;
}
if (player.getPvpFlag() > 0 || player.getKarma() > 0)
{
player.sendMessage("You may not enter Solo Event while fighting.");
return;
}
if (player.getActiveTradeList() != null)
{
player.sendMessage("You may not enter Solo Event while trading.");
return;
}
if (player.getActiveWarehouse() != null)
{
player.sendMessage("You may not enter Solo Event while using the warehouse.");
return;
}
if (SoloEvent.player == player)
{
player.sendMessage("You can't use this while being in a Solo Event.");
return;
}

NpcHtmlMessage htm = new NpcHtmlMessage(0);
TextBuilder tb = new TextBuilder("<html><body>");
tb.append("<center>Solo Event room is "+(SoloEvent.full ? "full." : "empty."));
if (SoloEvent.full)
{
tb.append("<br1>Player inside: "+SoloEvent.player.getName());
tb.append("<br1>Time left: "+(180-((System.currentTimeMillis()-SoloEvent.enterTime)/1000) < 60 ? 180-((System.currentTimeMillis()-SoloEvent.enterTime)/1000)+" seconds." : 3-((System.currentTimeMillis()-SoloEvent.enterTime)/1000/60)+" minutes."));
}
else
{
tb.append("<br><a action=\"bypass -h bp_enterSoloEvent\">Enter Solo Event.</a>");
}
tb.append("</center></body></html>");
htm.setHtml(tb.toString());

player.sendPacket(htm);
}
}

if (_activeChar.getInventory().getItemByItemId(3481) == null)
{
_activeChar.sendMessage("You don't have a Solo-Event Teleportation Cube in your inventory.");
return false;
}
if (SoloEvent.full)
{
_activeChar.sendMessage("Solo Event room is full.");
return false;
}

SoloEvent.full = true;
SoloEvent.player = _activeChar;
SoloEvent.start = true;
_activeChar.sendMessage("You will be teleported to Solo Event room in some seconds.");
_activeChar.destroyItemByItemId("Solo Event teleportation cube.", 3481, 1, _activeChar, true);