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

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

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


Вы здесь » tmgamebot.narod.ru - бот для игры Техномагия(tmgame.ru) » Ваши мнения » Скрипт. Описание написания скриптов для начинающих.


Скрипт. Описание написания скриптов для начинающих.

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

1

Урок 1

    Первое с чего мы начнем - со скелета самой программы, а выглядеть он для тебя на данный момент будет так:

    Магия:
        _{Название магии}
        Позиция N
        Камни:
        Красные Х
        Синие Х
        Зеленые Х

    Успешное_считывание_камней:
    {
        ЕСЛИ ( ((_Красных_Моих > _{Название магии}.Красные)| (_Красных_Моих = _{Название магии}.Красные)) &
                  ((_Синих_Моих > _{Название магии}.Синие)| (_Синих_Моих = _{Название магии}.Синие)) &
                  ((_Зеленых_Моих > _{Название магии}.Зеленые)| (_Зеленых_Моих = _{Название магии}.Зеленые)))
        {
            ~Клик _{Название магии}.Позиция

            ~Пауза_Боя 3000
        }
    }

    Успешное_считывание_поля:
    {
    }

    Теперь что же мы тут сделали? А вот что: Если заменить синие обозначения на название магии (Например: {Название магии} меняем на Взрыв), а [color=red]Х на количество камней, необходимых для данной магии, а так же заменим N на позицию в которой у тебя находится магия (начиная сверху: 1, 2, 3 и т.д) то данный скрипт будет просто нажимать данную магию если будет хватать камней на магию, иначе не будет делать ничего, даже не будет собирать камни, ведь мы их еще на сбор не запрограммировали.
    Структуру ЕСЛИ если приглядитесь, то понять не сложно, главное не запутывайтесь со скобками и все открывающие скобки должны соответственно иметь свои вторые пары - закрывающие скобки. А так в этом условии мы проверяем, что бы камней которые у нас есть сейчас, было больше или их хватало на произнесение заклинания.
    ~Клик _{Название магии}.Позиция - это та самая строчка отвечающая за нажатие магии на поле боя. Сначала до точки идёт само название магии, а после точки уже аргумент где нажимать т.е. Позиция, которую мы задали в поле Магия.
    ~Пауза_Боя 3000 это стандартная пауза и задается в миллисекундах (1000 мс = 1 сек). в данном случае мы задали паузу в 3 секунды. Здесь задана пауза что бы бот сильно часто не давил на магию, вот и всё. можно, конечно, обойтись и без неё.
    Успешное_считывание_поля: успеем рассмотреть в следующих уроках. пока оно нам не надо.

    Теперь используя нашу заготовку напишем скрипт нажимающий на магию Взрыв находящуюся на 2 позиции (цвет оставляю тот же, для соотнесения значений).

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

    Успешное_считывание_камней:
    {
        ЕСЛИ ( ((_Красных_Моих > _Взрыв.Красные)| (_Красных_Моих = _Взрыв.Красные)) &
                  ((_Синих_Моих > _Взрыв.Синие)| (_Синих_Моих = _Взрыв.Синие)) &
                  ((_Зеленых_Моих > _Взрыв.Зеленые)| (_Зеленых_Моих = _Взрыв.Зеленые)))
        {
            ~Клик _Взрыв.Позиция

            ~Пауза_Боя 3000
        }
    }

    Успешное_считывание_поля:
    {
    }

Урок 1 окончен. Попробуйте сами написать скрипт для Пирки, находящейся в 4 позиции или Горючки, находящейся в 3 позиции, можете взять свою любую магию и поэкспериментировать.
    P.S. Без практики не будет результатов это я вам гарантирую.

Отредактировано Stanislav (2010-03-23 11:01:08)

0

2

Вот что у меня получилось, Под пирку.

Магия:
_Пирка
Позиция 4
Камни:
Красные 20
Синие 20
Зелёные 20

