Last Hero - Не работает

Tagib

Последний из атеистов
Пользователь
Сообщения
64
Розыгрыши
0
Решения
1
Репутация
0
Реакции
3
Баллы
860
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
l2gw
Идет полный отсчет запуска ивента, включается каждый час, но в ивент не запускает
Мне сказали для него нужен Strix Guard (Так ли это?), типа он работает через HWID и поэтому никого не пускает на ивет, хоть все могут зарегистрироваться
Возможно ли убрать через HWID и сделать по IP? и как это сделать?
Лазил в файлах самого ивента Last Hero.java - в нем нет никакого упоминания HWID или что-то подобного, возможно где-то в ядре есть, но пока не смог найти
 
Без кода эвента остается только гадать, но гадалок тут нет.
 
1. Что говорит лог во время регистрации и в момент, когда должен забирать людей?
2. На сегодняшний день, почти на всех сборках, эти настройки давно выведены в конфиг. Можно поменять с HWID на IP.
 
Java:
package events.lastHero;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ScheduledFuture;

import javolution.util.FastList;

import ru.l2gw.gameserver.Announcements;
import ru.l2gw.gameserver.Config;
import ru.l2gw.gameserver.extensions.listeners.L2ZoneEnterLeaveListener;
import ru.l2gw.gameserver.instancemanager.InstanceManager;
import ru.l2gw.gameserver.listener.actor.OnDeathListener;
import ru.l2gw.gameserver.listener.actor.player.OnPlayerExitListener;
import ru.l2gw.gameserver.model.Creature;
import ru.l2gw.gameserver.model.GameObject;
import ru.l2gw.gameserver.model.GameObjectsStorage;
import ru.l2gw.gameserver.model.L2Skill;
import ru.l2gw.gameserver.model.Player;
import ru.l2gw.gameserver.model.Reflection;
import ru.l2gw.gameserver.model.actor.listener.CharListenerList;
import ru.l2gw.gameserver.model.entity.instance.Instance;
import ru.l2gw.gameserver.model.entity.olympiad.Olympiad;
import ru.l2gw.gameserver.model.gmaccess.AdminTemplateManager;
import ru.l2gw.gameserver.model.instances.L2NpcInstance;
import ru.l2gw.gameserver.model.zone.L2Zone;
import ru.l2gw.gameserver.scripts.Functions;
import ru.l2gw.gameserver.scripts.ScriptFile;
import ru.l2gw.gameserver.serverpackets.ExShowScreenMessage;
import ru.l2gw.gameserver.tables.ReflectionTable;
import ru.l2gw.gameserver.tables.SkillTable;
import ru.l2gw.gameserver.util.Files;
import ru.l2gw.gameserver.util.Location;

import events.Capture.Capture;
import events.TvT.TvT;

public class LastHero extends Functions implements ScriptFile, OnPlayerExitListener, OnDeathListener
{
    public GameObject self;
    public L2NpcInstance npc;
    
    private static FastList<Integer> registered = new FastList<>();
    static FastList<Integer> participants = new FastList<>();
    private static FastList<Player> emptyList = new FastList<>(0);
    private static Instance lastHeroInstance;
    
    static Integer _status = 0;
    
    private static Boolean _running = true;
    // Статус запуска
    
    static Boolean _alternate_form = Config.EVENT_LastHero_heroMod;
    // Алтернативная формула проведения эвента
    
    private static Boolean _lvlSort = Config.EVENT_LastHero_sortBylvl;
    // Заготовка для сортировки по лвлам
    
    private static Integer _time_to_start = Config.EVENT_LastHeroTime;
    // Время до начала боя
    
    private static Integer _event_time = Config.EVENT_LastHero_FightTime;
    // Продолжительность эвента
    
    private static Integer _bonus_id = Config.EVENT_LastHeroBonusID;
    // Продолжительность эвента
    
    private static Integer _bonus_count = Config.EVENT_LastHeroBonusCount;
    // Продолжительность эвента
    
