Merged with released L2J-Unity files.

This commit is contained in:
mobiusdev
2016-06-12 01:34:09 +00:00
parent e003e87887
commit 635557f5da
18352 changed files with 3245113 additions and 2892959 deletions

View File

@@ -0,0 +1,407 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.concurrent.Future;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.instancemanager.AirShipManager;
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
import com.l2jmobius.gameserver.model.ClanPrivilege;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2AirShipInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2ControllableAirShipInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.type.L2ScriptZone;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import ai.AbstractNpcAI;
public abstract class AirShipController extends AbstractNpcAI
{
protected final class DecayTask implements Runnable
{
@Override
public void run()
{
if (_dockedShip != null)
{
_dockedShip.deleteMe();
}
}
}
protected final class DepartTask implements Runnable
{
@Override
public void run()
{
if ((_dockedShip != null) && _dockedShip.isInDock() && !_dockedShip.isMoving())
{
if (_departPath != null)
{
_dockedShip.executePath(_departPath);
}
else
{
_dockedShip.deleteMe();
}
}
}
}
public static final Logger _log = Logger.getLogger(AirShipController.class.getName());
protected int _dockZone = 0;
protected int _shipSpawnX = 0;
protected int _shipSpawnY = 0;
protected int _shipSpawnZ = 0;
protected int _shipHeading = 0;
protected Location _oustLoc = null;
protected int _locationId = 0;
protected VehiclePathPoint[] _arrivalPath = null;
protected VehiclePathPoint[] _departPath = null;
protected VehiclePathPoint[][] _teleportsTable = null;
protected int[] _fuelTable = null;
protected Movie _movie = null;
protected boolean _isBusy = false;
protected L2ControllableAirShipInstance _dockedShip = null;
private final Runnable _decayTask = new DecayTask();
private final Runnable _departTask = new DepartTask();
private Future<?> _departSchedule = null;
private static final int DEPART_INTERVAL = 300000; // 5 min
private static final int LICENSE = 13559;
private static final int STARSTONE = 13277;
private static final int SUMMON_COST = 5;
private static final SystemMessage SM_NEED_MORE = SystemMessage.getSystemMessage(SystemMessageId.AN_AIRSHIP_CANNOT_BE_SUMMONED_BECAUSE_YOU_DON_T_HAVE_ENOUGH_S1).addItemName(STARSTONE);
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if ("summon".equalsIgnoreCase(event))
{
if (_dockedShip != null)
{
if (_dockedShip.isOwner(player))
{
player.sendPacket(SystemMessageId.THE_CLAN_OWNED_AIRSHIP_ALREADY_EXISTS);
}
return null;
}
if (_isBusy)
{
player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_ALREADY_BEEN_SUMMONED_PLEASE_TRY_AGAIN_LATER);
return null;
}
if (!player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP))
{
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null;
}
final int ownerId = player.getClanId();
if (!AirShipManager.getInstance().hasAirShipLicense(ownerId))
{
player.sendPacket(SystemMessageId.AN_AIRSHIP_CANNOT_BE_SUMMONED_BECAUSE_EITHER_YOU_HAVE_NOT_REGISTERED_YOUR_AIRSHIP_LICENSE_OR_THE_AIRSHIP_HAS_NOT_YET_BEEN_SUMMONED);
return null;
}
if (AirShipManager.getInstance().hasAirShip(ownerId))
{
player.sendPacket(SystemMessageId.YOUR_CLAN_S_AIRSHIP_IS_ALREADY_BEING_USED_BY_ANOTHER_CLAN_MEMBER);
return null;
}
if (!player.destroyItemByItemId("AirShipSummon", STARSTONE, SUMMON_COST, npc, true))
{
player.sendPacket(SM_NEED_MORE);
return null;
}
_isBusy = true;
final L2AirShipInstance ship = AirShipManager.getInstance().getNewAirShip(_shipSpawnX, _shipSpawnY, _shipSpawnZ, _shipHeading, ownerId);
if (ship != null)
{
if (_arrivalPath != null)
{
ship.executePath(_arrivalPath);
}
npc.broadcastSay(ChatType.NPC_SHOUT, NpcStringId.THE_AIRSHIP_HAS_BEEN_SUMMONED_IT_WILL_AUTOMATICALLY_DEPART_IN_5_MINUTES);
}
else
{
_isBusy = false;
}
return null;
}
else if ("board".equalsIgnoreCase(event))
{
if (player.isTransformed())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_TRANSFORMED);
return null;
}
else if (player.hasBlockActions() && player.hasAbnormalType(AbnormalType.PARALYZE))
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_PETRIFIED);
return null;
}
else if (player.isDead() || player.isFakeDeath())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_DEAD);
return null;
}
else if (player.isFishing())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_FISHING);
return null;
}
else if (player.isInCombat())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_IN_BATTLE);
return null;
}
else if (player.isInDuel())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_IN_A_DUEL);
return null;
}
else if (player.isSitting())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_SITTING);
return null;
}
else if (player.isCastingNow())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_CASTING);
return null;
}
else if (player.isCursedWeaponEquipped())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHEN_A_CURSED_WEAPON_IS_EQUIPPED);
return null;
}
else if (player.isCombatFlagEquipped())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_HOLDING_A_FLAG);
return null;
}
else if (player.hasSummon() || player.isMounted())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_A_PET_OR_A_SERVITOR_IS_SUMMONED);
return null;
}
else if (player.isFlyingMounted())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_BECAUSE_YOU_DO_NOT_MEET_THE_REQUIREMENTS);
return null;
}
if (_dockedShip != null)
{
_dockedShip.addPassenger(player);
}
return null;
}
else if ("register".equalsIgnoreCase(event))
{
if ((player.getClan() == null) || (player.getClan().getLevel() < 5))
{
player.sendPacket(SystemMessageId.IN_ORDER_TO_ACQUIRE_AN_AIRSHIP_THE_CLAN_S_LEVEL_MUST_BE_LEVEL_5_OR_ABOVE);
return null;
}
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null;
}
final int ownerId = player.getClanId();
if (AirShipManager.getInstance().hasAirShipLicense(ownerId))
{
player.sendPacket(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_HAS_ALREADY_BEEN_ACQUIRED);
return null;
}
if (!player.destroyItemByItemId("AirShipLicense", LICENSE, 1, npc, true))
{
player.sendPacket(SM_NEED_MORE);
return null;
}
AirShipManager.getInstance().registerLicense(ownerId);
player.sendPacket(SystemMessageId.THE_AIRSHIP_SUMMON_LICENSE_HAS_BEEN_ENTERED_YOUR_CLAN_CAN_NOW_SUMMON_THE_AIRSHIP);
return null;
}
else
{
return event;
}
}
@Override
public String onEnterZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2ControllableAirShipInstance)
{
if (_dockedShip == null)
{
_dockedShip = (L2ControllableAirShipInstance) character;
_dockedShip.setInDock(_dockZone);
_dockedShip.setOustLoc(_oustLoc);
// Ship is not empty - display movie to passengers and dock
if (!_dockedShip.isEmpty())
{
if (_movie != null)
{
playMovie(_dockedShip.getPassengers(), _movie);
}
ThreadPoolManager.getInstance().scheduleGeneral(_decayTask, 1000);
}
else
{
_departSchedule = ThreadPoolManager.getInstance().scheduleGeneral(_departTask, DEPART_INTERVAL);
}
}
}
return null;
}
@Override
public String onExitZone(L2Character character, L2ZoneType zone)
{
if (character instanceof L2ControllableAirShipInstance)
{
if (character.equals(_dockedShip))
{
if (_departSchedule != null)
{
_departSchedule.cancel(false);
_departSchedule = null;
}
_dockedShip.setInDock(0);
_dockedShip = null;
_isBusy = false;
}
}
return null;
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
protected void validityCheck()
{
final L2ScriptZone zone = ZoneManager.getInstance().getZoneById(_dockZone, L2ScriptZone.class);
if (zone == null)
{
_log.warning(getName() + ": Invalid zone " + _dockZone + ", controller disabled");
_isBusy = true;
return;
}
VehiclePathPoint p;
if (_arrivalPath != null)
{
if (_arrivalPath.length == 0)
{
_log.warning(getName() + ": Zero arrival path length.");
_arrivalPath = null;
}
else
{
p = _arrivalPath[_arrivalPath.length - 1];
if (!zone.isInsideZone(p.getLocation()))
{
_log.warning(getName() + ": Arrival path finish point (" + p.getX() + "," + p.getY() + "," + p.getZ() + ") not in zone " + _dockZone);
_arrivalPath = null;
}
}
}
if (_arrivalPath == null)
{
if (!ZoneManager.getInstance().getZoneById(_dockZone, L2ScriptZone.class).isInsideZone(_shipSpawnX, _shipSpawnY, _shipSpawnZ))
{
_log.warning(getName() + ": Arrival path is null and spawn point not in zone " + _dockZone + ", controller disabled");
_isBusy = true;
return;
}
}
if (_departPath != null)
{
if (_departPath.length == 0)
{
_log.warning(getName() + ": Zero depart path length.");
_departPath = null;
}
else
{
p = _departPath[_departPath.length - 1];
if (zone.isInsideZone(p.getLocation()))
{
_log.warning(getName() + ": Departure path finish point (" + p.getX() + "," + p.getY() + "," + p.getZ() + ") in zone " + _dockZone);
_departPath = null;
}
}
}
if (_teleportsTable != null)
{
if (_fuelTable == null)
{
_log.warning(getName() + ": Fuel consumption not defined.");
}
else
{
if (_teleportsTable.length != _fuelTable.length)
{
_log.warning(getName() + ": Fuel consumption not match teleport list.");
}
else
{
AirShipManager.getInstance().registerAirShipTeleportList(_dockZone, _locationId, _teleportsTable, _fuelTable);
}
}
}
}
}

