tazerman2 Posted September 12, 2018 Posted September 12, 2018 one more smile code i make l2jroboto eflocrash code the fake players play pvp.. but the problem is for have all time pvp you need make a zone with respawn teleport like primeval isle i think you like it. enjoy com/elfocrash/roboto/ai/FakePlayerAI.java find this - protected void tryTargetRandomCreatureByTypeInRadius(Class<? extends Creature> creatureClass, int radius) - { - if(_fakePlayer.getTarget() == null) { - List<Creature> targets = _fakePlayer.getKnownTypeInRadius(creatureClass, radius).stream().filter(x->!x.isDead()).collect(Collectors.toList()); - if(!targets.isEmpty()) { - Creature target = targets.get(Rnd.get(0, targets.size() -1 )); - _fakePlayer.setTarget(target); - } - }else { - if(((Creature)_fakePlayer.getTarget()).isDead()) - _fakePlayer.setTarget(null); - } - } change wtih this + protected void tryTargetRandomCreatureByTypeInRadius(Class<? extends L2Character> creatureClass, int radius) + { + if (_fakePlayer.getTarget() == null) + { + if(_fakePlayer.isInsideZone(ZoneId.PEACE) || _fakePlayer.isInsideZone(ZoneId.TOWN)) + return; + + List<L2Character> targets = _fakePlayer.getKnownTypeInRadius(creatureClass, radius).stream().filter(x -> !x.isDead()).collect(Collectors.toList()); + if (!targets.isEmpty()) + { + L2Character target = targets.get(Rnd.get(0, targets.size() - 1)); + + if (_fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getPvpFlag() == 0 || _fakePlayer.getPvpFlag() != 0 && target.getActingPlayer().getPvpFlag() == 0 || _fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getPvpFlag() != 0 || _fakePlayer.getPvpFlag() != 0 && target.getActingPlayer().getPvpFlag() != 0) + _fakePlayer.setTarget(target); + + else if (_fakePlayer.getKarma() > 0 && target.getActingPlayer().getKarma() == 0 || _fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getKarma() > 0 || _fakePlayer.getPvpFlag() > 0 && target.getActingPlayer().getKarma() > 0) + _fakePlayer.setTarget(target); + + } + } + else + { + if (((L2Character) _fakePlayer.getTarget()).isDead()) + _fakePlayer.setTarget(null); + } + } and from all class name AI with name this *** public void thinkAndAct() *** find all this - tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTestTargetClass(), FakeHelpers.getTestTargetRange()); and change with this + if (_fakePlayer.getKnownTypeInRadius(FakePlayer.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetPvPClass(), FakeHelpers.getTestTargetRange()); + } + + else if (_fakePlayer.getKnownTypeInRadius(Monster.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetMobClass(), FakeHelpers.getTestTargetRange()); + } on FakeHelpers.java after this public static Class<? extends L2Character> getTargetMobClass() { return Monster.class; } put this + //target fakeplayers instance only... + public static Class<? extends L2Character> getTargetPvPClass() + { + return FakePlayer.class; + } if any have problem post error only... tnx.
ShinichiYao Posted September 13, 2018 Posted September 13, 2018 (edited) You just need to make a check function so that the fake player may know who is the enemy, this is my code based on L2J Server protected boolean checkTargetThreat(L2Character target) { if (target == null) { return false; } if (target.isDead() || target.isInvisible() || (_fakePlayer.getLeader() == target)) { return false; } if (target.isPlayable() && (target.isInsideZone(ZoneId.PEACE) || target.isInsideZone(ZoneId.NO_SUMMON_FRIEND))) { return false; } if (target.isPlayer()) { L2PcInstance player = (L2PcInstance) target; if (player.isFake() && _fakePlayer.isSameSide((FakePlayer) player)) { return false; } if ((player.getKarma() > 0) || (player.getPvpFlag() > 0)) { return true; } if ((player.isInsideZone(ZoneId.PVP) && (player.getActiveWeaponInstance() != null)) || player.isInsideZone(ZoneId.SIEGE)) { return true; } } else if (target.isSummon()) { L2Summon summon = (L2Summon) target; if ((summon.getKarma() > 0) || (summon.getPvpFlag() > 0)) { return true; } if (summon.isInsideZone(ZoneId.PVP) || summon.isInsideZone(ZoneId.SIEGE)) { return true; } } else if (target.isAttackable()) { if (!target.isTargetable()) { return false; } if (target.isRaid() && ((target.getLevel() + 8) < _fakePlayer.getLevel())) { return false; } if (target.isNpc() && ((((L2Npc) target).getId() == 2502) || (((L2Npc) target).getId() == 2503))) { return false; } if (target.isMonster()) { return true; } if (target.getTarget() == _fakePlayer) { return true; } if ((target.getTarget() != null) && target.getTarget().isPlayer()) { if (((L2PcInstance) target.getTarget()).isInPartyWith(_fakePlayer)) { return true; } } } return false; } Edited September 13, 2018 by ShinichiYao
LucasDesigner Posted September 18, 2018 Posted September 18, 2018 On 9/12/2018 at 6:43 PM, tazerman2 said: one more smile code i make l2jroboto eflocrash code the fake players play pvp.. but the problem is for have all time pvp you need make a zone with respawn teleport like primeval isle i think you like it. enjoy com/elfocrash/roboto/ai/FakePlayerAI.java find this - protected void tryTargetRandomCreatureByTypeInRadius(Class<? extends Creature> creatureClass, int radius) - { - if(_fakePlayer.getTarget() == null) { - List<Creature> targets = _fakePlayer.getKnownTypeInRadius(creatureClass, radius).stream().filter(x->!x.isDead()).collect(Collectors.toList()); - if(!targets.isEmpty()) { - Creature target = targets.get(Rnd.get(0, targets.size() -1 )); - _fakePlayer.setTarget(target); - } - }else { - if(((Creature)_fakePlayer.getTarget()).isDead()) - _fakePlayer.setTarget(null); - } - } change wtih this + protected void tryTargetRandomCreatureByTypeInRadius(Class<? extends L2Character> creatureClass, int radius) + { + if (_fakePlayer.getTarget() == null) + { + if(_fakePlayer.isInsideZone(ZoneId.PEACE) || _fakePlayer.isInsideZone(ZoneId.TOWN)) + return; + + List<L2Character> targets = _fakePlayer.getKnownTypeInRadius(creatureClass, radius).stream().filter(x -> !x.isDead()).collect(Collectors.toList()); + if (!targets.isEmpty()) + { + L2Character target = targets.get(Rnd.get(0, targets.size() - 1)); + + if (_fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getPvpFlag() == 0 || _fakePlayer.getPvpFlag() != 0 && target.getActingPlayer().getPvpFlag() == 0 || _fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getPvpFlag() != 0 || _fakePlayer.getPvpFlag() != 0 && target.getActingPlayer().getPvpFlag() != 0) + _fakePlayer.setTarget(target); + + else if (_fakePlayer.getKarma() > 0 && target.getActingPlayer().getKarma() == 0 || _fakePlayer.getPvpFlag() == 0 && target.getActingPlayer().getKarma() > 0 || _fakePlayer.getPvpFlag() > 0 && target.getActingPlayer().getKarma() > 0) + _fakePlayer.setTarget(target); + + } + } + else + { + if (((L2Character) _fakePlayer.getTarget()).isDead()) + _fakePlayer.setTarget(null); + } + } and from all class name AI with name this *** public void thinkAndAct() *** find all this - tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTestTargetClass(), FakeHelpers.getTestTargetRange()); and change with this + if (_fakePlayer.getKnownTypeInRadius(FakePlayer.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetPvPClass(), FakeHelpers.getTestTargetRange()); + } + + else if (_fakePlayer.getKnownTypeInRadius(Monster.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetMobClass(), FakeHelpers.getTestTargetRange()); + } on FakeHelpers.java after this public static Class<? extends L2Character> getTargetMobClass() { return Monster.class; } put this + //target fakeplayers instance only... + public static Class<? extends L2Character> getTargetPvPClass() + { + return FakePlayer.class; + } if any have problem post error only... tnx. organization the topic is missing the import floods prevent
N0K3 Posted September 25, 2018 Posted September 25, 2018 On 13/09/2018 at 01:26, ShinichiYao said: Você só precisa fazer uma função de verificação para que o jogador falso saiba quem é o inimigo, este é o meu código baseado no servidor L2J. Is this code you quoted going on FakePlayerAI.java? Can you cite some reference line? On 12/09/2018 at 18:43, tazerman2 said: mais um código de sorriso eu faço código de eflocrash l2jroboto os jogadores falsos jogar pvp .. mas o problema é ter todo o tempo pvp você precisa fazer uma zona com respawn teleport como a ilha primeva eu acho que você gosta. apreciar I'm having trouble implementing your code, I did not understand this, if you can help me I'll be grateful. and from all class name AI with name this *** public void thinkAndAct() *** find all this - tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTestTargetClass(), FakeHelpers.getTestTargetRange()); and change with this + if (_fakePlayer.getKnownTypeInRadius(FakePlayer.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetPvPClass(), FakeHelpers.getTestTargetRange()); + } + + else if (_fakePlayer.getKnownTypeInRadius(Monster.class, FakeHelpers.getTestTargetRange()) != null) + { + tryTargetRandomCreatureByTypeInRadius(FakeHelpers.getTargetMobClass(), FakeHelpers.getTestTargetRange()); + }
ShinichiYao Posted October 10, 2018 Posted October 10, 2018 Yes it in FakePlayerAI.java And you can get enemies like this List<L2Character> targets = _fakePlayer.getKnownList().getKnownCharactersInRadius(radius).stream().filter(x -> (checkTargetThreat(x) && GeoData.getInstance().canSeeTarget(_fakePlayer, x))).collect(Collectors.toList()); 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now