Elione 265 Опубликовано 30 января, 2014 (изменено) 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; } } Где тут настроить шанс дропа сих итемов, обведите мне, слоупоку. Работаю над сими чудесами недавно, не всё шарю и етц. Изменено 30 января, 2014 пользователем Elione Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 30 января, 2014 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); } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 30 января, 2014 метод onKill, вроде как переменная i0. Задается параметражем rnd(1000) и соответственно, шанс можно увеличить, увеличивая число на следущей строке. Сейчас там 311. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 30 января, 2014 метод onKill, вроде как переменная i0. Задается параметражем rnd(1000) и соответственно, шанс можно увеличить, увеличивая число на следущей строке. Сейчас там 311. Зачем все карты сразу раскрывать? Пусть подумал бы=) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Elione 265 Опубликовано 30 января, 2014 Не извращайтесь то надо мной в пять утра, сколько мне поставить чтоб оно нормально сыпалось? Плюсы тыкнул. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 30 января, 2014 Не извращайтесь то надо мной в пять утра, сколько мне поставить чтоб оно нормально сыпалось? Плюсы тыкнул. Да хоть 4 утра, самому думать нужно=) Rnd.get(1000) - задает рандомное число от 0 до 999, потом идёт сравнение. Какое значение в сравнении выставить уже дело твоё. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 30 января, 2014 Ну раз уж я добрался уже до работы, подскажу: int i0 = Rnd.get(1000);// Задается число от 0 до 999 if (i0 < 311)//Если выше заданное число входит в промежуток от 0 до 311, то выполняется процесс дропа. Отсюда, чем больше "красное" число, тем выше шанс срабатывания дропа. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты