FaVoRiT 19 Опубликовано 28 мая, 2017 Доброе время суток !Нашел у вас на форуме сборку pwsoft, и ласт реву обновил старую теперь гс бьет ошибки на скрипты, помогите пожалуйста, так же не работает бойцовский клуб, как его включить в конфиг добавил FightingEnable = true все равно пишет что квест отключен 1. WARNING in \Portrait.java (at line 156) g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); ^^^Null pointer access: The variable trg can only be null at this location----------1 problem (1 warning)----------1. ERROR in \DonateScrolls.java (at line 14) public class DonateScrolls implements IItemHandler ^^^^^^^^^^^^^The type DonateScrolls must implement the inherited abstract method IItemHandler.useItem(L2PlayableInstance, L2ItemInstance, boolean)----------1 problem (1 error)The type items.DonateScrolls must implement the inherited abstract method scripts.items.IItemHandler.useItem(net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance, net.sf.l2j.gameserver.model.L2ItemInstance, boolean)Failed executing script: D:\server\gameserver\data\scripts\items\DonateScrolls.java. See DonateScrolls.java.error.log for details.----------1. WARNING in \Noble.java (at line 34) if (coin == null && coin.getCount() < 1000) ^^^^Null pointer access: The variable coin can only be null at this location----------2. WARNING in \Noble.java (at line 45) if (coin == null && coin.getCount() < 1) ^^^^Null pointer access: The variable coin can only be null at this location----------2 problems (2 warnings)----------1. WARNING in \Wings.java (at line 97) if(npcId == npcId) ^^^^^^^^^^^^^^Comparing identical expressions Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlackBerds 6 Опубликовано 28 мая, 2017 Скинь ссылки того что скачал посмотреть весь скрипт надо Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 28 мая, 2017 (изменено) Доброе время суток ! Нашел у вас на форуме сборку pwsoft, и ласт реву обновил старую теперь гс бьет ошибки на скрипты, помогите пожалуйста, так же не работает бойцовский клуб, как его включить в конфиг добавил FightingEnable = true все равно пишет что квест отключен 1. WARNING in \Portrait.java (at line 156) g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY (),trg.getZ(), trg.getHeading()); ^^^ Null pointer access: The variable trg can only be null at this location ---------- 1 problem (1 warning) ---------- 1. ERROR in \DonateScrolls.java (at line 14) public class DonateScrolls implements IItemHandler ^^^^^^^^^^^^^ The type DonateScrolls must implement the inherited abstract method IItemHandler .useItem(L2PlayableInstance, L2ItemInstance, boolean) ---------- 1 problem (1 error) The type items.DonateScrolls must implement the inherited abstract method script s.items.IItemHandler.useItem(net.sf.l2j.gameserver.model.actor.instance.L2Playab leInstance, net.sf.l2j.gameserver.model.L2ItemInstance, boolean) Failed executing script: D:\server\gameserver\data\scripts\items\DonateS crolls.java. See DonateScrolls.java.error.log for details. ---------- 1. WARNING in \Noble.java (at line 34) if (coin == null && coin.getCount() < 1000) ^^^^ Null pointer access: The variable coin can only be null at this location ---------- 2. WARNING in \Noble.java (at line 45) if (coin == null && coin.getCount() < 1) ^^^^ Null pointer access: The variable coin can only be null at this location ---------- 2 problems (2 warnings) ---------- 1. WARNING in \Wings.java (at line 97) if(npcId == npcId) ^^^^^^^^^^^^^^ Comparing identical expressions Под каждой ошибкой пишется описание. Решение ошибок: 1) Сделать проверку на отсутствие NULL значение (Но это варринг всего лишь) Пример: if (trg != null) g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY (),trg.getZ(), trg.getHeading()); 2) Нужно создать метод useItem(L2PlayableInstance, L2ItemInstance, boolean) public class DonateScrolls implements IItemHandler 3, 4) Как можно искать наличие предметов при пустых значениях? (Проверка на NULL, пример кидал выше) if (coin == null && coin.getCount() < 1000) 5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой if(npcId == npcId) Думаю фиксануть сможешь сам. Удачи! Изменено 28 мая, 2017 пользователем zGosu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 28 мая, 2017 (изменено) Спасибо с этим разобрался, а вот с выше перечисленным не очень не подскажешь как это сделать, вот скрипты package ai; import javolution.util.FastList; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.instancemanager.GrandBossManager; import net.sf.l2j.gameserver.network.serverpackets.SocialAction; import net.sf.l2j.util.Rnd; import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance; import net.sf.l2j.gameserver.model.actor.instance.L2MonsterInstance; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.jython.QuestJython; import ai.Frintezza; public class Portrait extends QuestJython { private static long _mobs = 60000; private static L2MonsterInstance g1 = null; private static L2MonsterInstance g2 = null; private static L2MonsterInstance g3 = null; private static L2MonsterInstance g4 = null; public Portrait(int questId, String name, String descr) { super(questId, name, descr, 1); this.addSpawnId(29048); this.addKillId(29048); } @[member='override'] public String onSpawn(L2NpcInstance npc) { //System.out.println("555555555555@@@@@@@@@@@@@@@@"); ThreadPoolManager.getInstance().scheduleGeneral(new Ghosts(npc), 3000); return null; } @[member='override'] public String onKill (L2NpcInstance npc, L2PcInstance killer, boolean isPet) { //System.out.println("555555555553333333@@@@@@@@@@@@@@@@"); Frintezza._prts -= 1; return null; } // static class Ghosts implements Runnable { L2NpcInstance _npc; Ghosts(L2NpcInstance npc) { _npc = npc; } public void run() { try { int x = _npc.getX(); GrandBossManager gb = GrandBossManager.getInstance(); switch(x) { case 175882: g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 175799, -88751, -5108, 4); g1.broadcastPacket(new SocialAction(g1.getObjectId(), 1)); g2 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 175801, -88593, -5108, 4); g3 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 175729, -88678, -5108, 4); g3.broadcastPacket(new SocialAction(g1.getObjectId(), 2)); g4 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 175635, -88747, -5108, 4); break; case 175820: g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 175695, -87108, -5108, 4); g1.broadcastPacket(new SocialAction(g1.getObjectId(), 1)); g2 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 175815, -87312, -5108, 4); g3 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 175623, -87206, -5108, 4); g3.broadcastPacket(new SocialAction(g1.getObjectId(), 2)); g4 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 175697, -87325, -5108, 4); break; case 172629: g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 172658, -87381, -5108, 4); g1.broadcastPacket(new SocialAction(g1.getObjectId(), 1)); g2 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 172835, -87308, -5108, 4); g3 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 172914, -87207, -5108, 4); g3.broadcastPacket(new SocialAction(g1.getObjectId(), 2)); g4 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 172840, -86995, -5108, 4); break; case 172596: g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 172613, -88539, -5108, 4); g1.broadcastPacket(new SocialAction(g1.getObjectId(), 1)); g2 = (L2MonsterInstance)gb.createOnePrivateEx(29050, 172692, -88610, -5108, 4); g3 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 172765, -88739, -5108, 4); g3.broadcastPacket(new SocialAction(g1.getObjectId(), 2)); g4 = (L2MonsterInstance)gb.createOnePrivateEx(29051, 172699, -88811, -5108, 4); break; } try { Thread.sleep(1900); } catch (InterruptedException e) { } if (gb.getHalisha() != null) { if (Rnd.get(100) < 10) { FastList<L2PcInstance> trgs = new FastList<L2PcInstance>(); trgs.addAll(gb.getHalisha().getKnownList().getKnownPlayersInRadius(1200)); if (trgs.isEmpty()) return; L2PcInstance trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg == null) return; g3.setTarget(trg); g3.doCast(SkillTable.getInstance().getInfo(5015,1)); } } } catch (Throwable e){} ThreadPoolManager.getInstance().scheduleGeneral(new MobsCheck(), _mobs); } } static class MobsCheck implements Runnable { MobsCheck() { } public void run() { try { L2GrandBossInstance halisha = GrandBossManager.getInstance().getHalisha(); if (halisha != null) { FastList<L2PcInstance> trgs = new FastList<L2PcInstance>(); trgs.addAll(halisha.getKnownList().getKnownPlayersInRadius(1200)); if (!trgs.isEmpty()) { L2PcInstance trg = null; GrandBossManager gb = GrandBossManager.getInstance(); if (g1 == null) { g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) g1.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } if (g2 == null) { g2 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) g2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } if (g3 == null) { g3 = (L2MonsterInstance)gb.createOnePrivateEx(29051, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) g3.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } if (g4 == null) { g4 = (L2MonsterInstance)gb.createOnePrivateEx(29051, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) g4.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } try { Thread.sleep(1900); } catch (InterruptedException e) { } if (Rnd.get(100) < 10) { trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) { g3.setTarget(trg); g3.doCast(SkillTable.getInstance().getInfo(5015,1)); } } } } } catch (Throwable e){} ThreadPoolManager.getInstance().scheduleGeneral(new MobsCheck(), _mobs); } } // public static void main (String... arguments ) { new Portrait(-1,"Portrait","Portrait"); } } package items; import javolution.util.FastMap; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.cache.Static; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance; import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUser; import scripts.items.ItemHandler; import scripts.items.IItemHandler; public class DonateScrolls implements IItemHandler { private final static FastMap<Integer, Integer[]> SCROLLS = new FastMap<Integer, Integer[]>().shared("DonateScrolls.SCROLLS"); private static int[] ITEM_IDS = null; public DonateScrolls() { /**шаблон **SCROLLS.put(итем_ид, new Integer[] { ид_баффа, уровень_баффа, ид_скилла_анимации, продолжительность_анимации(мс.)), кушать_скролл(1 да, 0 нет)) }); **/ SCROLLS.put(11986, new Integer[] { 9959, 1, 2036, 1, 1 }); SCROLLS.put(11987, new Integer[] { 9960, 1, 2036, 1, 1 }); SCROLLS.put(11988, new Integer[] { 9961, 1, 2036, 1, 1 }); // Integer[] tmp_ids = (Integer[]) SCROLLS.keySet().toArray(new Integer[SCROLLS.size()]); ITEM_IDS = toIntArray(tmp_ids); tmp_ids = null; ItemHandler.getInstance().registerItemHandler(this); } public static void main (String... arguments ) { new DonateScrolls(); } public void useItem(L2PlayableInstance playable, L2ItemInstance item) { if (!playable.isPlayer()) return; L2PcInstance player = (L2PcInstance) playable; if (player.isAllSkillsDisabled()) { player.sendActionFailed(); return; } if (player.isInOlympiadMode()) { player.sendPacket(Static.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT); player.sendActionFailed(); return; } Integer[] data = SCROLLS.get(item.getItemId()); if(data != null) { player.stopSkillEffects(data[0]); SkillTable.getInstance().getInfo(data[0], data[1]).getEffects(player, player); player.broadcastPacket(new MagicSkillUser(player, player, data[2], 1, data[3], 0)); if (data[4] == 1) player.destroyItem("Consume", item.getObjectId(), 1, null, false); } } private int[] toIntArray(Integer[] arr) { int[] ret = new int[arr.length]; int i = 0; for (Integer e : arr) ret[i++] = e.intValue(); return ret; } public int[] getItemIds() { return ITEM_IDS; } } У Вас в коде метод имеет 2 переменные, а нужно 3 public void useItem(L2PlayableInstance playable, L2ItemInstance item) на public void useItem(L2PlayableInstance playable, L2ItemInstance item, boolean val) Изменено 28 мая, 2017 пользователем zGosu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FaVoRiT 19 Опубликовано 28 мая, 2017 Спасибо помогло, а с первым скриптом не поможете ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zGosu 396 Опубликовано 28 мая, 2017 Спасибо помогло, а с первым скриптом не поможете ? На одном примере покажу, дальше сами. if (g1 == null){ g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null) g1.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } правим и получаем: if (g1 == null){ trg = trgs.get(Rnd.get(trgs.size()-1)); if (trg != null){ g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY(),trg.getZ(), trg.getHeading()); g1.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, trg); } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LoveYougurt 155 Опубликовано 9 января, 2020 В 28.05.2017 в 21:53, zGosu сказал: Под каждой ошибкой пишется описание. Решение ошибок: 1) Сделать проверку на отсутствие NULL значение (Но это варринг всего лишь) Пример: if (trg != null) g1 = (L2MonsterInstance)gb.createOnePrivateEx(29050, trg.getX(),trg.getY (),trg.getZ(), trg.getHeading()); 2) Нужно создать метод useItem(L2PlayableInstance, L2ItemInstance, boolean) public class DonateScrolls implements IItemHandler 3, 4) Как можно искать наличие предметов при пустых значениях? (Проверка на NULL, пример кидал выше) if (coin == null && coin.getCount() < 1000) 5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой if(npcId == npcId) Думаю фиксануть сможешь сам. Удачи! я тупенький:D подскажите 3,4,5 исправить пожалуйста Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Smowk 46 Опубликовано 10 января, 2020 8 часов назад, LoveYogurt сказал: я тупенький:D подскажите 3,4,5 исправить пожалуйста 5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой if(npcId == npcId) примерно так будет if(npcId == 80028) можно поставить ид нпс 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LoveYougurt 155 Опубликовано 10 января, 2020 1 час назад, Smowk сказал: 5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой if(npcId == npcId) примерно так будет if(npcId == 80028) можно поставить ид нпс Спасибо) ---------- 1. WARNING in \Noble.java (at line 34) if (coin == null && coin.getCount() < 1000) ^^^^ Null pointer access: The variable coin can only be null at this location ---------- 2. WARNING in \Noble.java (at line 45) if (coin == null && coin.getCount() < 1) ^^^^ Null pointer access: The variable coin can only be null at this location Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 10 января, 2020 (изменено) 25 минут назад, LoveYogurt сказал: Спасибо) ---------- 1. WARNING in \Noble.java (at line 34) if (coin == null && coin.getCount() < 1000) ^^^^ Null pointer access: The variable coin can only be null at this location ---------- 2. WARNING in \Noble.java (at line 45) if (coin == null && coin.getCount() < 1) ^^^^ Null pointer access: The variable coin can only be null at this location зачем тебе проверка на нул если амперсанд означает "И" исходя из условия ты сначала проверяешь равняется ли "coin" нулу и после проверяешь не равняется ли количество колов меньше чем условие Изменено 10 января, 2020 пользователем Solution Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 10 января, 2020 2 часа назад, Smowk сказал: 5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой if(npcId == npcId) примерно так будет if(npcId == 80028) можно поставить ид нпс насколько я помню в скрипте еще есть npcid вынесенный в переменную класса, и что б все работало как положено, мы должны обратится к переменной класса и сравнить ее с переменной метода тоесть if (this.npcId = npcId) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LoveYougurt 155 Опубликовано 10 января, 2020 (изменено) 7 минут назад, Solution сказал: насколько я помню в скрипте еще есть npcid вынесенный в переменную класса, и что б все работало как положено, мы должны обратится к переменной класса и сравнить ее с переменной метода тоесть if (this.npcId = npcId) Спойлер package quests.tatoo; import net.sf.l2j.gameserver.model.L2Party; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.model.quest.State; import net.sf.l2j.gameserver.model.quest.jython.QuestJython; import net.sf.l2j.util.Rnd; public class tatoo extends QuestJython { //NPC private final static int npcId = 41113; private final static int[] MOBS = {15104}; private final static int RaidBoss = 15105; //QuestItem private final static int BLACK_FEATHER = 12015; private final static int ITEM_FROM_RB = 12016; //Chance from mobs private final static int chance1 = 30; //Chance from RB private final static int chance2 = 100; //Item private final static int FEATHER = 13335; private int count; //Разрешено ли повторять квест? private static boolean REPEATABLE = true; private int cond = 0; private State STARTED = new State("Started", this); public tatoo(int questId, String name, String descr) { super(questId, name, descr, 1); State st = new State("Start", this); this.setInitialState(st); addStartNpc(npcId); addTalkId(npcId); for (int mobs : MOBS) addKillId(mobs); addKillId(RaidBoss); } public String onEvent(String event, QuestState st) { L2PcInstance player = st.getPlayer(); if (event.equalsIgnoreCase("start")) { st.set("cond","1"); event = "77779-2.htm"; st.setState(STARTED); } else if (event.equalsIgnoreCase("sobral")) { count = player.getInventory().getInventoryItemCount(BLACK_FEATHER,0); if (count < 100) event = "77779-no.htm"; else { st.takeItems(BLACK_FEATHER,100); st.set("cond","2"); event = "77779-4.htm"; } } else if (event.equalsIgnoreCase("item_RB")) { count = player.getInventory().getInventoryItemCount(ITEM_FROM_RB,0); if (count < 1) event = "77779-no1.htm"; else { st.takeItems(ITEM_FROM_RB,1); st.giveItems(FEATHER,1); st.exitQuest(REPEATABLE); event = "<html><body>kvest zavershen</body><html>"; } } else if (event.equalsIgnoreCase("otmena")) { event = "<html><body>kvest otmenen</body></html> так уже гс ошибку бьёт Спойлер package quests.Wings; import net.sf.l2j.gameserver.model.L2Party; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.model.quest.State; import net.sf.l2j.gameserver.model.quest.jython.QuestJython; import net.sf.l2j.util.Rnd; public class Wings extends QuestJython { //NPC private final static int npcId = 41113; private final static int[] MOBS = {15079}; private final static int RaidBoss = 15121; //QuestItem private final static int BLACK_FEATHER = 12010; private final static int ITEM_FROM_RB = 12011; //Chance from mobs private final static int chance1 = 75; //Chance from RB private final static int chance2 = 100; //Item private final static int FEATHER = 12014; private int count; //Разрешено ли повторять квест? private static boolean REPEATABLE = true; private int cond = 0; private State STARTED = new State("Started", this); public Wings(int questId, String name, String descr) { super(questId, name, descr, 1); State st = new State("Start", this); this.setInitialState(st); addStartNpc(npcId); addTalkId(npcId); for (int mobs : MOBS) addKillId(mobs); addKillId(RaidBoss); } public String onEvent(String event, QuestState st) { L2PcInstance player = st.getPlayer(); if (event.equalsIgnoreCase("start")) { st.set("cond","1"); event = "77777-2.htm"; st.setState(STARTED); } else if (event.equalsIgnoreCase("sobral")) { count = player.getInventory().getInventoryItemCount(BLACK_FEATHER,0); if (count < 300) event = "77777-no.htm"; else { st.takeItems(BLACK_FEATHER,300); st.set("cond","2"); event = "77777-4.htm"; } } else if (event.equalsIgnoreCase("item_RB")) { count = player.getInventory().getInventoryItemCount(ITEM_FROM_RB,0); if (count < 1) event = "77777-no1.htm"; else { st.takeItems(ITEM_FROM_RB,1); st.giveItems(FEATHER,1); st.exitQuest(REPEATABLE); event = "<html><body>kvest zavershen</body><html>"; } } else if (event.equalsIgnoreCase("otmena")) { event = "<html><body>kvest otmenen</body></html> то если вернуть в исходные будет и в тату яве Изменено 10 января, 2020 пользователем LoveYogurt Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 10 января, 2020 1 минуту назад, LoveYogurt сказал: так уже гс ошибку бьёт ты скрипт свой залил бы под спойлер 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 10 января, 2020 (изменено) на скорую руку накидал, на работоспособность не проверял, ссаный квест двиг на пвсофте ущербен. Спойлер package quests.q777_CustomQuests; import net.sf.l2j.gameserver.model.L2Party; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.Quest; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.model.quest.State; import net.sf.l2j.util.Rnd; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; /** * IntelliJ IDEA * User: Solution * 10.01.2020 */ public class q777_CustomQuests extends Quest { private final static Logger _log = Logger.getLogger(q777_CustomQuests.class.getName()); //нпц у которого будет братся квест private final static int NPC_ID = 7777; //моб с которого будет падать квест итем private final static int MOB_ID = 8888; //рб на квест итем private final static int BOSS_ID = 9999; //ИД, сколько итемов требуется с мобов для перехода к следующему шагу квеста, минимальное кол-во дропа, макимальное минимальное кол-во дропа и шанс дропа private final static int[] ITEM_MOB_ID_AND_COUNT_AND_DROP = {57,1000,1,2,80}; //сколько итемов требуется с рб для сдачи квеста, минимальное кол-во дропа, макимальное минимальное кол-во дропа и шанс дропа private final static int[] ITEM_BOSS_ID_AND_COUNT_AND_DROP = {57,3,1,2,80}; //итем который дается по завершению квеста ид, количество private final static int[] REWARD_ITEM = {57,1}; //Рейт на дроп и шанс для игроков с премиум аккаунтом private final static int[][] PREMIUM_DROP_AND_RATE = { {1,1}, //для мобов {1,1} //для рб }; //разрешено повторять ли квест private final static boolean REPLAY = true; //системное не трогать private final State COMPLETED = new State("Completed",this); public q777_CustomQuests(int questId, String name, String desc) { super(questId, name, desc); this.setInitialState(new State("Start", this)); this.addStartNpc(NPC_ID); this.addTalkId(NPC_ID); this.addKillId(MOB_ID); this.addKillId(BOSS_ID); _log.info("Квест: " + q777_CustomQuests.class.getName() + " загружен."); } @Override public String onEvent(String event, QuestState qs) { if (event.equalsIgnoreCase("kill_mob.htm")) { qs.set("cond","1"); qs.playSound(SOUND_MIDDLE); } else if (event.equalsIgnoreCase("kill_mob_complete.htm")) { qs.set("cond","2"); qs.takeItems(ITEM_MOB_ID_AND_COUNT_AND_DROP[0],ITEM_MOB_ID_AND_COUNT_AND_DROP[1]); qs.playSound(SOUND_FANFARE_MIDDLE); } else if (event.equalsIgnoreCase("kill_rb.htm")) { qs.set("cond","3"); qs.playSound(SOUND_MIDDLE); } else if (event.equalsIgnoreCase("kill_boss_complete.htm")) { qs.takeItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0],ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]); qs.giveItems(REWARD_ITEM[0],REWARD_ITEM[1]); qs.playSound(SOUND_FINISH); qs.unset("cond"); qs.setState(COMPLETED); if (!REPLAY) qs.exitQuest(true); } return event; } @Override public String onTalk(L2NpcInstance npc, L2PcInstance talker) { String html = "q777_CustomQuests - no Quest this player!"; QuestState questState = talker.getQuestState(getName()); if (questState == null) return "пересенная questState пуста"; if (!REPLAY && questState.getState() == COMPLETED) return "<html><body>Квест повторять запрещено</body></html>"; int cond = questState.getInt("cond"); if (cond == 0) { html = "Start.htm"; questState.playSound(SOUND_ACCEPT); } else if (cond == 1) { if (talker.getInventory().getItemCount(ITEM_MOB_ID_AND_COUNT_AND_DROP[0]) == ITEM_MOB_ID_AND_COUNT_AND_DROP[1]) html = "kill_mob_complete.htm"; else html = "kill_mob_no.htm"; } else if (cond == 2) { html = "kill_rb.htm"; } else if (cond == 3) { if (talker.getInventory().getItemCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) == ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]) html = "kill_boss_complete.htm"; else html = "kill_boss_no.htm"; } return html; } @Override public String onKill(L2NpcInstance npc, L2PcInstance killer, boolean isPet) { QuestState qs = killer.getQuestState(getName()); int cond = qs.getInt("cond"); if (MOB_ID == npc.getNpcId() && cond == 1 && Rnd.get(100) <= (killer.isPremium() ? ITEM_MOB_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[0][1] : ITEM_MOB_ID_AND_COUNT_AND_DROP[4]) && qs.getQuestItemsCount(ITEM_MOB_ID_AND_COUNT_AND_DROP[0]) < ITEM_MOB_ID_AND_COUNT_AND_DROP[1]) { qs.giveItems(ITEM_MOB_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_MOB_ID_AND_COUNT_AND_DROP[2],ITEM_MOB_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[0][0] : Rnd.get(ITEM_MOB_ID_AND_COUNT_AND_DROP[2],ITEM_MOB_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); } else if (BOSS_ID == npc.getNpcId()) { L2Party party = killer.getParty(); Map<String,Integer> killerIp = new HashMap<>(); if (party != null) { for (L2PcInstance pl : party.getPartyMembers()) { qs = pl.getQuestState(getName()); cond = qs.getInt("cond"); if (cond != 3 && qs.getQuestItemsCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) >= ITEM_BOSS_ID_AND_COUNT_AND_DROP[1] && Rnd.get(100) > (pl.isPremium() ? ITEM_BOSS_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[1][1] : ITEM_BOSS_ID_AND_COUNT_AND_DROP[4])) continue; if (killerIp.get(pl.getIP()) != null && killerIp.get(pl.getIP()) != pl.getObjectId()) continue; qs.giveItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[1][0] : Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); killerIp.put(pl.getIP(),pl.getObjectId()); } } else { if (BOSS_ID == npc.getNpcId() && cond == 3 && Rnd.get(100) <= (killer.isPremium() ? ITEM_BOSS_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[1][1] : ITEM_BOSS_ID_AND_COUNT_AND_DROP[4]) && qs.getQuestItemsCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) < ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]) { qs.giveItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[0][0] : Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); } } } return null; } public static void main(String[] args) { new q777_CustomQuests(777,"q777_CustomQuests","Custom Quests"); } } Хтмлки надо будет оформлять вам самим, название можно посмотреть в onTalk, доступные байпассы в onEvent Изменено 10 января, 2020 пользователем Solution Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Smowk 46 Опубликовано 10 января, 2020 7 часов назад, Solution сказал: на скорую руку накидал, на работоспособность не проверял, ссаный квест двиг на пвсофте ущербен. скрипт (Показать контент) package quests.q777_CustomQuests; import net.sf.l2j.gameserver.model.L2Party; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.Quest; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.model.quest.State; import net.sf.l2j.util.Rnd; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; /** * IntelliJ IDEA * User: Solution * 10.01.2020 */ public class q777_CustomQuests extends Quest { private final static Logger _log = Logger.getLogger(q777_CustomQuests.class.getName()); //нпц у которого будет братся квест private final static int NPC_ID = 7777; //моб с которого будет падать квест итем private final static int MOB_ID = 8888; //рб на квест итем private final static int BOSS_ID = 9999; //ИД, сколько итемов требуется с мобов для перехода к следующему шагу квеста, минимальное кол-во дропа, макимальное минимальное кол-во дропа и шанс дропа private final static int[] ITEM_MOB_ID_AND_COUNT_AND_DROP = {57,1000,1,2,80}; //сколько итемов требуется с рб для сдачи квеста, минимальное кол-во дропа, макимальное минимальное кол-во дропа и шанс дропа private final static int[] ITEM_BOSS_ID_AND_COUNT_AND_DROP = {57,3,1,2,80}; //итем который дается по завершению квеста ид, количество private final static int[] REWARD_ITEM = {57,1}; //Рейт на дроп и шанс для игроков с премиум аккаунтом private final static int[][] PREMIUM_DROP_AND_RATE = { {1,1}, //для мобов {1,1} //для рб }; //разрешено повторять ли квест private final static boolean REPLAY = true; //системное не трогать private final State COMPLETED = new State("Completed",this); public q777_CustomQuests(int questId, String name, String desc) { super(questId, name, desc); this.setInitialState(new State("Start", this)); this.addStartNpc(NPC_ID); this.addTalkId(NPC_ID); this.addKillId(MOB_ID); this.addKillId(BOSS_ID); _log.info("Квест: " + q777_CustomQuests.class.getName() + " загружен."); } @Override public String onEvent(String event, QuestState qs) { if (event.equalsIgnoreCase("kill_mob.htm")) { qs.set("cond","1"); qs.playSound(SOUND_MIDDLE); } else if (event.equalsIgnoreCase("kill_mob_complete.htm")) { qs.set("cond","2"); qs.takeItems(ITEM_MOB_ID_AND_COUNT_AND_DROP[0],ITEM_MOB_ID_AND_COUNT_AND_DROP[1]); qs.playSound(SOUND_FANFARE_MIDDLE); } else if (event.equalsIgnoreCase("kill_rb.htm")) { qs.set("cond","3"); qs.playSound(SOUND_MIDDLE); } else if (event.equalsIgnoreCase("kill_boss_complete.htm")) { qs.takeItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0],ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]); qs.giveItems(REWARD_ITEM[0],REWARD_ITEM[1]); qs.playSound(SOUND_FINISH); qs.unset("cond"); qs.setState(COMPLETED); if (!REPLAY) qs.exitQuest(true); } return event; } @Override public String onTalk(L2NpcInstance npc, L2PcInstance talker) { String html = "q777_CustomQuests - no Quest this player!"; QuestState questState = talker.getQuestState(getName()); if (questState == null) return "пересенная questState пуста"; if (!REPLAY && questState.getState() == COMPLETED) return "<html><body>Квест повторять запрещено</body></html>"; int cond = questState.getInt("cond"); if (cond == 0) { html = "Start.htm"; questState.playSound(SOUND_ACCEPT); } else if (cond == 1) { if (talker.getInventory().getItemCount(ITEM_MOB_ID_AND_COUNT_AND_DROP[0]) == ITEM_MOB_ID_AND_COUNT_AND_DROP[1]) html = "kill_mob_complete.htm"; else html = "kill_mob_no.htm"; } else if (cond == 2) { html = "kill_rb.htm"; } else if (cond == 3) { if (talker.getInventory().getItemCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) == ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]) html = "kill_boss_complete.htm"; else html = "kill_boss_no.htm"; } return html; } @Override public String onKill(L2NpcInstance npc, L2PcInstance killer, boolean isPet) { QuestState qs = killer.getQuestState(getName()); int cond = qs.getInt("cond"); if (MOB_ID == npc.getNpcId() && cond == 1 && Rnd.get(100) <= (killer.isPremium() ? ITEM_MOB_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[0][1] : ITEM_MOB_ID_AND_COUNT_AND_DROP[4]) && qs.getQuestItemsCount(ITEM_MOB_ID_AND_COUNT_AND_DROP[0]) < ITEM_MOB_ID_AND_COUNT_AND_DROP[1]) { qs.giveItems(ITEM_MOB_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_MOB_ID_AND_COUNT_AND_DROP[2],ITEM_MOB_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[0][0] : Rnd.get(ITEM_MOB_ID_AND_COUNT_AND_DROP[2],ITEM_MOB_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); } else if (BOSS_ID == npc.getNpcId()) { L2Party party = killer.getParty(); Map<String,Integer> killerIp = new HashMap<>(); if (party != null) { for (L2PcInstance pl : party.getPartyMembers()) { qs = pl.getQuestState(getName()); cond = qs.getInt("cond"); if (cond != 3 && qs.getQuestItemsCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) >= ITEM_BOSS_ID_AND_COUNT_AND_DROP[1] && Rnd.get(100) > (pl.isPremium() ? ITEM_BOSS_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[1][1] : ITEM_BOSS_ID_AND_COUNT_AND_DROP[4])) continue; if (killerIp.get(pl.getIP()) != null && killerIp.get(pl.getIP()) != pl.getObjectId()) continue; qs.giveItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[1][0] : Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); killerIp.put(pl.getIP(),pl.getObjectId()); } } else { if (BOSS_ID == npc.getNpcId() && cond == 3 && Rnd.get(100) <= (killer.isPremium() ? ITEM_BOSS_ID_AND_COUNT_AND_DROP[4] * PREMIUM_DROP_AND_RATE[1][1] : ITEM_BOSS_ID_AND_COUNT_AND_DROP[4]) && qs.getQuestItemsCount(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0]) < ITEM_BOSS_ID_AND_COUNT_AND_DROP[1]) { qs.giveItems(ITEM_BOSS_ID_AND_COUNT_AND_DROP[0], killer.isPremium() ? Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3]) * PREMIUM_DROP_AND_RATE[0][0] : Rnd.get(ITEM_BOSS_ID_AND_COUNT_AND_DROP[2],ITEM_BOSS_ID_AND_COUNT_AND_DROP[3])); qs.playSound(SOUND_ITEMGET); } } } return null; } public static void main(String[] args) { new q777_CustomQuests(777,"q777_CustomQuests","Custom Quests"); } } Хтмлки надо будет оформлять вам самим, название можно посмотреть в onTalk, доступные байпассы в onEvent Запустил посмотреть, вот результат . ---------- 1. WARNING in \q777_CustomQuests.java (at line 98) if (!REPLAY && questState.getState() == COMPLETED) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Dead code ---------- 2. WARNING in \q777_CustomQuests.java (at line 99) return "<html><body>я┐╜я┐╜я┐╜я┐╜я┐╜ я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜ я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜я┐╜</body></html> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Euroset 120 Опубликовано 10 января, 2020 Бле. ты сборку рела-пв мучаешь все ? там правится все в теч 10 минут, даже со старьем. не умеешь плати. В янДексе куча инфы. Все разбири подай, сделай. я буквально в декабре - ноябре тож самое барахло запускал и правмл По мануалам блеть. и все ок было Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Euroset 120 Опубликовано 10 января, 2020 ахах. свреху все ответы, и в соседнях темах. Фейс на руку блат. пздцц Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Smowk 46 Опубликовано 10 января, 2020 1 минуту назад, Euroset сказал: ахах. свреху все ответы, и в соседнях темах. Фейс на руку блат. пздцц Ты кому ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Euroset 120 Опубликовано 10 января, 2020 Только что, Smowk сказал: Ты кому ? тому кто поднял эту тему с 2017. тут все разжевано. че да как парвить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Euroset 120 Опубликовано 10 января, 2020 (изменено) Если у кого есть ошибки в гс от скриптов, за 890 руб все исправлю вам чекайте в лс)) + переделаю вашу шарную сборку под ваши нужды Изменено 10 января, 2020 пользователем Euroset Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты