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

Wollandessa

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

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

  • Посещение

  • Отзывы

    0%

Весь контент Wollandessa

  1. Там точно нет, уперся в это
  2. Хорошо, извините пожалуйста
  3. Нашел именно АИ этого НПСа. Но респа все равно не вижу 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); } } }
  4. Весь лог АИ Тиады ! Так и не нашел респа - тыкните пожалуйста носом) 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); } } }
  5. 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 секунд.
  6. спасибо большое , буду копать
  7. Всем привет парни , натолкните пожалуйста. При проверке инстансы Тиады оказалось что фонтаны тут же респаются в течение секунд 10 , мобов с них очень много вылазиет и все они этим полчищем валят игроков. Нашел id этих фонтанов - 18696 - но почему то в базе нигде нет их данных в плане редактирования их респа. Тыкните пожалуйста куда копать, в spawnlist нет, в npc - только сами статы. Сборка Дениса, Open-Team.
  8. Это я так понимаю. ? 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);
  9. нет точно не баф, просто пробовал собирать мобов пикой в катакомбах, становлюсь в угол и бью только одну цель, хотя выделена дальняя. Зашел на другой сервер, там теми же действиями бью 3-5 точно целей.
  10. Всем доброго дня, подскажите где найти в Сборке Опен-Тим количество мобов которых можно бить пикой, почему то бьет только одного моба. Все скиллы у человека(игрока) прокачаны. Хотя должно и просто бить минимум 3-5 мобов в катах если в руках пика.
  11. Оживлю тему, кто то возьметься за реализацию нормальных ботов, какие бегали, били мобов, лутали дроп, и немного ПВПешились примитивными скилами. На Open-Teame, НЕ БЕСПЛАТНО. Те какие есть сейчас Кушают много памяти из-за утечки.
  12. Добрый день, понравилась Ваша работа с кубиками можно узнать цену ?
  13. пользуюсь КБ от Эссенса, кто подскажет как с нее выпилить верхнюю панель
  14. Текстуры поменял, теперь скажите в каком файле что допилить ?
  15. Всем привет парни, подскажите как поменять рамку Продаваемых / Покупаемых окон трейдеров. Были без рамочек, хочу сделать как в классике. Понял что L2Tool-ом , проверил какая конкретно текстура. Все хорошо, но все равно не показывается рамка. Где подскажите посмотреть информацию по трейдерам по отображению диалогового окна продаваемых вещей. Была моя тема до этого, не смогу найти ее. Помогите пожалуйста.
  16. Приветствую всех уважаемые любители Lineage 2. Помогите пожалуйста с проблемой. После установки Интерфейса хф + исходники 0.636 от монокини2. Перестало выходить сообщение следующего содержания Critical. Остальные 2 работают. Подскажите где проверить что написано на эту функцию. Помогите вернуть Critical !!!!
  17. Всем привет парни, подскажите как поменять рамку Продаваемых / Покупаемых окон трейдеров. Были без рамочек, хочу сделать как в классике. Понял что L2Tool-ом , но не могу так понял какая конкретно текстура, подтолкните пожалуйста. Можно не бесплатно, если кто хочет реализовать. ------- >
  18. 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(); } Подскажите пожалуйста где создать префикс
  19. Всем привет парни, поможет кто то настроить что то запутался с этим. Вроде все правильно , все равно не работает. просьба в лс написать, не бесплатно.
  20. Wollandessa

    Ошибка GameServera

    Все перепроверил 2 раза. Итог Client does not support authentication protocol requested by server; consider upgrading MariaDB client.
  21. Wollandessa

    Ошибка GameServera

    так понял, сборка на Мускуле, на дебиане MariaDB , что то не может законектиться в бд
  22. Wollandessa

    Ошибка GameServera

    An exception occurred while acquiring a poolable resource. Will retry. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MariaDB client
  23. Wollandessa

    Ошибка GameServera

    перепроверил все, да верно все указано. Только сервер не на Мускуле а на MariaDB
×
×
  • Создать...