JTS 2018 последние сурсы(Ошибки)

Статус
В этой теме нельзя размещать новые ответы.

DJone

Последний из атеистов
Пользователь
Сообщения
63
Розыгрыши
0
Репутация
0
Реакции
3
Баллы
850
Всем привет. Подскажите пожалуйста, кто ставил данную сборку, где расположен файл со скилами? Хочу поправить скил Rush, иначе что то он не работает. Баг со скилом, или это мне кажется?
 

Вложения

  • 12.png.9b68eed8cfd259c52bd01ef02b11d0b7.png
    12.png.9b68eed8cfd259c52bd01ef02b11d0b7.png
    348,6 КБ · Просмотры: 411
configuration\gm\GMAccess.xml
Пробовал, не помогает.
Прописывал вот так:
Код:
<char>
        <PlayerID set="53833"/>
        <!-- По умолчанию FALSE для всех игроков -->
        <IsGM set="true"/>
        <!-- IP адрес геймМастера, плеер будет привязан к данному адресу -->
        <GMAllowedIP set="not_used"/>
        <!-- разрешает использование амин команд. -->
        <CanUseGMCommand set="true"/>
        <CanAnnounce set="true"/>
        <CanBan set="true"/>
        <CanBanChat set="true"/>
        <CanUnBanChat set="true"/>
        <CanUseEffect set="true"/>
        <BanChatDelay set="-1"/>
        <BanChatMaxValue set="-1"/>
        <BanChatCountPerDay set="-1"/>
        <BanChatBonusId set="-1"/>
        <BanChatBonusCount set="-1"/>
        <CanChatPenalty set="true"/>
        <UseGMShop set="true"/>
        <CanDelete set="true"/>
        <CanKick set="true"/>
        <Menu set="true"/>
        <GodMode set="true"/>
        <CanEditCharAll set="true"/>
        <CanEditChar set="true"/>
        <CanEditPledge set="true"/>
        <CanViewChar set="true"/>
        <CanEditNPC set="true"/>
        <CanViewNPC set="true"/>
        <CanTeleport set="true"/>
        <CanRestart set="true"/>
        <MonsterRace set="true"/>
        <Rider set="true"/>
        <FastUnstuck set="true"/>
        <ResurectFixed set="true"/>
        <Door set="true"/>
        <Res set="true"/>
        <PeaceAttack set="true"/>
        <Heal set="true"/>
        <Unblock set="true"/>
        <CanChangeClass set="false"/>
        <!-- блокирует взятие предметов из инвентаря, возможен только дестрой предмета. По умолчанию FALSE -->
        <BlockInventory set="false"/>
        <CanGmEdit set="true"/>
        <IsEventGm set="true"/>
        <CanReload set="true"/>
        <CanRename set="true"/>
        <CanJail set="true"/>
        <CanPolymorph set="true"/>
        <!-- По умолчанию TRUE для всех игроков -->
        <UseInventory set="true"/>
        <UseTrade set="true"/>
        <CanAttack set="true"/>
        <CanEvaluate set="true"/>
        <CanJoinParty set="true"/>
        <CanJoinClan set="true"/>
        <UseWarehouse set="true"/>
        <UseShop set="true"/>
        <CanSnoop set="true"/>
    </char>
После перезагрузки ГС, у всех чаров пропадает ГМ права, в том числе и указанного по obj_id чара.

Какой старой традиции? В оверах всю жизнь в конфиге указывались права админа по ид перса.
Сорян, не знал просто что у Оверов так делается, просто гугл подсказал что это старая традиция через таблицы бд)
 
Последнее редактирование модератором:

Всем добра.
Ребята, как может такое случится и как это исправить?!
Ее в первый раз замечаю прохожу квест и на каком либо этапе он становится невыполним.
Выполняю я к примеру квест на проф. и когда собрал уже все элементы квеста нпс сообщает что меня не знает или что-то в этом роде...
если нужно могу описать подробнее какие квесты и на каком моменте.

Тут все квесты на профы править надо. Есть пару нормальных. Тоже проходил на темных эльфов, за мага, квест на первую профу, нужно собрать 4 семя, так вот все необходимое собрал, и такая же ситуация при завершении, с диалогом нпц, говорит что Вы не участвуете в квесте.

Ребята сообщения из соседней темы. Хотел бы узнать а есть какое либо решение или это обычным смертным не подвластно?
 