Успешное_считывание_камней:
{
ЕСЛИ ( ((_Красных_Моих > _Пирка.Красные) | (_Красных_Моих =_Пирка.Красные)) & ((_Синих_Моих > _Пирка.Синие) | (_Синих_Моих = _Пирка.Синие)) & ((_Зеленых_Моих > _Пирка.Зеленые) | (_Зеленых_Моих = _Пирка.Зеленые)))
{
~Клик _Пирка.Позиция
~Пауза_Боя 3000
}

------------------------------------------------------------------------------------

И под Горючку.

Магия:
_Горючка
Позиция 3
Камни:
Красные 0
Синие 18
Зелёные 18

Успешное_считывание_камней:
{
ЕСЛИ ( ((_Красных_Моих > _Горючка.Красные)| (_Красных_Моих =_Горючка.Красные)) & ((_Синих_Моих > _Горючка.Синие)| (_Синих_Моих =_Горючка.Синие)) & ((_Зеленых_Моих > _Горючка.Зеленые)| (_Зеленых_Моих = _Горючка.Зеленые)))
{
~Клик _Горючка.Позиция
~Пауза_Боя 3000
}

Проверил работоспособность, не работает что то, думаю что это всё таки не полный скрипт, может где то ошибку сделал. Но первый блин как всегда может быть комом ^^

Отредактировано ясенперец (2010-03-24 02:55:02)

0

3

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

Это чисто так для себя или это важный фактор в написание?

Отредактировано ясенперец (2010-03-24 03:07:21)

0

4

давай что нибудь посложнее, тоесть урок № 2

0

5

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

    Скрипт вроде правильный. Я у себя проверял и он у меня работает, так что вот что могу посоветовать:
1. добавь в скрипт:
     
    Успешное_считывание_поля:
        {
        }
   
2. Условия в скрипте должны ставиться в одну строчку и не терпят переноса (особенности бота). т.е. после слова ЕСЛИ все условия идут в одну длинную строчку.
3. Документ со скриптом должен быть сохранен в UTF8. (я, кстати, что бы не париться с этим, беру любой другой скрипт из базы бота, переименовываю файл, открываю его, удаляю из него всё ненужное или совсем всё и пишу свой скрипт, и уже после сохранения он будет в UTF8 формате :) мне так больше нравится, может у вас будет другой способ).

0

6

Станислав, урок №2 напиши, хочу до весенниго призыва всё таки успеть научится писать скрипты :)

0

7

Да, учитель, давай второй урок уже начнем! Очень хочется. И кстати, программа для самосоздания скриптов, которую ты сделал похоже работает не корректно (создал через нее скрипт для юзанья ритуала крови. Вставил вместо готового. Естественно в UTF-8. Запускаю бота. Выбираю эту магию. Он в бой заходит, а вот ничего потом не делает. А через какое-то время выдает сообщение, что мол какого-то параметра нету в скрипте. Помоги разобраться)

0

8

Урок 2

    Резюмируем чему мы научились в 1 уроке:
        1) Определять свою магию.
        2) Задавать условие проверки хватки камней на произнесение магии.
        3) И нажать её, если всё-таки наше условие выполнилось.

    Что ждет нас в этом уроке? а вот что:
        1) Определение своих переменных.
        2) Произведение арифметических операций над переменными и над переменными и константами.
        3) Как и зачем производить сортировку результата.
        4) Что такое цикл и как его использовать
        5) И что такое безУсловный переход.

    Как и в прошлый раз дам рабочий скрипт, а потом объясню всё по полочкам, что к чему. Собственно сам скрипт:

Переменные:
_i 0
_Выбор 0
_Случ 0

Успешное_считывание_камней:
{
}

Успешное_считывание_поля:
{

    ~Сортировка 1 6 5 4 Ч

    _i -1
    :начало
    _i _i + 1
   
    ЕСЛИ _i < _Вариантов_Ходов
    {
        ЕСЛИ _Ход[_i].Число_6 > 0 | _Ход[_i].Число_5 > 0 | _Ход[_i].Число_4 > 0
        {
            _Выбор _i
            ИДТИ конец
        }
        ИНАЧЕ
            {
            ЕСЛИ ( _Ход[_i].Итог = 0)
            {
                _Выбор _i
                ИДТИ конец
            }
    }
    ЕСЛИ _i = (_Вариантов_Ходов - 1 )
    {
        _Выбор 0
        ИДТИ конец
    }

    ИДТИ начало
}

:конец

~Случайное_Число 1000 _Случ
_Случ  _Случ + 1000
~Пауза_Боя _Случ

~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12
~Спать 300
~Клик _Ход[_Выбор].Ячейка_21 _Ход[_Выбор].Ячейка_22
}

    Теперь, если внимательно посмотреть, мы не используем магию и не определяем её, а уже работаем с полем камней и анализируем это поле, а как мы это делаем, давайте разбираться.  :)

    Этот скрипт вы найдете в любом другом скрипте представленном с ботом, да и вы будете пользоваться им (в дальнейшем, может, с кое-какими изменениями, сделанными под ваши нужды) и он является "Де-факто" Разобраться с ним - очень важно.

    В данном примере мы ничего менять пока не будем, а просто разберемся что к чему и не просто разберемся а поймём что к чему!

    Первое, что нам встречается это раздел Переменные:. Здесь вы объявляете свои переменные. Для каждой переменной должно быть задано значение по умолчанию. В нашем примере все значения переменных равняются 0. Переменная начинается со знака подчеркивания "_", а дальше пишется имя переменной и через пробел её значение.

    Важно!!!:
