Вопрос по фантомам, handycapattack и т.д

L2Upgrade

Путник
Пользователь
Сообщения
4
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
4
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
lucera
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE list SYSTEM "spawn.dtd">
<list>
<!-- Aden -->
<spawn type="TOWN" count="10" gradeMin="D" gradeMax="S">
<territory>
<add x="148344" y="28568" zmin="-2267" zmax="-2167" comeback_distance="800" handicap_attack="100" handicap_defence="100"/>
<add x="148360" y="27608" zmin="-2267" zmax="-2167"/>
<add x="147736" y="27640" zmin="-2267" zmax="-2167"/>
<add x="147720" y="28536" zmin="-2267" zmax="-2167"/>
</territory>
</spawn>
Доброго времени суток, уважаемые форумчане,подскажите пожалуйста,что делаю не так, перенос фантомов на дино остров, прописываю
comeback_distance="800" handicap_attack="100" handicap_defence="100"/>
но фантом(bot) по-прежнему не атакует.
 

Вложения

  • изображение_2021-08-31_155746.webp
    изображение_2021-08-31_155746.webp
    149,2 КБ · Просмотры: 48
Разве в люцере фантомы бьют мобов? По-моему они там просто для видимости онлайна по городам побегать.
 
У меня кастомные боты,я это и пытаюсь сделать!!!
есть исходники от ботов,которые выкладывали здесь на форуме, я их перетаскиваю потихоньку в люцеровских обычных.
 
У меня кастомные боты,я это и пытаюсь сделать!!!
есть исходники от ботов,которые выкладывали здесь на форуме, я их перетаскиваю потихоньку в люцеровских обычных.
Разве без исходников это возможно?
 
может я неправильно вопрос задал, у меня есть исходники от таких же ботов только с хай фай клиента
Их всего лишь подправить в нужных местах и Люцеровские боты будут долбить мобов, на дино я уже их вывел.
 
То, что исходники есть, это хорошо, конечно, но я вижу лишь xml файлы на скриншотах и никаких ссылок на исходники. То, что нет никаких изменений, говорит о том, что только они и менялись, а этого недостаточно.
 
