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

Как доделать скрипт?

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

Хочу доделать скрипт написан Demoncool  спасибо эму за это
Но я хочу что бы скрипт говорил еще что рб появится через 20 мин допустим.
Как это сделать?

Вот скрипт сам 

 

package ai;
 
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
import net.sf.l2j.gameserver.Announcements;
 
public class NpcScriptThree extends QuestJython
{
//Ид боссов
private final static int[] BossIds = {59021};
 
public NpcScriptThree(int questId, String name, String descr)
{
super(questId, name, descr, 1);
for (int BossIds1 : BossIds)
 addSpawnId(BossIds1);
}
 
    public String onSpawn(L2NpcInstance raidboss)
    {
        int npcId = raidboss.getNpcId();
for (int id : BossIds)
if (npcId == id)
               Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!");
        return null;
    }
 
public static void main(String[] args)
{
new NpcScriptThree(-1, "NpcScriptThree", "ai");
}
}
 
 
нужно под ПВ

Зарание спасибо.

 

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


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

 

Хочу доделать скрипт написан Demoncool  спасибо эму за это

Но я хочу что бы скрипт говорил еще что рб появится через 20 мин допустим.

Как это сделать?

 

Вот скрипт сам 

 

package ai;
 
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
import net.sf.l2j.gameserver.Announcements;
 
public class NpcScriptThree extends QuestJython
{
//Ид боссов
private final static int[] BossIds = {59021};
 
public NpcScriptThree(int questId, String name, String descr)
{
super(questId, name, descr, 1);
for (int BossIds1 : BossIds)
 addSpawnId(BossIds1);
}
 
    public String onSpawn(L2NpcInstance raidboss)
    {
        int npcId = raidboss.getNpcId();
for (int id : BossIds)
if (npcId == id)
               Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!");
        return null;
    }
 
public static void main(String[] args)
{
new NpcScriptThree(-1, "NpcScriptThree", "ai");
}
}
 
 
нужно под ПВ

 

Зарание спасибо.

 

В таблице со спавнлистом РБ есть так же время следующего спавна рейд босса. Следовательно нужно сделать чтобы скрипт сверял текущее время и указанное время. Время указано в юниксе.

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


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

В таблице со спавнлистом РБ есть так же время следующего спавна рейд босса. Следовательно нужно сделать чтобы скрипт сверял текущее время и указанное время. Время указано в юниксе.

а где в этом скрипте оно написано то? тыкните носом как говориться в каки.

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


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

а где в этом скрипте оно написано то? тыкните носом как говориться в каки.

Нигде. Тут кроме аннонса по факту спавна ничего нет.

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


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

Нигде. Тут кроме аннонса по факту спавна ничего нет.

А ни как дописать скрипт не льзя?

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


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

Можно, почему нет.

Я так понял это будет стоить да?

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


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

Я так понял это будет стоить да?

Наверное, яж не скриптер, моё дело допасы пилить.

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


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

Я так понял это будет стоить да?

 

Естественно,что бесплатно никто тебе делать не будет.

Мэйну напиши,или Демону, за определенную сумму сделают.

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


Ссылка на сообщение
Поделиться на другие сайты
package ai;
 
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
import net.sf.l2j.gameserver.Announcements;
 
public class NpcScriptThree extends QuestJython
{
//Ид боссов
private final static int[] BossIds = {59021};
 
public NpcScriptThree(int questId, String name, String descr)
{
super(questId, name, descr, 1);
for (int BossIds1 : BossIds)
 addSpawnId(BossIds1);
}
 
    public String onSpawn(L2NpcInstance raidboss)
    {
        int npcId = raidboss.getNpcId();
for (int id : BossIds)
if (npcId == id)
               Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!");
        return null;
    }
 
public static void main(String[] args)
{
new NpcScriptThree(-1, "NpcScriptThree", "ai");
}
}
 

ну смотри строка Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!"); гласит о том что РБ появился.

Если тебе нужно чтоб предупреждал за 20 мин то, тебе нужно будет добавить еще один анонс и делей в скрипт, тут даже не важно где но не позней чем  addSpawnId(BossIds1);. можно в самом начале.

Thread.sleep(клово милисекунд); возможно подойдет, но я не уверен.

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
package ai;
 
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
import net.sf.l2j.gameserver.Announcements;
 
public class NpcScriptThree extends QuestJython
{
//Ид боссов
private final static int[] BossIds = {59021};
 
public NpcScriptThree(int questId, String name, String descr)
{
super(questId, name, descr, 1);
for (int BossIds1 : BossIds)
  Thread.sleep
 addSpawnId(BossIds1);
}
 
    public String onSpawn(L2NpcInstance raidboss)
    {
        int npcId = raidboss.getNpcId();
for (int id : BossIds)
if (npcId == id)
               Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!");
        return null;
    }
 
public static void main(String[] args)
{
new NpcScriptThree(-1, "NpcScriptThree", "ai");
}
}
 

ну смотри строка Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!"); гласит о том что РБ появился.

Если тебе нужно чтоб предупреждал за 20 мин то, тебе нужно будет добавить еще один анонс и делей в скрипт, тут даже не важно где но не позней чем  addSpawnId(BossIds1);. можно в самом начале.

Thread.sleep(клово милисекунд); возможно подойдет, но я не уверен.

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

 

Так?

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

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


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

Так?

Чтобы сделать такую функцию нужно хоть немного знать что оно внутри ядра, какие классы и методы нужно использовать. Сразу так с ходу ты ну никак не сделаешь.

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


Ссылка на сообщение
Поделиться на другие сайты
package ai;
 
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
import net.sf.l2j.gameserver.Announcements;
 