    private static String _ann1 = Config.EVENT_LastHero_ruleMsg1;
    private static String _ann2 = Config.EVENT_LastHero_ruleMsg2;
    private static String _ann3 = Config.EVENT_LastHero_ruleMsg3;
    private static String _ann4 = Config.EVENT_LastHero_ruleMsg4;
    private static String _invMsg = Config.EVENT_LastHero_msgInv;
    private static String _startMsg = Config.EVENT_LastHero_msgStart;
    private static String _stopMsg = Config.EVENT_LastHero_msgStopEv;
    private static String _missMsg = Config.EVENT_LastHero_msgMiss;
    private static String _min_rem = " минут осталось до запуска...";
    private static String _event_end = Config.EVENT_LastHero_msgEndEv;
    private static String _no_winers = Config.EVENT_LastHero_msgNoWIn;
    private static String _die_msg = Config.EVENT_LastHero_msgDie;
    private static String _back_msg = Config.EVENT_LastHero_msgTP;
    private static String _prep_msg = Config.EVENT_LastHero_msgPrep;
    private static String _fight_msg = Config.EVENT_LastHero_msgFight;
    
    private static boolean dispel = Config.EVENT_LastHero_dispel;
    
    static ScheduledFuture<?> _endTask;
    private static ScheduledFuture<?> _cycleTask;
    
    private static ZoneListener zoneListener = new ZoneListener();
    
    @Override
    public void onLoad()
    {
        CharListenerList.addGlobal(this);
        if (Config.EVENT_LastHero_enabled)
        {
            long startTime = Config.EVENT_LastHero_cron.timeNextUsage(System.currentTimeMillis());
            _log.info("Loaded Event: Last Hero [state: activated] event start: " + new Date(startTime));
            _cycleTask = executeTask("events.lastHero.LastHero", "start", new Object[0], startTime - System.currentTimeMillis());
        }
        else
        {
            _log.info("Loaded Event: Last Hero [state: deactivated]");
        }
    }
    
    @Override
    public void onReload()
    {
    }
    
    @Override
    public void onShutdown()
    {
    }
    
    public static boolean isRunned()
    {
        return _running;
    }
    
    public String DialogAppend_31225(Integer val)
    {
        if (val == 0)
        {
            Player player = (Player) self;
            return Files.read("data/scripts/events/lastHero/31225.html", player);
        }
        return "";
    }
    
    public void start()
    {
        if (self != null)
        {
            if (!AdminTemplateManager.checkBoolean("eventMaster", (Player) self))
            {
                return;
            }
        }
        
        if (_status != 0)
        {
            _log.info("Event: Last Hero not started! status: " + _status);
            if (self != null)
            {
                ((Player) self).sendMessage("Last Hero is running! status: " + _status);
            }
            
            return;
        }
        
        _log.info("Event: Last Hero started!");
        
        _status = 1;
        _running = false;
        _time_to_start = Config.EVENT_LastHeroTime;
        
        participants.clear();
        
        Announcements.getInstance().announceToAll(String.valueOf(_startMsg));
        
        executeTask("events.lastHero.LastHero", "question", new Object[0], 20000L);
        executeTask("events.lastHero.LastHero", "announce", new Object[0], 50000L);
    }
    
    public static void question()
    {
        for (Player player : GameObjectsStorage.getAllPlayers())
        {
            if (checkPlayerCondition(player) && !TvT.isRegistered(player) && !Capture.isRegistered(player))
            {
                player.scriptRequest(String.valueOf(_invMsg), "events.lastHero.LastHero:addPlayer", new Object[0]);
            }
        }
    }
    
    public static boolean isRegistered(Player player)
    {
        return Config.EVENT_LastHero_enabled && registered.contains(player.getObjectId());
    }
    
    public void addPlayer()
    {
        if (!(self instanceof Player))
        {
            return;
        }
        
        Player player = (Player) self;
        
        if (_status != 1)
        {
            player.sendMessage("Нельзя зарегистрироваться на эвент в это время.");
            return;
        }
        
        if (!checkPlayerCondition(player) || TvT.isRegistered(player) || Capture.isRegistered(player))
        {
            player.sendMessage("Вы не соответсвуете требования для учестия в эвенте.");
            return;
        }
        
        if (!registered.contains(player.getObjectId()))
        {
            player.sendMessage("Вы зарегистрированы для участия в Last Hero.");
            registered.add(player.getObjectId());
        }
        else
        {
            player.sendMessage("Вы уже зарегистрированы.");
        }
    }
    
