Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
FakePlayer
#41
Pointer*Rage Написал:Делайте новый класс ботов наследуясь от класса игрока, я уже писал об этом.
Ищите нужные события (которые Вы описали) и изменяете там переменную рейтов для конкретного игрока/бота. Если нужно выполнение с задержкой, то пилите опять же задачу и запускайте ее с помощью трид пула.

А можно для идиотов разжевать про "и изменяете там переменную рейтов для конкретного игрока/бота", а то сижу, вроде прочитал и всё понятно, а начинаю читать частями пост, так становится ещё более не понятнее...

Это получится что то типа
если { класс игрок, то рейт такой то}
если { класс фейк, то рейт такой то}

Или я что то опять не правильно понимаю?
Но опять же вопрос, как сделать плавающей цифру рейта? Я просто логику понять не моуг этих действий. :-(
1
Ответ
#42
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.
Гадаю по капче.
Ответ
#43
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) {
....
}

Спасибо, все оказывается проще чем я думал.
Вот помощь как помощь. :-)
1
Ответ
#44
для ботов делал отдельный пул который работает независимо от игроков по близости.
а какой смысл плодить много потоков, когда можно сувать ботов в 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), нет.
Ответ
#45
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 - второго моба и так далее. В данный момент это лучший выход, пока не разобрался с нейросетью и обучением фейкигрока перехода между мобами и выбором оптимального пути следования между точкой А и точкой Б.
Этот метод будет работать(условие) только в том случае если по близости нету ни одного живого моба.
1
Ответ
#46
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), нет.
Я понял, значит у Вас все таки не однопоточная реализация, а событийная и однопоточный менеджер Smile
По поводу активного АИ, все еще интересует вопрос: 100 АИ были реально активны (ведь глобальное АИ может иметь статус инактив, если игроков нет поблизости) или же нет?

Извиняюсь, что так допытываю и мучаю, просто интересна сторона оптимизации всего этого дела.


xolseg Написал:Этот метод будет работать(условие) только в том случае если по близости нету ни одного живого моба.
Для этого Вам придется урезать статус инактив, чтобы боты не могли в него войти, да и вообще переработать вызов этого статуса и вызов деатачей АИ.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#47
Pointer*Rage;345508 Написал:ля этого Вам придется урезать статус инактив, чтобы боты не могли в него войти, да и вообще переработать вызов этого статуса и вызов деатачей АИ.
Ну это и работа не на один день и даже неделю.. задумка через чур глобальна, что бы за раз сесть и всё сделать. :-(
1
Ответ
#48
UP до сих пор не могу разобраться почему не работает поиск пути у moveToLocation(loc1, 0, true) для L2FakePlayer extends L2Player....
Ответ
#49
krisadr Написал:UP до сих пор не могу разобраться почему не работает поиск пути у moveToLocation(loc1, 0, true) для L2FakePlayer extends L2Player....

Вы так пишите, как будто мы знаем, что у Вас там за код...
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#50
Pointer*Rage Написал:Вы так пишите, как будто мы знаем, что у Вас там за код...

А как же ванга мод? Smile
1
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)