Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
Кто то мне может объяснить почему в объект PhantomInfo сохраняется все из таблицы phantoms кроме
поля `class_id` и при любом пуке оно его тянет из базы.
PHP код:
<?php
public int getSubclassByObjId(int obj_id)
{
....
statement = con.prepareStatement("SELECT class_id FROM phantoms WHERE obj_Id=?");
...
В методе рядом вообще ошибочно продублирован код из предыдущего метода:
PHP код:
<?php
public boolean isHasEquip(int obj_id)
{
int result = 0;
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT class_id FROM items WHERE char_obj_id=?");
statement.setInt(1, obj_id);
rset = statement.executeQuery();
if(rset.next())
result = rset.getInt(1);
}
catch(Exception e)
{
_log.error("CharNameTable.getSubclassByObjId(Int): " + e, e);
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
return false;
}
Зачем проверка?
!PhantomSpawnParser.getSpawnLocs().isEmpty()
PHP код:
<?php
if(PhantomSpawnParser.getSpawnLocs() != null && !PhantomSpawnParser.getSpawnLocs().isEmpty())
{
for(PhantomSpawnObjectInfo spawn_object : PhantomSpawnParser.getSpawnLocs())
{
...
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
03-29-2016, 11:27 PM
(Сообщение последний раз редактировалось: 03-30-2016, 01:42 AM flopix.)
А это вообще интересный момент.
PHP код:
<?php
// перебираем фантомов, пока на получим нужного по ИИ
while(fakeObjId == -1 || PhantomsEngine.getInstance().isPhantomAlreadySpawned(fakeObjId))
fakeObjId = getMatch(ai_type);
Если фантома нужного класса нет в наличии то этот цикл будет исполнятся бесконечно, а внутри функции getMatch идет обращение к БД для получения класса.
И нет бы перебрать один раз весь список чтобы убедится что в нем есть или отсутствует еще не задействованный фантом нужного типа, но нет мы в цикле из всего списка тыкаем случайный индекс и каждый раз проверяем подходит ли он нам. Если нет - повторяем поиск. Если там например такой фантом даже и есть но только один тыкаться можно очень долго. Бред.
Сообщений: 105
Тем: 22
Зарегистрирован: Mar 2010
Репутация:
279
Странно на давнешнем видео видел, как они били мобов, юзали соски, пвп-шились.
Сообщений: 287
Тем: 24
Зарегистрирован: Feb 2010
Репутация:
919
flopix Написал:Connie, раз уже выложили исходники будьте добры выложите недостающие методы.
Например:
Player.createFakePlayer(obj_id, template);
PHP код:
<?php
public static Player createFakePlayer(int objId, PcTemplate pc_template) {
return new Player(objId, pc_template);
}
PHP код:
<?php
public Player(final int objectId, final PcTemplate pc_template, final String accountName)
{
super(objectId);
setPcTemplate(pc_template);
_login = accountName;
_nameColor = 0xFFFFFF;
_titlecolor = 0xFFFF77;
_baseClass = getPcClass().class_id;
base_class = pc_template.pc_class;
base_race = pc_template.pc_template_type.race;
_cubics = new CopyOnWriteArrayList<EffectCubic>();
phantom_params = new PhantomParams(this);
playerRating = new PlayerRating(objectId);
}
flopix Написал:Проясните логику работы.
Система сама не создает фейк игроков?
Нужно в таблицу phantoms натыкать заранее заготовленных существующих в таблице characters игроков?
Зачем тогда дублируется имя в этой таблице?
1. Тот код, что тут выложен - не создает новых ботов.
2. Да, нужно.
3. Они мне мешали в таблице characters, к тому же, информации об игроках хранится много больше, чем о ботах, и чтобы не засорять БД ненужной информацией была создана таблица phantoms. (БД меньше весит от этого, быстрее работает.)
flopix Написал:Что такое тогда такое `obj_id` в этой таблице?
Это obj_id для создания Player с этим ID. Без этого никак.
flopix Написал:То есть этот obj_id никак не связан с аналогичным полем в таблице characters?
И тогда метод createFakePlayer каждый раз создает нового персонажа не из таблицы characters, а на основании переданного L2PlayerTemplate template.
Связан. Это ID для создаваемого объекта Player. И нельзя делать так, чтобы были коллизии с игроками, поэтому лично я использую цифры от 5ккк для ИД ботов. Проще говоря, нельзя, чтобы был один и тот же ИД у бота и игрока.
Да, верно, каждый раз создается новый персонаж на основании темплейта (так и не нашлось времени на создание бота, который бы качался, одевался и т.д., а раз не нужно сохранять его итемы и т.д., то это каждый раз создается заного).
flopix Написал:Просто страницей выше я не так понял и пошел по ложному пути.
В коде этих фантомов есть команда admin_phantoms_truncate
Она делает следующее:
1. Выгребает всех персонажей у которых логин "fh4f#67$kl"
PHP код:
<?php
st = con.prepareStatement("SELECT * FROM characters WHERE account_name = ?");
st.setString(1, "fh4f#67$kl");
...
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
[QUOTE='Connie;412735']Неверная работа, где-то косяк у вас.
Цитата:
[QUOTE]Сообщение от flopix Посмотреть сообщение
Ну что ж запустил эту систему на сборке l2open.
Фантом персонаж как заводной бегает вокруг заданной точки периодически используя на себе селфы.
Если видит в заданном радиусе игрока бежит и пытается его слить в ПК.
Мобов не трогает.
Со стороны выглядит очень странно. Наверно их еще стоит учить бить мобов.[/QUOTE]
да вот в методе поиска цели
getAndSetLockedTarget сделано так:
PHP код:
<?php
targets = phantom.getAroundPlayers(radius, 600);
покажите мне где тут поиск мобов вокруг?