tmgamebot.narod.ru - бот для игры Техномагия(tmgame.ru)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Объясните, где я туплю...

Сообщений 1 страница 8 из 8

1

Вот сделал небольшой скрипт. Магия описывается так, как она есть у меня. Т.е. без привязки к настройкам в программе.

//Раздел инициализации
/Нельза вставлять строки в разделе магии
/Сначала называем магию, потом задаем значение
/ для ее свойств, можно использовать выражения

Магия:
_Берсерк
Позиция 1
Камни:
Красные 12
Синие 0
Зеленые 12

Магия:
_Мертв
Позиция 6
Камни:
Красные 15
Синие 15
Зеленые 15

Магия:
_Удар
Позиция 2
Камни:
Красные 0
Синие 12
Зеленые 12

Магия:
_Бурл
Позиция 5
Камни:
Красные 18
Синие 18
Зеленые 0

/Дальше никаких ограничений по вставке коментариев нет
/Все переменные целые числа
Переменные:
/Каждой переменной нужно присваивать значение
_Случ 0
_Кр 0
_Син 0
_Зел 0
_Аура 0
_Бер 0
_Бур 0

//Все события происходят, только если ваш ход
//Ваши камни(жизни) и врага распознаны
Успешное_считывание_камней:
{

//на первом ходу юзаем берса
ЕСЛИ ( _Бер = 0 ) {
_Бер 1
~Клик _Берсерк.Позиция
~Трассировка "BERSERK"
}

~Трассировка "BERSERK EXIT"

//юзаем бурляшку, если не пили
ЕСЛИ ( _Бур = 0 ) {
_Бур 1
~Клик _Бурл.Позиция
~Трассировка "BUR"
}
}

//Распознаны камни(жизни)свои и врага, а также поле
Успешное_считывание_поля:
{
~Трассировка "POLE"

//проверяем, хватает ли камней. если нет, то пьем эль
ЕСЛИ ( (_Красных_Моих < _Мертв.Красные) | (_Синих_Моих < _Мертв.Синие) | (_Зеленых_Моих < _Мертв.Зеленые) | (_Красных_Моих < _Удар.Красные) | (_Синих_Моих < _Удар.Синие) | (_Зеленых_Моих < _Удар.Зеленые) ) ) {
~Клик_по_лотку 1
~Трассировка "Kamney NET"
}

~Трассировка _Жизни_В_%_Врага

//Если жизни у моба меньше 70, то добиваем. Если больше, то бьем сокрушительным
ЕСЛИ ( _Жизни_В_%_Врага < 70 ) {
~Клик _Мертв.Позиция
~Трассировка "UMERSH"
}
ИНАЧЕ
{
~Клик _Удар.Позиция
~Трассировка "UDAR"
}

/Что бы пауза между ходами была разной
/Используем функцию случайного числа

~Трассировка "PAUSA"
~Случайное_Число 3000 _Случ
_Случ  _Случ + 2000
//~Пауза_Боя _Случ

}

Самое интересное, что в логе появляются строчки:
BERSERK, а потом несколько раз POLE.
Т.е. из ЕСЛИ с берсерком прога даже не выходит.
В чем может быть дело?
Жизни врага в логе тоже не появляются.
Объясните, что я делаю не так?

Вот пример лога:
4. BERSERK
1. POLE
1. POLE
1. POLE

Самое интересное, что после срабатывания Берса, нужно добивать самому, т.к. скрипт не работает корректно.

0

2

to isometer

Для начала расставь задержки ~спать
У тебя все команды идут подряд, игра не может воспринять огромное колличество команд со скоростью скорострельности базуки))

После активации Берса сделай переход на конец скрипта.

ВОзьми за правило, после любого действия закончить выполнение скрипта...
При оставшемся твоем ходе, скрипт продолжит работу сначала...
У тебя все равно проверки стоят на условиях, норм бу)

Отредактировано Noter (2009-11-11 21:47:17)

0

3

