Вопрос по ядру оверов

ツsmile10ツ

Гений мысли
Проверенный
Сообщения
1 438
Розыгрыши
0
Репутация
2 627
Реакции
1 242
Баллы
1 808
Собственно, так как сам я в области жавы чуть умнее ансиента (словами гринда - колхозник), хочу узнать.
Есть ли в такой параметр как поясню пожалуй подробно.
есть OnZoneEnter, есть OnZoneLeave, а OnZoneCurrently есть не?)

onActive из model.Zone просто пахать не хочет, хотя именно он за активность зоны отвечает.
Оффтоп:

Да, вопрос на уровне "село Зажопинск"
 
Последнее редактирование:
Спасибо всем за помощь, тридик можно оставить, ну либо закрыть. Так же настаиваю на вручение Монголу ачивки Иисуса.:megane:
 
Код:
package zones;
/**
* @author Mangol
*/
public class CustomZone implements OnInitScriptListener
{
    private static ZoneListener _zoneListener;
    private final AttackListener attackListener = new AttackListener();
    private static String[] zones = { "[zone1]", "[zone2]", };
    private final int[] check_transform_id = { 106, 306, 506 }; // пример и тд.

    @Override
    public void onInit()
    {
        _zoneListener = new ZoneListener();
        for(final String z : zones)
        {
            final Zone zone = ReflectionUtils.getZone(z);
            zone.addListener(_zoneListener);
        }
    }

    private class ZoneListener implements OnZoneEnterLeaveListener
    {
        @Override
        public void onZoneEnter(final Zone zone, final Creature cha)
        {
            if(zone.getParams() == null || !cha.isPlayable())
            {
                return;
            }
            final Player player = cha.getPlayer();
            if(zone.getParams().getBool("transformprotection"))
            {
                if(player != null)
                {
                    final int transform_id = player.getTransformation();         
                    //если увидели ид трансформы которую нужно снять.
                    if(ArrayUtils.contains(check_transform_id, transform_id))
                    {
                        player.setTransformation(0);
                        player.sendMessage("Что творишь Что творишь!!1");
                    }
                }
            }
            player.addListener(attackListener);
        }

        @Override
        public void onZoneLeave(final Zone zone, final Creature cha)
        {
            if(cha.isPlayer())
            {
                cha.removeListener(attackListener);
            }
        }
    }

    private class AttackListener implements OnAttackListener
    {
        @Override
        public void onAttack(final Creature actor, final Creature target)
        {
            if(actor.isPlayer())
            {
                final Player player = actor.getPlayer();
                final int transform_id = player.getTransformation();         
                //если увидели ид трансформы которую нужно снять.
                if(ArrayUtils.contains(check_transform_id, transform_id))
                {
                    player.setTransformation(0);
                    player.sendMessage("Что творишь Что творишь!!1");
                }
            }
        }
    }
}
Вот так можно закостылить.
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
В оверах сборка на костылях только так и стоит, так что решение есть вменяемым (в сборках где нет костылей все и работает через (), как то так...)
 
Замодифил немножко конд монгола. По идее работает, а насколько правильный код я хз.)
Код:
/**
* @author Mangol
*/
public class ConditionCheckZoneDefault extends Condition
{
    private final String _zones_name;

    public ConditionCheckZoneDefault(final String zones_name)
    {
        _zones_name = zones_name;
    }

    @Override
    protected boolean testImpl(final Env env)
    {
       
        for(final String zone_name : _zones_name.split(";"))
        {
            if (env.character == null || !env.character.isPlayer())
                return false;
            if(ReflectionUtils.getZone(zone_name).checkIfInZone((Player) env.character))
            {
                env.character.sendPacket(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS);
                return false;
            }
        }
        return true;
    }

}
 

    Violence

    Баллов: 15
    Без комментариев
А зачем каждый раз в цикле проверять ну нулл чература ?
Зачем юзать вообще цикл если чератур не плавер ?
Код:
public class ConditionCheckZoneDefault extends Condition
{
    private final String _zones_name;

    public ConditionCheckZoneDefault(final String zones_name)
    {
        _zones_name = zones_name;
    }

