Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
FinFan, работа со скриптами.
#11
Где-то так, может где-то ошибся в букве или скобках закрывающих, но думаю суть вы поймете.

Код:
public boolean onActionTime()
{
  if (getEffector() instanceof L2PcInstance)
    ThreadPoolManager.getInstance().schedule(new CheckTask ((L2PcInstance)getEffector()), 500);
}

static class CheckTask implements Runnable
{
private L2PcInstance _player;
public CheckTask(L2PcInstance player)
{
  _player = player;
}

@Override
public void run()
{
  try
  {
    if (player  != null && player.get(... тут проверить наличие этого эффекта на чаре) )
    {
    if(activeChar.isDead() || activeChar.isRunning()))
    {
      activeChar.getAppearance().setVisible();
      activeChar.stopAbnormalEffect(AbnormalEffect.STEALTH);            
    }
    else
      ThreadPoolManager.getInstance().schedule(new CheckTask (), 500);
   }
  }
  catch (Exception e) {}
}
}
Ответ
#12
Visor Написал:Где-то так, может где-то ошибся в букве или скобках закрывающих, но думаю суть вы поймете.

Код:
public boolean onActionTime()
{
  if (getEffector() instanceof L2PcInstance)
    ThreadPoolManager.getInstance().schedule(new CheckTask ((L2PcInstance)getEffector()), 500);
}

static class CheckTask implements Runnable
{
private L2PcInstance _player;
public CheckTask(L2PcInstance player)
{
  _player = player;
}

@Override
public void run()
{
  try
  {
    if (player  != null && player.get(... тут проверить наличие этого эффекта на чаре) )
    {
    if(activeChar.isDead() || activeChar.isRunning()))
    {
      activeChar.getAppearance().setVisible();
      activeChar.stopAbnormalEffect(AbnormalEffect.STEALTH);            
    }
    else
      ThreadPoolManager.getInstance().schedule(new CheckTask (), 500);
   }
  }
  catch (Exception e) {}
}
}

Это не правильно и работать либо не будет вовсе, так как onActionTime вызовется только один раз, либо будет каждую секунду создавать задачу, что тоже не айс.

Самый простой вариант:
делайте эффект типа
<effect count="30" name="Invis" time="1" val="0"/>
ключевые тут count и time. Нужно чтоб эффект тикал 30/60/90 раз по секунде.
Давайте инвиз в методе onStart(), а удаляйте в методе onExit().
В методе onActionTime() делайте необходимую проверку и если игрок её не проходит возвращайте false (что должно завершить работу эффекта), в противном случае возвращайте true.

Никаких дополнительных тасков в данном случае создаваться не будет, а проверка будет проходить каждую секунду.

Добавлено через 9 минут
Хотя наверно некоторые игроку умудрятся обходить данную проверку короткими перебежками в перерывах между тиками эффкта)) Так что лучше отменять эффект при установке координат игроку.

Добавлено через 11 минут
Хотя нет, вариант Визора имеет права на существование, работать будет, создавая каждые 500ms новую задачу пока работает эффект и подходят условия.
[Изображение: l2nextgen.gif]
Ответ
#13
Я благодарен вамм всем, способность работает как надо, слов не подобрать нужных...

Для меня это огромный прорыв, разобрался в тасках, просто чудо а не система, но много ли оперативной памяти жрет такая штуковина? Например если делать пасивный кондишен на обратку таргет на наличие эффекта?
Ответ
#14
finfan Написал:но много ли оперативной памяти жрет такая штуковина?
Не много, но зависит самого класса таска. Но создавать их где попало не стоит, когда можно обойтись без них, тем более эффект и так является отдельным таском, либо для эффекта уже есть таск для его обработки.
[Изображение: l2nextgen.gif]
Ответ
#15
Тут важна не память, а процессорное время, лучше ставить не задачи, а обработчик события - триггер

Псевдокод
PHP код:
<?php 
player
.onTakeEffect.add(new MyEffectHandler());