View File

@@ -0,0 +1,5 @@
<html><body>Flight Device:<br>
A floating shard of powered stone. The steady blue light appears to mean the device in functioning within normal limits.<br>
This device grants you control of the airship.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest AirShipGludioGracia board">Board the airship</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Flight Device:<br>
You see a floating fragment of stone humming with power. A subtle blue light illuminates the area, giving you the impression that this device is fully functional.<br>
The fragment will permit access to airships coming and going from Gracia and Aden.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest AirShipGludioGracia board">Board the airship.</Button>
<Button Align=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,309 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles.AirShipGludioGracia;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.AirShipManager;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2AirShipInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.SystemMessageId;
import ai.AbstractNpcAI;
/**
* @author DS
*/
public final class AirShipGludioGracia extends AbstractNpcAI implements Runnable
{
private static final int[] CONTROLLERS =
{
32607,
32609
};
private static final int GLUDIO_DOCK_ID = 10;
private static final int GRACIA_DOCK_ID = 11;
private static final Location OUST_GLUDIO = new Location(-149379, 255246, -80);
private static final Location OUST_GRACIA = new Location(-186563, 243590, 2608);
private static final VehiclePathPoint[] GLUDIO_TO_WARPGATE =
{
new VehiclePathPoint(-151202, 252556, 231),
new VehiclePathPoint(-160403, 256144, 222),
new VehiclePathPoint(-167874, 256731, -509, 0, 41035)
// teleport: x,y,z,speed=0,heading
};
private static final VehiclePathPoint[] WARPGATE_TO_GRACIA =
{
new VehiclePathPoint(-169763, 254815, 282),
new VehiclePathPoint(-171822, 250061, 425),
new VehiclePathPoint(-172595, 247737, 398),
new VehiclePathPoint(-174538, 246185, 39),
new VehiclePathPoint(-179440, 243651, 1337),
new VehiclePathPoint(-182601, 243957, 2739),
new VehiclePathPoint(-184952, 245122, 2694),
new VehiclePathPoint(-186936, 244563, 2617)
};
private static final VehiclePathPoint[] GRACIA_TO_WARPGATE =
{
new VehiclePathPoint(-187801, 244997, 2672),
new VehiclePathPoint(-188520, 245932, 2465),
new VehiclePathPoint(-189932, 245243, 1682),
new VehiclePathPoint(-191192, 242969, 1523),
new VehiclePathPoint(-190408, 239088, 1706),
new VehiclePathPoint(-187475, 237113, 2768),
new VehiclePathPoint(-184673, 238433, 2802),
new VehiclePathPoint(-184524, 241119, 2816),
new VehiclePathPoint(-182129, 243385, 2733),
new VehiclePathPoint(-179440, 243651, 1337),
new VehiclePathPoint(-174538, 246185, 39),
new VehiclePathPoint(-172595, 247737, 398),
new VehiclePathPoint(-171822, 250061, 425),
new VehiclePathPoint(-169763, 254815, 282),
new VehiclePathPoint(-168067, 256626, 343),
new VehiclePathPoint(-157261, 255664, 221, 0, 64781)
// teleport: x,y,z,speed=0,heading
};
private static final VehiclePathPoint[] WARPGATE_TO_GLUDIO =
{
new VehiclePathPoint(-153414, 255385, 221),
new VehiclePathPoint(-149548, 258172, 221),
new VehiclePathPoint(-146884, 257097, 221),
new VehiclePathPoint(-146672, 254239, 221),
new VehiclePathPoint(-147855, 252712, 206),
new VehiclePathPoint(-149378, 252552, 198)
};
private final L2AirShipInstance _ship;
private int _cycle = 0;
private boolean _foundAtcGludio = false;
private L2Npc _atcGludio = null;
private boolean _foundAtcGracia = false;
private L2Npc _atcGracia = null;
public AirShipGludioGracia()
{
addStartNpc(CONTROLLERS);
addFirstTalkId(CONTROLLERS);
addTalkId(CONTROLLERS);
_ship = AirShipManager.getInstance().getNewAirShip(-149378, 252552, 198, 33837);
_ship.setOustLoc(OUST_GLUDIO);
_ship.setInDock(GLUDIO_DOCK_ID);
_ship.registerEngine(this);
_ship.runEngine(60000);
}
private final void broadcastInGludio(NpcStringId npcString)
{
if (!_foundAtcGludio)
{
_foundAtcGludio = true;
_atcGludio = findController();
}
if (_atcGludio != null)
{
_atcGludio.broadcastSay(ChatType.NPC_SHOUT, npcString);
}
}
private final void broadcastInGracia(NpcStringId npcStringId)
{
if (!_foundAtcGracia)
{
_foundAtcGracia = true;
_atcGracia = findController();
}
if (_atcGracia != null)
{
_atcGracia.broadcastSay(ChatType.NPC_SHOUT, npcStringId);
}
}
private final L2Npc findController()
{
// check objects around the ship
for (L2Npc obj : L2World.getInstance().getVisibleObjects(_ship, L2Npc.class, 600))
{
for (int id : CONTROLLERS)
{
if (obj.getId() == id)
{
return obj;
}
}
}
return null;
}
@Override
public final String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (player.isTransformed())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_TRANSFORMED);
return null;
}
else if (player.hasBlockActions() && player.hasAbnormalType(AbnormalType.PARALYZE))
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_PETRIFIED);
return null;
}
else if (player.isDead() || player.isFakeDeath())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_DEAD);
return null;
}
else if (player.isFishing())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_FISHING);
return null;
}
else if (player.isInCombat())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_IN_BATTLE);
return null;
}
else if (player.isInDuel())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_IN_A_DUEL);
return null;
}
else if (player.isSitting())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_SITTING);
return null;
}
else if (player.isCastingNow())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_CASTING);
return null;
}
else if (player.isCursedWeaponEquipped())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHEN_A_CURSED_WEAPON_IS_EQUIPPED);
return null;
}
else if (player.isCombatFlagEquipped())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_HOLDING_A_FLAG);
return null;
}
else if (player.hasSummon() || player.isMounted())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_BOARD_AN_AIRSHIP_WHILE_A_PET_OR_A_SERVITOR_IS_SUMMONED);
return null;
}
else if (_ship.isInDock() && _ship.isInsideRadius(player, 600, true, false))
{
_ship.addPassenger(player);
}
return null;
}
@Override
public final String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return npc.getId() + ".htm";
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
broadcastInGludio(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_THAT_FLIES_TO_THE_GRACIA_CONTINENT_HAS_DEPARTED);
_ship.setInDock(0);
_ship.executePath(GLUDIO_TO_WARPGATE);
break;
case 1:
// _ship.teleToLocation(-167874, 256731, -509, 41035, false);
_ship.setOustLoc(OUST_GRACIA);
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
break;
case 2:
_ship.executePath(WARPGATE_TO_GRACIA);
break;
case 3:
broadcastInGracia(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_HAS_ARRIVED_IT_WILL_DEPART_FOR_THE_ADEN_CONTINENT_IN_1_MINUTE);
_ship.setInDock(GRACIA_DOCK_ID);
_ship.oustPlayers();
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
break;
case 4:
broadcastInGracia(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_THAT_FLIES_TO_THE_ADEN_CONTINENT_HAS_DEPARTED);
_ship.setInDock(0);
_ship.executePath(GRACIA_TO_WARPGATE);
break;
case 5:
// _ship.teleToLocation(-157261, 255664, 221, 64781, false);
_ship.setOustLoc(OUST_GLUDIO);
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
break;
case 6:
_ship.executePath(WARPGATE_TO_GLUDIO);
break;
case 7:
broadcastInGludio(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_HAS_ARRIVED_IT_WILL_DEPART_FOR_THE_GRACIA_CONTINENT_IN_1_MINUTE);
_ship.setInDock(GLUDIO_DOCK_ID);
_ship.oustPlayers();
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
break;
}
_cycle++;
if (_cycle > 7)
{
_cycle = 0;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public boolean unload(boolean removeFromList)
{
if (_ship != null)
{
_ship.oustPlayers();
_ship.deleteMe();
}
return super.unload(removeFromList);
}
public static void main(String[] args)
{
new AirShipGludioGracia();
}
}

