Vitalyadark Posted August 23, 2022 Report Share Posted August 23, 2022 (edited) Всем привет, может кто помочь переделать под l2code, гс error выдает? "[2022-08-23 18:04:51] [WARNING] Failed executing script: C:\sborka\game\data\scripts\handlers\Bot.java. See Bot.java.error.log for details." package calypso; import java.util.Collections;import java.util.StringTokenizer;import java.util.concurrent.ScheduledFuture; import javolution.util.FastList;import javolution.util.FastMap;import net.sf.l2j.gameserver.ThreadPoolManager;import net.sf.l2j.gameserver.ai.CtrlIntention;import net.sf.l2j.gameserver.cache.Static;import net.sf.l2j.gameserver.datatables.ItemTable;import net.sf.l2j.gameserver.datatables.SkillTable;import net.sf.l2j.gameserver.model.L2Character;import net.sf.l2j.gameserver.model.L2Object;import net.sf.l2j.gameserver.model.L2ShortCut;import net.sf.l2j.gameserver.model.L2Skill;import net.sf.l2j.gameserver.model.L2World;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;import net.sf.l2j.gameserver.util.Util;import scripts.commands.IVoicedCommandHandler;import scripts.commands.VoicedCommandHandler;import scripts.events.custom.CustomPlayerEventHandler;import scripts.events.custom.CustomPlayerEventList; /** * * @author CalypsoToolz * */ public class Bot implements IVoicedCommandHandler, CustomPlayerEventHandler { // слот панели и линия, счёт с нуля, т.е первая линия это 0, так же и слот// 0 0 - это F1// в слоте должен быть скилл, либо будет бить автоатакойprivate static final int PANEL_LINE = 0;private static final int PANEL_SLOT = 0; // интервал между использованием скилла с панели в мсprivate static final long PANEL_DELAY = 10; // только для премиумов?private static boolean ONLY_PREMIUM = false;// ID итема, который должен быть в сумке, 0 для отключенияprivate static int ITEM_REQUIRED = 0;// радиус для поиска таргетаprivate static final int TARGET_RADIUS = 800;// интервал между сменой таргета в мсprivate static final long NEXT_DELAY = 1000L; private static final FastList<Integer> ACTIVE_BOTS = new FastList<Integer>();private static final FastMap<Integer, ScheduledFuture<?>> ACTIVE_TASKS = new FastMap<Integer, ScheduledFuture<?>>();private static final String[] CMDS = new String[] { "bot", "boton", "botoff" };private static String ITEM_NAME; @Overridepublic String[] getVoicedCommandList() {return CMDS;} @Overridepublic boolean useVoicedCommand(String full, L2PcInstance player, String target) {try {StringTokenizer st = new StringTokenizer(full, " ");String cmd = st.nextToken();if (cmd.equals("bot")) {if (st.hasMoreTokens()) {String next = st.nextToken();if (next != null) {if (next.equals("on")) {useVoicedCommand("boton", player, "boton");} else {useVoicedCommand("botoff", player, "botoff");}return true;}}final NpcHtmlMessage msg = new NpcHtmlMessage(-1);StringBuilder sb = new StringBuilder();sb.append("<html><title>[bOT]</title><body><center><img src=\"logo.logo\" width=210 height=120>");sb.append("<table width=280 border=1>"); // статусsb.append("<tr>");sb.append("<td>Статус бота:</td>");if (ACTIVE_BOTS.contains(player.getObjectId())) {sb.append("<td>включен</td>");} else {sb.append("<td>выключен</td>");}sb.append("</tr>"); // премиум // командыsb.append("<tr>");sb.append("<td>Включить бота:</td>");sb.append("<td><a action=\"bypass -h vch_bot on\">.boton</a></td>");sb.append("</tr>");sb.append("<tr>");sb.append("<td>Выключить бота:</td>");sb.append("<td><a action=\"bypass -h vch_bot off\">.botoff</a></td>");sb.append("</tr>");sb.append("</table><br>"); // итемif (ITEM_REQUIRED > 0) {sb.append("<center>Необходимый предмет: " + ITEM_NAME + "<center>");}sb.append("</body></html>");msg.setHtml(sb.toString());player.sendPacket(msg);return true;} else if (cmd.equals("boton")) {if (!player.isPremium() && ONLY_PREMIUM) {player.sendMessage("Доступно только с Премиум аккаунтом!");return false;}if (ITEM_REQUIRED > 0 && player.getItemCount(ITEM_REQUIRED) <= 0) {player.sendMessage("У Вас должен быть " + ITEM_NAME);return false;}if (!ACTIVE_BOTS.contains(player.getObjectId())) {ACTIVE_BOTS.add(player.getObjectId());player.sendMessage("Бот активирован!");player.setAutoFarmNow(true);} else {player.sendMessage("Бот уже активирован!");return false;}ACTIVE_TASKS.put(player.getObjectId(),ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new FarmTask(player), 333L, 333L));} else {// botoffif (ACTIVE_BOTS.contains(player.getObjectId())) {ACTIVE_BOTS.remove(Integer.valueOf(player.getObjectId()));ACTIVE_TASKS.get(player.getObjectId()).cancel(false);player.enableAllSkills();player.sendMessage("Бот деактивирован!");player.setAutoFarmNow(false);} else {player.sendMessage("Бот не активирован!");}}} catch (Exception e) {e.printStackTrace();}return false;} private static class FarmTask implements Runnable { final L2PcInstance player;long lastNext = 0;long lastSkillUse = 0;final boolean isMage;long lastCheckItems = 0;// если вдруг завис моб или еще чтоlong lagged = 0; public FarmTask(L2PcInstance player) {this.player = player;isMage = player.isMageClass();} @Overridepublic void run() {boolean cancel = false;if (ITEM_REQUIRED > 0 && (lastCheckItems == 0 || System.currentTimeMillis() - lastCheckItems > 15000L)) {lastCheckItems = System.currentTimeMillis();if (player.getItemCount(ITEM_REQUIRED) <= 0) {player.sendMessage("У Вас должен быть " + ITEM_NAME);cancel = true;}}if (cancel || player.isOnline() != 1 || !ACTIVE_BOTS.contains(player.getObjectId())) {ACTIVE_TASKS.get(player.getObjectId()).cancel(false);ACTIVE_BOTS.remove(Integer.valueOf(player.getObjectId()));return;} if (player.isOutOfControl()) {// || player.isAllSkillsDisabled()) {return;} if (player.isDead()) {return;} if (player.isFakeDeath()) {player.stopFakeDeath(null);return;} // смена таргетаif (lastNext == 0 || System.currentTimeMillis() - lastNext >= NEXT_DELAY) {L2Object target = player.getTarget();if(target != null && target.isPlayer()) {player.setTarget(null);return;}// если уже есть цель и она жива, и геодата нам позволяет его видеть, то продолжаем битьif (target != null && (target.getCurrentHp() != target.getMaxHp() || target.getCurrentHp() == target.getMaxHp()) && !target.isAlikeDead()&& player.canSeeTarget(target)) {tryAttack();return;}// если всё плохо - меняем цель player.setTarget(null);lastNext = System.currentTimeMillis();nextTarget();} else {tryAttack();}} private void tryAttack() {if (player.getTarget() != null && !player.getTarget().isAlikeDead()) {if(player.getTarget().isPlayer()) {player.setTarget(null);player.abortCast();player.abortAttack();nextTarget();return;}// если бьём одного моба более этого времени - меняем таргетif(System.currentTimeMillis() - lagged > 60000) {lastNext = System.currentTimeMillis();nextTarget();return;} L2Object target = player.getTarget();if (lastSkillUse == 0 || System.currentTimeMillis() - lastSkillUse > PANEL_DELAY) {lastSkillUse = System.currentTimeMillis();L2ShortCut sc = player.getShortCut(PANEL_LINE, PANEL_SLOT);if (sc != null && sc.getType() == L2ShortCut.TYPE_SKILL) {L2Skill skill = SkillTable.getInstance().getInfo(sc.getId(), sc.getLevel());if (skill == null)return; if (skill.isPassive() || skill.isChance()) {return;} if(player.getSkillLevel(skill.getId()) != skill.getLevel()) {// подмена скиллаreturn;} if (skill.isToggle() && player.getFirstEffect(sc.getId()) != null) {player.stopSkillEffects(sc.getId());return;} if (skill.getCastRange() > 0&& !Util.checkIfInRange(skill.getCastRange(), player, target, true)) {player.setTarget(null);} try {if (skill.isBattleForceSkill() || skill.isSpellForceSkill()) {player.setGroundSkillLoc(null);if (skill.checkForceCondition(player, sc.getId())) {player.useMagicBot(skill, false, isMage);} else {player.sendPacket(Static.NOT_ENOUGH_FORCES);}} else if (skill.checkCondition(player, player, false)) {player.useMagicBot(skill, false, isMage); }} catch (Exception e) {// e.printStackTrace();}}}if (player.getTarget() != null && !isMage && !player.isCastingNow()) {player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player.getTarget());}} else {player.setTarget(null);lastNext = System.currentTimeMillis();nextTarget();}} private void nextTarget() {FastList<L2Object> targets = L2World.getInstance().getVisibleObjects(player, TARGET_RADIUS);Collections.shuffle(targets);for (L2Object o : targets) {if (!o.isMonster() || !o.isAutoAttackable(player) || o.isDead() || o.isAlikeDead() && !player.canSeeTarget(o)) {player.setTarget(null);continue;}if(o.isPlayer()) {player.setTarget(null);continue;}// player.setTarget(o);o.onAction(player);// player.sendUserPacket(new MyTargetSelected(o.getObjectId(), player.getLevel()// - o.getLevel())); if (!isMage && !player.isCastingNow()) {player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player.getTarget());}lagged = System.currentTimeMillis();break;// tryAttack();} }} @Overridepublic void onPlayerCreate(L2PcInstance arg0) {} @Overridepublic void onPlayerDie(L2PcInstance arg0, L2Character arg1) {} @Overridepublic void onPlayerLogin(L2PcInstance player) {if (ACTIVE_BOTS.contains(player.getObjectId())) {ACTIVE_BOTS.remove(Integer.valueOf(player.getObjectId()));}} public static void main(String[] args) {final Bot bot = new Bot();VoicedCommandHandler.getInstance().registerVoicedCommandHandler(bot);CustomPlayerEventList.register(bot);if (ITEM_REQUIRED > 0) {ITEM_NAME = ItemTable.getInstance().getItemName(ITEM_REQUIRED);}}} Edited August 23, 2022 by Vitalyadark Link to comment Share on other sites More sharing options...
Vitalyadark Posted August 24, 2022 Author Report Share Posted August 24, 2022 какие скрипты неставил, никакие неработают на сборе, scripts.cfg еще нету. Link to comment Share on other sites More sharing options...
ncs.SpawN Posted August 28, 2022 Report Share Posted August 28, 2022 какие скрипты неставил, никакие неработают на сборе, scripts.cfg еще нету.Сборка автоматически подхватывает скрипты при запуске.Другое дело что их нужно правильно написать под ядро l2code чтоб они работали.Ваш скрипт для другой сборки и не полный так как для него нужна ещё реализация в самой сборке. Link to comment Share on other sites More sharing options...
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