Помогите с квестом

Sladost

Пляшущий с бубном
Участник
Сообщения
106
Розыгрыши
0
Решения
2
Репутация
21
Реакции
35
Баллы
295
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
pw
Есть простейший квест на 2 этапа.
1 этап, убить N-мобов и собери N - количество итемов. (за убийство выдаётся 1 итем)
2 этап, убить босса, собрать 1 итем, сдать и забрать награду.
Собственно в чем требуется помощь, нужно сделать так, чтобы за убийство монстров в 1 этапе, награда выдавалась всей группе, а не добившему.
Знаний нет, но методом тыка и проб пытался как то по аналогии с 2 этапом переписать 1. но всё тщетно, уверен что данная задача решается максимально легко и просто, поэтому уважаемые знатоки, помогите если не сложно.
 

Вложения

  • quest.txt
    4,8 КБ · Просмотры: 15
Есть простейший квест на 2 этапа.
1 этап, убить N-мобов и собери N - количество итемов. (за убийство выдаётся 1 итем)
2 этап, убить босса, собрать 1 итем, сдать и забрать награду.
Собственно в чем требуется помощь, нужно сделать так, чтобы за убийство монстров в 1 этапе, награда выдавалась всей группе, а не добившему.
Знаний нет, но методом тыка и проб пытался как то по аналогии с 2 этапом переписать 1. но всё тщетно, уверен что данная задача решается максимально легко и просто, поэтому уважаемые знатоки, помогите если не сложно.
Вроде бы ничего сложного..
В методе onKill, реализована цикличность с помощью свич-кейса, в первом кейсе нужно пересмотреть условие:

if (npcId != RaidBoss && Rnd.get(100) < chance1)
{
int[] drop = getDrop(npcId);
if (st.getPlayer().getInventory().getInventoryItemCount(drop[0], 0) < drop[1])
st.giveItems(drop[0], 1); // кол-во выдачи
}

А по хорошему переписать его, т.к. на мой взгляд это можно сделать немного иначе.

Что касается получения награды на группу, то во втором кейсе при выполнении условия: if (npcId == RaidBoss), объявляется класс L2Party с нужными параметрами, а именно killer.getParty(); далее, проверяется еще одно условие if (party != null), и в случае, если группа существует и проверяемый параметр не равен null, тогда запускаем цикл for, в котором проверяем еще доп. условия и как раз дергаем из класса L2PcInstance нужные нам методы/параметры для дропа награды на всех участников группы, а не одному игроку. Думаю, что частично эту реализацию можно перенести в первый кейс, с учетом некоторых особенностей.
 
Вроде бы ничего сложного..
В методе onKill, реализована цикличность с помощью свич-кейса, в первом кейсе нужно пересмотреть условие:

if (npcId != RaidBoss && Rnd.get(100) < chance1)
{
int[] drop = getDrop(npcId);
if (st.getPlayer().getInventory().getInventoryItemCount(drop[0], 0) < drop[1])
st.giveItems(drop[0], 1); // кол-во выдачи
}

А по хорошему переписать его, т.к. на мой взгляд это можно сделать немного иначе.

Что касается получения награды на группу, то во втором кейсе при выполнении условия: if (npcId == RaidBoss), объявляется класс L2Party с нужными параметрами, а именно killer.getParty(); далее, проверяется еще одно условие if (party != null), и в случае, если группа существует и проверяемый параметр не равен null, тогда запускаем цикл for, в котором проверяем еще доп. условия и как раз дергаем из класса L2PcInstance нужные нам методы/параметры для дропа награды на всех участников группы, а не одному игроку. Думаю, что частично эту реализацию можно перенести в первый кейс, с учетом некоторых особенностей.
а я вот думал откуда берутся гавно коды а теперь понял с подобных тем(вы хоть сами определитесьчто кукда пихать ,всечтот вы расписали пишется в 2 строчки)
 
а я вот думал откуда берутся гавно коды а теперь понял с подобных тем(вы хоть сами определитесьчто кукда пихать ,всечтот вы расписали пишется в 2 строчки)
Ты в орфографию и составление предложения не можешь, и упрекаешь людей за код, серьезно

ezgif-5-b1d0bb4a1f.gif
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Вроде бы ничего сложного..
В методе onKill, реализована цикличность с помощью свич-кейса, в первом кейсе нужно пересмотреть условие:

if (npcId != RaidBoss && Rnd.get(100) < chance1)
{
int[] drop = getDrop(npcId);
if (st.getPlayer().getInventory().getInventoryItemCount(drop[0], 0) < drop[1])
st.giveItems(drop[0], 1); // кол-во выдачи
}

А по хорошему переписать его, т.к. на мой взгляд это можно сделать немного иначе.

Что касается получения награды на группу, то во втором кейсе при выполнении условия: if (npcId == RaidBoss), объявляется класс L2Party с нужными параметрами, а именно killer.getParty(); далее, проверяется еще одно условие if (party != null), и в случае, если группа существует и проверяемый параметр не равен null, тогда запускаем цикл for, в котором проверяем еще доп. условия и как раз дергаем из класса L2PcInstance нужные нам методы/параметры для дропа награды на всех участников группы, а не одному игроку. Думаю, что частично эту реализацию можно перенести в первый кейс, с учетом некоторых особенностей.
еще есть смысл к условию

if (party != null)

добавить else с выдачей предмета исключительно одному игроку (т.к. иногда бывает такое, что РБ убивают\добивают в соло)
 
еще есть смысл к условию

if (party != null)

добавить else с выдачей предмета исключительно одному игроку (т.к. иногда бывает такое, что РБ убивают\добивают в соло)
Почему бы и нет :) , вопрос больше в том, что нужно получить в конечном итоге. А там уже вариантов реализации можно накидать, это вообще не проблема)

а я вот думал откуда берутся гавно коды а теперь понял с подобных тем(вы хоть сами определитесьчто кукда пихать ,всечтот вы расписали пишется в 2 строчки)
Я забыл, что на каждом форуме есть местный архитектор, который норовит провести ревью.
 
всем спасибо, переписал 1 кейс по примеру 2 кейса, не с первого раза, но сработало.
Как это выглядит:
Код:
case 1:
            // дроп с мобов (MOBS)
            if (npcId != RaidBoss && Rnd.get(100) < chance1) {
                int[] drop = getDrop(npcId);
                L2Party party = killer.getParty();
                if (party != null) {
                    for (L2PcInstance member : party.getPartyMembers())
                        if (member.getInventory().getInventoryItemCount(drop[0], 0) < drop[1]) {
                            st = member.getQuestState(getName());
                            if (st != null && st.getInt("cond") != 2)
                                st.giveItems(drop[0], 1);
                        }
                } else if (killer.getInventory().getInventoryItemCount(drop[0], 0) < drop[1])
                    st.giveItems(drop[0], 1);
            }
 
Назад
Сверху Снизу