View File

@@ -1,361 +1,320 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
final class BoatGludinRune implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatGludinRune.class.getName());
// Time: 1151s
private static final VehiclePathPoint[] GLUDIN_TO_RUNE =
{
new VehiclePathPoint(-95686, 155514, -3610, 150, 800),
new VehiclePathPoint(-98112, 159040, -3610, 150, 800),
new VehiclePathPoint(-104192, 160608, -3610, 200, 1800),
new VehiclePathPoint(-109952, 159616, -3610, 250, 1800),
new VehiclePathPoint(-112768, 154784, -3610, 290, 1800),
new VehiclePathPoint(-114688, 139040, -3610, 290, 1800),
new VehiclePathPoint(-115232, 134368, -3610, 290, 1800),
new VehiclePathPoint(-113888, 121696, -3610, 290, 1800),
new VehiclePathPoint(-107808, 104928, -3610, 290, 1800),
new VehiclePathPoint(-97152, 75520, -3610, 290, 800),
new VehiclePathPoint(-85536, 67264, -3610, 290, 1800),
new VehiclePathPoint(-64640, 55840, -3610, 290, 1800),
new VehiclePathPoint(-60096, 44672, -3610, 290, 1800),
new VehiclePathPoint(-52672, 37440, -3610, 290, 1800),
new VehiclePathPoint(-46144, 33184, -3610, 290, 1800),
new VehiclePathPoint(-36096, 24928, -3610, 290, 1800),
new VehiclePathPoint(-33792, 8448, -3610, 290, 1800),
new VehiclePathPoint(-23776, 3424, -3610, 290, 1000),
new VehiclePathPoint(-12000, -1760, -3610, 290, 1000),
new VehiclePathPoint(672, 480, -3610, 290, 1800),
new VehiclePathPoint(15488, 200, -3610, 290, 1000),
new VehiclePathPoint(24736, 164, -3610, 290, 1000),
new VehiclePathPoint(32192, -1156, -3610, 290, 1000),
new VehiclePathPoint(39200, -8032, -3610, 270, 1000),
new VehiclePathPoint(44320, -25152, -3610, 270, 1000),
new VehiclePathPoint(40576, -31616, -3610, 250, 800),
new VehiclePathPoint(36819, -35315, -3610, 220, 800)
};
private static final VehiclePathPoint[] RUNE_DOCK =
{
new VehiclePathPoint(34381, -37680, -3610, 200, 800)
};
// Time: 967s
private static final VehiclePathPoint[] RUNE_TO_GLUDIN =
{
new VehiclePathPoint(32750, -39300, -3610, 150, 800),
new VehiclePathPoint(27440, -39328, -3610, 180, 1000),
new VehiclePathPoint(21456, -34272, -3610, 200, 1000),
new VehiclePathPoint(6608, -29520, -3610, 250, 800),
new VehiclePathPoint(4160, -27828, -3610, 270, 800),
new VehiclePathPoint(2432, -25472, -3610, 270, 1000),
new VehiclePathPoint(-8000, -16272, -3610, 220, 1000),
new VehiclePathPoint(-18976, -9760, -3610, 290, 800),
new VehiclePathPoint(-23776, 3408, -3610, 290, 800),
new VehiclePathPoint(-33792, 8432, -3610, 290, 800),
new VehiclePathPoint(-36096, 24912, -3610, 290, 800),
new VehiclePathPoint(-46144, 33184, -3610, 290, 800),
new VehiclePathPoint(-52688, 37440, -3610, 290, 800),
new VehiclePathPoint(-60096, 44672, -3610, 290, 800),
new VehiclePathPoint(-64640, 55840, -3610, 290, 800),
new VehiclePathPoint(-85552, 67248, -3610, 290, 800),
new VehiclePathPoint(-97168, 85264, -3610, 290, 800),
new VehiclePathPoint(-107824, 104912, -3610, 290, 800),
new VehiclePathPoint(-102151, 135704, -3610, 290, 800),
new VehiclePathPoint(-96686, 140595, -3610, 290, 800),
new VehiclePathPoint(-95686, 147717, -3610, 250, 800),
new VehiclePathPoint(-95686, 148218, -3610, 200, 800)
};
private static final VehiclePathPoint[] GLUDIN_DOCK =
{
new VehiclePathPoint(-95686, 150514, -3610, 150, 800)
};
private final L2BoatInstance _boat;
private int _cycle = 0;
private int _shoutCount = 0;
private final CreatureSay ARRIVED_AT_GLUDIN;
private final CreatureSay ARRIVED_AT_GLUDIN_2;
private final CreatureSay LEAVE_GLUDIN5;
private final CreatureSay LEAVE_GLUDIN1;
private final CreatureSay LEAVE_GLUDIN0;
private final CreatureSay LEAVING_GLUDIN;
private final CreatureSay ARRIVED_AT_RUNE;
private final CreatureSay ARRIVED_AT_RUNE_2;
private final CreatureSay LEAVE_RUNE5;
private final CreatureSay LEAVE_RUNE1;
private final CreatureSay LEAVE_RUNE0;
private final CreatureSay LEAVING_RUNE;
private final CreatureSay BUSY_GLUDIN;
private final CreatureSay BUSY_RUNE;
private final CreatureSay ARRIVAL_RUNE15;
private final CreatureSay ARRIVAL_RUNE10;
private final CreatureSay ARRIVAL_RUNE5;
private final CreatureSay ARRIVAL_RUNE1;
private final CreatureSay ARRIVAL_GLUDIN15;
private final CreatureSay ARRIVAL_GLUDIN10;
private final CreatureSay ARRIVAL_GLUDIN5;
private final CreatureSay ARRIVAL_GLUDIN1;
private final PlaySound GLUDIN_SOUND;
private final PlaySound RUNE_SOUND;
public BoatGludinRune(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_HAS_ARRIVED_AT_GLUDIN_HARBOR);
ARRIVED_AT_GLUDIN_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_AFTER_ANCHORING_FOR_TEN_MINUTES);
LEAVE_GLUDIN5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_IN_FIVE_MINUTES);
LEAVE_GLUDIN1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_IN_ONE_MINUTE);
LEAVE_GLUDIN0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.MAKE_HASTE_WE_WILL_BE_DEPARTING_FOR_GLUDIN_HARBOR_SHORTLY);
LEAVING_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WE_ARE_NOW_DEPARTING_FOR_GLUDIN_HARBOR_HOLD_ON_AND_ENJOY_THE_RIDE);
ARRIVED_AT_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WELCOME_TO_RUNE_HARBOR);
ARRIVED_AT_RUNE_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_GLUDIN_HARBOR_AFTER_ANCHORING_FOR_TEN_MINUTES);
LEAVE_RUNE5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_GLUDIN_HARBOR_WILL_TAKE_PLACE_IN_FIVE_MINUTES);
LEAVE_RUNE1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_GLUDIN_HARBOR_WILL_TAKE_PLACE_IN_ONE_MINUTE);
LEAVE_RUNE0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.MAKE_HASTE_WE_WILL_BE_DEPARTING_FOR_GLUDIN_HARBOR_SHORTLY);
LEAVING_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WE_ARE_NOW_DEPARTING_FOR_GLUDIN_HARBOR_HOLD_ON_AND_ENJOY_THE_RIDE);
BUSY_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_TO_GLUDIN_HARBOR_HAS_BEEN_DELAYED);
BUSY_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_TO_RUNE_HARBOR_HAS_BEEN_DELAYED);
ARRIVAL_RUNE15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL_RUNE10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL_RUNE5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL_RUNE1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_1_MINUTE);
ARRIVAL_GLUDIN15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL_GLUDIN10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL_GLUDIN5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL_GLUDIN1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_1_MINUTE);
GLUDIN_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), GLUDIN_DOCK[0].getX(), GLUDIN_DOCK[0].getY(), GLUDIN_DOCK[0].getZ());
RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 1:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
}
case 2:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
}
case 3:
{
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, false);
BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVING_GLUDIN);
_boat.broadcastPacket(GLUDIN_SOUND);
_boat.payForRide(7905, 1, -90015, 150422, -3610);
_boat.executePath(GLUDIN_TO_RUNE);
ThreadPoolManager.getInstance().scheduleGeneral(this, 250000);
break;
}
case 4:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 5:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 6:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 7:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE1);
break;
}
case 8:
{
if (BoatManager.getInstance().dockBusy(BoatManager.RUNE_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], BUSY_RUNE);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(RUNE_DOCK);
break;
}
case 9:
{
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2);
_boat.broadcastPacket(RUNE_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 10:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 11:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
}
case 12:
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
}
case 13:
{
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVING_RUNE);
_boat.broadcastPacket(RUNE_SOUND);
_boat.payForRide(7904, 1, 34513, -38009, -3640);
_boat.executePath(RUNE_TO_GLUDIN);
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
break;
}
case 14:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 15:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 16:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 17:
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN1);
break;
}
case 18:
{
if (BoatManager.getInstance().dockBusy(BoatManager.GLUDIN_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], BUSY_GLUDIN);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(GLUDIN_DOCK);
break;
}
case 19:
{
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVED_AT_GLUDIN, ARRIVED_AT_GLUDIN_2);
_boat.broadcastPacket(GLUDIN_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
}
_shoutCount = 0;
_cycle++;
if (_cycle > 19)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.log(Level.WARNING, e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(3, -95686, 150514, -3610, 16723);
if (boat != null)
{
boat.registerEngine(new BoatGludinRune(boat));
boat.runEngine(180000);
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
}
}
}
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
public class BoatGludinRune implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatGludinRune.class.getName());
// Time: 1151s
private static final VehiclePathPoint[] GLUDIN_TO_RUNE =
{
new VehiclePathPoint(-95686, 155514, -3610, 150, 800),
new VehiclePathPoint(-98112, 159040, -3610, 150, 800),
new VehiclePathPoint(-104192, 160608, -3610, 200, 1800),
new VehiclePathPoint(-109952, 159616, -3610, 250, 1800),
new VehiclePathPoint(-112768, 154784, -3610, 290, 1800),
new VehiclePathPoint(-114688, 139040, -3610, 290, 1800),
new VehiclePathPoint(-115232, 134368, -3610, 290, 1800),
new VehiclePathPoint(-113888, 121696, -3610, 290, 1800),
new VehiclePathPoint(-107808, 104928, -3610, 290, 1800),
new VehiclePathPoint(-97152, 75520, -3610, 290, 800),
new VehiclePathPoint(-85536, 67264, -3610, 290, 1800),
new VehiclePathPoint(-64640, 55840, -3610, 290, 1800),
new VehiclePathPoint(-60096, 44672, -3610, 290, 1800),
new VehiclePathPoint(-52672, 37440, -3610, 290, 1800),
new VehiclePathPoint(-46144, 33184, -3610, 290, 1800),
new VehiclePathPoint(-36096, 24928, -3610, 290, 1800),
new VehiclePathPoint(-33792, 8448, -3610, 290, 1800),
new VehiclePathPoint(-23776, 3424, -3610, 290, 1000),
new VehiclePathPoint(-12000, -1760, -3610, 290, 1000),
new VehiclePathPoint(672, 480, -3610, 290, 1800),
new VehiclePathPoint(15488, 200, -3610, 290, 1000),
new VehiclePathPoint(24736, 164, -3610, 290, 1000),
new VehiclePathPoint(32192, -1156, -3610, 290, 1000),
new VehiclePathPoint(39200, -8032, -3610, 270, 1000),
new VehiclePathPoint(44320, -25152, -3610, 270, 1000),
new VehiclePathPoint(40576, -31616, -3610, 250, 800),
new VehiclePathPoint(36819, -35315, -3610, 220, 800)
};
private static final VehiclePathPoint[] RUNE_DOCK =
{
new VehiclePathPoint(34381, -37680, -3610, 200, 800)
};
// Time: 967s
private static final VehiclePathPoint[] RUNE_TO_GLUDIN =
{
new VehiclePathPoint(32750, -39300, -3610, 150, 800),
new VehiclePathPoint(27440, -39328, -3610, 180, 1000),
new VehiclePathPoint(21456, -34272, -3610, 200, 1000),
new VehiclePathPoint(6608, -29520, -3610, 250, 800),
new VehiclePathPoint(4160, -27828, -3610, 270, 800),
new VehiclePathPoint(2432, -25472, -3610, 270, 1000),
new VehiclePathPoint(-8000, -16272, -3610, 220, 1000),
new VehiclePathPoint(-18976, -9760, -3610, 290, 800),
new VehiclePathPoint(-23776, 3408, -3610, 290, 800),
new VehiclePathPoint(-33792, 8432, -3610, 290, 800),
new VehiclePathPoint(-36096, 24912, -3610, 290, 800),
new VehiclePathPoint(-46144, 33184, -3610, 290, 800),
new VehiclePathPoint(-52688, 37440, -3610, 290, 800),
new VehiclePathPoint(-60096, 44672, -3610, 290, 800),
new VehiclePathPoint(-64640, 55840, -3610, 290, 800),
new VehiclePathPoint(-85552, 67248, -3610, 290, 800),
new VehiclePathPoint(-97168, 85264, -3610, 290, 800),
new VehiclePathPoint(-107824, 104912, -3610, 290, 800),
new VehiclePathPoint(-102151, 135704, -3610, 290, 800),
new VehiclePathPoint(-96686, 140595, -3610, 290, 800),
new VehiclePathPoint(-95686, 147717, -3610, 250, 800),
new VehiclePathPoint(-95686, 148218, -3610, 200, 800)
};
private static final VehiclePathPoint[] GLUDIN_DOCK =
{
new VehiclePathPoint(-95686, 150514, -3610, 150, 800)
};
private final L2BoatInstance _boat;
private int _cycle = 0;
private int _shoutCount = 0;
private final CreatureSay ARRIVED_AT_GLUDIN;
private final CreatureSay ARRIVED_AT_GLUDIN_2;
private final CreatureSay LEAVE_GLUDIN5;
private final CreatureSay LEAVE_GLUDIN1;
private final CreatureSay LEAVE_GLUDIN0;
private final CreatureSay LEAVING_GLUDIN;
private final CreatureSay ARRIVED_AT_RUNE;
private final CreatureSay ARRIVED_AT_RUNE_2;
private final CreatureSay LEAVE_RUNE5;
private final CreatureSay LEAVE_RUNE1;
private final CreatureSay LEAVE_RUNE0;
private final CreatureSay LEAVING_RUNE;
private final CreatureSay BUSY_GLUDIN;
private final CreatureSay BUSY_RUNE;
private final CreatureSay ARRIVAL_RUNE15;
private final CreatureSay ARRIVAL_RUNE10;
private final CreatureSay ARRIVAL_RUNE5;
private final CreatureSay ARRIVAL_RUNE1;
private final CreatureSay ARRIVAL_GLUDIN15;
private final CreatureSay ARRIVAL_GLUDIN10;
private final CreatureSay ARRIVAL_GLUDIN5;
private final CreatureSay ARRIVAL_GLUDIN1;
private final PlaySound GLUDIN_SOUND;
private final PlaySound RUNE_SOUND;
public BoatGludinRune(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_HAS_ARRIVED_AT_GLUDIN_HARBOR);
ARRIVED_AT_GLUDIN_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_AFTER_ANCHORING_FOR_TEN_MINUTES);
LEAVE_GLUDIN5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_IN_FIVE_MINUTES);
LEAVE_GLUDIN1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_RUNE_HARBOR_WILL_TAKE_PLACE_IN_ONE_MINUTE);
LEAVE_GLUDIN0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.MAKE_HASTE_WE_WILL_BE_DEPARTING_FOR_GLUDIN_HARBOR_SHORTLY2);
LEAVING_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WE_ARE_NOW_DEPARTING_FOR_GLUDIN_HARBOR_HOLD_ON_AND_ENJOY_THE_RIDE);
ARRIVED_AT_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WELCOME_TO_RUNE_HARBOR);
ARRIVED_AT_RUNE_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_GLUDIN_HARBOR_AFTER_ANCHORING_FOR_TEN_MINUTES);
LEAVE_RUNE5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_GLUDIN_HARBOR_WILL_TAKE_PLACE_IN_FIVE_MINUTES);
LEAVE_RUNE1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.DEPARTURE_FOR_GLUDIN_HARBOR_WILL_TAKE_PLACE_IN_ONE_MINUTE);
LEAVE_RUNE0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.MAKE_HASTE_WE_WILL_BE_DEPARTING_FOR_GLUDIN_HARBOR_SHORTLY);
LEAVING_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WE_ARE_NOW_DEPARTING_FOR_GLUDIN_HARBOR_HOLD_ON_AND_ENJOY_THE_RIDE);
BUSY_GLUDIN = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_TO_GLUDIN_HARBOR_HAS_BEEN_DELAYED);
BUSY_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_TO_RUNE_HARBOR_HAS_BEEN_DELAYED);
ARRIVAL_RUNE15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL_RUNE10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL_RUNE5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL_RUNE1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_GLUDIN_HARBOR_WILL_BE_ARRIVING_AT_RUNE_HARBOR_IN_APPROXIMATELY_1_MINUTE);
ARRIVAL_GLUDIN15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL_GLUDIN10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL_GLUDIN5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL_GLUDIN1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_RUNE_HARBOR_WILL_BE_ARRIVING_AT_GLUDIN_HARBOR_IN_APPROXIMATELY_1_MINUTE);
GLUDIN_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), GLUDIN_DOCK[0].getX(), GLUDIN_DOCK[0].getY(), GLUDIN_DOCK[0].getZ());
RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 1:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
case 2:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
case 3:
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, false);
BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVING_GLUDIN);
_boat.broadcastPacket(GLUDIN_SOUND);
_boat.payForRide(7905, 1, -90015, 150422, -3610);
_boat.executePath(GLUDIN_TO_RUNE);
ThreadPoolManager.getInstance().scheduleGeneral(this, 250000);
break;
case 4:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 5:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 6:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 7:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE1);
break;
case 8:
if (BoatManager.getInstance().dockBusy(BoatManager.RUNE_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], BUSY_RUNE);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(RUNE_DOCK);
break;
case 9:
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2);
_boat.broadcastPacket(RUNE_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 10:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 11:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
case 12:
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
case 13:
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVING_RUNE);
_boat.broadcastPacket(RUNE_SOUND);
_boat.payForRide(7904, 1, 34513, -38009, -3640);
_boat.executePath(RUNE_TO_GLUDIN);
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
break;
case 14:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 15:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 16:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 17:
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN1);
break;
case 18:
if (BoatManager.getInstance().dockBusy(BoatManager.GLUDIN_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], BUSY_GLUDIN);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(GLUDIN_DOCK);
break;
case 19:
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVED_AT_GLUDIN, ARRIVED_AT_GLUDIN_2);
_boat.broadcastPacket(GLUDIN_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
_shoutCount = 0;
_cycle++;
if (_cycle > 19)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.warning(e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(3, -95686, 150514, -3610, 16723);
if (boat != null)
{
boat.registerEngine(new BoatGludinRune(boat));
boat.runEngine(180000);
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
}
}
}