выше же написали что надо сделать - перелопатить все квесты на тему того, чтобы не рейтовались предметы, а так же не удалялись лишние при завершении квестов.
 
Вообщем решил я сегодня сам посмотреть код.
Предметы криво рейтуются из-за попытки сделать это массово для всех квестов. В QuestState.java есть кусочек где проверка template.isStackable() - почему то означает, что квест итем нужно прорейтовать.
Код:
/**
     * Добавить предмет игроку
     * By default if item is adena rates 'll be applyed, else no
     *
     * @param itemId
     * @param count
     */
    public void giveItems(final int itemId, final long count) {
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }
        giveItems(itemId, count, template.isStackable()); // Проверка isStackable())
    }
Исправление: заменить template.isStackable() на false, а затем руками во всех квестах участки st.giveItems("название_предмета", 1); менять на st.giveItems("название_предмета", 1, true); там, где нужно рейтовать drop\reward. А еще лучше, раз уж руками придется рейтовать квесты(как это делают в птс экстендерах) создать дополнительный метод rewardItems по аналогии с
giveItems(final int itemId, long count, final boolean rate) - и прорейтовать дроп в квестах с помощью giveItems, а награду с помощью rewardItems. Квестов всего штук 500, весь фикс займет от силы несколько часов.

Далее почему не добавляется последний предмет. В QuestState.java есть кусок где все квестовые предметы удаляются после завершения квеста, чтобы почистить от лишнего дропа(под спойлером ниже). В нашем квесте при инициализации конструктора beziques_recommendation добавляется в список квестовых предметов, это выглядит вот так: addQuestItem(beziques_letter, spatois_bones, horseshoe_of_light, wanted_bill, stolen_jewelry, stolen_tomes, stolen_ring, stolen_necklace, beziques_recommendation, netis_bow, netis_dagger); И при завершении квеста, предмет считается как дропнутый по квесту и удаляется.
На птс удаления предметов по завершению квеста не происходит, а происходит только при ручной отмене квеста.
Код:
/**
     * Destroy element used by quest when quest is exited
     *
     * @param repeatable
     * @return QuestState
     */
    public QuestState exitQuest(final boolean repeatable) {
        final Player player = getPlayer();
        if (player == null) {
            return this;
        }

        removePlayerOnKillListener();
        // Clean drops
        for (final int itemId : _quest.getItems()) {
            // Get [item from] / [presence of the item in] the inventory of the player
            final ItemInstance item = player.getInventory().getItemByItemId(itemId);
            if (item == null || itemId == 57) {
                continue;
            }
            final long count = item.getCount();
            // If player has the item in inventory, destroy it (if not gold)
            player.getInventory().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
            player.getWarehouse().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
        }

        // If quest is repeatable, delete quest from list of quest of the player and from database (quest CAN be created again => repeatable)
        if (repeatable) {
            player.removeQuestState(_quest.getId());
            CharacterQuestDAO.getInstance().delete(getPlayer().getObjectId(), _quest.getId());
            _vars.clear();
        } else { // Otherwise, delete variables for quest and update database (quest CANNOT be created again => not repeatable)
            for (final String var : _vars.keySet()) {
                if (var != null) {
                    removeMemo(var);
                }
            }
            setState(Quest.COMPLETED);
        }
        player.sendPacket(new QuestList(player));
        return this;
    }
Исправление: чтобы решить эту проблему надо просто этот участок(с удалением предметов) перенести в блок public void abortQuest() либо как альтернативный вариант вручную в каждом квесте удалить из списка addQuestItem предметы которые выдаются по его завершению.
В итоге эти 2 мелких фикса полностью исправят квестовую систему.
Людииии а есть те кто это исправил? не могли бы поделится
 
Людииии а есть те кто это исправил? не могли бы поделится
Тут своими наработками никто не поделится. А подсказать могут. Тебе дали ответ и направление куда ковырять дальше, исправляй. :Run:
 
Тут своими наработками никто не поделится. А подсказать могут. Тебе дали ответ и направление куда ковырять дальше, исправляй. :Run:
елы палы, столько времени потратил чтобы уткнутся в эту стену