    public static void announce()
    {
        Announcements a = Announcements.getInstance();
        if (registered.size() < Config.EVENT_LastHeroMinParticipants)
        {
            a.announceToAll(String.valueOf(_stopMsg));
            registered.clear();
            _log.info("Event: Last Hero no minimum participants.");
            rescheduleEvent();
            return;
        }
        
        if (_time_to_start > 1)
        {
            _time_to_start--;
            a.announceToAll(_time_to_start + _min_rem);
            
            if ((_time_to_start % 3) == 0)
            {
                a.announceToAll(String.valueOf(_missMsg));
            }
            
            executeTask("events.lastHero.LastHero", "announce", new Object[0], 60000L);
        }
        else
        {
            a.announceToAll(_prep_msg);
            executeTask("events.lastHero.LastHero", "prepare", new Object[0], 5000L);
        }
    }
    
    public static void prepare()
    {
        if (!_running)
        {
            return;
        }
        
        teleportPlayersToColiseum();
        executeTask("events.lastHero.LastHero", "go", new Object[0], 120000L);
        
        Announcements a = Announcements.getInstance();
        a.announceToAll(String.valueOf(_ann1));
        a.announceToAll(String.valueOf(_ann2));
        a.announceToAll(String.valueOf(_ann3));
        a.announceToAll(String.valueOf(_ann4));
    }
    
    public static void teleportPlayersToColiseum()
    {
        _status = 2;
        
        FastList<Player> players = FastList.newInstance();
        for (int objectId : registered)
        {
            Player player = GameObjectsStorage.getPlayer(objectId);
            if ((player == null) || player.isInOfflineMode() || player.isInOlympiadMode() || player.inObserverMode() || player.isInDuel() || player.isAlikeDead() || player.isInCombat() || player.isCastingNow() || Olympiad.isRegisteredInComp(player) || (player.getReflection() != 0) || player.isInBoat())
            {
                continue;
            }
            
            participants.add(player.getObjectId());
            players.add(player);
        }
        
        registered.clear();
        
        if (players.size() < Config.EVENT_LastHeroMinParticipants)
        {
            participants.clear();
            Announcements.getInstance().announceToAll(String.valueOf(_stopMsg));
            _log.info("Event: Last Hero no minimum participants.");
            FastList.recycle(players);
            rescheduleEvent();
            return;
        }
        
        lastHeroInstance = InstanceManager.getInstance().createNewInstance(-1, emptyList);
        lastHeroInstance.getTemplate().getZone().setActive(true, lastHeroInstance.getReflection());
        lastHeroInstance.getTemplate().getZone().getListenerEngine().addMethodInvokedListener(zoneListener);
        lastHeroInstance.startInstance();
        
        L2Skill nobleSkill = SkillTable.getInstance().getInfo(1323, 1);
        L2Skill cancelSkill = SkillTable.getInstance().getInfo(4334, 1);
        
        for (Player player : players)
        {
            player.block();
            if (player.getParty() != null)
            {
                player.getParty().removePartyMember(player);
            }
            player.setStablePoint(player.getLoc());
            player.teleToLocation(Location.coordsRandomize(149505, 46719, -3417, 0, 0, 500), lastHeroInstance.getReflection());
            player.setTeam(2);
            if (dispel)
            {
                List<Creature> targets = new ArrayList<>(1);
                targets.add(player);
                cancelSkill.useSkill(player, targets);
            }
            else
            {
                player.stopEffects("hero");
                player.stopEffects("barrier");
                player.stopEffects("mystic_immunity");
            }
            
            nobleSkill.applyEffects(player, player, false);
            if (player.getPet() != null)
            {
                player.getPet().block();
                if (dispel)
                {
                    cancelSkill.applyEffects(player, player.getPet(), false);
                }
                else
                {
                    player.getPet().stopEffects("hero");
                    player.getPet().stopEffects("barrier");
                    player.getPet().stopEffects("mystic_immunity");
                }
            }
        }
        
        FastList.recycle(players);
    }
    
    public static void go()
    {
        _status = 3;
        
        FastList<Player> players = getParticipants();
        if (players.size() < Config.EVENT_LastHeroMinParticipants)
        {
            participants.clear();
            Announcements.getInstance().announceToAll(String.valueOf(_stopMsg));
            _log.info("Event: Last Hero no minimum participants.");
            rescheduleEvent();
            FastList.recycle(players);
            return;
        }
        
        _log.info("Event: Last Hero start battle, participants: " + players.size());
        
        ExShowScreenMessage msg = new ExShowScreenMessage(">> Start FIGHT <<", 3000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true);
        for (Player player : players)
        {
            player.unblock();
            player.sendPacket(msg);
            if (player.getPet() != null)
            {
                player.getPet().unblock();
            }
        }
        
        FastList.recycle(players);
        Announcements.getInstance().announceToAll(_fight_msg);
        
        _endTask = executeTask("events.lastHero.LastHero", "endBattle", new Object[0], _event_time * 60000L);
    }
    