View File

@@ -1,203 +1,182 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
final class BoatInnadrilTour implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatInnadrilTour.class.getName());
// Time: 1867s
private static final VehiclePathPoint[] TOUR =
{
new VehiclePathPoint(105129, 226240, -3610, 150, 800),
new VehiclePathPoint(90604, 238797, -3610, 150, 800),
new VehiclePathPoint(74853, 237943, -3610, 150, 800),
new VehiclePathPoint(68207, 235399, -3610, 150, 800),
new VehiclePathPoint(63226, 230487, -3610, 150, 800),
new VehiclePathPoint(61843, 224797, -3610, 150, 800),
new VehiclePathPoint(61822, 203066, -3610, 150, 800),
new VehiclePathPoint(59051, 197685, -3610, 150, 800),
new VehiclePathPoint(54048, 195298, -3610, 150, 800),
new VehiclePathPoint(41609, 195687, -3610, 150, 800),
new VehiclePathPoint(35821, 200284, -3610, 150, 800),
new VehiclePathPoint(35567, 205265, -3610, 150, 800),
new VehiclePathPoint(35617, 222471, -3610, 150, 800),
new VehiclePathPoint(37932, 226588, -3610, 150, 800),
new VehiclePathPoint(42932, 229394, -3610, 150, 800),
new VehiclePathPoint(74324, 245231, -3610, 150, 800),
new VehiclePathPoint(81872, 250314, -3610, 150, 800),
new VehiclePathPoint(101692, 249882, -3610, 150, 800),
new VehiclePathPoint(107907, 256073, -3610, 150, 800),
new VehiclePathPoint(112317, 257133, -3610, 150, 800),
new VehiclePathPoint(126273, 255313, -3610, 150, 800),
new VehiclePathPoint(128067, 250961, -3610, 150, 800),
new VehiclePathPoint(128520, 238249, -3610, 150, 800),
new VehiclePathPoint(126428, 235072, -3610, 150, 800),
new VehiclePathPoint(121843, 234656, -3610, 150, 800),
new VehiclePathPoint(120096, 234268, -3610, 150, 800),
new VehiclePathPoint(118572, 233046, -3610, 150, 800),
new VehiclePathPoint(117671, 228951, -3610, 150, 800),
new VehiclePathPoint(115936, 226540, -3610, 150, 800),
new VehiclePathPoint(113628, 226240, -3610, 150, 800),
new VehiclePathPoint(111300, 226240, -3610, 150, 800),
new VehiclePathPoint(111264, 226240, -3610, 150, 800)
};
private static final VehiclePathPoint DOCK = TOUR[TOUR.length - 1];
private final L2BoatInstance _boat;
private int _cycle = 0;
private final CreatureSay ARRIVED_AT_INNADRIL;
private final CreatureSay LEAVE_INNADRIL5;
private final CreatureSay LEAVE_INNADRIL1;
private final CreatureSay LEAVE_INNADRIL0;
private final CreatureSay LEAVING_INNADRIL;
private final CreatureSay ARRIVAL20;
private final CreatureSay ARRIVAL15;
private final CreatureSay ARRIVAL10;
private final CreatureSay ARRIVAL5;
private final CreatureSay ARRIVAL1;
private final PlaySound INNADRIL_SOUND;
public BoatInnadrilTour(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_INNADRIL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_HAS_ARRIVED_IT_WILL_ANCHOR_FOR_TEN_MINUTES);
LEAVE_INNADRIL5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_LEAVE_IN_FIVE_MINUTES);
LEAVE_INNADRIL1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_LEAVE_IN_ONE_MINUTE);
LEAVE_INNADRIL0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_BE_LEAVING_SOON);
LEAVING_INNADRIL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_IS_LEAVING);
ARRIVAL20 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_20_MINUTES);
ARRIVAL15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_1_MINUTE);
INNADRIL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), DOCK.getX(), DOCK.getY(), DOCK.getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 1:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
}
case 2:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
}
case 3:
{
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, LEAVING_INNADRIL, INNADRIL_SOUND);
_boat.payForRide(0, 1, 107092, 219098, -3952);
_boat.executePath(TOUR);
ThreadPoolManager.getInstance().scheduleGeneral(this, 650000);
break;
}
case 4:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL20);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 5:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 6:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
case 7:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
}
case 8:
{
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL1);
break;
}
case 9:
{
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, ARRIVED_AT_INNADRIL, INNADRIL_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
}
_cycle++;
if (_cycle > 9)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.log(Level.WARNING, e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(4, 111264, 226240, -3610, 32768);
if (boat != null)
{
boat.registerEngine(new BoatInnadrilTour(boat));
boat.runEngine(180000);
}
}
}
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
public class BoatInnadrilTour implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatInnadrilTour.class.getName());
// Time: 1867s
private static final VehiclePathPoint[] TOUR =
{
new VehiclePathPoint(105129, 226240, -3610, 150, 800),
new VehiclePathPoint(90604, 238797, -3610, 150, 800),
new VehiclePathPoint(74853, 237943, -3610, 150, 800),
new VehiclePathPoint(68207, 235399, -3610, 150, 800),
new VehiclePathPoint(63226, 230487, -3610, 150, 800),
new VehiclePathPoint(61843, 224797, -3610, 150, 800),
new VehiclePathPoint(61822, 203066, -3610, 150, 800),
new VehiclePathPoint(59051, 197685, -3610, 150, 800),
new VehiclePathPoint(54048, 195298, -3610, 150, 800),
new VehiclePathPoint(41609, 195687, -3610, 150, 800),
new VehiclePathPoint(35821, 200284, -3610, 150, 800),
new VehiclePathPoint(35567, 205265, -3610, 150, 800),
new VehiclePathPoint(35617, 222471, -3610, 150, 800),
new VehiclePathPoint(37932, 226588, -3610, 150, 800),
new VehiclePathPoint(42932, 229394, -3610, 150, 800),
new VehiclePathPoint(74324, 245231, -3610, 150, 800),
new VehiclePathPoint(81872, 250314, -3610, 150, 800),
new VehiclePathPoint(101692, 249882, -3610, 150, 800),
new VehiclePathPoint(107907, 256073, -3610, 150, 800),
new VehiclePathPoint(112317, 257133, -3610, 150, 800),
new VehiclePathPoint(126273, 255313, -3610, 150, 800),
new VehiclePathPoint(128067, 250961, -3610, 150, 800),
new VehiclePathPoint(128520, 238249, -3610, 150, 800),
new VehiclePathPoint(126428, 235072, -3610, 150, 800),
new VehiclePathPoint(121843, 234656, -3610, 150, 800),
new VehiclePathPoint(120096, 234268, -3610, 150, 800),
new VehiclePathPoint(118572, 233046, -3610, 150, 800),
new VehiclePathPoint(117671, 228951, -3610, 150, 800),
new VehiclePathPoint(115936, 226540, -3610, 150, 800),
new VehiclePathPoint(113628, 226240, -3610, 150, 800),
new VehiclePathPoint(111300, 226240, -3610, 150, 800),
new VehiclePathPoint(111264, 226240, -3610, 150, 800)
};
private static final VehiclePathPoint DOCK = TOUR[TOUR.length - 1];
private final L2BoatInstance _boat;
private int _cycle = 0;
private final CreatureSay ARRIVED_AT_INNADRIL;
private final CreatureSay LEAVE_INNADRIL5;
private final CreatureSay LEAVE_INNADRIL1;
private final CreatureSay LEAVE_INNADRIL0;
private final CreatureSay LEAVING_INNADRIL;
private final CreatureSay ARRIVAL20;
private final CreatureSay ARRIVAL15;
private final CreatureSay ARRIVAL10;
private final CreatureSay ARRIVAL5;
private final CreatureSay ARRIVAL1;
private final PlaySound INNADRIL_SOUND;
public BoatInnadrilTour(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_INNADRIL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_HAS_ARRIVED_IT_WILL_ANCHOR_FOR_TEN_MINUTES);
LEAVE_INNADRIL5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_LEAVE_IN_FIVE_MINUTES);
LEAVE_INNADRIL1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_LEAVE_IN_ONE_MINUTE);
LEAVE_INNADRIL0 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_BE_LEAVING_SOON);
LEAVING_INNADRIL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_IS_LEAVING);
ARRIVAL20 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_20_MINUTES);
ARRIVAL15 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_15_MINUTES);
ARRIVAL10 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_10_MINUTES);
ARRIVAL5 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_5_MINUTES);
ARRIVAL1 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_INNADRIL_PLEASURE_BOAT_WILL_ARRIVE_IN_APPROXIMATELY_1_MINUTE);
INNADRIL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), DOCK.getX(), DOCK.getY(), DOCK.getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 1:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL1);
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
break;
case 2:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL0);
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
break;
case 3:
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, LEAVING_INNADRIL, INNADRIL_SOUND);
_boat.payForRide(0, 1, 107092, 219098, -3952);
_boat.executePath(TOUR);
ThreadPoolManager.getInstance().scheduleGeneral(this, 650000);
break;
case 4:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL20);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 5:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL15);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 6:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL10);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
case 7:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL5);
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
break;
case 8:
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL1);
break;
case 9:
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, ARRIVED_AT_INNADRIL, INNADRIL_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
break;
}
_cycle++;
if (_cycle > 9)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.warning(e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(4, 111264, 226240, -3610, 32768);
if (boat != null)
{
boat.registerEngine(new BoatInnadrilTour(boat));
boat.runEngine(180000);
}
}
}

