Jump to content
  • 0

AutoFarm L2JMEGA


WesleyXP

Question

Boa Tarde, Gostaria que alguém me ajudasse nessa questão eu adicionei a DIFF do "AutoFarm" adaptado para "l2jmega"

postada pelo @tensador27 nesse

-> TÓPICO <- 

e adicionei essas linhas no  java

VoicedCommandHandler.java

conforme ele explicou la no tópico, porem ao entrar no Gamer e digitar o comando .autofarm apresenta esse erro logo abaixo... alguém saberia me dizer oque pode ser? 

 

 

 

 

image.png.c7fc92a81615f1949e2c1dc7c72ae499.png

Motivação é a arte de fazer as pessoas fazerem o que você quer que elas façam porque elas o querem fazer.

Link to comment
Share on other sites

22 answers to this question

Recommended Posts


  • 0
En 28/10/2023 a las 17:00, tensador27 dijo:

  acabo de volver a probar desde el source del github  https://github.com/Sarada-L2/L2jMega     

autofarmtest.rar 8.7 kB · 8 downloads

 

Yo estoy intentando adaptarlo para l2jmobius, pero me estoy quedando con estos errores, al que no consigo resolver.

 

03e45b73beaeaa869417cb4a56c6f611.png

 

El codigo lo tengo asi:

 

package Base.AutoFarm;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.ai.CtrlEvent;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.handler.IItemHandler;
import org.l2jmobius.gameserver.handler.ItemHandler;
import org.l2jmobius.gameserver.handler.voicedcommandhandlers.VoicedAutoFarm;
import org.l2jmobius.gameserver.model.ShortCut;
import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.WorldRegion;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.actor.instance.Chest;
import org.l2jmobius.gameserver.model.actor.instance.Monster;
import org.l2jmobius.gameserver.model.actor.instance.Pet;
import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.SkillType;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage.SMPOS;
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;

public class AutofarmPlayerRoutine
{
	private final Player player;
	private ScheduledFuture<?> _task;
	private Creature committedTarget = null;
	
	public AutofarmPlayerRoutine(Player player)
	{
		this.player = player;
	}
	
	public void start()
	{
		if (_task == null)
		{
			_task = ThreadPool.scheduleAtFixedRate(() -> executeRoutine(), 450, 450);
			
			player.sendPacket(new ExShowScreenMessage("Auto Farming Actived...", 5 * 1000, SMPOS.TOP_CENTER, false));
			player.sendPacket(new SystemMessage(SystemMessageId.AUTO_FARM_ACTIVATED));
			
		}
	}
	
	public void stop()
	{
		if (_task != null)
		{
			_task.cancel(false);
			_task = null;
			
			player.sendPacket(new ExShowScreenMessage("Auto Farming Deactivated...", 5 * 1000, SMPOS.TOP_CENTER, false));
			player.sendPacket(new SystemMessage(SystemMessageId.AUTO_FARM_DESACTIVATED));
			
		}
	}
	
	public void executeRoutine()
	{
		if (player.isNoBuffProtected() && (player.getAllEffects().length <= 8))
		{
			player.sendMessage("You don't have buffs to use autofarm.");
			player.broadcastUserInfo();
			stop();
			player.setAutoFarm(false);
			VoicedAutoFarm.showAutoFarm(player);
			return;
		}
		
		calculatePotions();
		checkSpoil();
		targetEligibleCreature();
		if (player.isMageClass())
		{
			useAppropriateSpell();
		}
		else if (shotcutsContainAttack())
		{
			attack();
		}
		else
		{
			useAppropriateSpell();
		}
		checkSpoil();
		useAppropriateSpell();
	}
	
	private void attack()
	{
		Boolean shortcutsContainAttack = shotcutsContainAttack();
		
		if (shortcutsContainAttack)
		{
			physicalAttack();
		}
	}
	
	private void useAppropriateSpell()
	{
		Skill chanceSkill = nextAvailableSkill(getChanceSpells(), AutofarmSpellType.Chance);
		
		if (chanceSkill != null)
		{
			useMagicSkill(chanceSkill, false);
			return;
		}
		
		Skill lowLifeSkill = nextAvailableSkill(getLowLifeSpells(), AutofarmSpellType.LowLife);
		
		if (lowLifeSkill != null)
		{
			useMagicSkill(lowLifeSkill, true);
			return;
		}
		
		Skill attackSkill = nextAvailableSkill(getAttackSpells(), AutofarmSpellType.Attack);
		
		if (attackSkill != null)
		{
			useMagicSkill(attackSkill, false);
			return;
		}
	}
	
	public Skill nextAvailableSkill(List<Integer> skillIds, AutofarmSpellType spellType)
	{
		for (Integer skillId : skillIds)
		{
			Skill skill = player.getKnownSkill(skillId);
			
			if (skill == null)
			{
				continue;
			}
			
			if ((skill.getSkillType() == SkillType.SIGNET) || (skill.getSkillType() == SkillType.SIGNET_CASTTIME))
			{
				continue;
			}
			
			if (!player.checkDoCastConditions(skill))
			{
				continue;
			}
			
			if (isSpoil(skillId))
			{
				if (monsterIsAlreadySpoiled())
				{
					continue;
				}
				return skill;
			}
			
			if ((spellType == AutofarmSpellType.Chance) && (getMonsterTarget() != null))
			{
				if (getMonsterTarget().getFirstEffect(skillId) == null)
				{
					return skill;
				}
				continue;
			}
			
			if ((spellType == AutofarmSpellType.LowLife) && (getHpPercentage() > player.getHealPercent()))
			{
				break;
			}
			
			return skill;
		}
		
		return null;
	}
	
	private void checkSpoil()
	{
		if (canBeSweepedByMe() && getMonsterTarget().isDead())
		{
			Skill sweeper = player.getKnownSkill(42);
			if (sweeper == null)
			{
				return;
			}
			
			useMagicSkill(sweeper, false);
		}
	}
	
	private Double getHpPercentage()
	{
		return (player.getCurrentHp() * 100.0f) / player.getMaxHp();
	}
	
	private Double percentageMpIsLessThan()
	{
		return (player.getCurrentMp() * 100.0f) / player.getMaxMp();
	}
	
	private Double percentageHpIsLessThan()
	{
		return (player.getCurrentHp() * 100.0f) / player.getMaxHp();
	}
	
	private List<Integer> getAttackSpells()
	{
		return getSpellsInSlots(AutofarmConstants.attackSlots);
	}
	
	private List<Integer> getSpellsInSlots(List<Integer> attackSlots)
	{
		return Arrays.stream(player.getAllShortCuts()).filter(shortcut -> (shortcut.getPage() == player.getPage()) && (shortcut.getType() == ShortCut.TYPE_SKILL) && attackSlots.contains(shortcut.getSlot())).map(ShortCut::getId).collect(Collectors.toList());
	}
	
	private List<Integer> getChanceSpells()
	{
		return getSpellsInSlots(AutofarmConstants.chanceSlots);
	}
	
	private List<Integer> getLowLifeSpells()
	{
		return getSpellsInSlots(AutofarmConstants.lowLifeSlots);
	}
	
	private boolean shotcutsContainAttack()
	{
		return Arrays.stream(player.getAllShortCuts()).anyMatch(shortcut -> (shortcut.getPage() == player.getPage()) && (shortcut.getType() == ShortCut.TYPE_ACTION) && ((shortcut.getId() == 2) || (player.isSummonAttack() && (shortcut.getId() == 22))));
	}
	
	private boolean monsterIsAlreadySpoiled()
	{
		return (getMonsterTarget() != null) && (getMonsterTarget().getSpoiledBy() != 0);
	}
	
	private static boolean isSpoil(Integer skillId)
	{
		return (skillId == 254) || (skillId == 302);
	}
	
	private boolean canBeSweepedByMe()
	{
		return (getMonsterTarget() != null) && getMonsterTarget().isDead() && (getMonsterTarget().getSpoiledBy() == player.getObjectId());
	}
	
	private void castSpellWithAppropriateTarget(Skill skill, Boolean forceOnSelf)
	{
		if (forceOnSelf)
		{
			WorldObject oldTarget = player.getTarget();
			player.setTarget(player);
			player.useMagic(skill, false, false);
			player.setTarget(oldTarget);
			return;
		}
		
		player.useMagic(skill, false, false);
	}
	
	private void physicalAttack()
	{
		if (!(player.getTarget() instanceof Monster))
		{
			return;
		}
		
		Monster target = (Monster) player.getTarget();
		
		if (!player.isMageClass())
		{
			if (target.isAutoAttackable(player) && GeoEngine.getInstance().canSeeTarget(player, target))
			{
				if (GeoEngine.getInstance().canSeeTarget(player, target))
				{
					player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
					player.onActionRequest();
					
					if (player.isSummonAttack() && (player.getPet() != null))
					{
						// Siege Golem's
						if (((player.getPet().getNpcId() >= 14702) && (player.getPet().getNpcId() <= 14798)) || ((player.getPet().getNpcId() >= 14839) && (player.getPet().getNpcId() <= 14869)))
						{
							return;
						}
						
						Summon activeSummon = player.getPet();
						activeSummon.setTarget(target);
						activeSummon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
						
						int[] summonAttackSkills =
						{
							4261,
							4068,
							4137,
							4260,
							4708,
							4709,
							4710,
							4712,
							5135,
							5138,
							5141,
							5442,
							5444,
							6095,
							6096,
							6041,
							6044
						};
						if (Rnd.get(100) < player.getSummonSkillPercent())
						{
							for (int skillId : summonAttackSkills)
							{
								useMagicSkillBySummon(skillId, target);
							}
						}
					}
				}
			}
			else
			{
				if (target.isAutoAttackable(player) && GeoEngine.getInstance().canSeeTarget(player, target))
				{
					if (GeoEngine.getInstance().canSeeTarget(player, target))
					{
						player.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, target);
					}
				}
			}
		}
		else
		{
			if (player.isSummonAttack() && (player.getPet() != null))
			{
				// Siege Golem's
				if (((player.getPet().getNpcId() >= 14702) && (player.getPet().getNpcId() <= 14798)) || ((player.getPet().getNpcId() >= 14839) && (player.getPet().getNpcId() <= 14869)))
				{
					return;
				}
				
				Summon activeSummon = player.getPet();
				activeSummon.setTarget(target);
				activeSummon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
				
				int[] summonAttackSkills =
				{
					4261,
					4068,
					4137,
					4260,
					4708,
					4709,
					4710,
					4712,
					5135,
					5138,
					5141,
					5442,
					5444,
					6095,
					6096,
					6041,
					6044
				};
				if (Rnd.get(100) < player.getSummonSkillPercent())
				{
					for (int skillId : summonAttackSkills)
					{
						useMagicSkillBySummon(skillId, target);
					}
				}
			}
		}
	}
	
	public void targetEligibleCreature()
	{
		if (player.getTarget() == null)
		{
			selectNewTarget();
			return;
		}
		
		if (committedTarget != null)
		{
			if (!committedTarget.isDead() && GeoEngine.getInstance().canSeeTarget(player, committedTarget))
			{
				attack();
				return;
			}
			else if (!GeoEngine.getInstance().canSeeTarget(player, committedTarget))
			{
				committedTarget = null;
				selectNewTarget();
				return;
			}
			player.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, committedTarget);
			committedTarget = null;
			player.setTarget(null);
		}
		
		if (committedTarget instanceof Summon)
		{
			return;
		}
		
		List<Monster> targets = getKnownMonstersInRadius(player, player.getRadius(), creature -> GeoEngine.getInstance().canSeeTarget(player.getX(), player.getY(), player.getZ(), creature.getX(), creature.getY(), creature.getZ()) && !player.ignoredMonsterContain(creature.getNpcId()) && !creature.isMinion() && !creature.isRaid() && !creature.isDead() && !(creature instanceof Chest) && !(player.isAntiKsProtected() && (creature.getTarget() != null) && (creature.getTarget() != player) && (creature.getTarget() != player.getPet())));
		
		if (targets.isEmpty())
		{
			return;
		}
		
		Monster closestTarget = targets.stream().min((o1, o2) -> Integer.compare((int) Math.sqrt(player.getDistanceSq(o1)), (int) Math.sqrt(player.getDistanceSq(o2)))).get();
		
		committedTarget = closestTarget;
		player.setTarget(closestTarget);
	}
	
	private void selectNewTarget()
	{
		List<Monster> targets = getKnownMonstersInRadius(player, player.getRadius(), creature -> GeoEngine.getInstance().canSeeTarget(player.getX(), player.getY(), player.getZ(), creature.getX(), creature.getY(), creature.getZ()) && !player.ignoredMonsterContain(creature.getNpcId()) && !creature.isMinion() && !creature.isRaid() && !creature.isDead() && !(creature instanceof Chest) && !(player.isAntiKsProtected() && (creature.getTarget() != null) && (creature.getTarget() != player) && (creature.getTarget() != player.getPet())));
		
		if (targets.isEmpty())
		{
			return;
		}
		
		Monster closestTarget = targets.stream().min((o1, o2) -> Integer.compare((int) Math.sqrt(player.getDistanceSq(o1)), (int) Math.sqrt(player.getDistanceSq(o2)))).get();
		
		committedTarget = closestTarget;
		player.setTarget(closestTarget);
	}
	
	public final static List<Monster> getKnownMonstersInRadius(Player player, int radius, Function<Monster, Boolean> condition)
	{
		final WorldRegion region = player.getWorldRegion();
		if (region == null)
		{
			return Collections.emptyList();
		}
		
		final List<Monster> result = new ArrayList<>();
		
		for (WorldRegion reg : region.getSurroundingRegions())
		{
			for (WorldObject obj : reg.getVisibleObjects())
			{
				if (!(obj instanceof Monster) || !MathUtil.checkIfInRange(radius, player, obj, true) || !condition.apply((Monster) obj))
				{
					continue;
				}
				
				result.add((Monster) obj);
			}
		}
		
		return result;
	}
	
	public Monster getMonsterTarget()
	{
		if (!(player.getTarget() instanceof Monster))
		{
			return null;
		}
		
		return (Monster) player.getTarget();
	}
	
	private void useMagicSkill(Skill skill, Boolean forceOnSelf)
	{
		if ((skill.getSkillType() == SkillType.RECALL) && !Config.ALT_GAME_KARMA_PLAYER_CAN_TELEPORT && (player.getKarma() > 0))
		{
			player.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}
		
		if (skill.isToggle() && player.isMounted())
		{
			player.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}
		
		if (player.isOutOfControl())
		{
			player.sendPacket(ActionFailed.STATIC_PACKET);
			return;
		}
		
		if (player.isAttackingNow())
		{
			// player.getAI().setNextAction(new NextAction(CtrlEvent.EVT_READY_TO_ACT, CtrlIntention.AI_INTENTION_CAST, () -> castSpellWithAppropriateTarget(skill, forceOnSelf)));
			player.getAI().notifyEvent(CtrlEvent.EVT_READY_TO_ACT, CtrlIntention.AI_INTENTION_CAST);
		}
		else
		{
			castSpellWithAppropriateTarget(skill, forceOnSelf);
		}
	}
	
	private boolean useMagicSkillBySummon(int skillId, WorldObject target)
	{
		// No owner, or owner in shop mode.
		if ((player == null) || player.isInStoreMode())
		{
			return false;
		}
		
		final Summon activeSummon = player.getPet();
		if (activeSummon == null)
		{
			return false;
		}
		
		// Pet which is 20 levels higher than owner.
		if ((activeSummon instanceof Pet) && ((activeSummon.getLevel() - player.getLevel()) > 20))
		{
			player.sendPacket(SystemMessageId.YOUR_PET_IS_TOO_HIGH_LEVEL_TO_CONTROL);
			return false;
		}
		
		// Out of control pet.
		if (activeSummon.isOutOfControl())
		{
			player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
			return false;
		}
		
		// Verify if the launched skill is mastered by the summon.
		final Skill skill = activeSummon.getKnownSkill(skillId);
		if (skill == null)
		{
			return false;
		}
		
		// Can't launch offensive skills on owner.
		if (skill.isOffensive() && (player == target))
		{
			return false;
		}
		
		activeSummon.setTarget(target);
		return activeSummon.useMagic(skill, false, false);
	}
	
	private void calculatePotions()
	{
		if (percentageHpIsLessThan() < player.getHpPotionPercentage())
		{
			forceUseItem(1539);
		}
		
		if (percentageMpIsLessThan() < player.getMpPotionPercentage())
		{
			forceUseItem(728);
		}
	}
	
	private void forceUseItem(int itemId)
	{
		final Item potion = player.getInventory().getItemByItemId(itemId);
		if (potion == null)
		{
			return;
		}
		
		final IItemHandler handler = ItemHandler.getInstance().getItemHandler(potion.getItemId());
		if (handler != null)
		{
			handler.useItem(player, potion);
		}
	}
}

 

Agradecería sus ayuda.

 

Saludos

waking the demons

Link to comment
Share on other sites

  • 0
Em 28/10/2023 at 17:00, tensador27 disse:

  acabo de volver a probar desde el source del github  https://github.com/Sarada-L2/L2jMega     

autofarmtest.rar 8.7 kB · 10 downloads

Muchas gracias hermano, lo adapté de este en github, si quiero poner título [Auto Farm] cuando esté activo, ¿cómo lo hago? o sino aura roja

Edited by WesleyXP
Corrigindo..

Motivação é a arte de fazer as pessoas fazerem o que você quer que elas façam porque elas o querem fazer.

Link to comment
Share on other sites

  • 0
1 hora atrás, WesleyXP disse:

Muchas gracias hermano, lo adapté de este en github, si quiero poner título [Auto Farm] cuando esté activo, ¿cómo lo hago? o sino aura roja

 

codigo https://pastebin.com/tCS9zk5y

 

es L2_jMega.ini AutoFarmTitle = [Auto Farm]

 

 

imagen.png.f98e703cfeb4e8921768ece12d148235.png

Edited by tensador27
  • Like 1

l2j java

Link to comment
Share on other sites

  • 0
4 horas atrás, Reanimation disse:

Me podrían ayudar con los errores que estoy teniendo yo?

 