    public static FastList<Player> getParticipants()
    {
        if (lastHeroInstance == null)
        {
            return emptyList;
        }
        
        Reflection ref = ReflectionTable.getInstance().getById(lastHeroInstance.getReflection());
        if (ref == null)
        {
            return emptyList;
        }
        
        FastList<Player> players = FastList.newInstance();
        for (GameObject cha : ref.getAllObjects())
        {
            if ((cha instanceof Player) && !((Player) cha).isDeleting() && ((Player) cha).isOnline() && participants.contains(cha.getObjectId()))
            {
                players.add((Player) cha);
            }
        }
        
        return players;
    }
    
    public static void endBattle()
    {
        Announcements a = Announcements.getInstance();
        a.announceToAll(_event_end);
        
        _log.info("Event: Last Hero battle end, no winner.");
        FastList<Player> players = getParticipants();
        
        for (Player player : players)
        {
            if (!player.isDead())
            {
                _log.info("Event: Last Hero live " + player + " at " + player.getLoc() + " visible: " + player.isVisible() + " isHide: " + player.isHide() + " isOnline: " + player.isOnline() + " teleport: " + player.isTeleporting());
            }
        }
        
        a.announceToAll(_no_winers);
        a.announceToAll(_back_msg);
        
        executeTask("events.lastHero.LastHero", "end", new Object[0], 5000L);
        rescheduleEvent();
        
        FastList.recycle(players);
        
        if (_endTask != null)
        {
            _endTask.cancel(false);
        }
        _endTask = null;
    }
    
    public static void end()
    {
        FastList<Player> players = getParticipants();
        for (Player player : players)
        {
            player.stopEffectsByName("c_fake_death");
            if (player.isDead())
            {
                player.doRevive();
            }
            player.setCurrentCp(player.getMaxCp());
            player.setCurrentHp(player.getMaxHp());
            player.setCurrentMp(player.getMaxMp());
            player.unsetVar("LH_REWARD");
            player.setTeam(0);
            player.teleToLocation(player.getStablePoint(), 0);
            player.setStablePoint(null);
            player.unblock();
            if (player.getPet() != null)
            {
                player.getPet().unblock();
            }
        }
        
        lastHeroInstance.getTemplate().getZone().getListenerEngine().removeMethodInvokedListener(zoneListener);
        lastHeroInstance.getTemplate().getZone().setActive(false, lastHeroInstance.getReflection());
        lastHeroInstance.stopInstance();
        lastHeroInstance = null;
        FastList.recycle(players);
    }
    
    @Override
    public void onDie(Creature killed, Creature killer)
    {
        if ((_status == 3) && (killed instanceof Player) && (killed.getReflection() == lastHeroInstance.getReflection()))
        {
            ((Player) killed).sendMessage(_die_msg);
            ((Player) killed).setTeam(0);
            if (!_alternate_form)
            {
                if ((killer != null) && killer.isPlayer())
                {
                    if (Config.EVENT_LastHeroRate)
                    {
                        ((Player) killer).addItem("last_hero", _bonus_id, ((Player) killed).getLevel() * _bonus_count, null, true);
                    }
                    else
                    {
                        ((Player) killer).addItem("last_hero", _bonus_id, _bonus_count, null, true);
                    }
                }
            }
            else if ((killer != null) && (killer.getPlayer() != null))
            {
                Player player = killer.getPlayer();
                int pReward = player.getVarInt("LH_REWARD");
                
                if (Config.EVENT_LastHeroRate)
                {
                    pReward += ((Player) killed).getLevel() * _bonus_count;
                }
                else
                // Give one-time reward to winner, if "Hero Mod" enabled and rate accumulative disabled
                if (pReward <= 0)
                {
                    pReward = _bonus_count;
                }
                
                player.setVar("LH_REWARD", String.valueOf(pReward));
                
                Player lastHero = getLastHero();
                
                if (lastHero != null)
                {
                    endByWinner(lastHero);
                    
                    if (_endTask != null)
                    {
                        _endTask.cancel(false);
                    }
                    _endTask = null;
                }
            }
        }
    }
    