View File

@@ -1,186 +1,175 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
final class BoatRunePrimeval implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatRunePrimeval.class.getName());
// Time: 239s
private static final VehiclePathPoint[] RUNE_TO_PRIMEVAL =
{
new VehiclePathPoint(32750, -39300, -3610, 180, 800),
new VehiclePathPoint(27440, -39328, -3610, 250, 1000),
new VehiclePathPoint(19616, -39360, -3610, 270, 1000),
new VehiclePathPoint(3840, -38528, -3610, 270, 1000),
new VehiclePathPoint(1664, -37120, -3610, 270, 1000),
new VehiclePathPoint(896, -34560, -3610, 180, 1800),
new VehiclePathPoint(832, -31104, -3610, 180, 180),
new VehiclePathPoint(2240, -29132, -3610, 150, 1800),
new VehiclePathPoint(4160, -27828, -3610, 150, 1800),
new VehiclePathPoint(5888, -27279, -3610, 150, 1800),
new VehiclePathPoint(7000, -27279, -3610, 150, 1800),
new VehiclePathPoint(10342, -27279, -3610, 150, 1800)
};
// Time: 221s
private static final VehiclePathPoint[] PRIMEVAL_TO_RUNE =
{
new VehiclePathPoint(15528, -27279, -3610, 180, 800),
new VehiclePathPoint(22304, -29664, -3610, 290, 800),
new VehiclePathPoint(33824, -26880, -3610, 290, 800),
new VehiclePathPoint(38848, -21792, -3610, 240, 1200),
new VehiclePathPoint(43424, -22080, -3610, 180, 1800),
new VehiclePathPoint(44320, -25152, -3610, 180, 1800),
new VehiclePathPoint(40576, -31616, -3610, 250, 800),
new VehiclePathPoint(36819, -35315, -3610, 220, 800)
};
private static final VehiclePathPoint[] RUNE_DOCK =
{
new VehiclePathPoint(34381, -37680, -3610, 220, 800)
};
private static final VehiclePathPoint PRIMEVAL_DOCK = RUNE_TO_PRIMEVAL[RUNE_TO_PRIMEVAL.length - 1];
private final L2BoatInstance _boat;
private int _cycle = 0;
private int _shoutCount = 0;
private final CreatureSay ARRIVED_AT_RUNE;
private final CreatureSay ARRIVED_AT_RUNE_2;
private final CreatureSay LEAVING_RUNE;
private final CreatureSay ARRIVED_AT_PRIMEVAL;
private final CreatureSay ARRIVED_AT_PRIMEVAL_2;
private final CreatureSay LEAVING_PRIMEVAL;
private final CreatureSay BUSY_RUNE;
private final PlaySound RUNE_SOUND;
private final PlaySound PRIMEVAL_SOUND;
public BoatRunePrimeval(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WELCOME_TO_RUNE_HARBOR);
ARRIVED_AT_RUNE_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_PRIMEVAL_ISLE_AFTER_ANCHORING_FOR_THREE_MINUTES);
LEAVING_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_IS_NOW_DEPARTING_RUNE_HARBOR_FOR_PRIMEVAL_ISLE);
ARRIVED_AT_PRIMEVAL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_HAS_ARRIVED_AT_PRIMEVAL_ISLE);
ARRIVED_AT_PRIMEVAL_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_RUNE_HARBOR_AFTER_ANCHORING_FOR_THREE_MINUTES);
LEAVING_PRIMEVAL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_IS_NOW_DEPARTING_PRIMEVAL_ISLE_FOR_RUNE_HARBOR);
BUSY_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_PRIMEVAL_ISLE_TO_RUNE_HARBOR_HAS_BEEN_DELAYED);
RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
PRIMEVAL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), PRIMEVAL_DOCK.getX(), PRIMEVAL_DOCK.getY(), PRIMEVAL_DOCK.getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
{
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, LEAVING_RUNE, RUNE_SOUND);
_boat.payForRide(8925, 1, 34513, -38009, -3640);
_boat.executePath(RUNE_TO_PRIMEVAL);
break;
}
case 1:
{
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], ARRIVED_AT_PRIMEVAL, ARRIVED_AT_PRIMEVAL_2, PRIMEVAL_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
break;
}
case 2:
{
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], LEAVING_PRIMEVAL, PRIMEVAL_SOUND);
_boat.payForRide(8924, 1, 10447, -24982, -3664);
_boat.executePath(PRIMEVAL_TO_RUNE);
break;
}
case 3:
{
if (BoatManager.getInstance().dockBusy(BoatManager.RUNE_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], PRIMEVAL_DOCK, BUSY_RUNE);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(RUNE_DOCK);
break;
}
case 4:
{
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2, RUNE_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
break;
}
}
_shoutCount = 0;
_cycle++;
if (_cycle > 4)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.log(Level.WARNING, e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(5, 34381, -37680, -3610, 40785);
if (boat != null)
{
boat.registerEngine(new BoatRunePrimeval(boat));
boat.runEngine(180000);
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
}
}
}
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles;
import java.util.logging.Logger;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.instancemanager.BoatManager;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import com.l2jmobius.gameserver.model.actor.instance.L2BoatInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
/**
* @author DS
*/
public class BoatRunePrimeval implements Runnable
{
private static final Logger _log = Logger.getLogger(BoatRunePrimeval.class.getName());
// Time: 239s
private static final VehiclePathPoint[] RUNE_TO_PRIMEVAL =
{
new VehiclePathPoint(32750, -39300, -3610, 180, 800),
new VehiclePathPoint(27440, -39328, -3610, 250, 1000),
new VehiclePathPoint(19616, -39360, -3610, 270, 1000),
new VehiclePathPoint(3840, -38528, -3610, 270, 1000),
new VehiclePathPoint(1664, -37120, -3610, 270, 1000),
new VehiclePathPoint(896, -34560, -3610, 180, 1800),
new VehiclePathPoint(832, -31104, -3610, 180, 180),
new VehiclePathPoint(2240, -29132, -3610, 150, 1800),
new VehiclePathPoint(4160, -27828, -3610, 150, 1800),
new VehiclePathPoint(5888, -27279, -3610, 150, 1800),
new VehiclePathPoint(7000, -27279, -3610, 150, 1800),
new VehiclePathPoint(10342, -27279, -3610, 150, 1800)
};
// Time: 221s
private static final VehiclePathPoint[] PRIMEVAL_TO_RUNE =
{
new VehiclePathPoint(15528, -27279, -3610, 180, 800),
new VehiclePathPoint(22304, -29664, -3610, 290, 800),
new VehiclePathPoint(33824, -26880, -3610, 290, 800),
new VehiclePathPoint(38848, -21792, -3610, 240, 1200),
new VehiclePathPoint(43424, -22080, -3610, 180, 1800),
new VehiclePathPoint(44320, -25152, -3610, 180, 1800),
new VehiclePathPoint(40576, -31616, -3610, 250, 800),
new VehiclePathPoint(36819, -35315, -3610, 220, 800)
};
private static final VehiclePathPoint[] RUNE_DOCK =
{
new VehiclePathPoint(34381, -37680, -3610, 220, 800)
};
private static final VehiclePathPoint PRIMEVAL_DOCK = RUNE_TO_PRIMEVAL[RUNE_TO_PRIMEVAL.length - 1];
private final L2BoatInstance _boat;
private int _cycle = 0;
private int _shoutCount = 0;
private final CreatureSay ARRIVED_AT_RUNE;
private final CreatureSay ARRIVED_AT_RUNE_2;
private final CreatureSay LEAVING_RUNE;
private final CreatureSay ARRIVED_AT_PRIMEVAL;
private final CreatureSay ARRIVED_AT_PRIMEVAL_2;
private final CreatureSay LEAVING_PRIMEVAL;
private final CreatureSay BUSY_RUNE;
private final PlaySound RUNE_SOUND;
private final PlaySound PRIMEVAL_SOUND;
public BoatRunePrimeval(L2BoatInstance boat)
{
_boat = boat;
ARRIVED_AT_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.WELCOME_TO_RUNE_HARBOR);
ARRIVED_AT_RUNE_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_PRIMEVAL_ISLE_AFTER_ANCHORING_FOR_THREE_MINUTES);
LEAVING_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_IS_NOW_DEPARTING_RUNE_HARBOR_FOR_PRIMEVAL_ISLE);
ARRIVED_AT_PRIMEVAL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_HAS_ARRIVED_AT_PRIMEVAL_ISLE);
ARRIVED_AT_PRIMEVAL_2 = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_WILL_LEAVE_FOR_RUNE_HARBOR_AFTER_ANCHORING_FOR_THREE_MINUTES);
LEAVING_PRIMEVAL = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_IS_NOW_DEPARTING_PRIMEVAL_ISLE_FOR_RUNE_HARBOR);
BUSY_RUNE = new CreatureSay(0, ChatType.BOAT, 801, SystemMessageId.THE_FERRY_FROM_PRIMEVAL_ISLE_TO_RUNE_HARBOR_HAS_BEEN_DELAYED);
RUNE_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), RUNE_DOCK[0].getX(), RUNE_DOCK[0].getY(), RUNE_DOCK[0].getZ());
PRIMEVAL_SOUND = new PlaySound(0, "itemsound.ship_arrival_departure", 1, _boat.getObjectId(), PRIMEVAL_DOCK.getX(), PRIMEVAL_DOCK.getY(), PRIMEVAL_DOCK.getZ());
}
@Override
public void run()
{
try
{
switch (_cycle)
{
case 0:
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, LEAVING_RUNE, RUNE_SOUND);
_boat.payForRide(8925, 1, 34513, -38009, -3640);
_boat.executePath(RUNE_TO_PRIMEVAL);
break;
case 1:
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], ARRIVED_AT_PRIMEVAL, ARRIVED_AT_PRIMEVAL_2, PRIMEVAL_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
break;
case 2:
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], LEAVING_PRIMEVAL, PRIMEVAL_SOUND);
_boat.payForRide(8924, 1, 10447, -24982, -3664);
_boat.executePath(PRIMEVAL_TO_RUNE);
break;
case 3:
if (BoatManager.getInstance().dockBusy(BoatManager.RUNE_HARBOR))
{
if (_shoutCount == 0)
{
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], PRIMEVAL_DOCK, BUSY_RUNE);
}
_shoutCount++;
if (_shoutCount > 35)
{
_shoutCount = 0;
}
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
return;
}
_boat.executePath(RUNE_DOCK);
break;
case 4:
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2, RUNE_SOUND);
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
break;
}
_shoutCount = 0;
_cycle++;
if (_cycle > 4)
{
_cycle = 0;
}
}
catch (Exception e)
{
_log.warning(e.getMessage());
}
}
public static void main(String[] args)
{
final L2BoatInstance boat = BoatManager.getInstance().getNewBoat(5, 34381, -37680, -3610, 40785);
if (boat != null)
{
boat.registerEngine(new BoatRunePrimeval(boat));
boat.runEngine(180000);
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
}
}
}

