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

Проблема со скриптами pwsoft

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

Доброе время суток !
Нашел у вас на форуме сборку 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

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


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

Скинь ссылки того что скачал посмотреть весь скрипт надо 

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


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

Доброе время суток !

Нашел у вас на форуме сборку 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)

Думаю фиксануть сможешь сам. Удачи!  

Изменено пользователем zGosu
  • Upvote 1

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


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

 

 

Спасибо с этим разобрался, а вот с выше перечисленным не очень не подскажешь как это сделать, вот скрипты

 

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)
Изменено пользователем zGosu
  • Upvote 1

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


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

Спасибо помогло, а с первым скриптом не поможете ?

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


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

Спасибо помогло, а с первым скриптом не поможете ?

На одном примере покажу, дальше сами.

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);
	}
}

  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
В 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 исправить пожалуйста

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


Ссылка на сообщение
Поделиться на другие сайты
8 часов назад, LoveYogurt сказал:

я тупенький:D подскажите  3,4,5 исправить пожалуйста

5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой 

  if(npcId == npcId)

примерно так будет 

if(npcId == 80028)    можно поставить ид нпс 

  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
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

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


Ссылка на сообщение
Поделиться на другие сайты
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" нулу и после проверяешь не равняется ли количество колов меньше чем условие

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

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


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Smowk сказал:

5) Проверка наличие "самого себя"? Надо сравнивать одну переменную с ДРУГОЙ переменной, а не с самим собой 


  if(npcId == npcId)

примерно так будет 

if(npcId == 80028)    можно поставить ид нпс 

насколько я помню в скрипте еще есть npcid вынесенный в переменную класса, и что б все работало как положено, мы должны обратится к переменной класса и сравнить ее с переменной метода тоесть if (this.npcId = npcId)

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


Ссылка на сообщение
Поделиться на другие сайты
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>

то если вернуть в исходные будет и в тату яве

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

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, LoveYogurt сказал:

так уже гс ошибку бьёт  

ты скрипт свой залил бы под спойлер

  • Haha 1

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


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

на скорую руку накидал, на работоспособность не проверял, ссаный квест двиг на пвсофте ущербен.

Спойлер

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
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>

 

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


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

Бле. ты сборку рела-пв мучаешь все ? 

там правится все в теч 10 минут, даже со старьем. не умеешь плати.

В янДексе куча инфы.  Все разбири подай, сделай.  я буквально в декабре - ноябре тож самое барахло запускал и правмл По мануалам блеть. и все ок было

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


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

ахах. свреху все ответы, и в соседнях темах. Фейс на руку блат. 

пздцц

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, Euroset сказал:

ахах. свреху все ответы, и в соседнях темах. Фейс на руку блат. 

пздцц

Ты кому ?

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, Smowk сказал:

Ты кому ?

тому кто поднял эту тему с 2017. тут все разжевано. че да как парвить.

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


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

Если у кого есть ошибки в гс от скриптов, за 890 руб все исправлю вам :) чекайте в лс)) + переделаю вашу шарную сборку под ваши нужды :D

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

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


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

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

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

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

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

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

Войти

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

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

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

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

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