    static void endByWinner(Player lastHero)
    {
        lastHero.addItem("last_hero", _bonus_id, lastHero.getVarInt("LH_REWARD"), null, true);
        lastHero.setHero(true);
        Announcements a = Announcements.getInstance();
        a.announceToAll(lastHero.getName() + " has become a 'Last Hero'!!!");
        a.announceToAll(_event_end);
        _log.info("Event: Last Hero battle end, winner: " + lastHero + " at " + lastHero.getLoc() + " visible: " + lastHero.isVisible());
        a.announceToAll(_back_msg);
        executeTask("events.lastHero.LastHero", "end", new Object[0], 5000L);
        rescheduleEvent();
    }
    
    static Player getLastHero()
    {
        FastList<Player> players = getParticipants();
        Player lastHero = null;
        try
        {
            int liveCount = 0;
            for (Player player : players)
            {
                if (!player.isVisible())
                {
                    _log.info("Event: Last Hero getLastHero: " + player + " at " + player.getLoc() + " visible: " + player.isVisible() + " teleport: " + player.isTeleporting());
                }
                else if (!player.isDead() && lastHeroInstance.getTemplate().getZone().isInsideZone(player))
                {
                    liveCount++;
                    lastHero = player;
                    if (liveCount > 1)
                    {
                        lastHero = null;
                        break;
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            FastList.recycle(players);
        }
        return lastHero;
    }
    
    private static void rescheduleEvent()
    {
        _status = 0;
        _running = false;
        
        if (Config.EVENT_LastHero_enabled)
        {
            if (_cycleTask != null)
            {
                _cycleTask.cancel(true);
            }
            
            long startTime = Config.EVENT_LastHero_cron.timeNextUsage(System.currentTimeMillis());
            _log.info("Event: Last Hero next start: " + new Date(startTime));
            _cycleTask = executeTask("events.lastHero.LastHero", "start", new Object[0], startTime - System.currentTimeMillis());
        }
    }
    
    @Override
    public void onPlayerExit(Player player)
    {
        if ((_status < 2) && registered.contains(player.getObjectId()))
        {
            registered.remove((Integer) player.getObjectId());
        }
        else if ((_status >= 2) && participants.contains(player.getObjectId()))
        {
            participants.remove((Integer) player.getObjectId());
            if (_alternate_form)
            {
                Player lastHero = getLastHero();
                if (lastHero != null)
                {
                    endByWinner(lastHero);
                    
                    if (_endTask != null)
                    {
                        _endTask.cancel(true);
                    }
                    _endTask = null;
                }
            }
            else
            {
                FastList<Player> players = getParticipants();
                int c = 0;
                for (Player participant : players)
                {
                    if (!participant.isDead())
                    {
                        c++;
                    }
                }
                if (c < 2)
                {
                    endBattle();
                }
                FastList.recycle(players);
            }
        }
    }
    
    private static class ZoneListener extends L2ZoneEnterLeaveListener
    {
        public ZoneListener()
        {
        }
        
        @Override
        public void objectEntered(L2Zone zone, Creature object)
        {
        }
        
        @Override
        public void objectLeaved(L2Zone zone, Creature object)
        {
            
            if ((object instanceof Player) && (_status >= 2) && participants.contains(object.getObjectId()))
            {
                _log.info("Event: Last Hero player leaved zone on battle: " + object + " " + object.getLoc());
                participants.remove((Integer) object.getObjectId());
                if (_alternate_form)
                {
                    Player lastHero = getLastHero();
                    if (lastHero != null)
                    {
                        endByWinner(lastHero);
                        
                        if (_endTask != null)
                        {
                            _endTask.cancel(false);
                        }
                        _endTask = null;
                    }
                }
                else
                {
                    FastList<Player> players = getParticipants();
                    int c = 0;
                    for (Player participant : players)
                    {
                        if (!participant.isDead())
                        {
                            c++;
                        }
                    }
                    if (c < 2)
                    {
                        endBattle();
                    }
                    FastList.recycle(players);
                }
                object.setReflection(0);
                object.unblock();
                if (object.getPet() != null)
                {
                    object.getPet().unblock();
                }
                ((Player) object).setTeam(0);
            }
        }
        
        @Override
        public void sendZoneStatus(L2Zone zone, Player object)
        {
        }
    }
}

Код:
######### NPC Buffer config ############
# Минимальный уровень для бафа
Min_lvl = 1
# Максимальный уровень для бафа
Max_lvl = 99
# Стоимость 1 баффа
price = 5000
# Разрешены бафы во время осад?
Buffer_Siege = false
# Во сколько раз увеличивать бафы по времени(int)
# Данный модификатор бафа относится только к эвенту NPC Buffer
# На модификатор бафов персонаж-персонаж не влияет.
EVENT_BUFFER_MOD=1
######## NPC Buffer config end #########



####### Coffer of Shadows config #######
# Рейт на цену сундучков х1=50к
CofferOfShadowsPriceRate = 1
# Рейт на награды, вещественное число (раньше было эквивалентно RateDropItems)
CofferOfShadowsRewardRate = 1.
##### Coffer of Shadows config end #####

# У классмастеров можно покупать шоты по двойной цене
# отредактировать список можно тут: gameserver\data\classmaster_buylists.xml
CM_SellSS = False
# Мультиселл №1 у классмастеров (продажа за CoL, список создается на свой вкус)
# при использовании DonateShop не актуален
CM_CoLShop = False

#TheFallHarvest (Default 5 = 0.5%)
TFH_POLLEN_CHANCE = 5

#Glittering medal
GLIT_MEDAL_CHANCE = 10
GLIT_GLITTMEDAL_CHANCE = 5
# Минимальный уровень мобов с которых будут падать медальки
GLIT_MIN_MOB_LEVEL = 10
# Максимальная разница в уровнях моба
GLIT_MAX_LEVEL_DIFF = 3
GLIT_EnableRate = true


##### Last Hero #####
LastHero_enabled = true

# ID вещи за каждого убитого (57 - адена)
LastHero_bonus_id = 4037

# Количество вещи за каждого убитого (то, что умножается на уровень убитого)
LastHero_bonus_count = 0

# Время до старта (при каждом запуске, ждем указанное кол-во минут до старта)
LastHero_time = 5

# Домножать на лвл убитого?
LastHero_rate = true

# Продолжительность боя. ПО-умолчанию равен 5 минутам
LastHero_fighttime = 5

#Альтернативный вариант эвента (Hero-mod). При значении true
#награду и статус "Последнего Героя" (аура Героя до первого релогина) получает только победитель,
#тот кто остался в живых. Если в живых осталось более одного
#игрока, то - ничья. Награду не получает никто. При значении равном false - классический эвент, каждый
#игрок,который убил хотя бы одного оппонента получает награду.
LastHero_heroMod = true

# Время запуска ласт хиро, соответсвую формату crontab
LastHero_cron=0 */3 * * *

# Минимальное количество участников
LastHero_MinParticipants = 2

#Аннонсы эвента
LastHero_ruleMsg1= Эвент длится 5 минут.
LastHero_ruleMsg2= Цель - убить как можно больше игроков.
LastHero_ruleMsg3= За победу начисляется 10 CoL!!!
LastHero_ruleMsg3= Старт через 2 минуты, по команде 'FIGHT!!!
LastHero_msgStart = Запущен эвент Last Hero.
LastHero_msgInv = Вы хотите принять участие в эвенте?
LastHero_msgMiss = Пропустившие момент регистрации, могут зарегистрироваться в Alt+B
LastHero_msgStopEv = Эвент отменен, слишком мало участников.
LastHero_msgEndEv = Эвент 'Last Hero' завершен
LastHero_msgNoWIn = Эвент закончился вничью
LastHero_msgDie = Вас убили. Ждите окончания эвента
LastHero_msgTP = Телепортация всех игроков обратно...
LastHero_msgPrep = Боевая готовность...!
LastHero_msgFight = >>> FIGHT!!! <<<

#Заготовка на разделение по уровням персонажей, приглашаемых на эвент. По-умолчанию равно false
LastHero_sortBylvl = false

#Снимать бафы перед началом эвента или не снимать
LastHero_dispel = false

# TvT #
TvT_Enabled = true
# Время на подготовку после телепорта в коллизей в минутах
TvT_PrepareTime = 2
# Время боя, в минутах
TvT_FightTime = 10
# Режим сортировки при формировании комманда
# 0 - случайным образом
# 1 - по счетчику пвп
TvT_TeamRandomType = 1
# Количество экземпляров эвента, под разные уровни.
TvT_EventCount = 1

# Время запуска эвента, соответсвую записи crontab
TvT1_Crontab=30 */3 * * *
# минимальный уровень для регистрации
TvT1_MinLevel = 1
# максимальный уровень для регистрации
TvT1_MaxLevel = 86
# Минимальное количество участников
TvT1_MinParticipants = 2
# Итем ид который дается в награду
TvT1_RewardItemId = 4037
# Количество итемов
TvT1_RewardItemCount = 10
# Персональная награда игроку кто больше всех набил пвп
TvT1_RewardTopPlayerItemId = 4037
TvT1_RewardTopPlayerCount = 10
# Объявление при запуске эвента
TvT1_StartAnnounce = Регистрация на TvT начата, уровни с 1 по 85.
TvT1_RegistrationAnnounce = Окончание TvT регистрации через MIN минут (уровни 1-85).
TvT1_RegistrationEndAnnounce = Регистрация окончена уровни 1-85.
# Снимать бафф при телепорте на стадион
TvT1_Dispel = false
# После телепортации в коллизей объявим правила эвента
# Только для участников эвента
TvT1_RuleAnnounce1 = Эвент длится 10 минут.
TvT1_RuleAnnounce2 = Побеждает комманда больше всех убившая противников.
TvT1_RuleAnnounce3 = Каждый игрок победившей комманды получает 1 CoL.
TvT1_RuleAnnounce4 = Игрок убивший больше всех противников получит 20 CoL.
TvT1_RuleAnnounce5 = Старт эвента через 2 минуты.
TvT1_NoParticipantsAnnounce = TvT отменен, уровни с 1 по 85.
TvT1_WinnerTeamAnnounce = COLOR комманда победила убив KILLS противников, уровни с 1 по 85.
TvT1_NoWinnerTeamAnnounce = TvT закончилось в ничью, уровни с 1 по 85.
TvT1_TopPlayerAnnounce = NAME стал чемпионом TvT, убив KILLS игроков, COLOR комманда.

TvT2_Crontab=30 */3 * * *
TvT2_MinLevel = 51
TvT2_MaxLevel = 86
TvT2_MinParticipants = 2
TvT2_RewardItemId = 4037
TvT2_RewardItemCount = 10
TvT2_RewardTopPlayerItemId = 4037
TvT2_RewardTopPlayerCount = 10
TvT2_StartAnnounce = Регистрация на TvT начата, уровни с 51 по 85.
TvT2_RegistrationAnnounce = Окончание TvT регистрации через MIN минут (уровни 51-85).
TvT2_RegistrationEndAnnounce = Регистрация окончена уровни 51-85.
TvT2_Dispel = false
TvT2_RuleAnnounce1 = Эвент длится 10 минут.
TvT2_RuleAnnounce2 = Побеждает комманда больше всех убившая противников.
TvT2_RuleAnnounce3 = Каждый игрок победившей комманды получает 10 CoL.
TvT2_RuleAnnounce4 = Игрок убивший больше всех противников получит 20 CoL.
TvT2_RuleAnnounce5 = Старт эвента через 2 минуты.
TvT2_NoParticipantsAnnounce = TvT отменен, уровни с 51 по 85.
TvT2_WinnerTeamAnnounce = COLOR комманда победила убив KILLS противников, уровни с 51 по 85.
TvT2_NoWinnerTeamAnnounce = TvT закончилось в ничью, уровни с 51 по 85.
TvT2_TopPlayerAnnounce = NAME стал чемпионом TvT, убив KILLS игроков, COLOR комманда.

# Master of Enchanting Event
# http://www.lineage2.com/archive/2009/06/master_of_encha.html
# Цена за посох Yogi Staff на оффк 1000
MOSStaffPrice = 10
# Цена одного свитка заточки, на оффе 77777
MOSScrollPrice = 777777
# Цена на 24 свитка заточки, можно купить раз в 6 часов с одного акка/hwid, на оффу 6000
MOSScroll24Price = 60000
# Минимальный уровень мобов с которых будут дропаться свитка
MOSMobMinLevel = 20
# Шанс дропа свитков
MOSScrollDropChance = 1.0

# Christmas Gift event
# Новогодний эвент, спавнит елку в адене под которой время от времени появляются подарки.
# Формат списка как у эффекта i_restoration_random т.е.
# <item_id1>,<count1>,<item_id2>,<count2>,...,<item_idN>,<countN>;<chance>; ... etc.
# count задает максимальное количество т.е. 1 + Rnd.get(count)
# Сумма шансов должна быть равна 100%
XmasGiftItems=959,1;10;960,2;90
# Время дропа итемов в секундах (1 час)
XmasGiftDropTime=3600
# Время дропа рандом +/- к XmasGiftDropTime
XmasGiftDropTimeRand=1800

# Настройки ивента Захват
CaptureEnabled=true
# Расписание запуска эвента
CaptureCron=10 */3 * * *
# Фиксированное количество тикетов
CaptureTickets=0
# Тикетов на одного участника эвента
CaptureTicketsPerPlayer=5
# Время эвента в минутах
CaptureEventTime=10
# Время на регистрацию в минутах
CaptureRegistrationTime=10
# Минимальное количество игроков для запуска эвента
CaptureMinParticipants=2
# Максимальное количество участников
CaptureMaxParticipants=54
# Минимальный уровень игрока для участия в эвента
CapturePlayerMinLevel=1
# Максимальный уровень игрока для участия в эвенте
CapturePlayerMaxLevel=99
# Очки начисляемые игрокам в процессе эвенте
# Очки за убийство
CapturePointsKill=100
# Очки за воскрешение других игроков
CapturePointsResurrect=100
# Очки за захват флага
CapturePointsFlagCapture=250
# Очки за атаку флага
CapturePointsFlagAttack=150
# Очки за победу команды
CapturePointsWin=500
# Задержка перед авто ресом в секундах
CaptureResurrectDelay=20
# Проверять HWID при регистрации
CaptureHwidCheck=false
# Коэфф. на хил
CaptureHealRate=0.01
# Итем для обмена на очки
CaptureExchangeItemId=14351
# Курс обмена очков на итемы
CaptureExchangeRate=0.01

1. Что говорит лог во время регистрации и в момент, когда должен забирать людей?
2. На сегодняшний день, почти на всех сборках, эти настройки давно выведены в конфиг. Можно поменять с HWID на IP.
Очень старая сборка, я не смог найти в конфиге ничего подобного
 
В ивент не запускает каким образом? Пишет что-то? Или как будто и не было регистрации?
 
После боевой готовности ничего не происходит, так же и с ТВТ
В коде я тоже не увидел ограничений на участие. Возможно вынесено в какой-то базовый класс.
Попробуй:
- поискать hwid/ip по всем конфигам и возможно будет общий для всех (либо по названию ограничения что-то типа unique players или запрет окон)
- аналогично по исходникам, там будет точно прям такое название, по контексту думаю можно будет понять
 
В коде я тоже не увидел ограничений на участие. Возможно вынесено в какой-то базовый класс.
Попробуй:
- поискать hwid/ip по всем конфигам и возможно будет общий для всех (либо по названию ограничения что-то типа unique players или запрет окон)
- аналогично по исходникам, там будет точно прям такое название, по контексту думаю можно будет понять
Имеет ли смысл кидать файл log4j.xml, более похожие настройки там, но я не уверен

В коде я тоже не увидел ограничений на участие. Возможно вынесено в какой-то базовый класс.
Попробуй:
- поискать hwid/ip по всем конфигам и возможно будет общий для всех (либо по названию ограничения что-то типа unique players или запрет окон)
- аналогично по исходникам, там будет точно прям такое название, по контексту думаю можно будет понять
Код:
@ConfigField(config = "events", fieldName = "TvT_CheckHWID", value = "false")
    public static boolean EVENT_TvT_CheckHWID;

Нашел в config.java, но про Last Hero ничего нет, именно hwid
 
Код:
@ConfigField(config = "events", fieldName = "TvT_CheckHWID", value = "false")
    public static boolean EVENT_TvT_CheckHWID;

Нашел в config.java, но про Last Hero ничего нет, именно hwid
Возможно у них используется общая настройка. Поиском по конфигам CheckHWID возможно найдешь, где в это поле настраивается и в каком конфиг файле. В l2jeternity, например отдельный конфиг для проверки double sessions. Называется: AllowCheckSessions и в том же конфиге все настройки для проверок ивентов. И да, он может использовать защиту как источник hwid'a
А настройка от кого именно брать hwid лежит в базовом конфиге сервера
 
Назад
Сверху Снизу