Исправление: заменить template.isStackable() на false, а затем руками во всех квестах участки st.giveItems("название_предмета", 1); менять на st.giveItems("название_предмета", 1, true); там, где нужно рейтовать drop\reward. А еще лучше, раз уж руками придется рейтовать квесты(как это делают в птс экстендерах) создать дополнительный метод rewardItems по аналогии с
giveItems(final int itemId, long count, final boolean rate) - и прорейтовать дроп в квестах с помощью giveItems, а награду с помощью rewardItems. Квестов всего штук 500, весь фикс займет от силы несколько часов.
Ребята подскажите кто исправил я правильно понимаю что мне нужно создать метод
rewardItems(final int itemId, long count, final boolean rate)
И затем во всех квестах найти st.giveItems(xxx, xxxxx, xxxx) и поменять на новый метод st.rewardItems(xxx, xxxxx, xxxx)
Так ?
 
Последнее редактирование модератором:
можешь просто рейтование убрать вобще
 
  • Мне нравится
Реакции: kick
С первой частью вроде разобрался

Далее почему не добавляется последний предмет. В QuestState.java есть кусок где все квестовые предметы удаляются после завершения квеста, чтобы почистить от лишнего дропа(под спойлером ниже). В нашем квесте при инициализации конструктора beziques_recommendation добавляется в список квестовых предметов, это выглядит вот так: addQuestItem(beziques_letter, spatois_bones, horseshoe_of_light, wanted_bill, stolen_jewelry, stolen_tomes, stolen_ring, stolen_necklace, beziques_recommendation, netis_bow, netis_dagger); И при завершении квеста, предмет считается как дропнутый по квесту и удаляется.
На птс удаления предметов по завершению квеста не происходит, а происходит только при ручной отмене квеста.
Код:
/**
     * Destroy element used by quest when quest is exited
     *
     * @param repeatable
     * @return QuestState
     */
    public QuestState exitQuest(final boolean repeatable) {
        final Player player = getPlayer();
        if (player == null) {
            return this;
        }

        removePlayerOnKillListener();
        // Clean drops
        for (final int itemId : _quest.getItems()) {
            // Get [item from] / [presence of the item in] the inventory of the player
            final ItemInstance item = player.getInventory().getItemByItemId(itemId);
            if (item == null || itemId == 57) {
                continue;
            }
            final long count = item.getCount();
            // If player has the item in inventory, destroy it (if not gold)
            player.getInventory().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
            player.getWarehouse().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
        }

        // If quest is repeatable, delete quest from list of quest of the player and from database (quest CAN be created again => repeatable)
        if (repeatable) {
            player.removeQuestState(_quest.getId());
            CharacterQuestDAO.getInstance().delete(getPlayer().getObjectId(), _quest.getId());
            _vars.clear();
        } else { // Otherwise, delete variables for quest and update database (quest CANNOT be created again => not repeatable)
            for (final String var : _vars.keySet()) {
                if (var != null) {
                    removeMemo(var);
                }
            }
            setState(Quest.COMPLETED);
        }
        player.sendPacket(new QuestList(player));
        return this;
    }
Исправление: чтобы решить эту проблему надо просто этот участок(с удалением предметов) перенести в блок public void abortQuest() либо как альтернативный вариант вручную в каждом квесте удалить из списка addQuestItem предметы которые выдаются по его завершению.
В итоге эти 2 мелких фикса полностью исправят квестовую систему.
Не могу понять какую часть куда вставить, не силен в java помогите правильно написать метод abortQuest()
 
С первой частью вроде разобрался
Не могу понять какую часть куда вставить, не силен в java помогите правильно написать метод abortQuest()
Абстрактный ответ:
Разработчикам нет никакого смысла выдавать готовый код, ни финансового, ни репутационного, ни кармического. Тем более на все вопросы на форуме и так безвозмездно даются весьма развернутые ответы.
Этот форум для бизнесменов, таких же как и вы(ну или не совсем таких же). Вкладывайте свой ресурс либо время либо деньги, и желательно с максимальной эффективностью. Оценивайте прибыль которую можете получить. Программируйте или покупайте.
Конкретный ответ:
JTS для вас вообще никакой пользы не несет, в ней нет чего-то, что работает лучше чем на любой шарной сборке. А эффективность повторения вопросов предельно низкая. Можете объединиться с другими леммингами и вместе тыкать в сурсы палками.
 
Абстрактный ответ:
Разработчикам нет никакого смысла выдавать готовый код, ни финансового, ни репутационного, ни кармического. Тем более на все вопросы на форуме и так безвозмездно даются весьма развернутые ответы.
Этот форум для бизнесменов, таких же как и вы(ну или не совсем таких же). Вкладывайте свой ресурс либо время либо деньги, и желательно с максимальной эффективностью. Оценивайте прибыль которую можете получить. Программируйте или покупайте.
Конкретный ответ:
JTS для вас вообще никакой пользы не несет, в ней нет чего-то, что работает лучше чем на любой шарной сборке. А эффективность повторения вопросов предельно низкая. Можете объединиться с другими леммингами и вместе тыкать в сурсы палками.
Мужик да мне 13 лет, какой из меня бизнесмен .... ))))))))))))))))) Я вообще никакой выгоды не получаю и получать не собираюсь. Я просто к отцу скоро уеду туда где интернет просто золотой вот и хочу нормальную сборку привезти чтобы с мужиками резаться вечерами в островной локалке ))))))
без обид
--------------------------
теперь по существу как и говорил вчера первую часть я сделал, протестировал на двух ранее не выполнимых тестах, спасибо все работает архив прилагаю
НО этот фикс так и не помог с прохождением первой профессии у мага тенмного эльфа. как и в прошлый раз все собрал подхожу получать предмет а мне говорят мы тебя не знаем.
Со второй частью чита тоже пока не разобрался яву только изучать начал. не пойму пока как код добавить в метод.
Если кто знает как определить файл на квест с которым проблемы, принцип я примерно понял хочу поковырять может что получится!?
 

Вложения

  • chit.7z
    31,1 КБ · Просмотры: 22
С твоим уровнем знаний я все же посоветовал бы взять что-то другое.
Если целью является просто маленький сервер в локалке, то там даже чистый овер или лост подойдет - проблем там самый минимум и для мелкого сервера вобще не критичных.
 
вообще не могу понять по сути все нормально
Код:
 } else if (npcId == arkenia) {
                    if (st.ownItemCount(seeds_of_lunacy) == 0) {
                        if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) == 0) {
                            st.giveItems(hub_scent, 1);
                            htmltext = "arkenia_q0412_01.htm";
                        } else if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) < 3)
                            htmltext = "arkenia_q0412_02.htm";
                        else if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) >= 3) {
                            st.giveItems(seeds_of_lunacy, 1);
                            st.takeItems(heart_of_lunacy, 3);
                            st.takeItems(hub_scent, 1);
                            htmltext = "arkenia_q0412_03.htm";
                        }
                    }
                }
                break;
        }
        return htmltext;

по идеи должно срабатывать else if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) >= 3) {
только я не у верен по поводу heart_of_lunacy есть ли они у меня. в игре то они есть но может называются по другому
Где посмотреть в базе квестовые предметы находящиеся в инвентаре ?
и каким образом он должен у меня забрать st.takeItems(hub_scent, 1); если в условии у меня он должен быть 0, if (st.ownItemCount(hub_scent) == 0

С твоим уровнем знаний я все же посоветовал бы взять что-то другое.
Если целью является просто маленький сервер в локалке, то там даже чистый овер или лост подойдет - проблем там самый минимум и для мелкого сервера вобще не критичных.
Я я бы с удовольствием только ткните меня пальцем где взять такую сборку и клиента к нему чтобы было по максимому все по русски особенно квесты. Я уже перебрал по советам форума гору сборок половина из них вообще не запускается а те что запускается то клиент с интерфейсом на английском то в самой игре диалоги на английском ((((( скачал бы уже давно и не отвлекал бы вас тут
кто-то же мне эту сборку присоветовал а в ней такие баги

Ураааа!!!!
Ежики горемычные ))))) вот решение у кого не выполняется квест !!!!
if (st.ownItemCount(seeds_of_lunacy) == 0) {
if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) == 0) {
st.giveItems(hub_scent, 1); ВОТ ТУТ ЖЕ ОН ДАЕТ hub_scent в количестве одной штуки
htmltext = "arkenia_q0412_01.htm";
} else if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) < 3)
htmltext = "arkenia_q0412_02.htm";
else if (st.ownItemCount(hub_scent) == 0 && st.ownItemCount(heart_of_lunacy) >= 3) { А ТУТ ПОЧЕМУ условие st.ownItemCount(hub_scent) == 0 должно быть 1
st.giveItems(seeds_of_lunacy, 1);
st.takeItems(heart_of_lunacy, 3);
st.takeItems(hub_scent, 1); А ТУТ ОН ЭТО ЗАБИРАЕТ!!!
htmltext = "arkenia_q0412_03.htm";
}

