Jump to content

Скрипт


Vitalyadark

Recommended Posts

Всем привет, может кто помочь переделать под 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;
 
@Override
public String[] getVoicedCommandList() {
return CMDS;
}
 
@Override
public 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 {
// botoff
if (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();
}
 
@Override
public 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();
}
}
}
 
@Override
public void onPlayerCreate(L2PcInstance arg0) {
}
 
@Override
public void onPlayerDie(L2PcInstance arg0, L2Character arg1) {
}
 
@Override
public 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 by Vitalyadark
Link to comment
Share on other sites

какие скрипты неставил, никакие неработают на сборе, scripts.cfg  еще нету.

Сборка автоматически подхватывает скрипты при запуске.

Другое дело что их нужно правильно написать под ядро l2code чтоб они работали.

Ваш скрипт для другой сборки и не полный так как для него нужна ещё реализация в самой сборке. 

cat-mini.png

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Администратор      Главный модератор     Модератор     Легенда форума     Клиент     Постоялец     Начинающий
×
×
  • Create New...