-
Публикаций
1567 -
Зарегистрирован
-
Посещение
-
Победитель дней
61 -
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Gaikotsu
-
на тогглах как раз таки и самый простой и быстрый способ запилить нормальное ацп
-
Переполнение буфера данных пакета. Как вариант хтмлка слишком большая.
-
код в блокноте чтоли пишется? Мне вот что интерестно - религия чтоли не позволяет пользоваться эклипсом/идеей, в которых подобыне проблемы, типа неправильных импортов, исправляются на раз, т.к. сама IDE подскажет набиболее вероятные правильные импорты.
-
Доработать указанный класс, чтобы исключал ид проф 58-87, 119-122 ибо это ид-пустышки, не используемые ни одной из проф.
-
эм... неужели в этом вашем пвсофт для суммонов не обрабатывается телепортация их хозяина? по моему даже в самых ущербных сборках для суммонов/петов есть обработка события "хозяин телепортировался", телепортирующий суммонов/петов за хоязином.
-
Брать что-то с исходниками и допиливать до нужных хроник. Я в свое время так и поднимал сырцы одной сборки полухармони/полутаути сначала до линдвиора, а потом уже и до артеи. А готовые сборки в состоянии "все работает" ты в шаре не найдешь.
-
public static enum ButtonType { SMALL("L2UI_CT1.Button_DF_Small", "L2UI_CT1.Button_DF_Small_Down", -1, 24), NORMAL("L2UI_CT1.Button_DF", "L2UI_CT1.Button_DF_Down", -1, 26), LARGE("L2UI_CT1.Button_DF_Large", "L2UI_CT1.Button_DF_Large_Down", -1, 35), UP("L2UI_CH3.UpButton", "L2UI_CH3.upbutton_down", 15, 15), DOWN("L2UI_CH3.DownButton", "L2UI_CH3.downbutton_down", 15, 15), PREV("L2UI_CH3.prev1", "L2UI_CH3.prev1_down", 15, 15), NEXT("L2UI_CH3.next1", "L2UI_CH3.next1_down", 15, 15), ABOUT("L2UI_CH3.aboutotpicon", "L2UI_CH3.aboutotpicon_down", 15, 15), INPUT("L2UI_CT1.Button_DF_Input", "L2UI_CT1.Button_DF_Input_Down", 15, 15), LIST("L2UI_CT1.PostWnd_DF_Btn_List", "L2UI_CT1.PostWnd_DF_Btn_List_Down", 15, 15), OLYMPIAD_APPLY("L2UI_CT1.OlympiadWnd_DF_Apply", "L2UI_CT1.OlympiadWnd_DF_Apply_Down", 197, 29), OLYMPIAD_BACK("L2UI_CT1.OlympiadWnd_DF_Back", "L2UI_CT1.OlympiadWnd_DF_Back_Down", 197, 29), OLYMPIAD_BUY_EQUIP("L2UI_CT1.OlympiadWnd_DF_BuyEquip", "L2UI_CT1.OlympiadWnd_DF_BuyEquip_Down", 197, 29), OLYMPIAD_BUY_ETC("L2UI_CT1.OlympiadWnd_DF_BuyEtc", "L2UI_CT1.OlympiadWnd_DF_BuyEtc_Down", 197, 29), OLYMPIAD_FIGHT_1("L2UI_CT1.OlympiadWnd_DF_Fight1None", "L2UI_CT1.OlympiadWnd_DF_Fight1None_Down", 197, 29), OLYMPIAD_FIGHT_3("L2UI_CT1.OlympiadWnd_DF_Fight3None", "L2UI_CT1.OlympiadWnd_DF_Fight3None_Down", 197, 29), OLYMPIAD_HERO_CONFIRM("L2UI_CT1.OlympiadWnd_DF_HeroConfirm", "L2UI_CT1.OlympiadWnd_DF_HeroConfirm_Down", 197, 29), OLYMPIAD_INFO("L2UI_CT1.OlympiadWnd_DF_Info", "L2UI_CT1.OlympiadWnd_DF_Info_Down", 197, 29), OLYMPIAD_REWARD("L2UI_CT1.OlympiadWnd_DF_Reward", "L2UI_CT1.OlympiadWnd_DF_Reward_Down", 197, 29), OLYMPIAD_WATCH("L2UI_CT1.OlympiadWnd_DF_Watch", "L2UI_CT1.OlympiadWnd_DF_Watch_Down", 197, 29); private final String _foreTexture; private final String _backTexture; private final int _width; private final int _height; private ButtonType(String foreTexture, String backTexture, int width, int height) { _foreTexture = foreTexture; _backTexture = backTexture; _width = width; _height = height; } public String getForeTexture() { return _foreTexture; } public String getBackTexture() { return _backTexture; } public int getWidth(int width) { return _width > 0 ? _width : width; } public int getHeight(int height) { return _height > 0 ? _height : height; } } ну тут само собой далеко не все + не все из этого могут быть в хрониках которые ты юзаешь З.Ы. можете спросить на кой этот изврат с энумом? дык чтоб на лету генерить кнопки нужного вида и при этом не писать кучу хтмл-кода, в просто писать что-то типа HtmlUtils.button(ButtonType.SMALL, "Вкл.", "bypass -h admin_event_start " + event.getImpl(), 40); и получать готовый код для кнопки.
-
:рукалицо: З.Ы. но вы продолжайте, продолжайте - иногда весело всякий бред почитать.
-
Опираться на мозги и прямые руки. Понять как писать новые инстансы можно изучив реализацию уже имеющихся - это самый простой путь.
-
у твоего другого нпс должен быть такой же класс как у старого или же с наследованием от оного.
-
Я даже не знаю - смеяться с этой темы или же плакать...
-
:рукалицо: ты хоть понял что ты посоветовал? ты посоветовал убрать из проверок на возможность кастовать и атаковать проверку на наличие наложенного фира. т.е. если нигде более нет доп проверок на эту тему - под наложенным фиром после твоего фикса можно будет кастовать скиллы и т.д.
-
какой п...цкод сообщением выше - не лучше. автор, сомтри как феар реализован в овероподобных сборках, а конкретно расчет движения и пробуй адаптировать под свою сборку package l2p.gameserver.skills.effects; import l2p.gameserver.ai.CtrlIntention; import l2p.gameserver.geodata.GeoEngine; import l2p.gameserver.model.Effect; import l2p.gameserver.model.Player; import l2p.gameserver.model.entity.events.impl.SiegeEvent; import l2p.gameserver.model.instances.SummonInstance; import l2p.gameserver.network.serverpackets.components.SystemMsg; import l2p.gameserver.stats.Env; import l2p.gameserver.utils.PositionUtils; public final class EffectFear extends Effect { public static final double FEAR_RANGE = 900; public EffectFear(Env env, EffectTemplate template) { super(env, template); } @[member='override'] public boolean checkCondition() { if (_effected.isOutOfControlImmune()) { getEffector().sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } // Fear нельзя наложить на осадных саммонов Player player = _effected.getPlayer(); if (player != null) { SiegeEvent<?, ?> siegeEvent = player.getEvent(SiegeEvent.class); if (_effected.isServitor() && siegeEvent != null && siegeEvent.containsSiegeSummon((SummonInstance) _effected)) { getEffector().sendPacket(SystemMsg.THAT_IS_AN_INCORRECT_TARGET); return false; } } if (_effected.isInPeaceZone()) { getEffector().sendPacket(SystemMsg.YOU_MAY_NOT_ATTACK_IN_A_PEACEFUL_ZONE); return false; } return super.checkCondition(); } @[member='override'] public void onStart() { super.onStart(); if (!_effected.startFeared()) { if (_effected.isServitor()) _effected.saveAttackTarget(); _effected.abortAttack(true, true); _effected.abortCast(true, true); _effected.stopMove(); } onActionTime(); } @[member='override'] public void onExit() { super.onExit(); _effected.stopFeared(); _effected.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE); if (_effected.isServitor()) _effected.restoreAttackTarget(); } @[member='override'] public boolean onActionTime() { final double angle = Math.toRadians(PositionUtils.calculateAngleFrom(_effector, _effected)); final int oldX = _effected.getX(); final int oldY = _effected.getY(); final int x = oldX + (int) (FEAR_RANGE * Math.cos(angle)); final int y = oldY + (int) (FEAR_RANGE * Math.sin(angle)); _effected.setRunning(); _effected.moveToLocation(GeoEngine.moveCheck(oldX, oldY, _effected.getZ(), x, y, _effected.getGeoIndex()), 0, false); return true; } } что представляет собой calculateAngleFrom public static double calculateAngleFrom(GameObject obj1, GameObject obj2) { return calculateAngleFrom(obj1.getX(), obj1.getY(), obj2.getX(), obj2.getY()); } public static double calculateAngleFrom(int obj1X, int obj1Y, int obj2X, int obj2Y) { double angleTarget = Math.toDegrees(Math.atan2(obj2Y - obj1Y, obj2X - obj1X)); if (angleTarget < 0) angleTarget = 360 + angleTarget; return angleTarget; }
-
а зачем вводить отдельные предметы и модифицировать клиент на эту тему, если можно обойтись без этого?
-
hardcode way наше все З.Ы. это сарказм, если что
-
как вариант не под той версией явы запускаешь, если у тебя их стоит несколько в системе в этом случае указывай полностью путь до нужной java.exe
-
Дак это ж думать придется.
-
И причем интересно тут мульттиселлы? если список наносимых красок у татуировщика вобще-то не мультиселл, а отдельный список, генерируемый отлеьным пакетом.
-
ну так собери из class-файлов jar если делаешь компиляцию при помощи инструкций в build.xml или подобном, то в нем добавь еще операцию по сбору компиленного в jar
-
ни сборки ни еще каких подоробностей... а вобще если у тебя такое поведение в мультиселах, то тебе только один путь - лезть в исходники ядра и дорабатывать процесс покупки/продажи через мультиселы.
-
1. запускаю сервер в режиме отладки непосредственно в IDE, таким образом все изменения в коде сразу же вносятся в работающий сервер. Рассинхронизация и значит невозможность применить изменения обычно происходят только при достаточно серьезных изменениях кода, так что в целом рестартить сервер для их применения приходится редко. 2. работаю в эклипсе, в идее наверняка тоже есть возможность запускать сервер в режиме отладки.
- 1 ответ
-
- 1
-
Вопрос не очень понятен. где получить objId, когда, зачем?
-
но вобще-то это неправильно. сам сервер на ссылку [npc_%objectId%_Quest|Квест] должен был отправить в onTalk на: 1. в случае когда квест не взят в ветку if(cond == 0) 2. если квест взят то на другие варианты, в зависимости от текущего cond а ссылки типа [npc_%objectId%_Quest имя квеста параметры|бла-бла] отправляют в onEvent, а не в onTalk З.Ы. за поаторяемость квеста отвечает параметр метода exitCurrentQuest - если в нем задавать true, то все записи о квесте стирает при окончании квеста и значит квест типа можно снова повторить, если false, то по завершении все стирает но после оставляет одну запись с состоянием квеста, в котором выставляет статус "завершено". есть еще один вариант, но тебе он в данный момент не нужен - я про квесты делающиеся раз в сутки.
-
не знаю как там в ваших люцерах, но в том же овере/фениксе цвета имени/титула - это обычное десятичное число. и причем здесь RGB? если ты про представление цвета в виде RRGGBB, то это опять же всего навсего число в хексе, т.к. в хексе как раз удобно (и наглядно) задавать значения количества трех основных цветов в конечном цвете. З.Ы. и кстати если что, в линейке используется "перевернутое" значение цвета, не RGB, а BGR.