codigo https://pastebin.com/sR7EAFLs

si quieres usarlo en interface tendras que editar tu .xdat y .u si quieres que tenga titulo y aura roja usa el diff de arriba lo probe en la version free de mobius

 

 

image.png.174db7ade8cf649668f4c11d25034821.png

l2j java

Link to comment
Share on other sites

  • 0
hace 2 horas, tensador27 dijo:

codigo https://pastebin.com/sR7EAFLs

si quieres usarlo en interface tendras que editar tu .xdat y .u si quieres que tenga titulo y aura roja usa el diff de arriba lo probe en la version free de mobius

image.png.174db7ade8cf649668f4c11d25034821.png

Gracias, por tu trabajo, ahora lo agregue, manualmente y me quedo con este error:

 

autofarmimg.jpg.2cf1420f380e4f90afa5db74d8611e38.jpg

 

Yo cambie el useMagic de public void useMagic(Skill skill, boolean forceUse, boolean dontMove) a public boolean useMagic(Skill skill, boolean forceUse, boolean dontMove), pero de esa manera tube que cambiar los return; ya sea a return false; o return dontMove; ya que al final si o si me pedia este dontMove, ahi logra compilar normal, reemplaze las libs en el servidor, meti la html, la SQL todo bien hasta ahi. pero cuando estoy en el sv y uso el comando .autofarm y se abre el panel, sucede esto:

