Перейти к содержанию
Авторизация  
Elione

Квест 279

Рекомендуемые сообщения

 

package quests;

import org.mmocore.commons.util.Rnd;
import org.mmocore.gameserver.model.instances.NpcInstance;
import org.mmocore.gameserver.model.quest.Quest;
import org.mmocore.gameserver.model.quest.QuestState;
import org.mmocore.gameserver.scripts.ScriptFile;

/**
* Based on official H5
*
* @author Magister
*/
public class _279_TargetOfOpportunity extends Quest implements ScriptFile {
// npc

private static final int zerian = 32302;
private static final int teleporter_a01 = 32745;
private static final int teleporter_a03 = 32747;
// mobs
private static final int guard_of_space = 22373;
private static final int beholder_of_space = 22374;
private static final int priest_of_space = 22375;
private static final int ruler_of_space = 22376;
// questitem
private static final int q_seal_breaker_5f = 15515;
private static final int q_seal_breaker_10f = 15516;
private static final int q_seal_components_part1 = 15517;
private static final int q_seal_components_part2 = 15518;
private static final int q_seal_components_part3 = 15519;
private static final int q_seal_components_part4 = 15520;

@Override
public void onLoad() {
}

@Override
public void onReload() {
}

@Override
public void onShutdown() {
}

public _279_TargetOfOpportunity() {
super(PARTY_ALL);
addStartNpc(zerian);
addTalkId(teleporter_a01, teleporter_a03);
addKillId(guard_of_space, beholder_of_space, priest_of_space, ruler_of_space);
addQuestItem(q_seal_components_part1, q_seal_components_part2, q_seal_components_part3, q_seal_components_part4);
}

@Override
public String onEvent(String event, QuestState st, NpcInstance npc) {
String htmltext = event;
int GetMemoState = st.getInt("catch_the_blind_side");

if (event.equalsIgnoreCase("quest_accept")) {
st.setCond(1);
st.set("catch_the_blind_side", String.valueOf(1), true);
st.setState(STARTED);
st.playSound(SOUND_ACCEPT);
htmltext = "zerian_q0279_05.htm";
} else if (event.equalsIgnoreCase("reply_1")) {
htmltext = "zerian_q0279_03.htm";
} else if (event.equalsIgnoreCase("reply_2")) {
htmltext = "zerian_q0279_04.htm";
} else if (event.equalsIgnoreCase("reply_3")) {
if (GetMemoState < 2 && st.getQuestItemsCount(q_seal_components_part1) >= 1 && st.getQuestItemsCount(q_seal_components_part2) >= 1 && st.getQuestItemsCount(q_seal_components_part3) >= 1 && st.getQuestItemsCount(q_seal_components_part4) >= 1) {
st.giveItems(q_seal_breaker_5f, 1);
st.giveItems(q_seal_breaker_10f, 1);
st.takeItems(q_seal_components_part1, -1);
st.takeItems(q_seal_components_part2, -1);
st.takeItems(q_seal_components_part3, -1);
st.takeItems(q_seal_components_part4, -1);
st.unset("catch_the_blind_side");
st.playSound(SOUND_FINISH);
st.exitCurrentQuest(true);
htmltext = "zerian_q0279_08.htm";
}
}
return htmltext;
}

@Override
public String onTalk(NpcInstance npc, QuestState st) {
String htmltext = NO_QUEST_DIALOG;
int GetMemoState = st.getInt("catch_the_blind_side");
int npcId = npc.getNpcId();
int id = st.getState();

switch (id) {
case CREATED:
if (npcId == zerian) {
if (st.getPlayer().getLevel() >= 82) {
htmltext = "zerian_q0279_01.htm";
} else {
htmltext = "zerian_q0279_02.htm";
st.exitCurrentQuest(true);
}
}
break;
case STARTED:
if (npcId == zerian) {
if (GetMemoState == 1 && (st.getQuestItemsCount(q_seal_components_part1) == 0 || st.getQuestItemsCount(q_seal_components_part2) == 0 || st.getQuestItemsCount(q_seal_components_part3) == 0 || st.getQuestItemsCount(q_seal_components_part4) == 0)) {
htmltext = "zerian_q0279_06.htm";
} else if (GetMemoState < 2 && st.getQuestItemsCount(q_seal_components_part1) >= 1 && st.getQuestItemsCount(q_seal_components_part2) >= 1 && st.getQuestItemsCount(q_seal_components_part3) >= 1 && st.getQuestItemsCount(q_seal_components_part4) >= 1) {
htmltext = "zerian_q0279_07.htm";
}
}
break;
}
return htmltext;
}

@Override
public String onKill(NpcInstance npc, QuestState st) {
int GetMemoState = st.getInt("catch_the_blind_side");
int npcId = npc.getNpcId();
if (GetMemoState == 1) {
if (npcId == guard_of_space || npcId == beholder_of_space || npcId == priest_of_space || npcId == ruler_of_space) {
int i0 = Rnd.get(1000);
if (i0 < 311) {
if (st.getQuestItemsCount(q_seal_components_part1) < 1) {
if (st.getQuestItemsCount(q_seal_components_part2) >= 1 && st.getQuestItemsCount(q_seal_components_part3) >= 1 && st.getQuestItemsCount(q_seal_components_part4) >= 1) {
st.setCond(2);
st.giveItems(q_seal_components_part1, 1);
st.playSound(SOUND_MIDDLE);
} else {
st.giveItems(q_seal_components_part1, 1);
st.playSound(SOUND_ITEMGET);
}
}
}
}
}
return null;
}
}

 

 

Где тут настроить шанс дропа сих итемов, обведите мне, слоупоку.

Работаю над сими чудесами недавно, не всё шарю и етц.

Изменено пользователем Elione

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

int i0 = Rnd.get(1000);

if (i0 < 311)

{

if (st.getQuestItemsCount(q_seal_components_part1) < 1)

{

if (st.getQuestItemsCount(q_seal_components_part2) >= 1 && st.getQuestItemsCount(q_seal_components_part3) >= 1 && st.getQuestItemsCount(q_seal_components_part4) >= 1)

{

st.setCond(2);

st.giveItems(q_seal_components_part1, 1);

st.playSound(SOUND_MIDDLE);

}

else

{

st.giveItems(q_seal_components_part1, 1);

st.playSound(SOUND_ITEMGET);

}

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

метод onKill, вроде как переменная i0. Задается параметражем rnd(1000) и соответственно, шанс можно увеличить, увеличивая число на следущей строке. Сейчас там 311.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

метод onKill, вроде как переменная i0. Задается параметражем rnd(1000) и соответственно, шанс можно увеличить, увеличивая число на следущей строке. Сейчас там 311.

 

Зачем все карты сразу раскрывать? Пусть подумал бы=)

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не извращайтесь то надо мной в пять утра, сколько мне поставить чтоб оно нормально сыпалось?

Плюсы тыкнул.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не извращайтесь то надо мной в пять утра, сколько мне поставить чтоб оно нормально сыпалось?

Плюсы тыкнул.

 

Да хоть 4 утра, самому думать нужно=) Rnd.get(1000) - задает рандомное число от 0 до 999, потом идёт сравнение. Какое значение в сравнении выставить уже дело твоё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну раз уж я добрался уже до работы, подскажу:

 

int i0 = Rnd.get(1000);// Задается число от 0 до 999

if (i0 < 311)//Если выше заданное число входит в промежуток от 0 до 311, то выполняется процесс дропа. Отсюда, чем больше "красное" число, тем выше шанс срабатывания дропа.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...