Вопрос по квесту

Razox

Путник
Пользователь
Сообщения
61
Розыгрыши
0
Репутация
-30
Реакции
322
Баллы
0
Ребят какой без ранговый квест можно взять как шаблон для написания нового?
 
Ребят какой без ранговый квест можно взять как шаблон для написания нового?
Берите любой квест за основу.
Я брала начальные квесты .
Далее просто в коде квеста меняете критерии уровней, награды, а так же возможность проходить повторно или одноразово.
В коде квеста там все понятно даже мне, слабосоображающей бабе) Если захотите добавить этапы с диалогами, есть параметр cond ==.
Так же не забывайте все эти изменения вносить в QuestName.dat, (отдельным новым квестом так как клиент будет использовать тот который брали за основу)
 
Воот оно QuestName.dat спс биг а я думаю что ж за бред спасибо еще раз!

Не высвечивается Название квеста что может быть не так?
Screenshot_1.png

хотя ссылка работает
Screenshot_2.png

и что это за параметр?
Screenshot_3.png
 
Последнее редактирование модератором:
Не высвечивается Название квеста что может быть не так?
Посмотреть вложение 18054

хотя ссылка работает
Посмотреть вложение 18055

и что это за параметр?
Посмотреть вложение 18056
Не отображается название квеста в чате.
А параметр - это стадия квеста.
 
public _1111_SagaWarior() {
super(false);

addStartNpc(30008);
addTalkId(30283);

addKillId(20361);
addKillId(20362);

addQuestItem(ALLTRANS_NOTE, HOWTOGO_RUINS, BROKEN_BLADE_TOP, BROKEN_BLADE_BOTTOM, ROIENS_LETTER, BROKEN_SWORD_HANDLE);
}

@Override
public String onEvent(String event, QuestState st, NpcInstance npc) {
String htmltext = event;
if (event.equalsIgnoreCase("1111111")) {
st.setCond(1);
st.setState(STARTED);
st.playSound(SOUND_ACCEPT);
st.giveItems(ROIENS_LETTER, 1);
} else if (event.equalsIgnoreCase("1111111.htm")) {
st.setCond(2);
st.takeItems(ROIENS_LETTER, -1);
st.giveItems(HOWTOGO_RUINS, 1);
} else if (event.equalsIgnoreCase("1111111.htm")) {
st.takeItems(BROKEN_SWORD_HANDLE, -1);

st.giveItems(SWORD_OF_SOLIDARITY, 1);
st.giveItems(ADENA_ID, 10981, false);
st.addExpAndSp(25747, 2171);

if (st.getPlayer().getClassId().getLevel() == 1 && !st.getPlayer().getVarB("p1q3")) {
st.getPlayer().setVar("p1q3", "1", -1); // flag for helper
st.getPlayer().sendPacket(new ExShowScreenMessage("Now go find the Newbie Guide.", 5000, ScreenMessageAlign.TOP_CENTER, true));
st.giveItems(1060, 100); // healing potion
for (int item = 4412; item <= 4417; item+:) {
st.giveItems(item, 10); // echo cry
}
if (st.getPlayer().getClassId().isMage()) {
st.playTutorialVoice("tutorial_voice_027");
st.giveItems(5790, 3000); // newbie sps
} else {
st.playTutorialVoice("tutorial_voice_026");
st.giveItems(5789, 6000); // newbie ss
}
}

st.exitCurrentQuest(true);
st.playSound(SOUND_FINISH);
}
return htmltext;
}

@Override
public String onTalk(NpcInstance npc, QuestState st) {
String htmltext = "noquest";
int npcId = npc.getNpcId();
int cond = st.getCond();
if (npcId == 30008) {
if (cond == 0) {

if (st.getPlayer().getRace() != Race.human) {
htmltext = "1111111.htm";
} else if (st.getPlayer().getLevel() >= 9) {
htmltext = "1111111.htm";
return htmltext;
} else {
htmltext = "1.htm";
st.exitCurrentQuest(true);
}

} else if (cond == 1 && st.getQuestItemsCount(ROIENS_LETTER) == 1) {
htmltext = "1111111.htm";
} else if (cond >= 2 && st.getQuestItemsCount(ROIENS_LETTER) == 0 && st.getQuestItemsCount(ALLTRANS_NOTE) == 0) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) <= 1) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(BROKEN_SWORD_HANDLE) > 0) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(HOWTOGO_RUINS) == 1) {
htmltext = "1111111.htm";
}
} else if (cond == 4 && st.getQuestItemsCount(ALLTRANS_NOTE) > 0) {
htmltext = "1111111.htm";
st.setCond(5);
st.takeItems(ALLTRANS_NOTE, -1);
st.giveItems(BROKEN_SWORD_HANDLE, 1);
}
} else if (npcId == 30283) {
if (cond == 1 && st.getQuestItemsCount(ROIENS_LETTER) > 0) {
htmltext = "1111111.htm";
} else if (cond >= 2 && st.getQuestItemsCount(HOWTOGO_RUINS) == 1) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 1) {
htmltext = "1111111.htm";
} else if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 0) {
htmltext = "1111111.htm";
} else if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
htmltext = "1111111.htm";
st.setCond(4);
st.takeItems(HOWTOGO_RUINS, -1);
st.takeItems(BROKEN_BLADE_TOP, -1);
st.takeItems(BROKEN_BLADE_BOTTOM, -1);
st.giveItems(ALLTRANS_NOTE, 1);
} else if (cond == 4 && st.getQuestItemsCount(ALLTRANS_NOTE) > 0) {
htmltext = "1111111.htm";
}
} else if (cond == 5 && st.getQuestItemsCount(BROKEN_SWORD_HANDLE) > 0) {
htmltext = "11111116.htm";
}
}
return htmltext;
}