882b67fddb74f048102c29cc8e23a4b4.gif

 

aun estoy viendo si algo yo agregue mal.

waking the demons

Link to comment
Share on other sites

  • 0

Haciendo pruebas, agregandolo denuevo todo de 0 manualmente..

Descubri que cualquier comando, deja de funcionar cuando agrego el mod del autofarm.

 

Ejemplo:

tengo el comando .menu 
63ea7d04f01adac3c5aca58139f64b87.png

si yo tengo agregado el mod del autofarm, este comando de .menu funciona, osea abre el panel, pero si quiero usar cualquier accion ya sea Party Refuse o Buss Refusal sea cual sea, no funciona. Si quito el mod del autofarm, vuelve a funcionar todo con normalidad, asi como se ve en la imagen

waking the demons

Link to comment
Share on other sites

  • 0
22 horas atrás, tensador27 disse:

codigo https://pastebin.com/tCS9zk5y

es L2_jMega.ini AutoFarmTitle = [Auto Farm]

imagen.png.f98e703cfeb4e8921768ece12d148235.png

Muchas gracias amigo, funciono perfecto.

Motivação é a arte de fazer as pessoas fazerem o que você quer que elas façam porque elas o querem fazer.

Link to comment
Share on other sites

  • 0
Em 28/10/2023 at 17:00, tensador27 disse:

  acabo de volver a probar desde el source del github  https://github.com/Sarada-L2/L2jMega     

autofarmtest.rar 8.7 kB · 13 downloads

Amigo, ¿no tienes un mod dressme para esta revisión en github? porque quiero usar skins de armas y no encuentro ningún mod 😞

Motivação é a arte de fazer as pessoas fazerem o que você quer que elas façam porque elas o querem fazer.

Link to comment
Share on other sites

  • 0

Boa tarde gente... fiz uma modificação para deixar o title com opção de ativar ou desativar porém como estou aprendendo ainda a mexer não sei se está correto... para mim funcionou 100% porém quero ter certeza de que fiz da forma correta para não dar nenhum problema futuro.. obrigado desde já 🙏

Codigo:
 

Citar
============================================================================================
java/com/l2jmega/Config.java
============================================================================================


+	public static boolean ENABLED_AUTO_FARM_TITLE;


--------------


+		ENABLED_AUTO_FARM_TITLE = Boolean.parseBoolean(commands.getProperty("EnableTitleAutoFarm", "false"));

 
============================================================================================
java/com/l2jmega/gameserver/network/serverpackets/CharInfo.java
============================================================================================

@@ -232,6 +232,8 @@
 			writeS("");
 		else if(AioManager.getInstance().hasAioPrivileges(this._activeChar.getObjectId()) || _activeChar.isAio())
 			writeS(Config.AIO_TITLE);

-       else if(_activeChar.isAutoFarm())
-           writeS(Config.AUTO_FARM_TITLE);
-
+		else if (Config.ENABLED_AUTO_FARM_TITLE & _activeChar.isAutoFarm())
+			writeS(Config.AUTO_FARM_TITLE);

 		else
 			writeS(_activeChar.getTitle());
 		
 		
============================================================================================
java/com/l2jmega/gameserver/network/serverpackets/UserInfo.java
============================================================================================
@@ -191,6 +191,8 @@
 			writeS("Invisible");
 		else if(AioManager.getInstance().hasAioPrivileges(this._activeChar.getObjectId()) || _activeChar.isAio())
 			writeS(Config.AIO_TITLE);

