Протупил)Случайно не так ?
<cond>
<player check_zone_default="[queen_ant_epic]" />
</cond>
но это на все трансы, красивее будет когда в скиле прописано какие можно юзать и какие нет
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;
}
}
А зачем каждый раз в цикле проверять ну нулл чература ?Замодифил немножко конд монгола. По идее работает, а насколько правильный код я хз.)
Код:/** * @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; } }
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;
}
Вроде в мейн-посте написано, колхоз -девА зачем каждый раз в цикле проверять ну нулл чература ?
Зачем юзать вообще цикл если чератур не плавер ?
Код: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);
}
}
}
Можно и так на верно ....
А на счёт костыля, там это дело у всех только в мозгахКод:@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); } } }
@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);
}
}
А массив можно вывести в конфигЭто что за бред ? Если 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)
Ну я как бы описал тоже элементарное. Но то что описали вы. Снимет трансформу при входе в зону но не в самой зоне.Вам веднее ..... я просто написал элементарное, в несколько строк, а не открывал новый континент
Ну я как бы описал тоже элементарное. Но то что описали вы. Снимет трансформу при входе в зону но не в самой зоне.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?