View File

@@ -0,0 +1,9 @@
<html><body>Flight Device:<br>
A floating fragment of stone hovers in front of you, glowing in a pale blue light. It appears to be functioning and undamaged.<br>
You have gained access to the flight controls.<br>
You can only go to the Seed through a <font color="LEVEL">Seed Teleport Device</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusNorthController board">Board the airship</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusNorthController summon">Summon the airship</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusNorthController register">Request permission to summon the airship (Airship Summoning Permit required)</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,100 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles.KeucereusNorthController;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import vehicles.AirShipController;
public final class KeucereusNorthController extends AirShipController
{
private static final int DOCK_ZONE = 50602;
private static final int LOCATION = 100;
private static final int CONTROLLER_ID = 32606;
private static final VehiclePathPoint[] ARRIVAL =
{
new VehiclePathPoint(-183218, 239494, 2500, 280, 2000),
new VehiclePathPoint(-183218, 239494, 1336, 280, 2000)
};
private static final VehiclePathPoint[] DEPART =
{
new VehiclePathPoint(-183218, 239494, 1700, 280, 2000),
new VehiclePathPoint(-181974, 235358, 1700, 280, 2000)
};
private static final VehiclePathPoint[][] TELEPORTS =
{
{
new VehiclePathPoint(-183218, 239494, 1700, 280, 2000),
new VehiclePathPoint(-181974, 235358, 1700, 280, 2000),
new VehiclePathPoint(-186373, 234000, 2500, 0, 0)
},
{
new VehiclePathPoint(-183218, 239494, 1700, 280, 2000),
new VehiclePathPoint(-181974, 235358, 1700, 280, 2000),
new VehiclePathPoint(-206692, 220997, 3000, 0, 0)
},
{
new VehiclePathPoint(-183218, 239494, 1700, 280, 2000),
new VehiclePathPoint(-181974, 235358, 1700, 280, 2000),
new VehiclePathPoint(-235693, 248843, 5100, 0, 0)
}
};
private static final int[] FUEL =
{
0,
50,
100
};
public KeucereusNorthController()
{
addStartNpc(CONTROLLER_ID);
addFirstTalkId(CONTROLLER_ID);
addTalkId(CONTROLLER_ID);
_dockZone = DOCK_ZONE;
addEnterZoneId(DOCK_ZONE);
addExitZoneId(DOCK_ZONE);
_shipSpawnX = -184145;
_shipSpawnY = 242373;
_shipSpawnZ = 3000;
_oustLoc = new Location(-183900, 239384, 1320);
_locationId = LOCATION;
_arrivalPath = ARRIVAL;
_departPath = DEPART;
_teleportsTable = TELEPORTS;
_fuelTable = FUEL;
_movie = Movie.LAND_KSERTH_B;
validityCheck();
}
public static void main(String[] args)
{
new KeucereusNorthController();
}
}