-       else if(_activeChar.isAutoFarm())
-           writeS(Config.AUTO_FARM_TITLE);
-
+		else if (Config.ENABLED_AUTO_FARM_TITLE & _activeChar.isAutoFarm())
+			writeS(Config.AUTO_FARM_TITLE);

 		else
 			writeS((_activeChar.getPolyType() != PolyType.DEFAULT) ? "Morphed" : _activeChar.getTitle());

============================================================================================
game/config/custom/L2_jMega.ini
============================================================================================


+
+# Titulo para o modo auto farm
+# Nao ultrapassar 16 characteres
+EnableTitleAutoFarm = True
AutoFarmTitle = [Auto Farm]

 

 

Link to comment
Share on other sites

  • 0

Galera eu não entendo quase nada de l2, tenho noções super básicas,  mas estou em busca de conhecimento!! Alguém poderia me ENSINAR DO ZERO como que põe o autofarm ? Tô querendo por aquele painel que tem autofarm, skins, Goldberg automático!! Mais não faço ideia de como fazer rsrs se alguém poder me ajudar agradeço!!

ADM-VanillaSky

Link to comment
Share on other sites

  • 0
Em 28/10/2023 at 17:00, tensador27 disse:

  acabo de volver a probar desde el source del github  https://github.com/Sarada-L2/L2jMega     

autofarmtest.rar 8.7 kB · 78 downloads

Amigo, ¿podrías volver a subir los archivos html de auto farm? El enlace de la publicación no está conectado 😞

Motivação é a arte de fazer as pessoas fazerem o que você quer que elas façam porque elas o querem fazer.

Link to comment
Share on other sites

  • 0
3 horas atrás, AioxSyc disse:

Alguém teria uma rev com esse autofarm já adicionado ? 

Olá amigo! Tudo na santa PAZ?

Alguns comentários acima temos esse link disponível: https://github.com/Sarada-L2/L2jMega acredito que nele já esteja esse sistema incrementado. Eu não testei, não conferi, apenas segui a ideia do comentário.

GOOD LUCKY!!!

  • I love it 1

O que a mente do homem pode conceber e acreditar, pode ser alcançada.

 

 

Link to comment
Share on other sites

  • 0

Eu me lembro de ter adicionado o Auto GB e o Auto Hunt para um Jovem na MegaPack.
Além disso, fiz algumas modificações no Auto Hunt para eliminar a necessidade da parte do uso do banco de dados e também para que o personagem pudesse identificar melhor as paredes.
No final, o resultado ficou bem satisfatório.
Taí pra quem quiser..

https://www.mediafire.com/file/yl620nq5pfknfcs/L2jMega++.rar/file

Edited by Henrique S
  • I love it 1
Link to comment
Share on other sites

  • 0
Em 20/08/2024 at 15:41, Henrique S disse:

Eu me lembro de ter adicionado o Auto GB e o Auto Hunt para um Jovem na MegaPack.
Além disso, fiz algumas modificações no Auto Hunt para eliminar a necessidade da parte do uso do banco de dados e também para que o personagem pudesse identificar melhor as paredes.
No final, o resultado ficou bem satisfatório.
Taí pra quem quiser..

https://www.mediafire.com/file/yl620nq5pfknfcs/L2jMega++.rar/file

Teria source amigo pra disponibilizar por favor ? 

  • Confused 1

ADM-VanillaSky

Link to comment
Share on other sites

  • 0
Em 17/08/2024 at 22:21, Leonardo Alves ツ disse:

Olá amigo! Tudo na santa PAZ?

Alguns comentários acima temos esse link disponível: https://github.com/Sarada-L2/L2jMega acredito que nele já esteja esse sistema incrementado. Eu não testei, não conferi, apenas segui a ideia do comentário.

GOOD LUCKY!!!

Qual versão amigo ? H5?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.