Если видим любое значение с подчеркиванием, а через пробел стоит число, то мысленно заменяем пробел знаком "=". Например: _i -1 заменяем в уме на _i = -1. Если же после пробела стоит число (переменная), потом арифметический знак и снова число (переменная) то мысленно считаем это выражение простым примером. Например: _i _i + 1 заменяем в уме на _i = _i + 1, т. е. значение i увеличилось на единицу.

    Следующий раздел у нас пустой, так как в данном примере нам не надо знать сколько камней у нас сейчас есть в наличии.   
    Успешное_считывание_камней:
    {
    }

    Всё дальнейшее происходит в разделе: Успешное_считывание_поля:. и этот раздел обозначает, что всё поле у нас с читано и можно производить его анализ.

    Первое что нам встречается в разделе это ~Сортировка 1 6 5 4 Ч. Что я выделил в синий цвет, то задаем сами для себя. В данном примере идет сначала сортировка по линиям из 6 камней, а в конце по черепам. Вот некоторые еще из сортировок:
    6, 5, 4, 3 - это соответственно сортировки по собираемым линиям камней.
    К, С, З, Ч - это (красный, синий, зеленый, череп) сортировка по тому сколько камней соберется этим ходом.
    Есть еще, но это уже смотрите Здесь
    Рассмотрим пример: ~Сортировка 1 3 4 С Сортируем по линиям из 3 каней, потом по линиям из 4 камней, и уже потом в каждой из выборок 3 или 4 сортируется по синим камням.

    Что же такое безУсловный переход? А это структура в нашем примере:
    ИДТИ конец
    :конец
    Как только программа доходит до строчки ИДТИ, она сразу же перепрыгивает на метку, которая указана после слова ИДТИ. т. е. в данном случае программа сразу перепрыгнет в место :конец и продолжит свое выполнение. Смотрим приведенный скрипт и всё станет сразу понятно.

    Теперь с совместным переходом и условием ЕСЛИ можем сделать цикл со счеткиком:
   
    _i -1
    :начало
    _i _i + 1
    ЕСЛИ _i < _Вариантов_Ходов
    {
    //Здесь распологоется всё что просчитывается в цикле
        ИДТИ начало
    }

    Параметр _Вариантов_Ходов показывает сколько ходов при данной раскладке поля вообще возможно. Выше приведенным циклом, мы рассматриваем поочередно все эти ходы.

    Начальное значение задается как  _i -1 (_i = -1). далее идет метка :начало (это куда будем переходить из условия ЕСЛИ, пока выполняется условие _i < _Вариантов_Ходов. Например: у нас вариантов ходов сейчас 2. Тогда сначала программа приняла значение _i = -1 и после метки :начало прибавило 1 (_i _i + 1) к нашему значению _i и оно стало равняться 0. Потом программа проверяет _i < _Вариантов_Ходов (0 < 2) в условии ЕСЛИ выполняются действия, пока не доходим до поля ИДТИ начало. Переходим на поле :начало и программа выполняется дальше, а дальше пять прибавляем 1 (_i _i + 1) к нашему значению _i и оно стало равняться 1 и опять проверяем условие (1<2). И программа проделывает то же самое до поля ИДТИ начало, а вот уже после следующего прибавления 1 к _i условие (2<2) перестанет выполняться и программа выходит из цикла и продолжает идти дальше. Может сначала трудно для понимания, но на бумажке пройдите все этапы сами и всё встанет на свои места, не забываем смотреть наш начальный скрипт, всё беру только от туда.

    Рассмотрим: _Ход[{индекс}].[свойство]
     _Ход[{индекс}] В цикле выше рассмотренном мы перебираем все доступные ходы, а то бы узнать у каждого хода его параметры (свойства), нужно рассмотреть свойства хода. Например из нашего скрипта: _Ход[_i].Число_4 >0 Означает если в ходе _i соберется хоть одна четверка камней, то условие выполнится.
     Какие же свойства мы можем использовать (т.е. те параметры которые пишутся после "точки" и без скобок после слова ход. можно посмотреть Здесь, а основные:
    Координаты ячеек куда нужно кликнуть, что бы сходит. За начало принимается левый верхний угол поля, отсчет идет от 0. Первый параметр по горизонтали второй по вертикали.
    Ячейка_11
    Ячейка_12
    Ячейка_21
    Ячейка_22

    Число сложенных не пересекающихся линий черепов, при включенной галке “ВС” учитываются и линии камней.
    Атак

    Сумма собираемых камней этим ходом:
    Черепов_Соберется
    Красных_Соберется
    Синих_Соберется
    Зеленых_Соберется

    Черепов_С_Ур_Соберется
    Красных_С_Ур_Соберется
    Синих_С_Ур_Соберется
    Зеленых_С_Ур_Соберется

    Сумма собираемых линий разной длины этим ходом:
    Число_3
    Число_4
    Число_5
    Число_6

    Какая линия черепов по длине максимум собралась:
    Возвращаемые значения:
    4 – Четыре или больше
    3 – Тройка
    0 – Линий черепов нет.
    Комбо_Черепов

    Что можно сложить на поле, после этого хода:
    Возвращаемые значения(старшие могут включать младших):
    0 – Конец, т.е стол разобран
    1 – Тройки камней
    2 – Тройки черепов
    3 – Четверки и более камней
    4 – Четверки и более черепов
    Итог   

    И последнее что надо рассмотреть - ~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12.
    В общем виде ~Клик [ячейка по горизонтали] [ячейка по вертикали]
    В данном случае _Выбор это тот ход, который мы по всем заданным нашим условиям выбираем (смотрите скрипт и разберетесь).

    Связка:
~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12
~Спать 300
~Клик _Ход[_Выбор].Ячейка_21 _Ход[_Выбор].Ячейка_22
   Нажимает на ячейку 1 и на ячейку 2, тем самым в игре передвигая 2 соседних камня, ~Спать 300 нужно для того, что бы не нажать сильно быстро 2 соседние клетки. Если эту задержку убрать, то нажмется только 2 ячейка, т.к. не успеется обработаться 1 нажатие.

    Уф. как много понаписал...
P.S. Материал очень важный и в этом скрипте должны знать что каждая строчка значит, иначе дальше будет очень сложно разбираться, а примеры может быть пойдут оооочень интересные. :) Удачи.
      Задание: Попробуйте разные сортировки, можете поиграть с условиями, а главное НЕ ВЕРЬТЕ мне на слово, а проверьте  практически!

Отредактировано Stanislav (2010-03-28 09:08:22)

0

9

я просто ещё не вникался, сегодня чуть позже начну изучать :confused:

0

10

Хочу спросить, а как посмотреть написание сценариев уже встроенных скриптов в бот? Чтобы можно было сравнивать, то есть сначала написал сценарий сам, а потом проверил его написание на готовых.

0

11

Встроенных можно, но не нужно с этим замарачиваться. Готовые скрипты и рабочие есть в папочке Scripts вместе с ботом (хотя ты это уже скорее всего знаешь :))
    Пиши свой скрипт и смотри работает так как ты хотел этого или нет, вот и всё, так же в боте есть вкладка "тест" на ней кое какие данные с работы бота выводятся.