phantom.sql
SQL:
/*
Navicat MySQL Data Transfer

Source Server         : server
Source Server Version : 50153
Source Host           : localhost:3306
Source Database       : interlude

Target Server Type    : MYSQL
Target Server Version : 50153
File Encoding         : 65001

Date: 2015-07-22 19:37:57
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `phantoms`
-- ----------------------------
DROP TABLE IF EXISTS `phantoms`;
CREATE TABLE `phantoms` (
  `obj_Id` int(11) NOT NULL DEFAULT '0',
  `char_name` varchar(45) NOT NULL DEFAULT '',
  `sex` tinyint(1) DEFAULT NULL,
  `title` varchar(16) DEFAULT NULL,
  `x` mediumint(9) DEFAULT NULL,
  `y` mediumint(9) DEFAULT NULL,
  `z` mediumint(9) DEFAULT NULL,
  `clanid` int(11) DEFAULT NULL,
  `class_id` tinyint(3) DEFAULT NULL,
  `race` smallint(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`obj_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of phantoms
-- ----------------------------



PhantomEngine:
JavaScript:
package fakes;

import fakes.dao.PhantomDAO;
import fakes.handlers.admincommand.AdminPhantom;
import fakes.holders.PhantomColorHolder;
import fakes.holders.PhantomPhrasesHolder;
import fakes.holders.PhantomsHolder;
import fakes.objects.PhantomPartyObject;
import fakes.parsers.ClassAIParser;
import fakes.parsers.PartyAIParser;
import fakes.parsers.PhantomSpawnParser;
import fakes.parsers.reworked.*;
import fakes.tasks.PhantomTask;
import fakes.utils.PhantomInitUtil;
import l2p.gameserver.Config;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.commons.util.Rnd;
import l2p.gameserver.handler.admincommands.AdminCommandHandler;
import l2p.gameserver.model.GameObjectsStorage;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.party.Party;
import l2p.gameserver.model.pledge.Clan;
import l2p.gameserver.model.pledge.SubUnit;
import l2p.gameserver.model.pledge.UnitMember;
import l2p.gameserver.tables.ClanTable;
import l2p.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;

public class PhantomsEngine
{
    private static final Logger _log = LoggerFactory.getLogger(PhantomsEngine.class);

    // список_заспавненных
    private static ConcurrentLinkedQueue<Player> _fakes = new ConcurrentLinkedQueue<Player>();

    // список заспавненных для групп (чтобы не повторялись ИД при поиске по профам)
    private static ConcurrentLinkedQueue<Integer> _all_party_obj_id = new ConcurrentLinkedQueue<>();

    private static PhantomsEngine _instance;
    public static PhantomsEngine getInstance() {
        return _instance;
    }

    public static void init() {
        _instance = new PhantomsEngine();
        _instance.load();
    }

    public void load()
    {
        AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminPhantom());
        PhantomDAO.getInstance().loadClans(); // загружаем в память все ИД фантомовских кланов
        if(Config.ALLOW_FAKE_PLAYERS_PLUS)
        {
            PhantomAccessoryParser.getInstance().allParse();
            PhantomArmorParser.getInstance().allParse();
            PhantomJewelParser.getInstance().allParse();
            PhantomShieldParser.getInstance().allParse();
            PhantomUnderwearParser.getInstance().allParse();
            PhantomBuffParser.getInstance().allParse();

            PhantomColorHolder.load();
            PhantomPhrasesHolder.load();
            ClassAIParser.getInstance().allParse();
            PhantomSpawnParser.getInstance().allParse();

            PhantomsHolder.load();
            PartyAIParser.getInstance().allParse();

            if(PhantomsHolder.isFakesReady()) // если есть боты, то запускаем первую волну спавна
                ThreadPoolManager.getInstance().schedule(new PhantomTask(), Config.FAKE_PLAYERS_DELAY_BEFORE_FIRST_WAVE_SPAWN);

            restoreFakeParties(); // спаун партийных ботов
        }
    }

    public void restoreFakeParties()
    {
        Player phantom;
        int count_p = 0;
        try
        {
            _log.info("Party spawn: 0");
            for(PhantomPartyObject party : PartyAIParser.getInstance().getAllParties())
            {
                _log.info("Party spawn: 1");
                if(!party.isSpawnEnabled()) // если спавн выключен
                    continue;
                _log.info("Party spawn: 2");
                for(int i = 0; i < party.getObjIds().length; i++)
                {               _log.info("Party spawn: 2.1");
                    int obj_id = party.getObjIds();
                    if(obj_id == 0) // если пати не полная
                        continue;
                    _log.info("Party spawn: 2.2");
                    String ai_type = PhantomInitUtil.getAIbyClassId(party.getClassList());
                    _log.info("Party spawn: 2.3");
                    // Если фантом заспавнен, то деспавним его.
                    if(PhantomsEngine.getInstance().isPhantomAlreadySpawned(obj_id))
                    {
                        phantom = GameObjectsStorage.get(obj_id).getPlayer();
                        phantom.phantom_params.getPhantomAI().abortAITask();
                        despawnPhantom(phantom);
                        phantom.setOnlineStatus(false);
                        phantom.kick();
                    }
                    _log.info("Party spawn: 2.4");
                    // Создаем фантома заного
                    phantom = PhantomInitUtil.restoreFake(obj_id, ai_type);
                    _log.info("Party spawn: 2.5");
                    if(phantom == null)
                        continue;

                    Location loc = party.getAnySpawnLocation();
                    phantom.setXYZ(loc.x + (Rnd.chance(50) ? 1 : -1) * Rnd.get(Config.FAKE_SPAWN_COLLISION_X), loc.y + (Rnd.chance(50) ? 1 : -1) * Rnd.get(Config.FAKE_SPAWN_COLLISION_Y), loc.z);

                    _log.info("Party spawn: 2.6");
                    if(party.getPartyLeader() == null)
                    {
                        party.setPartyLeader(phantom);
                        party.getPartyLeader().setParty(new Party(party.getPartyLeader(), 1));
                    }
                    _log.info("Party spawn: 2.7");
                    phantom.phantom_params.setPhantomPartyAI(party); // добавляем фейку аи группы
                    party.addPartyMember(phantom);
                    phantom.setHandicapAttack(party.getHandicapAttack());
                    phantom.setHandicapDefence(party.getHandicapDefence());
                }
                _log.info("Party spawn: 3");
                // Ресторим сначало их клан
                Clan clan = ClanTable.getInstance().getClan(party.getClanId());
                _log.info("Party spawn: 4");
                // заключаем их всех в пати
                for(Player member : party.getAllMembers())
                {
                    if(member != party.getPartyLeader())
                        party.getPartyLeader().getParty().addPartyMember(member);

                    // даем всем клан
                    if(party.getClanId() != -1 && clan != null)
                    {
                        SubUnit subUnit = clan.getSubUnit(0);
                        if(subUnit == null)
                            return;

                        UnitMember u_member = new UnitMember(clan, member.getName(), member.getTitle(), member.getLevel(), member.getClassId().getId(), member.getObjectId(), 0, member.getPowerGrade(), member.getApprentice(), member.getSex(), Clan.SUBUNIT_NONE);
                        subUnit.addUnitMember(u_member);

                        member.setPledgeType(0);
                        member.setClan(clan);
                        member.setPowerGrade(6);
                        member.setLvlJoinedAcademy(0);
                        member.setApprentice(0);
                        PhantomDAO.getInstance().setClanToPhantom(member.getObjectId());

                        if(party.getClanId() != 0)
                            member.setClan(ClanTable.getInstance().getClan(party.getClanId()));
                    }

                    member.phantom_params.getPhantomAI().startAITask(500);
                }
                _log.info("Party spawn: 5");
                // делаем спаун пати
                party.spawnPartyBattle();
                party.changePartyState(1);
                party.startAITask(5000);
                count_p++;
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        _log.info("PhantomsEngine: spawned " + count_p + " parties.");
    }

    public boolean isPhantomAlreadySpawned(int obj_id) {
        return _fakes.contains(obj_id);
    }

    public void addPhantom(Player phantom) {
        _fakes.add(phantom);
    }

    public void despawnPhantom(Player phantom) {
        _fakes.remove(phantom);
    }

    public Player getPhantom(int objId)
    {
        for(Player p : _fakes)
            if(p.getObjectId() == objId)
                return p;
        return null;
    }

    public void despawnPhantom(int id)
    {
        Iterator iter = _fakes.iterator();
        while(iter.hasNext())
        {
            Player p = (Player)iter.next();
            if(p.getObjectId() == id)
            {
                iter.remove();
                break;
            }
        }
    }

    public ConcurrentLinkedQueue<Integer> getAllPartyObjID() {
        return _all_party_obj_id;
    }
}


тут чето править?
 
Последнее редактирование модератором:
Назад
Сверху Снизу