public class NpcScriptThree extends QuestJython
{
//Ид боссов
private final static int[] BossIds = {59021};
 
public NpcScriptThree(int questId, String name, String descr)
{
super(questId, name, descr, 1);
for (int BossIds1 : BossIds)
 addSpawnId(BossIds1);
}
 
    public String onSpawn(L2NpcInstance raidboss)
    {
        int npcId = raidboss.getNpcId();
for (int id : BossIds)
if (npcId == id)
               Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!");
        return null;
    }
 
public static void main(String[] args)
{
new NpcScriptThree(-1, "NpcScriptThree", "ai");
}
}
 

ну смотри строка Announcements.getInstance().announceToAll("РейдБосс : " + raidboss.getName() + " появился в мире!"); гласит о том что РБ появился.

Если тебе нужно чтоб предупреждал за 20 мин то, тебе нужно будет добавить еще один анонс и делей в скрипт, тут даже не важно где но не позней чем  addSpawnId(BossIds1);. можно в самом начале.

Thread.sleep(клово милисекунд); возможно подойдет, но я не уверен.

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

 

ему нужно предупреждать ДО спавна за 20 минут, так что каким боком тут можно воткнуть Thread.sleep() ?? 

Так же нужно учитывать что РБ скорее всего не один, и если использовать Thread.sleep могут быть проблемы с потоками

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


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

ему нужно предупреждать ДО спавна за 20 минут, так что каким боком тут можно воткнуть Thread.sleep() ?? 

Так же нужно учитывать что РБ скорее всего не один, и если использовать Thread.sleep могут быть проблемы с потоками

 

Почему же можно сделать так, выделить один тред под каждую минуту, идет проверка по всем рб которые есть в таблице циклом.

Каждую минуту будет посылаться запрос в бд, внутри функции будет браться данные с grandboss_data, проверка если у какого РБ время спауна меньше 20мин, то выводиться информация и работаем дальше.

Все просто до безумия.

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


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

Почему же можно сделать так, выделить один тред под каждую минуту, идет проверка по всем рб которые есть в таблице циклом.

Каждую минуту будет посылаться запрос в бд, внутри функции будет браться данные с grandboss_data, проверка если у какого РБ время спауна меньше 20мин, то выводиться информация и работаем дальше.

Все просто до безумия.

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

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


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

Почему же можно сделать так, выделить один тред под каждую минуту, идет проверка по всем рб которые есть в таблице циклом.

Каждую минуту будет посылаться запрос в бд, внутри функции будет браться данные с grandboss_data, проверка если у какого РБ время спауна меньше 20мин, то выводиться информация и работаем дальше.

Все просто до безумия.

Вот тут поспорю. Во-первых, ему нужны не только грандбоссы. Во-вторых, зачем нагружать базу лишний раз? По базе можно пройтись только один раз при загрузки. Создать коллекцию мап<ИдБосса, времяРеспа> и при убийстве босса (onKill) записывать инфу в коллекцию и уже работать с ней.

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


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

А я бы квест таймер запускал равный времени спавну - 20 минут, по окончанию которого светим аннонс, это как самый наипростейший вариант. Если речь идет о конкретных боссах, а не о всех. Там уже надо мапу.

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


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

Вот тут поспорю. Во-первых, ему нужны не только грандбоссы. Во-вторых, зачем нагружать базу лишний раз? По базе можно пройтись только один раз при загрузки. Создать коллекцию мап<ИдБосса, времяРеспа> и при убийстве босса (onKill) записывать инфу в коллекцию и уже работать с ней.

Да, тоже отписался, не вижу смысла делать чек базы постоянный, да и вообще делать какой-то цикл по таймингу. Минус мапы в том, что она как и любые данные сбросятся после рестарта. 

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


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

Да, тоже отписался, не вижу смысла делать чек базы постоянный, да и вообще делать какой-то цикл по таймингу. Минус мапы в том, что она как и любые данные сбросятся после рестарта. 

Для этого я и написал, что при загрузке можно один раз по базе пройтись и наполнить мапу, если в сборке предусмотрено записывать респ обычных РБ в базу.

 

На крайняк, создать новую таблицу и мапу выгружать при рестарте=)

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

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


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

Почему же можно сделать так, выделить один тред под каждую минуту, идет проверка по всем рб которые есть в таблице циклом.

Каждую минуту будет посылаться запрос в бд, внутри функции будет браться данные с grandboss_data, проверка если у какого РБ время спауна меньше 20мин, то выводиться информация и работаем дальше.

Все просто до безумия.

Сможете помочь? если вам не сложно.

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


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

Ну в даном примере описан спавн 1 боса. с несколькими или со всеми босами - ето уже другая задача.

етот скрипт никак не связвн с базой. если его запустить он заспавнит боса сразу же при загрузке серва и напишет об етом.
если нужен мониторинг босов, я бы не советовал парить себе мозг етим скриптом. ето можно сделать проще. (могу настрочить, но негде тестить, да и не факто что именно ето ему нужно)

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


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

Ну в даном примере описан спавн 1 боса. с несколькими или со всеми босами - ето уже другая задача.

етот скрипт никак не связвн с базой. если его запустить он заспавнит боса сразу же при загрузке серва и напишет об етом.

если нужен мониторинг босов, я бы не советовал парить себе мозг етим скриптом. ето можно сделать проще. (могу настрочить, но негде тестить, да и не факто что именно ето ему нужно)

Что? Вы хоть скрипт читали и что он делает? Зачем в заблуждения человека вводить?

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


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

Что? Вы хоть скрипт читали и что он делает? Зачем в заблуждения человека вводить?

сорян, чего то напутал. перечитал. (почемуто думал что ето скипт спавна с анонсом)

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


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

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

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

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

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

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

Войти

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

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

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

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

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