0

12

Дай 1 рабочий скрипт на 1 бьющую магию, а если камней нет то пусть поле собирает просто

0

13

Еще такой вопрос, а можно заставить бота распознавать поле и выбирать из ранее прописанных в скрипте магий? подходящих под удар
Например на есть возможность нажать барса(бот должен распознать нету ли на поле черепов 5 уровня) а потом ГВ

Отредактировано Sanchous (2010-03-28 14:54:56)

0

14

И как сделать что бы после победы нажималось на кнопку продолжить?

0

15

Вот, что то написал под ВС, Бот находит моба,заходит и... не чего не делает. Где я сделал ошибку? :blush:

Магия:
    _ВС
    Позиция 5
    Камни:
    Красные 20
    Синие 20
    Зелёные 20

Переменные:
_i 0
_Выбор 0
_Случ 0
_Кр 0
_Син 0
_Зел 0

Успешное_считывание_камней:
{
    ЕСЛИ ( ((_Красных_Моих > _ВС.Красные)| (_Красных_Моих =_ВС.Красные)) & ((_Синих_Моих > _ВС.Синие)| (_Синих_Моих = _ВС.Синие)) & ((_Зеленых_Моих > _ВС.Зеленые)| (_Зеленых_Моих = _ВС.Зеленые)))
                   
                 

{
            ~Клик _ВС.Позиция

            ~Пауза_Боя 3000
        }
    }

   