View File

@@ -0,0 +1,9 @@
<html><body>Flight Device:<br>
A floating fragment of stone hovers in front of you, glowing in a pale blue light. It appears to be functioning and undamaged.<br>
You have gained access to the flight controls.<br>
You can only go to the Seed through a <font color="LEVEL">Seed Teleport Device</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusSouthController board">Board the airship</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusSouthController summon">Summon the airship</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KeucereusSouthController register">Request permission to summon the airship (Airship Summoning Permit required)</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,100 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles.KeucereusSouthController;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import vehicles.AirShipController;
public final class KeucereusSouthController extends AirShipController
{
private static final int DOCK_ZONE = 50603;
private static final int LOCATION = 100;
private static final int CONTROLLER_ID = 32517;
private static final VehiclePathPoint[] ARRIVAL =
{
new VehiclePathPoint(-185312, 246544, 2500),
new VehiclePathPoint(-185312, 246544, 1336)
};
private static final VehiclePathPoint[] DEPART =
{
new VehiclePathPoint(-185312, 246544, 1700, 280, 2000),
new VehiclePathPoint(-186900, 251699, 1700, 280, 2000)
};
private static final VehiclePathPoint[][] TELEPORTS =
{
{
new VehiclePathPoint(-185312, 246544, 1700, 280, 2000),
new VehiclePathPoint(-186900, 251699, 1700, 280, 2000),
new VehiclePathPoint(-186373, 234000, 2500, 0, 0)
},
{
new VehiclePathPoint(-185312, 246544, 1700, 280, 2000),
new VehiclePathPoint(-186900, 251699, 1700, 280, 2000),
new VehiclePathPoint(-206692, 220997, 3000, 0, 0)
},
{
new VehiclePathPoint(-185312, 246544, 1700, 280, 2000),
new VehiclePathPoint(-186900, 251699, 1700, 280, 2000),
new VehiclePathPoint(-235693, 248843, 5100, 0, 0)
}
};
private static final int[] FUEL =
{
0,
50,
100
};
public KeucereusSouthController()
{
addStartNpc(CONTROLLER_ID);
addFirstTalkId(CONTROLLER_ID);
addTalkId(CONTROLLER_ID);
_dockZone = DOCK_ZONE;
addEnterZoneId(DOCK_ZONE);
addExitZoneId(DOCK_ZONE);
_shipSpawnX = -184527;
_shipSpawnY = 243611;
_shipSpawnZ = 3000;
_locationId = LOCATION;
_arrivalPath = ARRIVAL;
_departPath = DEPART;
_teleportsTable = TELEPORTS;
_fuelTable = FUEL;
_oustLoc = new Location(-186148, 246296, 1360);
_movie = Movie.LAND_KSERTH_A;
validityCheck();
}
public static void main(String[] args)
{
new KeucereusSouthController();
}
}