исправил на else if (st.ownItemCount(hub_scent) == 1 && st.ownItemCount(heart_of_lunacy) >= 3) Все заработало

есть еще ошибки в этой сборке мне хоть на живую java по изучать
А то Hello word совсем не интересно !!! )))
 
Последнее редактирование модератором:
Вот так выглядит этот участок кода после декомпиляции ai.obj. Очевидно была опечатка, при ручном копировании или решили, что !=0 ошибка декомпилятора и поменяли. Но и сверху в комментариях нет отметки, что квест протестирован) Так что, помимо фикса рейтования, нужно вручную прогонять непротестированные квесты
Код:
                            if (AiUtils.OwnItemCount(talker, 1279) == 0 && AiUtils.OwnItemCount(talker, 1260) == 0)
                            {
                                ShowPage(talker, "arkenia_q0412_01.htm");
                                GiveItem1(talker, 1279, 1);
                            }
                            else if (AiUtils.OwnItemCount(talker, 1279)!=0 && AiUtils.OwnItemCount(talker, 1260) < 3)
                            {
                                ShowPage(talker, "arkenia_q0412_02.htm");
                            }
                            else if (AiUtils.OwnItemCount(talker, 1279)!=0 && AiUtils.OwnItemCount(talker, 1260) >= 3)
                            {
                                ShowPage(talker, "arkenia_q0412_03.htm");
                                GiveItem1(talker, 1256, 1);
                                DeleteItem1(talker, 1260, 3);
                                DeleteItem1(talker, 1279, 1);
                            }
 
да я уже вроде исправил и протестировал

Вот так выглядит этот участок кода после декомпиляции ai.obj. Очевидно была опечатка, при ручном копировании или решили, что !=0 ошибка декомпилятора и поменяли. Но и сверху в комментариях нет отметки, что квест протестирован) Так что, помимо фикса рейтования, нужно вручную прогонять непротестированные квесты
Так есть еще сборка без багов?!
везет же некоторым
 
Последнее редактирование модератором:
Народ, подскажите, тут Итем броке реализован? Он работает? Пытаюсь в настройках включить, в service.json, но функция не добавляется к торговцу.

Народ, подскажите пожалуйста, что тут не так? Ставлю Итем Брокера, т.к его нет вообще, и в консоле ошибки. Какие библиотеки не правильно импортированы?

Код:
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:12,30: cannot find symbol
  symbol:   class Config
  location: package org.mmocore.gameserver
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:13,46: cannot find symbol
  symbol:   class ItemHolder
  location: package org.mmocore.gameserver.data.xml.holder
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:14,46: cannot find symbol
  symbol:   class RecipeHolder
  location: package org.mmocore.gameserver.data.xml.holder
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:16,36: cannot find symbol
  symbol:   class GameObjectsStorage
  location: package org.mmocore.gameserver.model
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:17,36: cannot find symbol
  symbol:   class Player
  location: package org.mmocore.gameserver.model
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:18,36: cannot find symbol
  symbol:   class Recipe
  location: package org.mmocore.gameserver.model
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:19,36: cannot find symbol
  symbol:   class World
  location: package org.mmocore.gameserver.model
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:22,42: package org.mmocore.gameserver.model.items does not exist
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:23,42: package org.mmocore.gameserver.model.items does not exist
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:24,52: package org.mmocore.gameserver.network.l2.components does not exist
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:25,45: package org.mmocore.gameserver.network.l2.s2c does not exist
2018-11-20 16:29:54,046 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:26,45: package org.mmocore.gameserver.network.l2.s2c does not exist
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:27,45: package org.mmocore.gameserver.network.l2.s2c does not exist
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:28,38: cannot find symbol
  symbol:   class Functions
  location: package org.mmocore.gameserver.scripts
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:184,63: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:205,26: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:217,31: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:229,32: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,047 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:241,26: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,048 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:419,33: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,048 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:615,26: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,048 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:757,32: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,048 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:899,26: cannot find symbol
  symbol:   class Player
  location: class services.ItemBroker