    @Override
    protected boolean testImpl(final Env env)
    {    
        if (env.character == null || !env.character.isPlayer())
        {
              return false;
        }
        for(final String zone_name : _zones_name.split(";"))
        {
            if(ReflectionUtils.getZone(zone_name).checkIfInZone((Player) env.character))
            {
                env.character.sendPacket(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS);
                return false;
            }
        }
        return true;
    }
 
Вроде в мейн-посте написано, колхоз -дев Но на заметку возьму, спасибо.
 
Можно и так на верно ....
Код:
@Override
public void onZoneEnter(Zone zone, Creature cha)
{
  if (cha.isPlayer())
     {
  Player player = (Player) cha.getPlayer();
  if(player.getTransformation() != 0)
         {
     Effect transform = player.getEffectList().getEffectByType(EffectType.Transformation);
     if(transform == null)
       return;
           if(transform.getSkill().isBaseTransformation() || transform.getSkill().isSummonerTransformation() || transform.getSkill().isCursedTransformation() /**разные условия по вкусу и нуждам*/)
             return;
           player.sendMessage(player.isLangRus() ? "Текст." : "Text");
           player.setTransformation(0);
           player.getEffectList().stopEffects(EffectType.Transformation);
         }
      }
  }
А на счёт костыля, там это дело у всех только в мозгах
 
Последнее редактирование:

    ツsmile10ツ

    Баллов: 14
    Без комментариев

Это что за бред ? Если if(player.getTransformation() != 0) Больше 0 это уже ты в трансформе.

if(transform.getSkill().isBaseTransformation() || transform.getSkill().isSummonerTransformation() || transform.getSkill().isCursedTransformation() /**разные условия */)

Так давате еще нагородим кучу херни в 500 строк которую можно описать в массиве иды трансформ профит.

Код:
        @Override
        public void onZoneEnter(final Zone zone, final Creature cha)
        {
            if(zone.getParams() == null || !cha.isPlayable())
            {
                return;
            }
            final Player player = cha.getPlayer();
            if(player != null)
            {
               final int transform_id = player.getTransformation();
                // Зона 1
               
                if(zone.getParams().getBool("transformprotection"))
                {
                    if(transform_id>0)
                    {
                        //если увидели ид трансформы которую нужно снять.
                        if(ArrayUtils.contains(check_transform_id, transform_id))
                        {
                            player.setTransformation(0);
                            player.sendMessage("Что творишь Что творишь!!1");
                        }
                    }
                }              
           
                else if(zone.getParams().getBool("transformprotection_glo"))
                {
                    if(transform_id>0)
                    {
                            //если увидели ид трансформы которую нужно снять.
                            if(ArrayUtils.contains(check_transform_id, transform_id))
                            {
                                player.setTransformation(0);
                                player.teleport(магадан);
                                player.sendMessage("Что творишь Что творишь!!1");
                            }
                        }
                    }
               
                player.addListener(attackListener);           
            }
        }

Зачем городить какие-то левые затычки которые можно вписать в массив кастомно какие захочешь.
 
Последнее редактирование:
А массив можно вывести в конфиг
 
Я так понял, что ТС хотел запретит трансформ в определённой зоне (добавил условия, и что там ему нужно), описал самый лёгкий путь для этого, на счёт условии 500 строк - это для того чтоб в некотрых зонах нелзя запретить любой трансформ, на пример - беис трансформ сорса (40лвл в зоне АК, ну и там куча таких) так что не всегда нужно валить всех в масив ))


if (cha.isPlayer()) && + любой конфиг (true/false)
 
На 1 странице в моих постах есть код в котором все просто сделано через конд скила + зоны. И не надо городить херни разной кучу. Я предложил несколько вариантов развития событий и написал какой метод будет более правельным.
 
Реакции: kick
Вам веднее ..... я просто написал элементарное, в несколько строк, а не открывал новый континент
 
Ну я как бы описал тоже элементарное. Но то что описали вы. Снимет трансформу при входе в зону но не в самой зоне.
 
Ну если так нужно, можно подвесить листинер в зону, ну впрочем есть миллион способов для решения этой проблемы )) главное не слишком загружать сервер лишними проверками