Успешное_считывание_поля:
{

    ~Сортировка 1 6 5 4 Ч

    _i -1
    :начало
    _i _i + 1
   
    ЕСЛИ _i < _Вариантов_Ходов
    {
        ЕСЛИ _Ход[_i].Число_6 > 0 | _Ход[_i].Число_5 > 0 | _Ход[_i].Число_4 > 0
        {
            _Выбор _i
            ИДТИ конец
        }
        ИНАЧЕ
            {
            ЕСЛИ ( _Ход[_i].Итог = 0)
            {
                _Выбор _i
                ИДТИ конец
            }
    }
    ЕСЛИ _i = (_Вариантов_Ходов - 1 )
    {
        _Выбор 0
        ИДТИ конец
    }

    ИДТИ начало
}

:конец

~Случайное_Число 1000 _Случ
_Случ  _Случ + 1000
~Пауза_Боя _Случ

~Клик _Ход[_Выбор].Ячейка_11 _Ход[_Выбор].Ячейка_12
~Спать 300
~Клик _Ход[_Выбор].Ячейка_21 _Ход[_Выбор].Ячейка_22
}

Отредактировано ясенперец (2010-03-28 18:01:11)

0

16

под разяку напиши и не парся как я под ГВ)))

0

17

Ясенперец под вс тебе надо играться с циклом, а в таком виде он будет до упора тыкать на вс пока камни не закончатся

0

18

ну как. нужны еще уроки по скриптописанию? или уже все всему научились?

0

19

хотелось бы узнать, что значат в сортировке последние значения, мало ли уже разобрался:

~Сортировка {направление сортировки} {столбцы для сортировки}
Сортирует варианты ходов по различным свойствам.
.... СХ, МСУ, МС

и еще хотелось бы узнать про работу долгосрочных переменных "_аура")

вроде не нашла ничего про это) чтобы каждый раз не торкать в пирку/бурку)

Отредактировано Anna (2010-05-14 12:16:41)

0

20

проблемка..написала скрипт под гв..ничего не происходит...нет такого параметра выдает и выключается...хм..чет не так наверн..
Магия:
_Горный властелин
Позиция 4
Камни:
Красные 25
Синие 25
Зеленые 25

Успешное считывание камней:
{
  ЕСЛИ ( ((_Красных_Моих > _Горный властелин.Красные)| (_Красных_Моих = _Горный властелин.Красные)) & ((_Синих_Моих > _Горный властелин.Синие)| (_Синих_Моих = _Горный властелин.Синие)) & ((_Зеленых_Моих > _Горный властелин.Зеленые)| (_Зеленых_Моих = _Горный властелин.Зеленые)))
        {
            ~Клик _Горный властелин.Позиция

            ~Пауза_Боя 3000
        }
    }

    Успешное_считывание_поля:
    {
    }

0

21

все путем..заработало)

0

22

не пащет что то ((( ... зделал под Ритуал крови . соранил в УТФ 8 ...

заожу в бой а оно мне видает ошибку и пишет продолжит или выход, если нажимаю продолжить  то опять  еррор пока не нажму выход и програмка закроется....  просматрите вчем ошибка//???\

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

    Успешное_считывание_камней:
    {
        ЕСЛИ ( ((_Красных_Моих > _Ритуал крови.Красные)| (_Красных_Моих = _Ритуал крови.Красные)) &
                  ((_Синих_Моих > _Ритуал крови.Синие)| (_Синих_Моих = _Ритуал крови.Синие)) &
                  ((_Зеленых_Моих > _Ритуал крови.Зеленые)| (_Зеленых_Моих = _Ритуал крови.Зеленые)))
        {
            ~Клик _Ритуал крови.Позиция

            ~Пауза_Боя 3000
        }
    }

    Успешное_считывание_поля:
    {
    }

Отредактировано artur (2010-12-04 18:07:57)

0

23

artur
думается что "_Ритуал крови" надо писать без пробелов - "_Ритуал_крови"

0


Вы здесь » tmgamebot.narod.ru - бот для игры Техномагия(tmgame.ru) » Ваши мнения » Скрипт. Описание написания скриптов для начинающих.