Перейти к содержанию

Wollandessa

Пользователи
  • Публикаций

    86
  • Зарегистрирован

  • Посещение

  • Отзывы

    0%

Сообщения, опубликованные Wollandessa


  1. 41 минуту назад, Saltfire сказал:

    Spawn.java или L2Spawn.java аи то тут причем.

    Там точно нет, уперся в это 

    Спойлер

    * AI Dimension Moving Device РІ Seed of Destruction:
     *
     * Р�Р· ловушки спаунятся РјРѕР±С‹ СЃ задержкой РІ 3 сек через 5 сек после спауна РІ следующей последовательности:
     * Dragon Steed Troop Commander
     * White Dragon Leader
     * Dragon Steed Troop Healer (not off-like)
     * Dragon Steed Troop Magic Leader
     * Dragon Steed Troop Javelin Thrower
     *
     * @author SYS
     */
    public class DimensionMovingDevice extends DefaultAI
    {
        private static final int TIAT_NPC_ID = 29163;
        private static final int INIT_DELAY = 5 * 1000; // 5 сек
        private static final int MOBS_DELAY = 3 * 1000; // 3 сек
        private static final int MOBS_WAVE_DELAY = 90 * 1000; // 1.5 РјРёРЅ между волнами РјРѕР±РѕРІ

        private static final int[] MOBS = { 22538, // Dragon Steed Troop Commander
                22540, // White Dragon Leader
                22547, // Dragon Steed Troop Healer
                22542, // Dragon Steed Troop Magic Leader
                22548 // Dragon Steed Troop Javelin Thrower
        };

        private static final Location TIATROOM_LOC = new Location(-250408, 208568, -11968);
        private ScheduledFuture<?> _mobssSpawnTask;
        private long _search_timeout = 0;
        private static long _spawnTime = 0; // static для всех ловушек
        private HardReference<? extends L2NpcInstance> _tiat_ref = HardReferences.emptyRef();

        public DimensionMovingDevice(L2Character actor)
        {
            super(actor);
        }

        @Override
        public boolean isGlobalAI()
        {
            return true;
        }

        @Override
        protected void onEvtSpawn()
        {
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;

            _spawnTime = System.currentTimeMillis();

            if(_mobssSpawnTask == null)
                _mobssSpawnTask = ThreadPoolManager.getInstance().scheduleAtFixedRate(new MobssSpawnTask(), INIT_DELAY, MOBS_WAVE_DELAY);
        }

        @Override
        protected void MY_DYING(L2Character killer)
        {
            if(_mobssSpawnTask != null)
            {
                _mobssSpawnTask.cancel(true);
                _mobssSpawnTask = null;
            }

            _spawnTime = 0;

            L2NpcInstance actor = getActor();
            if(actor == null)
                return;

            if(checkAllDestroyed(actor.getNpcId(), actor.getReflection().getId()))
            {
                L2NpcInstance tiat = findTiat(actor.getReflection().getId());
                if(tiat != null && !tiat.isDead())
                    tiat.broadcastPacket(new ExShowScreenMessage("You'll regret challenging me!!!!", 3000, ScreenMessageAlign.MIDDLE_CENTER, false));
            }

            super.MY_DYING(killer);
        }

        /**
         * Возвращает L2NpcInstance Р±РѕСЃР° Tiat РІ отражении actor-Р°.
         * Если РЅРµ найден, возвращает null.
         */
        private L2NpcInstance findTiat(long refId)
        {
            L2NpcInstance _tiat = _tiat_ref.get();
            if(_tiat != null)
                return _tiat;

            // Р�щем Тиата РЅРµ чаще, чем раз РІ 10 секунд, если РїРѕ каким-то причинам его нету
            if(System.currentTimeMillis() > _search_timeout)
            {
                _search_timeout = System.currentTimeMillis() + 10000;
                for(L2NpcInstance npc : L2ObjectsStorage.getAllByNpcId(TIAT_NPC_ID, true))
                    if(npc.getReflection().getId() == refId)
                    {
                        _tiat_ref = npc.getRef();
                        return npc;
                    }
            }
            return null;
        }

        /**
         * Проверяет, уничтожены ли РІСЃРµ Dimension Moving Device РІ текущем измерении
         * @return true если РІСЃРµ уничтожены
         */
        private static boolean checkAllDestroyed(int mobId, long refId)
        {
            for(L2NpcInstance npc : L2ObjectsStorage.getAllByNpcId(mobId, true))
                if(npc.getReflection().getId() == refId)
                    return false;
            return true;
        }

        @Override
        protected boolean randomWalk()
        {
            return false;
        }

        /**
         * Таск запускает волну спауна РјРѕР±РѕРІ
         */
        public class MobssSpawnTask extends l2open.common.RunnableImpl
        {
            public void runImpl()
            {
                L2NpcInstance actor = getActor();
                if(actor == null || actor.isDead())
                    return;

                // РќРµ кричим РїСЂРё первой волне РјРѕР±РѕРІ
                L2NpcInstance tiat = findTiat(actor.getReflection().getId());
                if(tiat != null && !tiat.isDead() && _spawnTime + MOBS_WAVE_DELAY < System.currentTimeMillis())
                    tiat.broadcastPacket(new ExShowScreenMessage("Whoaaaaaa!!!!", 3000, ScreenMessageAlign.MIDDLE_CENTER, false));

                long delay = 0;
                for(int mobId : MOBS)
                {
                    ThreadPoolManager.getInstance().schedule(new SpawnerTask(mobId), delay);
                    delay += MOBS_DELAY;
                }
            }
        }

        /**
         * Таск спаунит РјРѕР±РѕРІ РІ волне
         */
        public class SpawnerTask extends l2open.common.RunnableImpl
        {
            private int _mobId;

            public SpawnerTask(int mobId)
            {
                _mobId = mobId;
            }

            public void runImpl()
            {
                L2NpcInstance actor = getActor();
                if(actor == null || actor.isDead())
                    return;

                Reflection r = actor.getReflection();
                L2MonsterInstance mob = new L2MonsterInstance(IdFactory.getInstance().getNextId(), NpcTable.getTemplate(_mobId));
                mob.setSpawnedLoc(actor.getLoc());
                mob.setReflection(r);
                mob.onSpawn();
                mob.spawnMe(mob.getSpawnedLoc());

                mob.setRunning();
                mob.getAI().setMaxPursueRange(20000);
                mob.getAI().setGlobalAggro(0);

                // После спауна РјРѕР±С‹ бегут Рє тиату или РІ фортресс, если тиата еще нету
                L2NpcInstance tiat = findTiat(r.getId());
                Location homeLoc;
                if(tiat != null && !tiat.isDead())
                {
                    homeLoc = Rnd.coordsRandomize(tiat.getLoc(), 200, 500);
                    mob.setSpawnedLoc(homeLoc);
                    mob.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, tiat.getRandomHated(), 1);
                    mob.getAI().addTaskMove(homeLoc, true);
                }
                else
                {
                    homeLoc = Rnd.coordsRandomize(TIATROOM_LOC, 200, 500);
                    mob.setSpawnedLoc(homeLoc);
                    mob.getAI().addTaskMove(homeLoc, true);
                }
            }
        }
     

     


  2. Нашел именно АИ этого НПСа. Но респа все равно не вижу 

    package ai;
    
    import java.util.concurrent.ScheduledFuture;
    
    import l2open.common.ThreadPoolManager;
    import l2open.gameserver.ai.CtrlEvent;
    import l2open.gameserver.ai.DefaultAI;
    import l2open.gameserver.idfactory.IdFactory;
    import l2open.gameserver.model.L2Character;
    import l2open.gameserver.model.L2ObjectsStorage;
    import l2open.gameserver.model.Reflection;
    import l2open.gameserver.model.instances.L2MonsterInstance;
    import l2open.gameserver.model.instances.L2NpcInstance;
    import l2open.gameserver.serverpackets.ExShowScreenMessage;
    import l2open.gameserver.serverpackets.ExShowScreenMessage.ScreenMessageAlign;
    import l2open.gameserver.tables.NpcTable;
    import l2open.util.Location;
    import l2open.util.Rnd;
    import l2open.util.reference.*;
    
    /**
     * AI Dimension Moving Device РІ Seed of Destruction:
     *
     * Р�Р· ловушки спаунятся РјРѕР±С‹ СЃ задержкой РІ 3 сек через 5 сек после спауна РІ следующей последовательности:
     * Dragon Steed Troop Commander
     * White Dragon Leader
     * Dragon Steed Troop Healer (not off-like)
     * Dragon Steed Troop Magic Leader
     * Dragon Steed Troop Javelin Thrower
     *
     * @author SYS
     */
    public class DimensionMovingDevice extends DefaultAI
    {
        private static final int TIAT_NPC_ID = 29163;
        private static final int INIT_DELAY = 5 * 1000; // 5 сек
        private static final int MOBS_DELAY = 3 * 1000; // 3 сек
        private static final int MOBS_WAVE_DELAY = 90 * 1000; // 1.5 РјРёРЅ между волнами РјРѕР±РѕРІ
    
        private static final int[] MOBS = { 22538, // Dragon Steed Troop Commander
                22540, // White Dragon Leader
                22547, // Dragon Steed Troop Healer
                22542, // Dragon Steed Troop Magic Leader
                22548 // Dragon Steed Troop Javelin Thrower
        };
    
        private static final Location TIATROOM_LOC = new Location(-250408, 208568, -11968);
        private ScheduledFuture<?> _mobssSpawnTask;
        private long _search_timeout = 0;
        private static long _spawnTime = 0; // static для всех ловушек
        private HardReference<? extends L2NpcInstance> _tiat_ref = HardReferences.emptyRef();
    
        public DimensionMovingDevice(L2Character actor)
        {
            super(actor);
        }
    
        @Override
        public boolean isGlobalAI()
        {
            return true;
        }
    
        @Override
        protected void onEvtSpawn()
        {
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;
    
            _spawnTime = System.currentTimeMillis();
    
            if(_mobssSpawnTask == null)
                _mobssSpawnTask = ThreadPoolManager.getInstance().scheduleAtFixedRate(new MobssSpawnTask(), INIT_DELAY, MOBS_WAVE_DELAY);
        }
    
        @Override
        protected void MY_DYING(L2Character killer)
        {
            if(_mobssSpawnTask != null)
            {
                _mobssSpawnTask.cancel(true);
                _mobssSpawnTask = null;
            }
    
            _spawnTime = 0;
    
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;
    
            if(checkAllDestroyed(actor.getNpcId(), actor.getReflection().getId()))
            {
                L2NpcInstance tiat = findTiat(actor.getReflection().getId());
                if(tiat != null && !tiat.isDead())
                    tiat.broadcastPacket(new ExShowScreenMessage("You'll regret challenging me!!!!", 3000, ScreenMessageAlign.MIDDLE_CENTER, false));
            }
    
            super.MY_DYING(killer);
        }
    
        /**
         * Возвращает L2NpcInstance Р±РѕСЃР° Tiat РІ отражении actor-Р°.
         * Если РЅРµ найден, возвращает null.
         */
        private L2NpcInstance findTiat(long refId)
        {
            L2NpcInstance _tiat = _tiat_ref.get();
            if(_tiat != null)
                return _tiat;
    
            // Р�щем Тиата РЅРµ чаще, чем раз РІ 10 секунд, если РїРѕ каким-то причинам его нету
            if(System.currentTimeMillis() > _search_timeout)
            {
                _search_timeout = System.currentTimeMillis() + 10000;
                for(L2NpcInstance npc : L2ObjectsStorage.getAllByNpcId(TIAT_NPC_ID, true))
                    if(npc.getReflection().getId() == refId)
                    {
                        _tiat_ref = npc.getRef();
                        return npc;
                    }
            }
            return null;
        }
    
        /**
         * Проверяет, уничтожены ли РІСЃРµ Dimension Moving Device РІ текущем измерении
         * @return true если РІСЃРµ уничтожены
         */
        private static boolean checkAllDestroyed(int mobId, long refId)
        {
            for(L2NpcInstance npc : L2ObjectsStorage.getAllByNpcId(mobId, true))
                if(npc.getReflection().getId() == refId)
                    return false;
            return true;
        }
    
        @Override
        protected boolean randomWalk()
        {
            return false;
        }
    
        /**
         * Таск запускает волну спауна РјРѕР±РѕРІ
         */
        public class MobssSpawnTask extends l2open.common.RunnableImpl
        {
            public void runImpl()
            {
                L2NpcInstance actor = getActor();
                if(actor == null || actor.isDead())
                    return;
    
                // РќРµ кричим РїСЂРё первой волне РјРѕР±РѕРІ
                L2NpcInstance tiat = findTiat(actor.getReflection().getId());
                if(tiat != null && !tiat.isDead() && _spawnTime + MOBS_WAVE_DELAY < System.currentTimeMillis())
                    tiat.broadcastPacket(new ExShowScreenMessage("Уничтожить незванцев !!!", 3000, ScreenMessageAlign.MIDDLE_CENTER, false));
    
                long delay = 0;
                for(int mobId : MOBS)
                {
                    ThreadPoolManager.getInstance().schedule(new SpawnerTask(mobId), delay);
                    delay += MOBS_DELAY;
                }
            }
        }
    
        /**
         * Таск спаунит РјРѕР±РѕРІ РІ волне
         */
        public class SpawnerTask extends l2open.common.RunnableImpl
        {
            private int _mobId;
    
            public SpawnerTask(int mobId)
            {
                _mobId = mobId;
            }
    
            public void runImpl()
            {
                L2NpcInstance actor = getActor();
                if(actor == null || actor.isDead())
                    return;
    
                Reflection r = actor.getReflection();
                L2MonsterInstance mob = new L2MonsterInstance(IdFactory.getInstance().getNextId(), NpcTable.getTemplate(_mobId));
                mob.setSpawnedLoc(actor.getLoc());
                mob.setReflection(r);
                mob.onSpawn();
                mob.spawnMe(mob.getSpawnedLoc());
    
                mob.setRunning();
                mob.getAI().setMaxPursueRange(20000);
                mob.getAI().setGlobalAggro(0);
    
                // После спауна РјРѕР±С‹ бегут Рє тиату или РІ фортресс, если тиата еще нету
                L2NpcInstance tiat = findTiat(r.getId());
                Location homeLoc;
                if(tiat != null && !tiat.isDead())
                {
                    homeLoc = Rnd.coordsRandomize(tiat.getLoc(), 200, 500);
                    mob.setSpawnedLoc(homeLoc);
                    mob.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, tiat.getRandomHated(), 1);
                    mob.getAI().addTaskMove(homeLoc, true);
                }
                else
                {
                    homeLoc = Rnd.coordsRandomize(TIATROOM_LOC, 200, 500);
                    mob.setSpawnedLoc(homeLoc);
                    mob.getAI().addTaskMove(homeLoc, true);
                }
            }
        }

     


  3. Весь лог АИ Тиады ! Так и не нашел респа - тыкните пожалуйста носом)

      

    package ai;
    
    import java.util.ArrayList;
    import java.util.concurrent.ScheduledFuture;
    
    import l2open.common.*;
    import l2open.config.ConfigValue;
    import l2open.gameserver.ai.CtrlEvent;
    import l2open.gameserver.ai.Fighter;
    import l2open.gameserver.idfactory.IdFactory;
    import l2open.gameserver.instancemanager.ServerVariables;
    import l2open.gameserver.model.L2Character;
    import l2open.gameserver.model.L2Player;
    import l2open.gameserver.model.L2Skill;
    import l2open.gameserver.model.Reflection;
    import l2open.gameserver.model.instances.L2MonsterInstance;
    import l2open.gameserver.model.instances.L2NpcInstance;
    import l2open.gameserver.serverpackets.ExShowScreenMessage;
    import l2open.gameserver.serverpackets.ExStartScenePlayer;
    import l2open.gameserver.serverpackets.ExShowScreenMessage.ScreenMessageAlign;
    import l2open.gameserver.tables.NpcTable;
    import l2open.gameserver.tables.SkillTable;
    import l2open.util.Location;
    import l2open.util.Log;
    
    /**
     * AI Р±РѕСЃР° Tiat (ID: 29163).
     *
     * @author SYS
     */
    public class Tiat extends Fighter
    {
        private static final int TIAT_TRANSFORMATION_SKILL_ID = 5974;
        private static final L2Skill TIAT_TRANSFORMATION_SKILL = SkillTable.getInstance().getInfo(TIAT_TRANSFORMATION_SKILL_ID, 1);
        private boolean _notUsedTransform = true;
        private static final int TRAPS_COUNT = 4;
        private static final Location[] TRAP_LOCS =
        {
            new Location(-248776, 206872, -11968),
            new Location(-252024, 206872, -11968),
            new Location(-251544, 209592, -11968),
            new Location(-249256, 209592, -11968)
        };
        private ArrayList<L2MonsterInstance> _traps = new ArrayList<L2MonsterInstance>(TRAPS_COUNT);
        private ScheduledFuture<?> _trapsSpawnTask;
        private ScheduledFuture<?> _DeadMovieTask;
        private static final long TRAPS_SPAWN_INTERVAL = 3 * 60 * 1000; // 3 РјРёРЅ
        private static final long COLLAPSE_BY_INACTIVITY_INTERVAL = 10 * 60 * 1000; // 10 РјРёРЅ
        private long _lastAttackTime = 0;
        private static final int TRAP_NPC_ID = 18696;
        private static final int TIAT_MINION_ID = 29162;
        private long _lastFactionNotifyTime = 0;
    
        public Tiat(L2Character actor)
        {
            super(actor);
        }
    
        @Override
        public boolean isGlobalAI()
        {
            return true;
        }
    
        @Override
        protected void onEvtSpawn()
        {
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;
    
            actor.p_block_move(true, null);
        }
    
        @Override
        protected void ATTACKED(L2Character attacker, int damage, L2Skill skill)
        {
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;
    
            _lastAttackTime = System.currentTimeMillis();
    
            if(_notUsedTransform && actor.getCurrentHpPercents() < 50)
            {
                actor.p_block_move(false, null);
                _notUsedTransform = false;
    
                // Если РІРґСЂСѓРі запущен таск, останавливаем его 
                if(_trapsSpawnTask != null)
                {
                    System.out.println("WARNING! Tiat AI: _trapsSpawnTask already running!");
                    _trapsSpawnTask.cancel(true);
                    _trapsSpawnTask = null;
                }
                _trapsSpawnTask = ThreadPoolManager.getInstance().scheduleAtFixedRate(new TrapsSpawnTask(), 1, TRAPS_SPAWN_INTERVAL);
    
                clearTasks();
                addTaskBuff(actor, TIAT_TRANSFORMATION_SKILL);
            }
    
            if(System.currentTimeMillis() - _lastFactionNotifyTime > actor.minFactionNotifyInterval)
            {
                for(L2NpcInstance npc : actor.getAroundNpc(10000, 500))
                    if(npc.getNpcId() == TIAT_MINION_ID)
                        npc.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, new Object[] { attacker, 1 });
    
                _lastFactionNotifyTime = System.currentTimeMillis();
            }
    
            super.ATTACKED(attacker, damage, skill);
        }
    
        @Override
        protected boolean thinkActive()
        {
            L2NpcInstance actor = getActor();
            if(actor == null || actor.isDead())
                return true;
    
            // Коллапсируем инстанс, если Тиата РЅРµ били более 10 РјРёРЅ
            if(_lastAttackTime != 0 && _lastAttackTime + COLLAPSE_BY_INACTIVITY_INTERVAL < System.currentTimeMillis())
            {
                final Reflection r = actor.getReflection();
    
                // Очищаем инстанс, запускаем 5 РјРёРЅ коллапс
                r.clearReflection(5, true);
    
                // Показываем финальный ролик РїСЂРё фейле серез секунду после очистки инстанса
                ThreadPoolManager.getInstance().schedule(new RunnableImpl(){
                    @Override
                    public void runImpl()
                    {
                        for(L2Player pl : r.getPlayers())
                            if(pl != null)
                                pl.showQuestMovie(ExStartScenePlayer.SCENE_TIAT_FAIL);
                    }
                }, 1000);
    
                return true;
            }
    
            return super.thinkActive();
        }
    
        @Override
        protected void MY_DYING(L2Character killer)
        {
            _notUsedTransform = true;
            _lastAttackTime = 0;
            _lastFactionNotifyTime = 0;
            if(_trapsSpawnTask != null)
            {
                _trapsSpawnTask.cancel(true);
                _trapsSpawnTask = null;
            }
    
            L2NpcInstance actor = getActor();
            if(actor == null)
                return;
    
            // Переключаем SoD РІ режим СЃР±РѕСЂР° атрибут камней
            if(actor.getTemplate().killscount >= ConfigValue.SeedofDestructionOpenKillFirst && actor.getTemplate().killscount % ConfigValue.SeedofDestructionOpenKill == 0)
                if(ServerVariables.getLong("SoD_opened", 0) * 1000L + ConfigValue.SeedofDestructionOpenTime * 60 * 60 * 1000L < System.currentTimeMillis())
                    ServerVariables.set("SoD_opened", System.currentTimeMillis() / 1000L);
    
            final Reflection r = actor.getReflection();
            r.setReenterTime();
            for(L2NpcInstance npc : r.getNpcs())
                if(npc != null)
                    npc.deleteMe();
    
            // Очищаем инстанс, запускаем 5 РјРёРЅ коллапс
            r.clearReflection(5, true);
    
            // Показываем финальный ролик серез секунду после очистки инстанса
            if(_DeadMovieTask == null)
                _DeadMovieTask = ThreadPoolManager.getInstance().schedule(new MovieTask(r), 1000);
        }
        
        public class MovieTask extends l2open.common.RunnableImpl
        {
            private Reflection _r;
            
            public MovieTask(Reflection r)
            {
                _r = r;
            }
            
            public void runImpl()
            {
                for(L2Player pl : _r.getPlayers())
                    if(pl != null)
                        pl.showQuestMovie(ExStartScenePlayer.SCENE_TIAT_SUCCESS);
            }
        }
    
        @Override
        protected boolean randomWalk()
        {
            return false;
        }
    
        public class TrapsSpawnTask extends l2open.common.RunnableImpl
        {
            public void runImpl()
            {
                L2NpcInstance actor = getActor();
                if(actor == null || actor.isDead())
                    return;
                actor.broadcastPacket(new ExShowScreenMessage("Воины защитите свою Королеву.", 3000, ScreenMessageAlign.MIDDLE_CENTER, false));
                Reflection r = actor.getReflection();
                for(int index = 0; index < TRAPS_COUNT; index++)
                {
                    // РќРµ спауним ловушки, если РѕРЅРё уже есть РІ том месте
                    L2MonsterInstance oldTrap = null;
                    if(index < _traps.size())
                        oldTrap = _traps.get(index);
                    if(oldTrap != null && !oldTrap.isDead())
                        continue;
    
                    L2MonsterInstance trap = new L2MonsterInstance(IdFactory.getInstance().getNextId(), NpcTable.getTemplate(TRAP_NPC_ID));
                    trap.setSpawnedLoc(TRAP_LOCS[index]);
                    trap.setReflection(r);
                    trap.onSpawn();
                    trap.spawnMe(trap.getSpawnedLoc());
                    r.addSpawn(trap.getSpawn());
                    Log.add("TrapsSpawnTask["+trap+"]["+r+"]: "+trap.getLoc(), "debug_tiat_spawn");
                    if(index < _traps.size())
                        _traps.remove(index);
                    _traps.add(index, trap);
                }
            }
        }

     


  4. Gaikotsu, спасибо большое,нашел в АИ  айди этого моба со следующим кодом. 

    private static final int TIAT_TRANSFORMATION_SKILL_ID = 5974;
        private static final L2Skill TIAT_TRANSFORMATION_SKILL = SkillTable.getInstance().getInfo(TIAT_TRANSFORMATION_SKILL_ID, 1);
        private boolean _notUsedTransform = true;
        private static final int TRAPS_COUNT = 4;
        private static final Location[] TRAP_LOCS =
        {
            new Location(-248776, 206872, -11968),
            new Location(-252024, 206872, -11968),
            new Location(-251544, 209592, -11968),
            new Location(-249256, 209592, -11968)
        };
        private ArrayList<L2MonsterInstance> _traps = new ArrayList<L2MonsterInstance>(TRAPS_COUNT);
        private ScheduledFuture<?> _trapsSpawnTask;
        private ScheduledFuture<?> _DeadMovieTask;
        private static final long TRAPS_SPAWN_INTERVAL = 3 * 60 * 1000; // 3 РјРёРЅ
        private static final long COLLAPSE_BY_INACTIVITY_INTERVAL = 10 * 60 * 1000; // 10 РјРёРЅ
        private long _lastAttackTime = 0;
        private static final int TRAP_NPC_ID = 18696;
        private static final int TIAT_MINION_ID = 29162;
        private long _lastFactionNotifyTime = 0;


    Подскажите где что поменять чтобы респ  фонтанов стал минуты 2 хотя бы а не 30 секунд.


  5. Всем привет парни , натолкните пожалуйста. При проверке инстансы Тиады оказалось что фонтаны тут же респаются в течение секунд 10 , мобов с них очень много вылазиет и все они этим полчищем валят игроков. Нашел id этих фонтанов - 18696 - но почему то в базе нигде нет их  данных в плане редактирования их респа. Тыкните пожалуйста куда копать, в spawnlist нет, в npc - только сами статы. Сборка Дениса, Open-Team.


  6. 2 часа назад, Saltfire сказал:

    Вы наверно, про L2Character.java -> doAttackHitByPole ? Ну или тут-же есть doAttack. Смотреть нужно где-то в этой области =)

    А может с типом оружия накосячили где-то в xml или в базе, смотря где у вас.

    Это я так понимаю.  ? 

    L2Character.java

     

    private boolean doAttackHitByPole(Attack attack, int sAtk)

    {

    boolean hitted = false;

     

    double angleChar, angleTarget;

    int maxRadius = (int)getStat().calcStat(Stats.POWER_ATTACK_RANGE, 66, null, null);

    int maxAngleDiff = (int)getStat().calcStat(Stats.POWER_ATTACK_ANGLE, 120, null, null);


  7. 18 минут назад, serfan1 сказал:

    Может вы ненароком бафаете скилл, он вроде переключает на 1 цель, но увеличивает статы

    нет точно не баф, просто пробовал собирать мобов пикой в катакомбах, становлюсь в угол и бью только одну цель, хотя выделена дальняя. 

    Зашел на другой сервер, там теми же действиями бью 3-5 точно целей.


  8. Всем доброго дня, подскажите где найти в Сборке Опен-Тим  количество мобов которых можно бить пикой, почему то бьет только одного моба. Все скиллы у человека(игрока) прокачаны. Хотя должно и просто бить минимум 3-5 мобов в катах если в руках пика. 


  9. Оживлю тему, кто то возьметься за реализацию нормальных ботов, какие бегали, били мобов, лутали дроп, и немного ПВПешились примитивными  скилами. На Open-Teame, НЕ БЕСПЛАТНО. Те какие есть сейчас Кушают много памяти из-за утечки.


  10. Всем привет парни, подскажите как поменять рамку Продаваемых / Покупаемых окон трейдеров. Были без рамочек, хочу сделать как в классике. Понял что L2Tool-ом , проверил какая конкретно текстура.  Все хорошо, но все равно не показывается рамка. Где подскажите посмотреть информацию по трейдерам по отображению диалогового окна продаваемых вещей.

    106589101_mmo-dev.info_1.png.955f52a0217f9125e0bce7b218ba2973.png676693400_mmo-dev.info_2.png.97e740aebf519cbcd843555b118d6085.png



    Была моя тема до этого, не смогу найти ее. Помогите пожалуйста.

  11. Приветствую всех уважаемые любители Lineage 2. 

    Помогите пожалуйста с проблемой.  После установки Интерфейса хф + исходники 0.636 от монокини2. Перестало выходить сообщение следующего содержания Critical. Остальные 2 работают. Подскажите где проверить что написано на эту функцию.

    Shot00010.jpg.fde3eafafe6887923e4a181e97a91143.jpgShot00013.jpg.b38ff826c6a027951453224235822337.jpg

    Помогите вернуть Critical !!!!


  12. Всем привет парни, подскажите как поменять рамку Продаваемых / Покупаемых окон трейдеров. Были без рамочек, хочу сделать как в классике. Понял что L2Tool-ом , но не могу так понял какая конкретно текстура, подтолкните пожалуйста. Можно не бесплатно, если кто хочет реализовать.

    2.png.d40199b9a3a0dfd2f5c3d5a2616673dc.png ------- > 1.png.bc5e6b9d11496379fd3c8faf70925c11.png

     


  13. CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'сайт_xeno.thread' doesn't exist

    Парни вроде нашел проблему. Базы на хостинге имеют префикс xf_ , а в обвязке нет.

     

    Подскажите где что пофиксить чтобы упиралось в нужную базу. 

         * Запрос к форуму xenForo
         *
         * @return array
         */
        private function xenForo()
        {
            $limit = (int) config('forum_threads.limit');

            $command = $this->db->createCommand()
                ->select('thread_id AS id_topic,title,node_id AS id_forum,post_date AS start_date,user_id AS starter_id,username AS starter_name')
                ->where('discussion_state = :discussion_state', array(':discussion_state' => 'visible'))
                ->from('{{thread}}')
                ->order('last_post_date DESC')
                ->limit($limit);

            if(config('forum_threads.id_deny') != '')
            {
                $ids = explode(',', config('forum_threads.id_deny'));
                $ids = $this->filterIds($ids);

                $command->andWhere(array('not in', 'node_id', $ids));
            }

            return $command->queryAll();
        }
     

     

    Подскажите пожалуйста где создать префикс

×
×
  • Создать...