2018-11-20 16:29:54,048 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:62,30: cannot find symbol
  symbol:   class TradeItem
  location: class services.ItemBroker.Item
2018-11-20 16:29:54,049 ERROR o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/ItemBroker.java:65,173: cannot find symbol
  symbol:   class TradeItem
  location: class services.ItemBroker.Item
2018-11-20 16:29:54,049 DEBUG o.m.c.c.Compiler [main] - /home/l2servers/l2highfive/gameserver/data/scripts/services/CustomWeaklySpawnManager.java:10,36: org.mmocore.gameserver.model.SimpleSpawner in org.mmocore.gameserver.model has been deprecated
2018-11-20 16:29:54,049 ERROR o.m.g.d.s.Scripts [main] - Scripts: Failed loading scripts!
 
Вообщем решил я сегодня сам посмотреть код.
Предметы криво рейтуются из-за попытки сделать это массово для всех квестов. В QuestState.java есть кусочек где проверка template.isStackable() - почему то означает, что квест итем нужно прорейтовать.
Код:
/**
     * Добавить предмет игроку
     * By default if item is adena rates 'll be applyed, else no
     *
     * @param itemId
     * @param count
     */
    public void giveItems(final int itemId, final long count) {
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }
        giveItems(itemId, count, template.isStackable()); // Проверка isStackable())
    }
Исправление: заменить template.isStackable() на false, а затем руками во всех квестах участки st.giveItems("названиепредмета", 1); менять на st.giveItems("названиепредмета", 1, true); там, где нужно рейтовать drop\reward. А еще лучше, раз уж руками придется рейтовать квесты(как это делают в птс экстендерах) создать дополнительный метод rewardItems по аналогии с
giveItems(final int itemId, long count, final boolean rate) - и прорейтовать дроп в квестах с помощью giveItems, а награду с помощью rewardItems. Квестов всего штук 500, весь фикс займет от силы несколько часов.

Далее почему не добавляется последний предмет. В QuestState.java есть кусок где все квестовые предметы удаляются после завершения квеста, чтобы почистить от лишнего дропа(под спойлером ниже). В нашем квесте при инициализации конструктора beziques_recommendation добавляется в список квестовых предметов, это выглядит вот так: addQuestItem(beziques_letter, spatois_bones, horseshoe_of_light, wanted_bill, stolen_jewelry, stolen_tomes, stolen_ring, stolen_necklace, beziques_recommendation, netis_bow, netis_dagger); И при завершении квеста, предмет считается как дропнутый по квесту и удаляется.
На птс удаления предметов по завершению квеста не происходит, а происходит только при ручной отмене квеста.
Код:
/**
     * Destroy element used by quest when quest is exited
     *
     * @param repeatable
     * @return QuestState
     */
    public QuestState exitQuest(final boolean repeatable) {
        final Player player = getPlayer();
        if (player == null) {
            return this;
        }

        removePlayerOnKillListener();
        // Clean drops
        for (final int itemId : _quest.getItems()) {
            // Get [item from] / [presence of the item in] the inventory of the player
            final ItemInstance item = player.getInventory().getItemByItemId(itemId);
            if (item == null || itemId == 57) {
                continue;
            }
            final long count = item.getCount();
            // If player has the item in inventory, destroy it (if not gold)
            player.getInventory().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
            player.getWarehouse().destroyItemByItemId(itemId, count); //Удаление квестовых предметов
        }

        // If quest is repeatable, delete quest from list of quest of the player and from database (quest CAN be created again => repeatable)
        if (repeatable) {
            player.removeQuestState(_quest.getId());
            CharacterQuestDAO.getInstance().delete(getPlayer().getObjectId(), _quest.getId());
            _vars.clear();
        } else { // Otherwise, delete variables for quest and update database (quest CANNOT be created again => not repeatable)
            for (final String var : _vars.keySet()) {
                if (var != null) {
                    removeMemo(var);
                }
            }
            setState(Quest.COMPLETED);
        }
        player.sendPacket(new QuestList(player));
        return this;
    }
Исправление: чтобы решить эту проблему надо просто этот участок(с удалением предметов) перенести в блок public void abortQuest() либо как альтернативный вариант вручную в каждом квесте удалить из списка addQuestItem предметы которые выдаются по его завершению.
В итоге эти 2 мелких фикса полностью исправят квестовую систему.

