Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Pointer*Rage Написал:Делайте новый класс ботов наследуясь от класса игрока, я уже писал об этом.
Ищите нужные события (которые Вы описали) и изменяете там переменную рейтов для конкретного игрока/бота. Если нужно выполнение с задержкой, то пилите опять же задачу и запускайте ее с помощью трид пула.
А можно для идиотов разжевать про "и изменяете там переменную рейтов для конкретного игрока/бота", а то сижу, вроде прочитал и всё понятно, а начинаю читать частями пост, так становится ещё более не понятнее...
Это получится что то типа
если { класс игрок, то рейт такой то}
если { класс фейк, то рейт такой то}
Или я что то опять не правильно понимаю?
Но опять же вопрос, как сделать плавающей цифру рейта? Я просто логику понять не моуг этих действий. :-(
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
xolseg Написал:А можно для идиотов разжевать про "и изменяете там переменную рейтов для конкретного игрока/бота"
Если такой переменной нет в классе игрока (я же не знаю Ваших исходников), то ее придется создать. Логика ее работы в том, что она учитывается в расчетах дропа/адены/опыта/сп вместо глобальных рейтов. Легче всего такие места найти с помощью вывода иеархии вызовов переменных глобальных рейтов сервера или же просто поискать, где в классе игрока обрабатывается начисление (причем формула расчета) опыта/сп и всего остального.
xolseg Написал:Это получится что то типа
если { класс игрок, то рейт такой то}
если { класс фейк, то рейт такой то}
Или я что то опять не правильно понимаю?
Но опять же вопрос, как сделать плавающей цифру рейта? Я просто логику понять не моуг этих действий. :-( Ищем нужные методы, где нужно изменять значение рейтов (в прошлом сообщении описывал), делаем нечто вроде этого:
Код: if(this instanceof Player) {
if(killed.getSpawn().getRespawnTime() >= 120000) currentRateXp = 2;
else if(killed.getSpawn().getRespawnTime() > 30000) currentRateXp = 1;
else if(killed.getSpawn().getRespawnTime() <= 30000) currentRateXp = 0.5f;
else currentRateXp = Config.SERVER_RATE_XP;
} else if(this instanceof FakePlayer) {
....
}
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Pointer*Rage Написал:Если такой переменной нет в классе игрока (я же не знаю Ваших исходников), то ее придется создать. Логика ее работы в том, что она учитывается в расчетах дропа/адены/опыта/сп вместо глобальных рейтов. Легче всего такие места найти с помощью вывода иеархии вызовов переменных глобальных рейтов сервера или же просто поискать, где в классе игрока обрабатывается начисление (причем формула расчета) опыта/сп и всего остального.
Ищем нужные методы, где нужно изменять значение рейтов (в прошлом сообщении описывал), делаем нечто вроде этого:
Код: if(this instanceof Player) {
if(killed.getSpawn().getRespawnTime() >= 120000) currentRateXp = 2;
else if(killed.getSpawn().getRespawnTime() > 30000) currentRateXp = 1;
else if(killed.getSpawn().getRespawnTime() <= 30000) currentRateXp = 0.5f;
else currentRateXp = Config.SERVER_RATE_XP;
} else if(this instanceof FakePlayer) {
....
}
Спасибо, все оказывается проще чем я думал.
Вот помощь как помощь. :-)
Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
01-13-2014, 03:51 AM
(Сообщение последний раз редактировалось: 01-13-2014, 04:50 AM krisadr.)
для ботов делал отдельный пул который работает независимо от игроков по близости.
а какой смысл плодить много потоков, когда можно сувать ботов в ArryList или нечто подобное а потом прогонять их в for(one:list) с проверкой на стостояние - допиустим если уровень бота меньше 3 то ищем таргеты и качаемся, ну и так дальше
Добавлено через 3 минуты
тут самое главное переопределить в вашем классе ботов, который должен расширять L2Player(L2PcInstance)
PHP код: <?php
@Override
public void sendPacket(final L2GameServerPacket... packets)
{}
а то нпе замучают...
Добавлено через 59 минут
пока что столкнулся с проблемой, при moveToLocation(loc1, 0, true); для ботов не работает поиск пути,
при атаке на мобов он путь ищет, при обычном же moveToLocation(loc1, 0, true), нет.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
krisadr Написал:для ботов делал отдельный пул который работает независимо от игроков по близости.
а какой смысл плодить много потоков, когда можно сувать ботов в ArryList или нечто подобное а потом прогонять их в for(one:list) с проверкой на стостояние - допиустим если уровень бота меньше 3 то ищем таргеты и качаемся, ну и так дальше
Добавлено через 3 минуты
тут самое главное переопределить в вашем классе ботов, который должен расширять L2Player(L2PcInstance)
PHP код: <?php
@Override
public void sendPacket(final L2GameServerPacket... packets)
{}
а то нпе замучают...
Добавлено через 59 минут
пока что столкнулся с проблемой, при moveToLocation(loc1, 0, true); для ботов не работает поиск пути,
при атаке на мобов он путь ищет, при обычном же moveToLocation(loc1, 0, true), нет.
Я хочу сделать несколько иначе, я про поиск пути, хочу разбить карту на квадраты, т.е..... блин.... как бы объяснить
1. фейк игрок заходит в игру проверяя свой уровень
2. фейк игрок проверяет мобов относительно своего уровня (кроме некрополисов и прочих инстов/данжей)
3. фейк переносит в ту зону админ командой, так как будет с правами на пользование телепортом либо свитком или каким то иным способом(способ перехода в конечную точку не однозначен и требует доработки)
4. квадрат куда прилетает фейк игрок имеет определенный размер, обзор у фейка будет равен 12000 единиц и 360 градусов
4.1. сканирование местности 1 раз в 20 секунд на предмет пк
4.1.1. про появление пк, сравнение по базе, т.е. вызов по нику и сравнение уровней, классов
4.2. сканирование местности 1 раз в 20 секунд на предмет игроков
4.2.1. сравнение персонажей с фейком: уровень, счетчик пк, класс
4.3. сканирование местности на мобов(все знаем что в локе мобы от х уровня до у уровня
4.4. Передвижение по местности, фейк игрок перемещается по местности исходя из точек респа для мобов, т.е. x,y,z - первого моба, x,y,z - второго моба и так далее. В данный момент это лучший выход, пока не разобрался с нейросетью и обучением фейкигрока перехода между мобами и выбором оптимального пути следования между точкой А и точкой Б.
Этот метод будет работать(условие) только в том случае если по близости нету ни одного живого моба.
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
krisadr Написал:для ботов делал отдельный пул который работает независимо от игроков по близости.
а какой смысл плодить много потоков, когда можно сувать ботов в ArryList или нечто подобное а потом прогонять их в for(one:list) с проверкой на стостояние - допиустим если уровень бота меньше 3 то ищем таргеты и качаемся, ну и так дальше
Добавлено через 3 минуты
тут самое главное переопределить в вашем классе ботов, который должен расширять L2Player(L2PcInstance)
PHP код: <?php
@Override
public void sendPacket(final L2GameServerPacket... packets)
{}
а то нпе замучают...
Добавлено через 59 минут
пока что столкнулся с проблемой, при moveToLocation(loc1, 0, true); для ботов не работает поиск пути,
при атаке на мобов он путь ищет, при обычном же moveToLocation(loc1, 0, true), нет.
Я понял, значит у Вас все таки не однопоточная реализация, а событийная и однопоточный менеджер
По поводу активного АИ, все еще интересует вопрос: 100 АИ были реально активны (ведь глобальное АИ может иметь статус инактив, если игроков нет поблизости) или же нет?
Извиняюсь, что так допытываю и мучаю, просто интересна сторона оптимизации всего этого дела.
xolseg Написал:Этот метод будет работать(условие) только в том случае если по близости нету ни одного живого моба. Для этого Вам придется урезать статус инактив, чтобы боты не могли в него войти, да и вообще переработать вызов этого статуса и вызов деатачей АИ.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Pointer*Rage;345508 Написал:ля этого Вам придется урезать статус инактив, чтобы боты не могли в него войти, да и вообще переработать вызов этого статуса и вызов деатачей АИ. Ну это и работа не на один день и даже неделю.. задумка через чур глобальна, что бы за раз сесть и всё сделать. :-(
Сообщений: 832
Тем: 125
Зарегистрирован: Jan 2009
Репутация:
404
UP до сих пор не могу разобраться почему не работает поиск пути у moveToLocation(loc1, 0, true) для L2FakePlayer extends L2Player....
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
krisadr Написал:UP до сих пор не могу разобраться почему не работает поиск пути у moveToLocation(loc1, 0, true) для L2FakePlayer extends L2Player....
Вы так пишите, как будто мы знаем, что у Вас там за код...
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 3,354
Тем: 97
Зарегистрирован: Aug 2011
Репутация:
9,445
Pointer*Rage Написал:Вы так пишите, как будто мы знаем, что у Вас там за код...
А как же ванга мод?
|