Так должно быть... дальше сам намутишь)

//Раздел инициализации
/Нельза вставлять строки в разделе магии
/Сначала называем магию, потом задаем значение
/ для ее свойств, можно использовать выражения

Магия:
_Берсерк
Позиция 1
Камни:
Красные 12
Синие 0
Зеленые 12

Магия:
_Мертв
Позиция 6
Камни:
Красные 15
Синие 15
Зеленые 15

Магия:
_Удар
Позиция 2
Камни:
Красные 0
Синие 12
Зеленые 12

Магия:
_Бурл
Позиция 5
Камни:
Красные 18
Синие 18
Зеленые 0

/Дальше никаких ограничений по вставке коментариев нет
/Все переменные целые числа
Переменные:
/Каждой переменной нужно присваивать значение
_Случ 0
_Кр 0
_Син 0
_Зел 0
_Аура 0
_Бер 0
_Бур 0

//Все события происходят, только если ваш ход
//Ваши камни(жизни) и врага распознаны
Успешное_считывание_камней:
{

//на первом ходу юзаем берса
ЕСЛИ ( _Бер = 0 )
{
   _Бер 1
   ~Клик _Берсерк.Позиция
   ~Трассировка "BERSERK"
   ИДТИ конец_хода
}

//юзаем бурляшку, если не пили
ЕСЛИ ( _Бур = 0 )
{
   _Бур 1
   ~Клик _Бурл.Позиция
   ~Трассировка "BUR"
   ИДТИ конец_хода
}
}

//Распознаны камни(жизни)свои и врага, а также поле
Успешное_считывание_поля:
{
бла
бла
бла

:конец_хода
~Случайное_Число 500 _Случ
_Случ  _Случ + 500
~Спать _Случ
}

0

4

Noter, спасибо большое.

Единственное, что непонятно - зачем из ЕСЛИ отправлять принудительно на конец_хода? Не приведет ли это к переполнению каких-нибудь внутренних буферов? Сейчас и так бот работает только час, а потом вываливается по ошибке.

Плюс столкнулся с другой проблемой - не кликает по заклинаниям под Вистой ни в клиенте, ни в FireFox. Сначала не работает автопоиск окна, но если привязать вручную, то не эмулирует клики. Как бороться? Под XP все пучком.

0

5

Ничего не переполнится...
Почему каждый раз переходить? Так надо)
Ошибка какая? Какая нить переменная не существует?))
В висте отключи сглаживание шрифтов)

ПЫСЫ: Глянь тут https://tmgamebot.fanbb.ru/viewtopic.php?id=138#p914 пример типа)

Отредактировано Noter (2009-11-12 21:58:59)

0

6

Сделал вот так:

Самое интересное - это лог:

Хотя, как я понимаю, на паузу обычную никак вообще попасть мы не могли. Только на паузу :конец_хода
Короче, то ли я опять туплю, то ли одно из двух.
Кстати, еще вопрос - берсерк иногда не срабатывает в самом начале хода. Что изменить, чтобы этого не происходило?

0

7

Все операции с полем производятся внутри этой функции
Успешное_считывание_поля:
{
тут работа с полем
}

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

Отредактировано Noter (2009-11-13 08:28:44)

0

8

Да я написал - самый простой скрипт без задержек лучше всего работал, как оказалось.
Все исхитрения ни к чему хорошему не привели.
Возникла сейчас еще одна проблема - бот правильно считывает число камней, но периодически не может считать оставшуюся жизнь у противника и показывает 9. Посмотрел - привязки вроде все на местах, но дело в том, что шкала жизни сделана с градиентом и отличается у меня и у противника. Может в этом проблема?

Плюс непонятно. В заголовке окна пишет - ОШИБКА!!! Неудача считывания поля, а функции, находящиеся внутри "Успешное_считывание_поля:", все равно выполняются.

Ну и где-то через час работы бот вылетает с ошибкой и попыткой вызвать DrWatson.

0