И снова вернемся к квесту PathofTheRouge. Народ, подскажите, что и куда дальше копать, вроде как убрал в QuestState.java, чтоб не рейтовались данные итемы.

Код:
public void giveItems(final int itemId, final long count) {
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }
        giveItems(itemId, count, template.isStackable());
    }

На

Код:
public void giveItems(int itemId, long count)
    {
        if(itemId == ItemTemplate.ITEM_ID_ADENA)
            giveItems(itemId, count, true);
        else
            giveItems(itemId, count, false);
    }

Рейтовка вроде как убрана, по тесту все норм, дает 1 штуку рекомендацию безика, но шанс дропа квест итемов тоже порезался, очень долго набиваешь 10 итемов. При этом, когда набиваешь итемы, почему то их дают только с главаря скелетов, а с остальных не дают. Брал инфу с JTS 2015 года. Или я может вообще что-то не то сделал?
 
И снова вернемся к квесту PathofTheRouge. Народ, подскажите, что и куда дальше копать, вроде как убрал в QuestState.java, чтоб не рейтовались данные итемы.

Код:
public void giveItems(final int itemId, final long count) {
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }
        giveItems(itemId, count, template.isStackable());
    }

На

Код:
public void giveItems(int itemId, long count)
    {
        if(itemId == ItemTemplate.ITEM_ID_ADENA)
            giveItems(itemId, count, true);
        else
            giveItems(itemId, count, false);
    }

Рейтовка вроде как убрана, по тесту все норм, дает 1 штуку рекомендацию безика, но шанс дропа квест итемов тоже порезался, очень долго набиваешь 10 итемов. При этом, когда набиваешь итемы, почему то их дают только с главаря скелетов, а с остальных не дают. Брал инфу с JTS 2015 года. Или я может вообще что-то не то сделал?
чет я в коде выше вообще не увидел рейтовки... по-моему Вы просто заменили шило на мыло, причем мыло не совсем правильное походу...
 
чет я в коде выше вообще не увидел рейтовки... по-моему Вы просто заменили шило на мыло, причем мыло не совсем правильное походу...
Как я понял рейтовать или нет указывал 3 булевый параметр(который определялся template.isStackable()), автору бы показать метод giveItems(int,long,boolean)
 
Как я понял рейтовать или нет указывал 3 булевый параметр(который определялся template.isStackable()), автору бы показать метод giveItems(int,long,boolean)

Достал из оригинального файла QuestState.java. Из giveItems есть только вот это, другого не вижу.

Код:
public void giveItems(final int itemId, final long count) {
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }
        giveItems(itemId, count, template.isStackable());
    }

    /**
     * Добавить предмет игроку
     *
     * @param itemId
     * @param count
     * @param rate   - учет квестовых рейтов
     */
    public void giveItems(final int itemId, long count, final boolean rate) {
        final Player player = getPlayer();
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (player == null || template == null) {
            return;
        }

        if (count <= 0) {
            count = 1;
        }

        if (rate) {
            if (template.isQuest())
                count *= getRateQuestsDrop();
            else
                count *= getRateQuestsReward();
        }

        ItemFunctions.addItem(player, itemId, count, true);
        player.sendChanges();
    }

    public void giveItems(final int itemId, long count, final Element element, final int power) {
        final Player player = getPlayer();
        if (player == null) {
            return;
        }

        if (count <= 0) {
            count = 1;
        }

        // Get template of item
        final ItemTemplate template = ItemTemplateHolder.getInstance().getTemplate(itemId);
        if (template == null) {
            return;
        }

        for (int i = 0; i < count; i++) {
            final ItemInstance item = ItemFunctions.createItem(itemId);

            if (element != Element.NONE) {
                item.setAttributeElement(element, power);
            }

            // Add items to player's inventory
            player.getInventory().addItem(item);
        }

        player.sendPacket(SystemMessage.obtainItems(template.getItemId(), count, 0));
        player.sendChanges();
    }
 
У кого нибудь встречалась данная ошибка? тупо качаюсь, квесты не какие не брал, и тут на)
 

Вложения

  • Новый точечный рисунок.jpg
    Новый точечный рисунок.jpg
    402,1 КБ · Просмотры: 96
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу