проверять игрока в активной зонеа че сделать нужно?
проверять игрока в активной зоне
private static Zone _zone = ReflectionUtils.getZone("[zona_name]");
if(_zone.isActive() && _zone.checkIfInZone(Creature)){ }
Хочу снимать с плеера трансформации в активной зоне, при Enterzone снимает замечательно, а вот если заюзать её в зоне то проблема. В ентерзоне работает вот так.P.S. Так же установить флаг активности при ините setActive(true);, ну либо убрать активность setActive(false);. В зависимости что нужно сделать. Описания талкового то нету.Код:private static Zone _zone = ReflectionUtils.getZone("[zona_name]"); if(_zone.isActive() && _zone.checkIfInZone(Creature)){ }
Проверить игрока в активной зоне.
При какой трансформе ? При любой?Хочу снимать с плеера трансформации в активной зоне, при Enterzone снимает замечательно, а вот если заюзать её в зоне то проблема.
Да, при любой. Есть параметр в зоне <set name="transformprotection" val="true" />, в ентерзоне он его чекает, а так чет не хочетПри какой трансформе ? При любой?
Есть 2 момента. Сделать костыль в какой то зоне.
Либо сделать через конд скила.
else if("check_zone_default".equalsIgnoreCase(nodeName))
{
final String st = a.getNodeValue();
cond = joinAnd(cond, new ConditionCheckZoneDefault(st));
}
/**
* @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(ReflectionUtils.getZone(zone_name).checkIfInZone((Player) env.character))
{
//TODO Say нельзя юзать транcформу в этой зоне.
return false;
}
}
return true;
}
}
<skill id="333333" levels="1" name="">
<cond>
<player check_zone_default="zone_name1;zone_blala;zone_ffff" />
</cond>
</skill>
угу, Ваш метод более лучше, тогда не подумал о таком))) спасибо за наводкуТак же хочу отметить что... Метод с проверкой через н времени очень затратный т.к. придется вытягивать все плееров в зоне.
Так же можно сделать через Листенер(OnAttackListener) если атаковал в трансформе то Say и трансформируемся в исходное положение. (Листенер нужно инитализировать при входе в зону.)
[15.06.15 14:45:47:004] ERROR clientpackets.L2GameClientPacket: Client: IN_GAME IP: 127.0.0.1 Account: admin Player : test[268480062] - Failed running: [C] UseItem - Server Version: -1
java.lang.NullPointerException
at org.mmocore.gameserver.stats.conditions.ConditionCheckZoneDefault.testImpl(ConditionCheckZoneDefault.java:25)
at org.mmocore.gameserver.stats.conditions.Condition.test(Condition.java:24)
at org.mmocore.gameserver.model.Skill.checkCondition(Skill.java:946)
at org.mmocore.gameserver.skills.skillclasses.Transformation.checkCondition(Transformation.java:96)
at handler.items.ItemSkills.useItem(ItemSkills.java:55)
at org.mmocore.gameserver.clientpackets.UseItem.runImpl(UseItem.java:95)
at org.mmocore.gameserver.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:50)
at org.mmocore.commons.net.nio.impl.MMOExecutableQueue.run(MMOExecutableQueue.java:38)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
/**
* @author Mangol
*/
public class CustomZone implements OnInitScriptListener
{
private static ZoneListener _zoneListener;
private final AttackListener attackListener = new AttackListener();
private static String[] zones = { "[zone1]", "[zone2]", };
@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)
{
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();
if(player.getTransformation() > 0)
{
player.setTransformation(0);
player.sendMessage("Что творишь Что творишь!!1");
}
}
}
}
}
но это на все трансы, красивее будет когда в скиле прописано какие можно юзать и какие нетПоследний метод с атакой внутри зоны.
На тест не проверял.
Код:/** * @author Mangol */ public class CustomZone implements OnInitScriptListener { private static ZoneListener _zoneListener; private final AttackListener attackListener = new AttackListener(); private static String[] zones = { "[zone1]", "[zone2]", }; @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) { 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(); if(player.getTransformation() > 0) { player.setTransformation(0); player.sendMessage("Что творишь Что творишь!!1"); } } } } }
s10 А ты на итем чтоле завязал конд ?
P.S. покажи скил на котором висит конд.
Последний метод с атакой внутри зоны.
На тест не проверял.
Код:/** * @author Mangol */ public class CustomZone implements OnInitScriptListener { private static ZoneListener _zoneListener; private final AttackListener attackListener = new AttackListener(); private static String[] zones = { "[zone1]", "[zone2]", }; @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) { 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(); if(player.getTransformation() > 0) { player.setTransformation(0); player.sendMessage("Что творишь Что творишь!!1"); } } } } }
s10 А ты на итем чтоле завязал конд ?
P.S. покажи скил на котором висит конд.
<skill id="22205" levels="1" name="Transform Anakim">
<set name="magicType" val="SPECIAL" />
<set name="icon" val="icon.skilltransform1" />
<set name="hitTime" val="500" />
<set name="target" val="TARGET_SELF" />
<set name="skillType" val="TRANSFORMATION" />
<set name="addSkills" val="721;2;724;1;722;2;720;2;723;1;619;1;5491;1" />
<set name="npcId" val="13100" />
<set name="operateType" val="OP_ACTIVE" />
<set name="isHandler" val="true" />
<set name="itemConsumeId" val="21186" />
<set name="itemConsumeCount" val="1" />
<cond msgId="1509">
<not>
<player olympiad="true" />
</not>
</cond>
<cond>
<player check_zone_default="queen_ant_epic" />
</cond>
<for>
<effect count="1" name="Transformation" time="1800" val="306">
<set order="0x40" stat="STR" val="46" />
<set order="0x40" stat="DEX" val="30" />
<set order="0x40" stat="CON" val="49" />
<set order="0x40" stat="INT" val="50" />
<set order="0x40" stat="WIT" val="20" />
<set order="0x40" stat="MEN" val="45" />
</effect>
</for>
</skill>
Код:<skill id="22205" levels="1" name="Transform Anakim"> <set name="magicType" val="SPECIAL" /> <set name="icon" val="icon.skilltransform1" /> <set name="hitTime" val="500" /> <set name="target" val="TARGET_SELF" /> <set name="skillType" val="TRANSFORMATION" /> <set name="addSkills" val="721;2;724;1;722;2;720;2;723;1;619;1;5491;1" /> <set name="npcId" val="13100" /> <set name="operateType" val="OP_ACTIVE" /> <set name="isHandler" val="true" /> <set name="itemConsumeId" val="21186" /> <set name="itemConsumeCount" val="1" /> <cond msgId="1509"> <not> <player olympiad="true" /> </not> </cond> <cond> <player check_zone_default="queen_ant_epic" /> </cond> <for> <effect count="1" name="Transformation" time="1800" val="306"> <set order="0x40" stat="STR" val="46" /> <set order="0x40" stat="DEX" val="30" /> <set order="0x40" stat="CON" val="49" /> <set order="0x40" stat="INT" val="50" /> <set order="0x40" stat="WIT" val="20" /> <set order="0x40" stat="MEN" val="45" /> </effect> </for> </skill>
Все верно. Но можно закостылить конечно вложив в массив иды трансформ и сравниватьно это на все трансы, красивее будет когда в скиле прописано какие можно юзать и какие нет
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?