Перейти к содержанию
Авторизация  
boVer

вопрос по автофарму

Рекомендуемые сообщения

Всем доброго времени суток. Интересует мнение java-разработчиков по л2. 
Есть 2 скрипта автофарма. Проблема вот в чем.
Первый скрипт работает с задержкой, а именно маг бьет "скажем так" раз в секунду. Кусок кода удара мага ниже. А именно "else if"
 

try {
							if (skill.isBattleForceSkill() || skill.isSpellForceSkill()) {
								player.setGroundSkillLoc(null);
								if (skill.checkForceCondition(player, sc.getId())) {
									player.useMagicBot(skill, false, isMage);
								} else {
									player.sendPacket(Static.NOT_ENOUGH_FORCES);
								}
							} else if (skill.checkCondition(player, player, false)) {
								player.useMagicBot(skill, false, isMage);	
							}
						} catch (Exception e) {
							// e.printStackTrace();
						}

Второй скрипт переделал сам, маг теперь бьет идеально, и есть возможность выставить задержку в цикле. Но тут проблема такая что если к примеру на боте стоит 30-40 персонажей, сервак начинает моросить, фризит, ацп перестает работать. Пример кода ниже.
 

while (true) {						
								try {
									if (!target.isAlikeDead()) {
										player.useMagicBot(skill, false, false);
									}
																		
									if (target.isAlikeDead()) {
										nextTarget();
										return;
									}
									if (!player.canSeeTarget(target)) {
										nextTarget();
										return;
									}
								
									Thread.sleep(150);
								} catch (InterruptedException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							
							}

Если есть кто может подсказать как реализовать или куда посмотреть чтоб убрать проблему второго варианта - буду благодарен. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сорри за форматирование кода в топике.
Сборка пвсофт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну потому что есть протектор скорее всего, чтобы не флудили пакетами. Уже где-то был такой вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего Вам нужно избавляться от 

Цитата

while (true)

и

Цитата

Thread.sleep(150)

Поищите в вашей сборке механизмы которые используют т.н шедулинг таски, реализацию Runnable.

У вас должна быть обвертка над ThreadPoolExecutor\ScheduledThreadPoolExecutor, которая скорее всего называеться что-то вроде ThreadPoolManager

Там с помощью методов schedule(..) можно запускать фоновые задачи которые будут выполняться в асинхронном режиме в пуле.

Все действия  по автофарму и задержки между ними реализовуйте с помощью этих тасок,

Изменено пользователем lvlkoo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большая нагрузка происходит из-за того, что данная часть кода выполняется в цикле while (true), который продолжает выполняться до тех пор, пока не будет вызвано исключение или процесс не будет принудительно прерван. В каждой итерации цикла выполняются следующие действия:

  1. Проверяется, жива ли цель (target.isAlikeDead()).
  2. Если цель не мертва, вызывается player.useMagicBot(skill, false, false) для использования магии.
  3. Если цель мертва, вызывается nextTarget() для выбора следующей цели и завершается выполнение текущей итерации цикла.
  4. Если игрок не видит цель (!player.canSeeTarget(target)), вызывается nextTarget() для выбора следующей цели и завершается выполнение текущей итерации цикла.
  5. После выполнения всех проверок и действий выполняется задержка в 150 миллисекунд с помощью Thread.sleep(150).

Таким образом, постоянное выполнение этого кода в цикле без задержки может создать большую нагрузку на систему, особенно если это происходит на длительном промежутке времени. Рекомендуется добавить дополнительные условия или пересмотреть логику цикла, чтобы снизить нагрузку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока такс выполнения цикличности будет общий, как бы вы не старались будут проблемы с задержками, которые в итоге потом приведут к тому что фарм умрет для всех игроков сервера. Разделяй и оптимизируй запросы чтоб не было перегруза на цпу для каждого чара отдельно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...