Hi guys, could someone try to help me pls? I using EmuRT rev.10 project, High Five.
Trying to set my own server and have a problem with Last Hero event. Chars regs, teleports, waint for 1 min and FIGHT. But no attack allowed. Anybody can only use skills. I thought this is connected with "TeamType" (all characters have blue aura when LH started), cause when I delete this aura, characters can attack each other. But in this case event is brokes and no winner is appointed, just "Event Last Hero is ended" without winner. Thanks!
if (isActive()) {
scheduleEventStart();
}
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroMageBuffs.length > 0)) {
mage_buffs = new int[Config.EVENT_LastHeroMageBuffs.length][2];
}
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroFighterBuffs.length > 0)) {
fighter_buffs = new int[Config.EVENT_LastHeroFighterBuffs.length][2];
}
int i = 0;
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroMageBuffs.length > 0)) {
for (String skill : Config.EVENT_LastHeroMageBuffs) {
String[] splitSkill = skill.split(",");
mage_buffs[0] = Integer.parseInt(splitSkill[0]); mage_buffs[1] = Integer.parseInt(splitSkill[1]); i++; } } i = 0;
public static int getMinLevelForCategory(int category) { switch (category) { case 1: return 20; case 2: return 30; case 3: return 40; case 4: return 52; case 5: return 62; case 6: return 76; } return 0; }
public static int getMaxLevelForCategory(int category) { switch (category) { case 1: return 29; case 2: return 39; case 3: return 51; case 4: return 61; case 5: return 75; case 6: return 85; } return 0; }
public static int getCategory(int level) { if ((level >= 20) && (level <= 29)) { return 1; } if ((level >= 30) && (level <= 39)) { return 2; } if ((level >= 40) && (level <= 51)) { return 3; } if ((level >= 52) && (level <= 61)) { return 4; } if ((level >= 62) && (level <= 75)) { return 5; } if (level >= 76) { return 6; } return 0; }
public void start(String[] var) { Player player = getSelf(); if (var.length != 2) { show(new CustomMessage("common.Error", player, new Object[0]), player); return; } Integer category; Integer autoContinue; try { category = Integer.valueOf(var[0]); autoContinue = Integer.valueOf(var[1]); } catch (Exception e) { show(new CustomMessage("common.Error", player, new Object[0]), player); return; }
public void addPlayer() { Player player = getSelf(); if ((player == null) || (!checkPlayer(player, true)) || (!checkDualBox(player))) { return; } players_list.add(player.getStoredId()); live_list.add(player.getStoredId());
show(new CustomMessage("scripts.events.LastHero.Registered", player, new Object[0]), player); }
public static boolean checkPlayer(Player player, boolean first) { if ((first) && ((!_isRegistrationActive) || (player.isDead()))) { show(new CustomMessage("scripts.events.Late", player, new Object[0]), player); return false; }
if ((first) && (players_list.contains(player.getStoredId()))) { show(new CustomMessage("scripts.events.LastHero.Cancelled", player, new Object[0]), player); if (players_list.contains(player.getStoredId())) { players_list.remove(player.getStoredId()); } if (live_list.contains(player.getStoredId())) { live_list.remove(player.getStoredId()); } if (boxes.containsKey(player.getStoredId())) { boxes.remove(player.getStoredId()); } return false; }
if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel)) { show(new CustomMessage("scripts.events.LastHero.CancelledLevel", player, new Object[0]), player); return false; }
if (player.isMounted()) { show(new CustomMessage("scripts.events.LastHero.Cancelled", player, new Object[0]), player); return false; }
if (player.isCursedWeaponEquipped()) { show(new CustomMessage("scripts.events.CaptureTheFlag.Cancelled", player, new Object[0]), player); return false; }
if (player.isInDuel()) { show(new CustomMessage("scripts.events.LastHero.CancelledDuel", player, new Object[0]), player); return false; }
if ((player.getTeam() != TeamType.NONE) || (player.isInPvPEvent())) { show(new CustomMessage("scripts.events.CaptureTheFlag.CancelledOtherEvent", player, new Object[0]), player); return false; }
if ((player.getOlympiadGame() != null) || ((first) && (Olympiad.isRegistered(player)))) { show(new CustomMessage("scripts.events.LastHero.CancelledOlympiad", player, new Object[0]), player); return false; }
if ((player.isInParty()) && (player.getParty().isInDimensionalRift())) { show(new CustomMessage("scripts.events.LastHero.CancelledOtherEvent", player, new Object[0]), player); return false; }
if (player.isTeleporting()) { show(new CustomMessage("scripts.events.LastHero.CancelledTeleport", player, new Object[0]), player); return false; }
if (player.isInObserverMode()) { show(new CustomMessage("scripts.event.DeathMatch.CancelledObserver", player, new Object[0]), player); return false; }
return true; }
public static void prepare() { for (DoorInstance door : reflection.getDoors()) { door.closeMe(); } for (Zone z : reflection.getZones()) { z.setType(Zone.ZoneType.peace_zone); } cleanPlayers(); clearArena();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000L); executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000L); executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 3000L); executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 4000L); executeTask("events.lastHero.LastHero", "buffPlayers", new Object[0], 5000L); executeTask("events.lastHero.LastHero", "go", new Object[0], 60000L);
public static void go() { _status = 2; blockItems(); upParalyzePlayers(); checkLive(); clearArena(); sayToAll("scripts.events.LastHero.AnnounceFight", null); for (Zone z : reflection.getZones()) { z.setType(Zone.ZoneType.battle_zone); } _endTask = executeTask("events.lastHero.LastHero", "endBattle", new Object[0], 300000L); }
public static void endBattle() { _status = 0; removeAura();
for (DoorInstance door : reflection.getDoors()) { door.openMe(); }
for (Zone z : reflection.getZones()) { z.setType(Zone.ZoneType.peace_zone); } boxes.clear(); if (live_list.size() == 1) { Iterator i$ = getPlayers(live_list).iterator(); if (i$.hasNext()) { Player player = (Player) i$.next();
@Override public void onTeleport(Player player, int x, int y, int z, Reflection reflection) { if (_zone.checkIfInZone(x, y, z, reflection)) { return; } if ((_status > 1) && (player.getTeam() != TeamType.NONE) && (live_list.contains(player.getStoredId()))) { removePlayer(player); checkLive(); } }
@Override public void onPlayerExit(Player player) { if (player.getTeam() == TeamType.NONE) { return; }
if (!Config.EVENT_LastHeroAllowMultiReg) { boxes.remove(player.getStoredId()); } player.setTeam(TeamType.NONE); player.getInventory().unlock(); } }
private static List<Player> getPlayers(List<Long> list) { List result = new ArrayList(list.size()); for (Long storeId : list) { Player player = GameObjectsStorage.getAsPlayer(storeId.longValue()); if (player != null) { result.add(player); } } return result; }
public static void buffPlayers() { for (Player player : getPlayers(players_list)) { if (!Config.EVENT_LastHeroAllowBuffs) { player.getEffectList().stopAllEffects(); if (player.getPet() != null) { player.getPet().getEffectList().stopAllEffects(); } } }
if (!Config.EVENT_LastHeroBuffPlayers) { return; }
for (Player player : getPlayers(players_list)) { if (player.isMageClass()) { mageBuff(player); } else { fighterBuff(player); } } for (Player player : getPlayers(live_list)) { if (player.isMageClass()) { mageBuff(player); } else { fighterBuff(player); } } }
currentTime = null; nextStartTime = null; testStartTime = null; } catch (Exception e) { _log.warn("LH: Error figuring out a start time. Check TvTEventInterval in config file."); } }
public static void mageBuff(Player player) { for (int i = 0; i < mage_buffs.length; i++) { buff = SkillTable.getInstance().getInfo(mage_buffs[0], mage_buffs[1]);
public static void fighterBuff(Player player) { for (int i = 0; i < fighter_buffs.length; i++) { buff = SkillTable.getInstance().getInfo(fighter_buffs[0], fighter_buffs[1]);
private static boolean checkDualBox(Player player) { if (!Config.EVENT_LastHeroAllowMultiReg) { if ("IP".equalsIgnoreCase(Config.EVENT_LastHeroCheckWindowMethod)) { if (boxes.containsValue(player.getIP())) { show(new CustomMessage("scripts.events.LH.CancelledBox", player, new Object[0]), player); return false; }
} else if (("HWid".equalsIgnoreCase(Config.EVENT_LastHeroCheckWindowMethod)) && (boxes.containsValue(player.getNetConnection().getHWID()))) { show(new CustomMessage("scripts.events.DeathMatch.CancelledBox", player, new Object[0]), player); return false; } } return true; }
public class StartTask extends RunnableImpl {
public StartTask() { }
@Override public void runImpl() { if (!LastHero._active) { return; } if (Functions.isPvPEventStarted()) { _log.info("LH not started: another event is already running"); return; }
for (Residence c : ResidenceHolder.getInstance().getResidenceList(Castle.class)) { if ((c.getSiegeEvent() != null) && (c.getSiegeEvent().isInProgress())) { _log.debug("LH not started: CastleSiege in progress"); return; }
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Hi guys, I have the following problem, I want to set up two servers on the same dedicated server and I can't.
L2jacis 409 Linux Server.
The first gameserver has the following configuration:
# ================================================================
# Gameserver setting
# ================================================================
# This is transmitted to the clients, so it has to be an IP or resolvable hostname. If this ip is resolvable by Login just leave *
Hostname = 190.25.103.103
# Bind ip of the gameserver, use * to bind on all available IPs.
GameserverHostname = *
GameserverPort = 7777
# The Loginserver host and port.
LoginHost = 127.0.0.1
LoginPort = 9014
# This is the server id that the gameserver will request.
RequestServerID = 1
# If set to true, the login will give an other id to the server (if the requested id is already reserved).
AcceptAlternateID = True
UseBlowfishCipher = True
# ================================================================
# Database informations
# ================================================================
URL = jdbc:mariadb://localhost/server1
Login = server1
Password = server1
I configured the second gameserver like this:
# ================================================================
# Gameserver setting
# ================================================================
# This is transmitted to the clients, so it has to be an IP or resolvable hostname. If this ip is resolvable by Login just leave *
Hostname = 0.0.0.0
# Bind ip of the gameserver, use * to bind on all available IPs.
GameserverHostname = *
GameserverPort = 7788
# The Loginserver host and port.
LoginHost = 127.0.0.1
LoginPort = 9014
# This is the server id that the gameserver will request.
RequestServerID = 2
# If set to true, the login will give an other id to the server (if the requested id is already reserved).
AcceptAlternateID = True
UseBlowfishCipher = True
# ================================================================
# Database informations
# ================================================================
URL = jdbc:mariadb://localhost/server2
Login = server2
Password = server2
apart from having tested 0.0.0.0 on the second gameserver I also tried 127.0.0.1 In both cases I see the two servers in the login when I log in, but I try to enter the one with the lowest ping and it kicks me out. The other server always appears with ping 9999 and I try to enter but it doesn't do anything and it freezes the login so I have to log in again. The hexids are in their respective folders. For server 1, it has its hexid inside the gameserver config folder, and I checked that the hexid id is the same id, for example id 1 in the gameserver is also id1 for server 1, and hexid 2 has its hexid 2 for server 2. The server ports are open and listening when I turn on both gameservers. I really don't know what could be wrong. If you could give me some help I would appreciate it. Excuse my English.
We have both old channels from 2006-2009 with the 3rd verification function enabled, and new ones.
For availability, please contact us below:
Link - Telegram
Link - Facebook
WhatsApp - Click here to go to WhatsApp chat
Question
Deadly4283
Hi guys, could someone try to help me pls? I using EmuRT rev.10 project, High Five.
Trying to set my own server and have a problem with Last Hero event. Chars regs, teleports, waint for 1 min and FIGHT. But no attack allowed. Anybody can only use skills. I thought this is connected with "TeamType" (all characters have blue aura when LH started), cause when I delete this aura, characters can attack each other. But in this case event is brokes and no winner is appointed, just "Event Last Hero is ended" without winner. Thanks!
LastHero.java
package events.lastHero;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledFuture;
import l2p.commons.threading.RunnableImpl;
import l2p.gameserver.Announcements;
import l2p.gameserver.Config;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.data.xml.holder.ResidenceHolder;
import l2p.gameserver.instancemanager.ReflectionManager;
import l2p.gameserver.instancemanager.ServerVariables;
import l2p.gameserver.listener.actor.OnDeathListener;
import l2p.gameserver.listener.actor.player.OnPlayerExitListener;
import l2p.gameserver.listener.actor.player.OnTeleportListener;
import l2p.gameserver.listener.zone.OnZoneEnterLeaveListener;
import l2p.gameserver.model.Creature;
import l2p.gameserver.model.GameObject;
import l2p.gameserver.model.GameObjectsStorage;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.Skill;
import l2p.gameserver.model.Zone;
import l2p.gameserver.model.actor.listener.CharListenerList;
import l2p.gameserver.model.base.TeamType;
import l2p.gameserver.model.entity.Hero;
import l2p.gameserver.model.entity.Reflection;
import l2p.gameserver.model.entity.events.impl.DuelEvent;
import l2p.gameserver.model.entity.olympiad.Olympiad;
import l2p.gameserver.model.entity.residence.Castle;
import l2p.gameserver.model.entity.residence.Residence;
import l2p.gameserver.model.instances.DoorInstance;
import l2p.gameserver.model.items.LockType;
import l2p.gameserver.serverpackets.L2GameServerPacket;
import l2p.gameserver.serverpackets.Revive;
import l2p.gameserver.serverpackets.components.ChatType;
import l2p.gameserver.serverpackets.components.CustomMessage;
import l2p.gameserver.scripts.Functions;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.serverpackets.SkillList;
import l2p.gameserver.serverpackets.SocialAction;
import l2p.gameserver.tables.SkillTable;
import l2p.gameserver.templates.DoorTemplate;
import l2p.gameserver.templates.ZoneTemplate;
import l2p.gameserver.utils.Location;
import l2p.gameserver.utils.PositionUtils;
import l2p.gameserver.utils.ReflectionUtils;
import org.napile.primitive.maps.IntObjectMap;
import org.napile.primitive.maps.impl.HashIntObjectMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LastHero extends Functions
implements ScriptFile, OnDeathListener, OnTeleportListener, OnPlayerExitListener {
private static final Logger _log = LoggerFactory.getLogger(LastHero.class);
private static final int[] doors = {24190001, 24190002, 24190003, 24190004};
private static ScheduledFuture<?> _startTask;
private static List<Long> players_list = new CopyOnWriteArrayList();
private static List<Long> live_list = new CopyOnWriteArrayList();
private static int[][] mage_buffs;
private static int[][] fighter_buffs;
private static Map<Long, Location> playerRestoreCoord = new LinkedHashMap();
private static Map<Long, String> boxes = new LinkedHashMap();
private static boolean _isRegistrationActive = false;
private static int _status = 0;
private static int _time_to_start;
private static int _category;
private static int _minLevel;
private static int _maxLevel;
private static int _autoContinue = 0;
private static boolean _active = false;
private static Skill buff;
private static ScheduledFuture<?> _endTask;
private static Reflection reflection = ReflectionManager.LAST_HERO;
private static Map<String, ZoneTemplate> _zones = new HashMap();
private static IntObjectMap<DoorTemplate> _doors = new HashIntObjectMap();
private static Zone _zone;
private static ZoneListener _zoneListener = new ZoneListener();
private static final Location _enter = new Location(149505, 46719, -3417);
@Override
public void onLoad() {
CharListenerList.addGlobal(this);
_zones.put("[colosseum_battle]", ReflectionUtils.getZone("[colosseum_battle]").getTemplate());
for (int doorId : doors) {
_doors.put(doorId, ReflectionUtils.getDoor(doorId).getTemplate());
}
reflection.init(_doors, _zones);
_zone = reflection.getZone("[colosseum_battle]");
_zone.addListener(_zoneListener);
_active = ServerVariables.getString("LastHero", "off").equalsIgnoreCase("on");
if (isActive()) {
scheduleEventStart();
}
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroMageBuffs.length > 0)) {
mage_buffs = new int[Config.EVENT_LastHeroMageBuffs.length][2];
}
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroFighterBuffs.length > 0)) {
fighter_buffs = new int[Config.EVENT_LastHeroFighterBuffs.length][2];
}
int i = 0;
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroMageBuffs.length > 0)) {
for (String skill : Config.EVENT_LastHeroMageBuffs) {
String[] splitSkill = skill.split(",");
mage_buffs[0] = Integer.parseInt(splitSkill[0]);
mage_buffs[1] = Integer.parseInt(splitSkill[1]);
i++;
}
}
i = 0;
if ((Config.EVENT_LastHeroBuffPlayers) && (Config.EVENT_LastHeroMageBuffs.length != 0)) {
for (String skill : Config.EVENT_LastHeroFighterBuffs) {
String[] splitSkill = skill.split(",");
fighter_buffs[0] = Integer.parseInt(splitSkill[0]);
fighter_buffs[1] = Integer.parseInt(splitSkill[1]);
i++;
}
}
_log.info("Loaded Event: Last Hero");
}
@Override
public void onReload() {
_zone.removeListener(_zoneListener);
if (_startTask != null) {
_startTask.cancel(false);
_startTask = null;
}
}
@Override
public void onShutdown() {
onReload();
}
private static boolean isActive() {
return _active;
}
public void activateEvent() {
Player player = getSelf();
if (!player.getPlayerAccess().IsEventGm) {
return;
}
if (!isActive()) {
if (_startTask == null) {
scheduleEventStart();
}
ServerVariables.set("LastHero", "on");
_log.info("Event 'Last Hero' activated.");
Announcements.getInstance().announceByCustomMessage("scripts.events.LastHero.AnnounceEventStarted", null);
} else {
player.sendMessage("Event 'Last Hero' already active.");
}
_active = true;
show("admin/events/events.htm", player);
}
public void teleportPlayers() {
for (Player player : getPlayers(players_list)) {
if ((player == null) || (!playerRestoreCoord.containsKey(player.getStoredId()))) {
continue;
}
player.setIsInLastHero(false);
player.teleToLocation((Location) playerRestoreCoord.get(player.getStoredId()), ReflectionManager.DEFAULT);
}
playerRestoreCoord.clear();
}
public void deactivateEvent() {
Player player = getSelf();
if (!player.getPlayerAccess().IsEventGm) {
return;
}
if (isActive()) {
if (_startTask != null) {
_startTask.cancel(false);
_startTask = null;
}
ServerVariables.unset("LastHero");
_log.info("Event 'Last Hero' deactivated.");
Announcements.getInstance().announceByCustomMessage("scripts.events.LastHero.AnnounceEventStoped", null);
} else {
player.sendMessage("Event 'LastHero' not active.");
}
_active = false;
show("admin/events/events.htm", player);
}
public static boolean isRunned() {
return (_isRegistrationActive) || (_status > 0);
}
public static int getMinLevelForCategory(int category) {
switch (category) {
case 1:
return 20;
case 2:
return 30;
case 3:
return 40;
case 4:
return 52;
case 5:
return 62;
case 6:
return 76;
}
return 0;
}
public static int getMaxLevelForCategory(int category) {
switch (category) {
case 1:
return 29;
case 2:
return 39;
case 3:
return 51;
case 4:
return 61;
case 5:
return 75;
case 6:
return 85;
}
return 0;
}
public static int getCategory(int level) {
if ((level >= 20) && (level <= 29)) {
return 1;
}
if ((level >= 30) && (level <= 39)) {
return 2;
}
if ((level >= 40) && (level <= 51)) {
return 3;
}
if ((level >= 52) && (level <= 61)) {
return 4;
}
if ((level >= 62) && (level <= 75)) {
return 5;
}
if (level >= 76) {
return 6;
}
return 0;
}
public void start(String[] var) {
Player player = getSelf();
if (var.length != 2) {
show(new CustomMessage("common.Error", player, new Object[0]), player);
return;
}
Integer category;
Integer autoContinue;
try {
category = Integer.valueOf(var[0]);
autoContinue = Integer.valueOf(var[1]);
} catch (Exception e) {
show(new CustomMessage("common.Error", player, new Object[0]), player);
return;
}
_category = category.intValue();
_autoContinue = autoContinue.intValue();
if (_category == -1) {
_minLevel = 1;
_maxLevel = 85;
} else {
_minLevel = getMinLevelForCategory(_category);
_maxLevel = getMaxLevelForCategory(_category);
}
if (_endTask != null) {
show(new CustomMessage("common.TryLater", player, new Object[0]), player);
return;
}
_status = 0;
_isRegistrationActive = true;
_time_to_start = Config.EVENT_LastHeroTime;
players_list = new CopyOnWriteArrayList();
live_list = new CopyOnWriteArrayList();
playerRestoreCoord = new LinkedHashMap();
String[] param = {String.valueOf(_time_to_start), String.valueOf(_minLevel), String.valueOf(_maxLevel)};
sayToAll("scripts.events.LastHero.AnnouncePreStart", param);
executeTask("events.lastHero.LastHero", "question", new Object[0], 10000L);
executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000L);
}
public static void sayToAll(String address, String[] replacements) {
Announcements.getInstance().announceByCustomMessage(address, replacements, ChatType.CRITICAL_ANNOUNCE);
}
public static void question() {
for (Player player : GameObjectsStorage.getAllPlayersForIterate()) {
if ((player != null) && (!player.isDead()) && (player.getLevel() >= _minLevel) && (player.getLevel() <= _maxLevel) && (player.getReflection().isDefault()) && (!player.isInOlympiadMode()) && (!player.isInObserverMode())) {
player.scriptRequest(new CustomMessage("scripts.events.LastHero.AskPlayer", player, new Object[0]).toString(), "events.lastHero.LastHero:addPlayer", new Object[0]);
}
}
}
public static void announce() {
if (players_list.size() < 2) {
sayToAll("scripts.events.LastHero.AnnounceEventCancelled", null);
_isRegistrationActive = false;
_status = 0;
executeTask("events.lastHero.LastHero", "autoContinue", new Object[0], 10000L);
return;
}
if (_time_to_start > 1) {
_time_to_start -= 1;
String[] param = {String.valueOf(_time_to_start), String.valueOf(_minLevel), String.valueOf(_maxLevel)};
sayToAll("scripts.events.LastHero.AnnouncePreStart", param);
executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000L);
} else {
_status = 1;
_isRegistrationActive = false;
sayToAll("scripts.events.LastHero.AnnounceEventStarting", null);
executeTask("events.lastHero.LastHero", "prepare", new Object[0], 5000L);
}
}
public void addPlayer() {
Player player = getSelf();
if ((player == null) || (!checkPlayer(player, true)) || (!checkDualBox(player))) {
return;
}
players_list.add(player.getStoredId());
live_list.add(player.getStoredId());
show(new CustomMessage("scripts.events.LastHero.Registered", player, new Object[0]), player);
}
public static boolean checkPlayer(Player player, boolean first) {
if ((first) && ((!_isRegistrationActive) || (player.isDead()))) {
show(new CustomMessage("scripts.events.Late", player, new Object[0]), player);
return false;
}
if ((first) && (players_list.contains(player.getStoredId()))) {
show(new CustomMessage("scripts.events.LastHero.Cancelled", player, new Object[0]), player);
if (players_list.contains(player.getStoredId())) {
players_list.remove(player.getStoredId());
}
if (live_list.contains(player.getStoredId())) {
live_list.remove(player.getStoredId());
}
if (boxes.containsKey(player.getStoredId())) {
boxes.remove(player.getStoredId());
}
return false;
}
if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel)) {
show(new CustomMessage("scripts.events.LastHero.CancelledLevel", player, new Object[0]), player);
return false;
}
if (player.isMounted()) {
show(new CustomMessage("scripts.events.LastHero.Cancelled", player, new Object[0]), player);
return false;
}
if (player.isCursedWeaponEquipped()) {
show(new CustomMessage("scripts.events.CaptureTheFlag.Cancelled", player, new Object[0]), player);
return false;
}
if (player.isInDuel()) {
show(new CustomMessage("scripts.events.LastHero.CancelledDuel", player, new Object[0]), player);
return false;
}
if ((player.getTeam() != TeamType.NONE) || (player.isInPvPEvent())) {
show(new CustomMessage("scripts.events.CaptureTheFlag.CancelledOtherEvent", player, new Object[0]), player);
return false;
}
if ((player.getOlympiadGame() != null) || ((first) && (Olympiad.isRegistered(player)))) {
show(new CustomMessage("scripts.events.LastHero.CancelledOlympiad", player, new Object[0]), player);
return false;
}
if ((player.isInParty()) && (player.getParty().isInDimensionalRift())) {
show(new CustomMessage("scripts.events.LastHero.CancelledOtherEvent", player, new Object[0]), player);
return false;
}
if (player.isTeleporting()) {
show(new CustomMessage("scripts.events.LastHero.CancelledTeleport", player, new Object[0]), player);
return false;
}
if (player.isInObserverMode()) {
show(new CustomMessage("scripts.event.DeathMatch.CancelledObserver", player, new Object[0]), player);
return false;
}
return true;
}
public static void prepare() {
for (DoorInstance door : reflection.getDoors()) {
door.closeMe();
}
for (Zone z : reflection.getZones()) {
z.setType(Zone.ZoneType.peace_zone);
}
cleanPlayers();
clearArena();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000L);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000L);
executeTask("events.lastHero.LastHero", "paralyzePlayers", new Object[0], 3000L);
executeTask("events.lastHero.LastHero", "teleportPlayersToColiseum", new Object[0], 4000L);
executeTask("events.lastHero.LastHero", "buffPlayers", new Object[0], 5000L);
executeTask("events.lastHero.LastHero", "go", new Object[0], 60000L);
sayToAll("scripts.events.LastHero.AnnounceFinalCountdown", null);
}
public static void go() {
_status = 2;
blockItems();
upParalyzePlayers();
checkLive();
clearArena();
sayToAll("scripts.events.LastHero.AnnounceFight", null);
for (Zone z : reflection.getZones()) {
z.setType(Zone.ZoneType.battle_zone);
}
_endTask = executeTask("events.lastHero.LastHero", "endBattle", new Object[0], 300000L);
}
public static void endBattle() {
_status = 0;
removeAura();
for (DoorInstance door : reflection.getDoors()) {
door.openMe();
}
for (Zone z : reflection.getZones()) {
z.setType(Zone.ZoneType.peace_zone);
}
boxes.clear();
if (live_list.size() == 1) {
Iterator i$ = getPlayers(live_list).iterator();
if (i$.hasNext()) {
Player player = (Player) i$.next();
String[] repl = {player.getName()};
sayToAll("scripts.events.LastHero.AnnounceWiner", repl);
addItem(player, Config.EVENT_LastHeroItemID, Math.round(Config.EVENT_LastHeroRateFinal ? player.getLevel() * Config.EVENT_LastHeroItemCOUNTFinal : 1.0D * Config.EVENT_LastHeroItemCOUNTFinal));
player.setHero(true);
Hero.addSkills(player);
player.updatePledgeClass();
player.sendPacket(new SkillList(player));
player.broadcastUserInfo(true);
player.setVar("HeroPeriod", String.valueOf(System.currentTimeMillis() + 60 * 1000 * 60 * 24 * 1), -1);
ThreadPoolManager.getInstance().schedule(new EndHero(player), System.currentTimeMillis() + (60 * 1000 * 60 * 24 * 1));
player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
if (Config.EVENT_LAST_HERO_AURA_ENABLE) {
player.setHeroAura(true);
player.broadcastCharInfo();
}
}
}
sayToAll("scripts.events.LastHero.AnnounceEnd", null);
executeTask("events.lastHero.LastHero", "end", new Object[0], 30000L);
_isRegistrationActive = false;
if (_endTask != null) {
_endTask.cancel(false);
_endTask = null;
}
}
public static void end() {
unlockItems();
executeTask("events.lastHero.LastHero", "ressurectPlayers", new Object[0], 1000L);
executeTask("events.lastHero.LastHero", "healPlayers", new Object[0], 2000L);
executeTask("events.lastHero.LastHero", "teleportPlayers", new Object[0], 3000L);
executeTask("events.lastHero.LastHero", "autoContinue", new Object[0], 10000L);
}
public void autoContinue() {
if (_autoContinue > 0) {
if (_autoContinue >= 6) {
_autoContinue = 0;
return;
}
start(new String[]{"" + (_autoContinue + 1), "" + (_autoContinue + 1)});
} else {
scheduleEventStart();
}
}
public static void teleportPlayersToColiseum() {
for (Player player : getPlayers(players_list)) {
unRide(player);
if (!Config.EVENT_LastHeroAllowSummons) {
unSummonPet(player, true);
}
DuelEvent duel = (DuelEvent) player.getEvent(DuelEvent.class);
if (duel != null) {
duel.abortDuel(player);
}
playerRestoreCoord.put(player.getStoredId(), new Location(player.getX(), player.getY(), player.getZ()));
player.teleToLocation(Location.findPointToStay(_enter, 150, 500, ReflectionManager.DEFAULT.getGeoIndex()), reflection);
player.setIsInLastHero(true);
}
}
public static void paralyzePlayers() {
for (Player player : getPlayers(players_list)) {
if (player == null) {
continue;
}
player.getEffectList().stopEffect(Skill.SKILL_MYSTIC_IMMUNITY);
if (!player.isParalyzed()) {
player.startParalyzed();
if (player.getPet() != null) {
player.getPet().startParalyzed();
}
}
}
}
public static void upParalyzePlayers() {
for (Player player : getPlayers(players_list)) {
if (player == null) {
continue;
}
if (player.isParalyzed()) {
player.stopParalyzed();
if (player.getPet() != null) {
player.getPet().stopParalyzed();
}
}
}
}
public static void blockItems() {
for (Player player : getPlayers(players_list)) {
if (player == null) {
continue;
}
player.getInventory().lockItems(LockType.INCLUDE, Config.EVENT_LastHeroEventBlockItems);
}
}
public static void unlockItems() {
for (Player player : getPlayers(players_list)) {
if (player == null) {
continue;
}
player.getInventory().unlock();
}
}
public static void ressurectPlayers() {
for (Player player : getPlayers(players_list)) {
if (player.isDead()) {
player.restoreExp();
player.setCurrentCp(player.getMaxCp());
player.setCurrentHp(player.getMaxHp(), true);
player.setCurrentMp(player.getMaxMp());
player.broadcastPacket(new L2GameServerPacket[]{new Revive(player)});
}
}
}
public static void healPlayers() {
for (Player player : getPlayers(players_list)) {
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
player.setCurrentCp(player.getMaxCp());
}
}
public static void cleanPlayers() {
for (Player player : getPlayers(players_list)) {
if (!checkPlayer(player, false)) {
removePlayer(player);
}
}
}
public static void checkLive() {
List new_live_list = new CopyOnWriteArrayList();
for (Long storeId : live_list) {
Player player = GameObjectsStorage.getAsPlayer(storeId.longValue());
if (player != null) {
new_live_list.add(storeId);
}
}
live_list = new_live_list;
for (Player player : getPlayers(live_list)) {
if ((player.isInZone(_zone)) && (!player.isDead()) && (!player.isLogoutStarted())) {
player.setTeam(TeamType.BLUE);
} else {
loosePlayer(player);
}
}
if (live_list.size() <= 1) {
endBattle();
}
}
public static void removeAura() {
for (Player player : getPlayers(live_list)) {
player.setTeam(TeamType.NONE);
player.setIsInLastHero(false);
}
}
public static void clearArena() {
for (GameObject obj : _zone.getObjects()) {
if (obj == null) {
continue;
}
Player player = obj.getPlayer();
if ((player != null) && (!live_list.contains(player.getStoredId()))) {
player.teleToLocation(147451, 46728, -3410, ReflectionManager.DEFAULT);
}
}
}
@Override
public void onDeath(Creature self, Creature killer) {
if ((_status > 1) && (self.isPlayer()) && (self.getTeam() != TeamType.NONE) && (live_list.contains(self.getStoredId()))) {
Player player = (Player) self;
loosePlayer(player);
checkLive();
if ((killer != null) && (killer.isPlayer()) && (killer.getPlayer().getExpertiseIndex() - player.getExpertiseIndex() > 2)) {
addItem((Player) killer, Config.EVENT_LastHeroItemID, Math.round(Config.EVENT_LastHeroRate ? player.getLevel() * Config.EVENT_LastHeroItemCOUNT : 1.0D * Config.EVENT_LastHeroItemCOUNT));
}
// self.getPlayer().setIsInLastHero(false);
}
}
@Override
public void onTeleport(Player player, int x, int y, int z, Reflection reflection) {
if (_zone.checkIfInZone(x, y, z, reflection)) {
return;
}
if ((_status > 1) && (player.getTeam() != TeamType.NONE) && (live_list.contains(player.getStoredId()))) {
removePlayer(player);
checkLive();
}
}
@Override
public void onPlayerExit(Player player) {
if (player.getTeam() == TeamType.NONE) {
return;
}
if ((_status == 0) && (_isRegistrationActive) && (live_list.contains(player.getStoredId()))) {
removePlayer(player);
return;
}
if ((_status == 1) && (live_list.contains(player.getStoredId()))) {
player.teleToLocation((Location) playerRestoreCoord.get(player.getStoredId()), ReflectionManager.DEFAULT);
removePlayer(player);
return;
}
if ((_status > 1) && (player.getTeam() != TeamType.NONE) && (live_list.contains(player.getStoredId()))) {
removePlayer(player);
checkLive();
}
}
private static void loosePlayer(Player player) {
if (player != null) {
live_list.remove(player.getStoredId());
player.setTeam(TeamType.NONE);
show(new CustomMessage("scripts.events.LastHero.YouLose", player, new Object[0]), player);
}
}
private static void removePlayer(Player player) {
if (player != null) {
live_list.remove(player.getStoredId());
players_list.remove(player.getStoredId());
playerRestoreCoord.remove(player.getStoredId());
player.setIsInLastHero(false);
if (!Config.EVENT_LastHeroAllowMultiReg) {
boxes.remove(player.getStoredId());
}
player.setTeam(TeamType.NONE);
player.getInventory().unlock();
}
}
private static List<Player> getPlayers(List<Long> list) {
List result = new ArrayList(list.size());
for (Long storeId : list) {
Player player = GameObjectsStorage.getAsPlayer(storeId.longValue());
if (player != null) {
result.add(player);
}
}
return result;
}
public static void buffPlayers() {
for (Player player : getPlayers(players_list)) {
if (!Config.EVENT_LastHeroAllowBuffs) {
player.getEffectList().stopAllEffects();
if (player.getPet() != null) {
player.getPet().getEffectList().stopAllEffects();
}
}
}
if (!Config.EVENT_LastHeroBuffPlayers) {
return;
}
for (Player player : getPlayers(players_list)) {
if (player.isMageClass()) {
mageBuff(player);
} else {
fighterBuff(player);
}
}
for (Player player : getPlayers(live_list)) {
if (player.isMageClass()) {
mageBuff(player);
} else {
fighterBuff(player);
}
}
}
public void scheduleEventStart() {
try {
Calendar currentTime = Calendar.getInstance();
Calendar nextStartTime = null;
Calendar testStartTime = null;
for (String timeOfDay : Config.EVENT_LastHeroStartTime) {
testStartTime = Calendar.getInstance();
testStartTime.setLenient(true);
String[] splitTimeOfDay = timeOfDay.split(":");
testStartTime.set(11, Integer.parseInt(splitTimeOfDay[0]));
testStartTime.set(12, Integer.parseInt(splitTimeOfDay[1]));
if (testStartTime.getTimeInMillis() < currentTime.getTimeInMillis()) {
testStartTime.add(5, 1);
}
if ((nextStartTime == null) || (testStartTime.getTimeInMillis() < nextStartTime.getTimeInMillis())) {
nextStartTime = testStartTime;
}
if (_startTask != null) {
_startTask.cancel(false);
_startTask = null;
}
_startTask = ThreadPoolManager.getInstance().schedule(new StartTask(), nextStartTime.getTimeInMillis() - System.currentTimeMillis());
}
currentTime = null;
nextStartTime = null;
testStartTime = null;
} catch (Exception e) {
_log.warn("LH: Error figuring out a start time. Check TvTEventInterval in config file.");
}
}
public static void mageBuff(Player player) {
for (int i = 0; i < mage_buffs.length; i++) {
buff = SkillTable.getInstance().getInfo(mage_buffs[0], mage_buffs[1]);
buff.getEffects(player, player, false, false);
}
}
public static void fighterBuff(Player player) {
for (int i = 0; i < fighter_buffs.length; i++) {
buff = SkillTable.getInstance().getInfo(fighter_buffs[0], fighter_buffs[1]);
buff.getEffects(player, player, false, false);
}
}
private static boolean checkDualBox(Player player) {
if (!Config.EVENT_LastHeroAllowMultiReg) {
if ("IP".equalsIgnoreCase(Config.EVENT_LastHeroCheckWindowMethod)) {
if (boxes.containsValue(player.getIP())) {
show(new CustomMessage("scripts.events.LH.CancelledBox", player, new Object[0]), player);
return false;
}
} else if (("HWid".equalsIgnoreCase(Config.EVENT_LastHeroCheckWindowMethod))
&& (boxes.containsValue(player.getNetConnection().getHWID()))) {
show(new CustomMessage("scripts.events.DeathMatch.CancelledBox", player, new Object[0]), player);
return false;
}
}
return true;
}
public class StartTask extends RunnableImpl {
public StartTask() {
}
@Override
public void runImpl() {
if (!LastHero._active) {
return;
}
if (Functions.isPvPEventStarted()) {
_log.info("LH not started: another event is already running");
return;
}
for (Residence c : ResidenceHolder.getInstance().getResidenceList(Castle.class)) {
if ((c.getSiegeEvent() != null) && (c.getSiegeEvent().isInProgress())) {
_log.debug("LH not started: CastleSiege in progress");
return;
}
}
if (Config.EVENT_LastHeroCategories) {
LastHero.this.start(new String[]{"1", "1"});
} else {
LastHero.this.start(new String[]{"-1", "-1"});
}
}
}
private static class ZoneListener
implements OnZoneEnterLeaveListener {
@Override
public void onZoneEnter(Zone zone, Creature cha) {
if (cha == null) {
return;
}
Player player = cha.getPlayer();
if ((LastHero._status > 0) && (player != null) && (!LastHero.live_list.contains(player.getStoredId()))) {
player.teleToLocation(147451, 46728, -3410, ReflectionManager.DEFAULT);
}
}
@Override
public void onZoneLeave(Zone zone, Creature cha) {
if (cha == null) {
return;
}
Player player = cha.getPlayer();
if ((LastHero._status > 1) && (player != null) && (player.getTeam() != TeamType.NONE) && (LastHero.live_list.contains(player.getStoredId()))) {
double angle = PositionUtils.convertHeadingToDegree(cha.getHeading());
double radian = Math.toRadians(angle - 90.0D);
int x = (int) (cha.getX() + 250.0D * Math.sin(radian));
int y = (int) (cha.getY() - 250.0D * Math.cos(radian));
int z = cha.getZ();
player.teleToLocation(x, y, z, LastHero.reflection);
}
}
}
private static class EndHero implements Runnable {
private Player player;
public EndHero(Player player) {
this.player = player;
}
@Override
public void run() {
player.setHero(false);
Hero.removeSkills(player);
player.unsetVar("HeroPeriod");
player.updatePledgeClass();
player.sendPacket(new SkillList(player));
player.broadcastUserInfo(true);
}
}
}
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.