-
Публикаций
1567 -
Зарегистрирован
-
Посещение
-
Победитель дней
61 -
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Gaikotsu
-
прибавки к параметру при заточке делаются не тут смотреть класс FuncEnchant из ядра. З.Ы. и в клиенте изменений видно не будет - клиент сам вычисляет прибавки по зашитым в него формулам, руководствуясь лишь величиной энчанта, полученной от серва.
-
следующим вопросом 100% будет "а где и что править то для этого?"
-
начал бы с более простых - в которых всего по 1 этапу. Ну и AwakenDev правильно сказал - просто придется еще и учитывать текущий этап и соответственно ему переключать на следующий или первый, при выполнении задания или истечения времени. к тому же в этом квесте есть еще разные ньюансы, например на определенных этапах спавнятся в определенных комнатах храма боссы и открывается к ним доступ.
-
а жаль что вырезали - задумка то хорошая была, при достаточном воображении нехило можно развернуться, делая на их основе те же эвенты разнообразные.
-
это еще мягко говоря я лично этот код там сомтрел чисто чтобы понять что и когда в этих квестах делать надо, а реализовал совершенно по другому. типичный динамический квест у меня выглядит так package dynamic_quests; import l2p.gameserver.model.dynamicquest.DynamicQuest; public class _0001_DestroyTheDaemonAngma extends DynamicQuest { public _0001_DestroyTheDaemonAngma() { super(1); } } проще некуда, если не учитывать нужные для работы квеста данные, типа таких всем у меня рулит общий класс DynamicQuest, которому в большинстве случаев достаточно передать ид квеста, а дальше уже пусть разбирается.
-
даже близко не норм. зачем тебе запускать задачи CheckPlayerIsInCommandChannel и setAntharasSpawnTask столько раз, сколько у тебя народу в кк?
-
классы Calendar и ThreadPoolManager с Runnable или RunnableImpl тебе в помощь
-
смотри в том же ребелионе или новелле. реализация компаний и зональных квестов там конечно не идеальная, но для понимания того что как делать вполне подойдет.
-
более корректное private void cloneOwnerEffect(Effect ef) { Skill skill = ef.getSkill(); if (skill.isOffensive() || skill.isToggle() || skill.isCubicSkill()) return; for (EffectTemplate et : skill.getEffectTemplates()) { if (!et._applyOnSummon || et._applyOnCaster || et.isOffensive(skill.isOffensive())) continue; Effect effect = et.getEffect(new Env(this, this, skill)); if (effect != null) { effect.setCount(ef.getCount()); effect.setPeriod(ef.getCount() == 1 ? ef.getPeriod() - ef.getTime() : ef.getPeriod()); getEffectList().addEffect(effect); } } } а в onSpawn класса Summon добавить if (owner != null) for (Effect ef : owner.getEffectList().getAllEffects()) cloneOwnerEffect(ef);
-
не совсем корректно 1. скопируются только первые эффекты из скиллов. 2. скопируются не только баффы, но и к примеру дебаффы. 3. при копировании у эффекта выставится полная продолжительность, а не текущая.
-
попробуй вместо 1а сделать чуть больше, например 2а. я так подозреваю что там при расчете в вычислении цены продажи используется целочисленное деление, в котором цифры после запятой в результате просто отбрасываются. проще говоря: продаем нпс вещь стоящую 1а, она продается насколько помню за полцены, т.е. получаем 0.5а, которые округляются до 0а.
-
:рукалицо: 2автор: скорее всего ошибка из-за того, что у тебя после окончания эвента игрокам показывается какая-то хтмлка, в которой есть ссылка вида "... npc_%objectId%_ ...", при нажатии на которую и вызывается эта ошибка. З.Ы. вариант не 100%, но самый вероятный.
-
если руки растут не из правильного места - запуск на любой сборке можно зафейлить. хотя не спорю - бывают случаи когда некоторым сборкам уже ничего не поможет, только забыть их как страшный сон и никогда к ним не возвращаться, как бы их некоторые не хвалили.
-
а лучше настрой нормально работу с бд судя по проблеме соединение и обмен данными идут не в той кодировке (все должно быть в utf8).
-
in share only Rest-Zone with very crappy sources.
-
или объявить на весь мир зону с запретом трейда - хотя это то еще извращение.
-
только вот они не официальные, а обычный допил с с4 для птс серверов на эксте.
-
а в чем проблема проверить? это все старые кубики, так что инфа о них и об их скиллах есть например в птс скриптах от фреи, кои есть в шаре уже давным-давно. смотришь в них свойства всех нужных скиллов и все.
-
utx надеюсь имеет то же имя что и было у файла до кодирования? просто 121 протокол кодирования (используемый в кодировании utx) использует в качестве ключа имя кодируемого файла, так что если после кодирования сменить имя файла - в результате декодирования клиент будет получать мусор вместо нужных данных.
-
не вводи человека в заблуждение, если совершенно не разбираешься в вопросе. 2 Автор: эти описания описаны в виде скиллов, в skillname-e, а показ их прописан в npcgrp, в виде информации о скиллах-пассивках моба.
-
скорее уж так: <cond msgId="1508" addName="1"> <not> <or> <player instance_zone="607" /> <player instance_zone="608" /> <player instance_zone="609" /> <player instance_zone="610" /> </or> </not> </cond> З.Ы. не оптимальна такая проверка - каждый раз при юзе скилла/итема такое проверять - не очень.
-
это ты про проверку на то что игрок находится в зоне определенного типа?можно и так. но мне лично такой способ никогда не нравился - слишком громоздко и нерационально. лично у меня подобные запреты для вещей и скиллов описываются проще, типа так: <set name="allowed_on_olympiad" value="false" /> <set name="allowed_on_pvp_event" value="false" />
-
ну например добавить игроку хранилище запрещенных предметов и добавлять туда нужные ид например при реге на эвент, а при окончании эвента очищать. ну и затем проверять в UseItem например так if (activeChar.isForbiddenItem(itemId)) { activeChar.sendPacket(new SystemMessage(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(itemId)); return; } другой вариант - ввести для игроков какой-то флаг - в котором будет выставляться признак того, что игрок участвует в эвенте. а для вещей ввести параметр - запрещающий их использование на эвенте и опять же в UseItem проверять типа так if (activeChar.isInPvPEventMode() && !item.getTemplate().isAllowedOnPvPEvent()) { activeChar.sendPacket(new SystemMessage(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(itemId)); return; } P.S. аналогично можно запрещать еще скажем и использование определенных скиллов на эвенте.
-
делать что-то типа такого (если сборка поддерживает) <zone name="[giran_non_trade]" type="dummy"> <set name="blocked_actions" val="open_private_store;open_private_workshop" /> <polygon> <coords loc="85792 147072" /> <coords loc="83605 147080" /> <coords loc="83560 147537" /> <coords loc="83440 147472" /> <coords loc="80780 147474" /> <coords loc="80692 147543" /> <coords loc="80691 149704" /> <coords loc="80786 149774" /> <coords loc="86445 149877" /> </polygon> <banned_polygon> <coords loc="82725 147884" /> <coords loc="82729 149334" /> <coords loc="81134 149326" /> <coords loc="81137 147887" /> <coords loc="82694 147886" /> <coords loc="82143 148383" /> <coords loc="81692 148378" /> <coords loc="81689 148839" /> <coords loc="82149 148840" /> <coords loc="82150 148396" /> <coords loc="82723 147885" /> </banned_polygon> </zone> во всей зоне, исключая описанную в banned_polygon терииторию, нельзя будет садиться в приват трейд/крафт.