@Override
public String onKill(NpcInstance npc, QuestState st) {
int npcId = npc.getNpcId();
if ((npcId == 20361 || npcId == 20362) && st.getQuestItemsCount(HOWTOGO_RUINS) > 0) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) == 0 && Rnd.chance(60)) {
st.giveItems(BROKEN_BLADE_TOP, 1);
st.playSound(SOUND_MIDDLE);
} else if (st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 0 && Rnd.chance(60)) {
st.giveItems(BROKEN_BLADE_BOTTOM, 1);
st.playSound(SOUND_MIDDLE);
}
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
st.setCond(3);
}
}
return null;
}
}


чет я не нашел
 
public _1111_SagaWarior() {
super(false);

addStartNpc(30008);
addTalkId(30283);

addKillId(20361);
addKillId(20362);

addQuestItem(ALLTRANS_NOTE, HOWTOGO_RUINS, BROKEN_BLADE_TOP, BROKEN_BLADE_BOTTOM, ROIENS_LETTER, BROKEN_SWORD_HANDLE);
}

@Override
public String onEvent(String event, QuestState st, NpcInstance npc) {
String htmltext = event;
if (event.equalsIgnoreCase("1111111")) {
st.setCond(1);
st.setState(STARTED);
st.playSound(SOUND_ACCEPT);
st.giveItems(ROIENS_LETTER, 1);
} else if (event.equalsIgnoreCase("1111111.htm")) {
st.setCond(2);
st.takeItems(ROIENS_LETTER, -1);
st.giveItems(HOWTOGO_RUINS, 1);
} else if (event.equalsIgnoreCase("1111111.htm")) {
st.takeItems(BROKEN_SWORD_HANDLE, -1);

st.giveItems(SWORD_OF_SOLIDARITY, 1);
st.giveItems(ADENA_ID, 10981, false);
st.addExpAndSp(25747, 2171);

if (st.getPlayer().getClassId().getLevel() == 1 && !st.getPlayer().getVarB("p1q3")) {
st.getPlayer().setVar("p1q3", "1", -1); // flag for helper
st.getPlayer().sendPacket(new ExShowScreenMessage("Now go find the Newbie Guide.", 5000, ScreenMessageAlign.TOP_CENTER, true));
st.giveItems(1060, 100); // healing potion
for (int item = 4412; item <= 4417; item+:) {
st.giveItems(item, 10); // echo cry
}
if (st.getPlayer().getClassId().isMage()) {
st.playTutorialVoice("tutorial_voice_027");
st.giveItems(5790, 3000); // newbie sps
} else {
st.playTutorialVoice("tutorial_voice_026");
st.giveItems(5789, 6000); // newbie ss
}
}

st.exitCurrentQuest(true);
st.playSound(SOUND_FINISH);
}
return htmltext;
}

@Override
public String onTalk(NpcInstance npc, QuestState st) {
String htmltext = "noquest";
int npcId = npc.getNpcId();
int cond = st.getCond();
if (npcId == 30008) {
if (cond == 0) {

if (st.getPlayer().getRace() != Race.human) {
htmltext = "1111111.htm";
} else if (st.getPlayer().getLevel() >= 9) {
htmltext = "1111111.htm";
return htmltext;
} else {
htmltext = "1.htm";
st.exitCurrentQuest(true);
}

} else if (cond == 1 && st.getQuestItemsCount(ROIENS_LETTER) == 1) {
htmltext = "1111111.htm";
} else if (cond >= 2 && st.getQuestItemsCount(ROIENS_LETTER) == 0 && st.getQuestItemsCount(ALLTRANS_NOTE) == 0) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) <= 1) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(BROKEN_SWORD_HANDLE) > 0) {
htmltext = "1111111.htm";
}
if (st.getQuestItemsCount(HOWTOGO_RUINS) == 1) {
htmltext = "1111111.htm";
}
} else if (cond == 4 && st.getQuestItemsCount(ALLTRANS_NOTE) > 0) {
htmltext = "1111111.htm";
st.setCond(5);
st.takeItems(ALLTRANS_NOTE, -1);
st.giveItems(BROKEN_SWORD_HANDLE, 1);
}
} else if (npcId == 30283) {
if (cond == 1 && st.getQuestItemsCount(ROIENS_LETTER) > 0) {
htmltext = "1111111.htm";
} else if (cond >= 2 && st.getQuestItemsCount(HOWTOGO_RUINS) == 1) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 1) {
htmltext = "1111111.htm";
} else if (st.getQuestItemsCount(BROKEN_BLADE_TOP) + st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 0) {
htmltext = "1111111.htm";
} else if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
htmltext = "1111111.htm";
st.setCond(4);
st.takeItems(HOWTOGO_RUINS, -1);
st.takeItems(BROKEN_BLADE_TOP, -1);
st.takeItems(BROKEN_BLADE_BOTTOM, -1);
st.giveItems(ALLTRANS_NOTE, 1);
} else if (cond == 4 && st.getQuestItemsCount(ALLTRANS_NOTE) > 0) {
htmltext = "1111111.htm";
}
} else if (cond == 5 && st.getQuestItemsCount(BROKEN_SWORD_HANDLE) > 0) {
htmltext = "11111116.htm";
}
}
return htmltext;
}