class
MyEffectHandler extends EffectHandler {

public
void handle(Effect effect) {
if(
effect.isEffectType(EffectType.MY_EFFECT_TYPE) {
//TODO
}
}


function
addEffect(Effect effect) {
...
player.onTakeEffect.handle(effect);
}
Ответ
#16
finfan Написал:Я благодарен вамм всем, способность работает как надо, слов не подобрать нужных...

Для меня это огромный прорыв, разобрался в тасках, просто чудо а не система, но много ли оперативной памяти жрет такая штуковина? Например если делать пасивный кондишен на обратку таргет на наличие эффекта?
Не много памяти, весь гейм на задачах висит, пакеты входящие генерируют каждый свою задачу...
Главное тут, чтобы задача эта не мешала работе, вовремя была остановлена и удалена сборщиком мусора.
Ответ
#17
удалена GC то она будет, ссылок у вас в примере не на неё нет.
Но при большом количество подобного кода, вызовет лишнюю нагрузку на GC.

Добавлено через 57 секунд
Gattsu Написал:Тут важна не память, а процессорное время, лучше ставить не задачи, а обработчик события - триггер

Псевдокод
PHP код:
<?php 
player
.onTakeEffect.add(new MyEffectHandler());

class
MyEffectHandler extends EffectHandler {

public
void handle(Effect effect) {
if(
effect.isEffectType(EffectType.MY_EFFECT_TYPE) {
//TODO
}
}


function
addEffect(Effect effect) {
...
player.onTakeEffect.handle(effect);
}
Обработчик/триггер будет обрабатываться так же в задаче/потоке, просто в другой.
Согласен, именно данную задачу правильнее было бы решить с помощью листенеров/триггеров, при изменении координат игрока.
[Изображение: l2nextgen.gif]
Ответ
#18
bloodshed Написал:удалена GC то она будет, ссылок у вас в примере не на неё нет.
Но при большом количество подобного кода, вызовет лишнюю нагрузку на GC.

Добавлено через 57 секунд

Обработчик/триггер будет обрабатываться так же в задаче/потоке, просто в другой.
У вас проблема в гейме с памятью и нагрузкой на процессор отнють не от таких маленьких тасков. Вы если не понимаете еще этого, то переписывайте с птс АИ - это проще.
Я с этим уже не борюсь, что нагрузка на процессор - ее нет просто, памяти много ест - тоже этого нет (2Гб-3Гб с гео). Поэтому сижу и спокойно выписываю функционал, зная что у всех все работает ровно и не напрягает игроков рестартами, чтобы не лагало, просто лагами, или критами.

Вы зря пытаетесь спорить в том, что не совсем точно понимаете.
У меня просто сложный путь, в отличие от вас, поэтому пришлось переделывать и перепроверять практически все. Я не искал готового, и не ищу.
Ответ
#19
Visor Написал:У вас проблема в гейме с памятью и нагрузкой на процессор отнють не от таких маленьких тасков. Вы если не понимаете еще этого, то переписывайте с птс АИ - это проще.
Я с этим уже не борюсь, что нагрузка на процессор - ее нет просто, памяти много ест - тоже этого нет (2Гб-3Гб с гео). Поэтому сижу и спокойно выписываю функционал, зная что у всех все работает ровно и не напрягает игроков рестартами, чтобы не лагало, просто лагами, или критами.

Вы зря пытаетесь спорить в том, что не совсем точно понимаете.
У меня просто сложный путь, в отличие от вас, поэтому пришлось переделывать и перепроверять практически все. Я не искал готового, и не ищу.

Хоть бы один аргумент написали, а то просто пустой трёп. Если не согласны с точкой зрения, умейте аргументировать свою.

Вы я смотрю хорошо осведомлены о каких то "проблемах", без доказательств это клевета, что правилами запрещено.
[Изображение: l2nextgen.gif]
Ответ
#20
Прошу вас господа, только не в этой теме, я создавал её для вопросов-ответов, хватит бессмысленных холи варов... хотябы не здесь. :ep:
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  ХФ работа скилов Touch of Death 342, Incane Crusher 762 Munhgauzen 0 987 11-05-2013, 10:52 PM
Последний пост: Munhgauzen
  Помощь с скриптами Jigulixa 9 2,225 05-06-2013, 08:25 PM
Последний пост: SoniPro
  Работа с NextPay системой L2sidia 2 1,723 09-30-2012, 05:31 PM
Последний пост: L2sidia
  Помогите Со Скриптами Comunuty Board idbers 1 1,455 08-14-2012, 07:39 PM
Последний пост: gorodetskiy
  Работа в ядре (l2p сборка) niko42 1 1,580 02-06-2012, 10:43 PM
Последний пост: niko42
  Работа над исходами zimorf 32 5,754 07-05-2011, 01:54 PM
Последний пост: zimorf
  Помогите со скриптами. FaintSmile 0 1,174 06-09-2011, 12:22 PM
Последний пост: FaintSmile
  работа с НПЦ paravozik 4 2,940 05-19-2011, 09:09 AM
Последний пост: ANZO
  [l2jserver] Где описывается работа свитков типа Scroll of Escape? Rus. 11 5,511 01-27-2010, 11:17 PM
Последний пост: CoKoJI

Перейти к форуму:


Пользователи, просматривающие эту тему: 6 Гость(ей)