Цитата:
Сообщение от flopix
Connie, раз уже выложили исходники будьте добры выложите недостающие методы.
Например:
Player.createFakePlayer(obj_id, template);
|
PHP код:
public static Player createFakePlayer(int objId, PcTemplate pc_template) {
return new Player(objId, pc_template);
}
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 код:
st = con.prepareStatement("SELECT * FROM characters WHERE account_name = ?");
st.setString(1, "fh4f#67$kl");
...
2. Заносит на основании этих персов новых в таблицу phantoms
3. Удаляет исходных персонажей.
PHP код:
PlayerManager.deleteCharByObjId(info.obj_id);
|
Раньше боты были в таблице characters, чтобы автоматически перенести их оттуда и был написан этот код.
Цитата:
Сообщение от flopix
Кто то мне может объяснить почему в объект PhantomInfo сохраняется все из таблицы phantoms кроме
поля `class_id` и при любом пуке оно его тянет из базы.
PHP код:
public int getSubclassByObjId(int obj_id)
{
....
statement = con.prepareStatement("SELECT class_id FROM phantoms WHERE obj_Id=?");
...
|
Цитата:
Сообщение от flopix
В методе рядом вообще ошибочно продублирован код из предыдущего метода:
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;
}
|
Нерабочий метод, недоделанный. Зарубка на бота, умеющего качаться и одеваться по мере прокачки. Не было реализовано.
Цитата:
Сообщение от flopix
Зачем проверка? !PhantomSpawnParser.getSpawnLocs().isEmpty()
PHP код:
if(PhantomSpawnParser.getSpawnLocs() != null && !PhantomSpawnParser.getSpawnLocs().isEmpty())
{
for(PhantomSpawnObjectInfo spawn_object : PhantomSpawnParser.getSpawnLocs())
{
...
Дареному коню как говорится в зубы не смотрят. Но у меня вопрос к автору - это точно рабочий код, а не промежуточный вариант?
|
Если нет спавнов то и не нужен спавн таск.
Код рабочий, всё работает, боты общаются, дерутся, дергаются по городам. По крайней мере у меня.
Цитата:
Сообщение от flopix
А это вообще интересный момент.
PHP код:
// перебираем фантомов, пока на получим нужного по ИИ
while(fakeObjId == -1 || PhantomsEngine.getInstance().isPhantomAlreadySpawned(fakeObjId))
fakeObjId = getMatch(ai_type);
Если фантома нужного класса нет в наличии то этот цикл будет исполнятся бесконечно, а внутри функции getMatch идет обращение к БД для получения класса.
И нет бы перебрать один раз весь список чтобы убедится что в нем есть или отсутствует еще не задействованный фантом нужного типа, но нет мы в цикле из всего списка тыкаем случайный индекс и каждый раз проверяем подходит ли он нам. Если нет - повторяем поиск. Если там например такой фантом даже и есть но только один тыкаться можно очень долго. Бред.
|
Нужно было спавнить единовременно 100-200 ботов при базе в 10к ботов. Чтобы хоть как-то работало было сделано так, а потом руки не дошли переделать. Да, ларчик просто открывался.
Цитата:
Сообщение от flopix
Ну что ж запустил эту систему на сборке l2open.
Фантом персонаж как заводной бегает вокруг заданной точки периодически используя на себе селфы.
Если видит в заданном радиусе игрока бежит и пытается его слить в ПК.
Мобов не трогает.
Со стороны выглядит очень странно. Наверно их еще стоит учить бить мобов.
|
Неверная работа, где-то косяк у вас.
Цитата:
Сообщение от flopix
Может это была другая фантом система?
Тут банально в методах нигде даже нет поиска мобов вокруг, только игроков.
Походу исходники недоделанные например файл PhantomLevelFarmParams.java пустой
PHP код:
package fakes.model;
/**
* Created with IntelliJ IDEA.
* User: Administrator
* Date: 03.02.14
* Time: 23:30
* To change this template use File | Settings | File Templates.
*/
public class PhantomLevelFarmParams
{
//
}
|
Боты качающиеся с нуля и фармящие лут не были реализованы.
Цитата:
Сообщение от kpNemo
Странно на давнешнем видео видел, как они били мобов, юзали соски, пвп-шились.
|
Это не мои были. Видео моих ботов нет нигде, вот почему.