@Override
public String onKill(NpcInstance npc, QuestState st) {
int npcId = npc.getNpcId();
if ((npcId == 20361 || npcId == 20362) && st.getQuestItemsCount(HOWTOGO_RUINS) > 0) {
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) == 0 && Rnd.chance(60)) {
st.giveItems(BROKEN_BLADE_TOP, 1);
st.playSound(SOUND_MIDDLE);
} else if (st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) == 0 && Rnd.chance(60)) {
st.giveItems(BROKEN_BLADE_BOTTOM, 1);
st.playSound(SOUND_MIDDLE);
}
if (st.getQuestItemsCount(BROKEN_BLADE_TOP) > 0 && st.getQuestItemsCount(BROKEN_BLADE_BOTTOM) > 0) {
st.setCond(3);
}
}
return null;
}
}


чет я не нашел
Этап квеста это значение, которое ты устанавливаешь в строках:
Код:
st.setCond(1);
st.setCond(2);
st.setCond(5);
st.setCond(4);
st.setCond(3);
И получаешь в строке:
Код:
int cond = st.getCond();
То есть, в твоем случае в QuestName-*.dat должно быть 6 записей:
Код:
1    1111    1    a,Saga Warior\0
1    1111    2    a,Saga Warior\0
1    1111    3    a,Saga Warior\0
1    1111    4    a,Saga Warior\0
1    1111    5    a,Saga Warior\0
1    1111    -1    a,Saga Warior\0
Только не забудь про остальные параметры в QuestName-*dat файле.
Такие как:
- Название этапа квеста
- Текст с описанием квеста
- ID необходимых предметов для выполнения квеста (если есть)
- Количество необходимых предметов для выполнения квеста (если есть)
- Координаты NPC, с которым нужно поговорить
- Координаты точки на карте, которая будет отображаться в Alt+M
- Имя NPC, с которым нужно поговорить
- ID NPC, с которым нужно поговорить
- Награда за квест
 
Этап квеста это значение, которое ты устанавливаешь в строках:
Код:
st.setCond(1);
st.setCond(2);
st.setCond(5);
st.setCond(4);
st.setCond(3);
И получаешь в строке:
Код:
int cond = st.getCond();
То есть, в твоем случае в QuestName-*.dat должно быть 6 записей:
Код:
1    1111    1    a,Saga Warior\0
1    1111    2    a,Saga Warior\0
1    1111    3    a,Saga Warior\0
1    1111    4    a,Saga Warior\0
1    1111    5    a,Saga Warior\0
1    1111    -1    a,Saga Warior\0
Только не забудь про остальные параметры в QuestName-*dat файле.
Такие как:
- Название этапа квеста
- Текст с описанием квеста
- ID необходимых предметов для выполнения квеста (если есть)
- Количество необходимых предметов для выполнения квеста (если есть)
- Координаты NPC, с которым нужно поговорить
- Координаты точки на карте, которая будет отображаться в Alt+M
- Имя NPC, с которым нужно поговорить
- ID NPC, с которым нужно поговорить
- Награда за квест
Спасибо за подробный ответ

что-то не так делаю
Screenshot_1.png
 
Последнее редактирование модератором:
А это я для чего давал?)
Не отображается название квеста в чате.
Повторю еще раз здесь.
img

В NpcString-*.dat нужно прописать 3 стадии квеста. ID указывать по принципу ID01, ID02, ID03. Если ID квеста больше, чем 10000, то от ID необходимо отнять 5000. Для примера, ID кастомного квеста 10601. Значит в NpcString-*.dat прописываем:
Код:
560101    a,CustomQuestName\0
560102    a,CustomQuestName (In Progress)\0
560103    a,CustomQuestName (Done)\0
Конкретно в твоем случае должны быть следующие записи в файле NpcString-*.dat, а не в QuestName-*.dat
Код:
111101    a,Saga Warrior\0
111102    a,Saga Warrior (In Progress)\0
111103    a,Saga Warrior (Done)\0
 
  • Мне нравится
Реакции: kick

    kick

    Баллов: 79
    За сообщение
что за 5000 мы отнимаем что за значение?
 
все спс можете закрывать тему Помог+
 
Та не за что. Обращайся, если что. 😉
 
  • Мне нравится
Реакции: kick
Назад
Сверху Снизу