View File

@@ -0,0 +1,7 @@
<html><body>Airship Controller:<br>
You see a floating piece of stone filled with a mysterious power. The green light is flashing, so there doesn't appear to be anything wrong with its function.<br><br>
By manipulating this, you should be able to control the Airship.<br>
<a action="bypass -h Quest SoDController board">Board the Airship.</a><br>
<a action="bypass -h Quest SoDController summon">Summon the Airship.</a><br>
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
</body></html>

View File

@@ -0,0 +1,90 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles.SoDController;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import vehicles.AirShipController;
public final class SoDController extends AirShipController
{
private static final int DOCK_ZONE = 50601;
private static final int LOCATION = 102;
private static final int CONTROLLER_ID = 32605;
private static final VehiclePathPoint[] ARRIVAL =
{
new VehiclePathPoint(-246445, 252331, 4359, 280, 2000),
};
private static final VehiclePathPoint[] DEPART =
{
new VehiclePathPoint(-245245, 251040, 4359, 280, 2000)
};
private static final VehiclePathPoint[][] TELEPORTS =
{
{
new VehiclePathPoint(-245245, 251040, 4359, 280, 2000),
new VehiclePathPoint(-235693, 248843, 5100, 0, 0)
},
{
new VehiclePathPoint(-245245, 251040, 4359, 280, 2000),
new VehiclePathPoint(-195357, 233430, 2500, 0, 0)
}
};
private static final int[] FUEL =
{
0,
100
};
public SoDController()
{
addStartNpc(CONTROLLER_ID);
addFirstTalkId(CONTROLLER_ID);
addTalkId(CONTROLLER_ID);
_dockZone = DOCK_ZONE;
addEnterZoneId(DOCK_ZONE);
addExitZoneId(DOCK_ZONE);
_shipSpawnX = -247702;
_shipSpawnY = 253631;
_shipSpawnZ = 4359;
_oustLoc = new Location(-247746, 251079, 4328);
_locationId = LOCATION;
_arrivalPath = ARRIVAL;
_departPath = DEPART;
_teleportsTable = TELEPORTS;
_fuelTable = FUEL;
_movie = Movie.LAND_DISTRUCTION_A;
validityCheck();
}
public static void main(String[] args)
{
new SoDController();
}
}

View File

@@ -0,0 +1,7 @@
<html><body>Airship Controller:<br>
You see a floating piece of stone filled with a mysterious power. The green light is flashing, so there doesn't appear to be anything wrong with its function.<br><br>
By manipulating this, you should be able to control the Airship.<br>
<a action="bypass -h Quest SoIController board">Board the Airship.</a><br>
<a action="bypass -h Quest SoIController summon">Summon the Airship.</a><br>
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
</body></html>

View File

@@ -0,0 +1,94 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 vehicles.SoIController;
import com.l2jmobius.gameserver.enums.Movie;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.VehiclePathPoint;
import vehicles.AirShipController;
public final class SoIController extends AirShipController
{
private static final int DOCK_ZONE = 50600;
private static final int LOCATION = 101;
private static final int CONTROLLER_ID = 32604;
private static final VehiclePathPoint[] ARRIVAL =
{
new VehiclePathPoint(-214422, 211396, 5000, 280, 2000),
new VehiclePathPoint(-214422, 211396, 4422, 280, 2000)
};
private static final VehiclePathPoint[] DEPART =
{
new VehiclePathPoint(-214422, 211396, 5000, 280, 2000),
new VehiclePathPoint(-215877, 209709, 5000, 280, 2000)
};
private static final VehiclePathPoint[][] TELEPORTS =
{
{
new VehiclePathPoint(-214422, 211396, 5000, 280, 2000),
new VehiclePathPoint(-215877, 209709, 5000, 280, 2000),
new VehiclePathPoint(-206692, 220997, 3000, 0, 0)
},
{
new VehiclePathPoint(-214422, 211396, 5000, 280, 2000),
new VehiclePathPoint(-215877, 209709, 5000, 280, 2000),
new VehiclePathPoint(-195357, 233430, 2500, 0, 0)
}
};
private static final int[] FUEL =
{
0,
50
};
public SoIController()
{
addStartNpc(CONTROLLER_ID);
addFirstTalkId(CONTROLLER_ID);
addTalkId(CONTROLLER_ID);
_dockZone = DOCK_ZONE;
addEnterZoneId(DOCK_ZONE);
addExitZoneId(DOCK_ZONE);
_shipSpawnX = -212719;
_shipSpawnY = 213348;
_shipSpawnZ = 5000;
_oustLoc = new Location(-213401, 210401, 4408);
_locationId = LOCATION;
_arrivalPath = ARRIVAL;
_departPath = DEPART;
_teleportsTable = TELEPORTS;
_fuelTable = FUEL;
_movie = Movie.LAND_UNDEAD_A;
validityCheck();
}
public static void main(String[] args)
{
new SoIController();
}
}