Здравствуйте, гость ( Вход | Регистрация )

3 страниц V < 1 2 3  
Ответить в эту темуОткрыть новую тему
> Ошибка get scripts
cirus
сообщение 7.3.2019, 20:06
Сообщение #41


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
Поэтому я использовал часто get scripts и условие чтоб он знал выполнять старт или нет

get script вообще не нужен в данном случае. Создайте массив, в который записывайте работают скрипты или нет, или же просто переменные.
Код
set #script1 0  // скрипт1 выключен
set #script2 1  // скрипт2 включен

Т. е.
Код
start_script 1  // запустить скрипт1
set #script1 1 // ставим флаг что скрипт работает
// в любом месте скрипта можно проверить работает скрипт или нет
// if #script1 = 1

Тоже самое когда скрипт останавливается.
Цитата
почему скрипт 0 при такой привязке работает гораздо быстрее

Раньше было что неактивные вкладки работали быстрее чем активная. Хотя вроде исправлялось.

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 7.3.2019, 20:16
Сообщение #42


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



ну пока я не узнал что есть команда get scripts я использовал переменные, но потом подумал что зависания происходят от того что он проверяет переменную у выключенного скрипта и стал использовать get scripts. Проблема в том что скрипт 2 например запускает скрипт 0 и обозначает это переменной, однако в то же время скрипт 3 может остановить скрипт 0 и скрипт 2 не будет об этом знать хотя должен бы запустить его, вообщем большая заморочка с переменными, опять же возможно придется обращаться к переменным из другого скрипта чтоб узнать запускал он его уже или нет а он в свою очередь может быть остановлен, да там голову сломаешь с этой взаимосвязью и не факт что в конкретном случае это вообще можно реализовать может быть какой нибудь конфликт нерешаемый
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 7.3.2019, 20:22
Сообщение #43


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Должен быть 1 скрипт, управляющий другими.
Если скрипту 3 надо остановить скрипт 2, то в переменную в скрипте 3 ставится флаг что надо остановить скрипт 2. Управляющий скрипт проверив значение переменной в 3м скрипте останавливает скрипт 2.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 7.3.2019, 23:01
Сообщение #44


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



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

Попробую привести пример как может всё работать в рамках одного скрипта.


Код
//шапка, подсос данных из файлов или создание переменных каких-либо, обнуление данных
gosub init //инициализация
gosub null //обнуление

set #time1Mob timer //тайме для мобилы
set #time2Mouse timer // таймер для мышки

//основной цикл перса на улице
:street
while 1 = 1

   wait 250 + random(242)
   set #t timer - #time
   if #timerForMobile > #t
      gosub mobileGo
      set #time2Mob timer
   end_if

   findimage $b (...)
   if $b > 0
      gosub mouseGo
      gosub null
   end_if

   findiamge $fight (...)
   if $fight > 0
      goto fight  // уходим в цикл боя
   end_if

   gosub check

end_while


:init
//инициализируем
set #maxCntMoney 15
set $name Fedor
load_array %object c:\path\box.txt
set #timerForMobile 30000   //время задержки для таймера мобилы в мс
set #timerForMouse 20000  //время задержки для таймера мышки в мс
return

:null
//что-нибудь обнуляем
set #blabla 0
set $blabla
set size(%bla)
return


:check
//здесь что-нить постоянно проверяем на всякие ошибки, левые табилчки на экране и прочие события
if $a > 0
   set #alarm 1
end_if
return


:mobileGo

gosub check
if #alarm = 1
   //что-то пошло не так! выходим из цикла такого-то!
   return
end_if
//Соответственно здесь свой цикл можно делать большой и в нем делать основную работу и проверять разные события.

return

:fight
//здесь что-нить инициализируем перед боем, а потом уходим в цикл, откуда вернемся когда-нить в главный цикл улицы, когда бой закончится.
while 1 = 1
   wait 500 + random(500)
   //пока идет бой проверяем кучу всего, жмем кучу всего и т.д.
   if $street > 0
      goto street // вернулись в глав. цикл улицы
   end_if
end_while


Надеюсь, здешние мастера не закидают меня камнями, ибо самоучка, просто выбрал то, что удобно.
А разносить по закладкам удобнее в других языках. Там именно вызываем функцию из другой закладки и не нужно этих танцев с бубнами. Поэтому там разносить можно, здесь смысла не имеет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 2:20
Сообщение #45


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



у меня скрипт 0 передвигается и убивает монстров на ходу, другой скрипт в это время смотрит за лутом и останавливает скрипт 0 сразу как только видит лут, и третий смотрит не появился ли город на горизонте, если их совместить то он будет пробегать мимо половины лута и если не заметит город вовремя будет провал (IMG:style_emoticons/default/smile.gif) это уже проверено, и еще один скрипт следит за долгим застреванием
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 3:21
Сообщение #46


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 2:20) *

у меня скрипт 0 передвигается и убивает монстров на ходу, другой скрипт в это время смотрит за лутом и останавливает скрипт 0 сразу как только видит лут, и третий смотрит не появился ли город на горизонте, если их совместить то он будет пробегать мимо половины лута и если не заметит город вовремя будет провал (IMG:style_emoticons/default/smile.gif) это уже проверено, и еще один скрипт следит за долгим застреванием

(IMG:style_emoticons/default/smile.gif)
Пришло время открыть вам одну тайну!
"Провалиться" гораздо больше шансов в "многопоточности", чем в последовательных действиях.
И вот одна из сотен проблем с которой вы столкнулись.

А в рамках одно скрипта вот вам алгоритм, при котором ничего не "провалиться":


Код
while 1 = 1
   wait 250 + 211(random)  
   gosub mob
   gosub loot
   findimage $checkLoot (ищем какой-нибудь элемент, подтверждающий, что здесь уже лута быть не может или наоборот, подтверждающий, что он ещё есть и двигаться нельзя)
   findimage $checkCity (ищем город, который вам там надо обязательно искать)
   if $checkLoot > 0 and $checkCity < 1
      gosub move   // Если лута точно нету здесь и города нету, то двигаемся дальше
   end_if
   gosub checkSystem
end_while

:mob
gosub checkSystem
//ищем мобов, нападаем если нужно, если драка не супер сложная, то можно прям здесь же и драться
return

:loot
gosub checkSystem
//проверяем лут, подбираем если есть
return

:move
gosub checkSystem
//двигаемся вперед
return

:checkSystem
//проверяем систему, если сбой то идем чиниться
if fail = 1
   gosub f5
   set #fail 0
end_if
return

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


Не знаю какая игра у вас, точнее какой режим у неё - пошаговая или как, но алгоритм по-сути универсальный.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 3:56
Сообщение #47


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



вот как работает
"хттп//глупый ютуб"
если сделать как вы говорите скорость прохождения заметно снизится
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 4:07
Сообщение #48


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 3:56) *

вот как работает

Не воспроизводится, к сожалению, но судя повсему реал-тайм +3д, верно?

Цитата(nykep @ 8.3.2019, 3:56) *

если сделать как вы говорите скорость прохождения заметно снизится

В каком месте? Почему?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 4:15
Сообщение #49


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



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

Скорость прохождения снизится потому что в то время когда он передвигается и использует скиллы он не сможет смотреть за лутом потому что он занят передвижением и атакой (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 4:30
Сообщение #50


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 4:15) *

Скорость прохождения снизится потому что в то время когда он передвигается и использует скиллы он не сможет смотреть за лутом потому что он занят передвижением и атакой (IMG:style_emoticons/default/smile.gif)


А что мешает смотреть лут после каждого удара? Вы думаете 5 секунд на это уходить будет?
Я правильно же понимаю, что лут у вас такой:
Ищем картинку или несколько, то это лут или зона для поиска лута, затем жмем поднять мышкой или клавишей.


Поиск нескольких картинок это ваще фигня по времени. Вы ничего не потеряете)
Т.е. пока в цикле избиения, после каждого удара или скила смотрим gosub loot и всего делов.
И между мобами смотрим лут дополнительно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 4:35
Сообщение #51


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



вот должно работать
[+]


Цитата(xolost @ 8.3.2019, 4:30) *

Вот это проблема!!!

А что мешает смотреть лут после каждого удара? Вы думаете 5 секунд на это уходить будет?
Я правильно же понимаю, что лут у вас такой:
Ищем картинку или несколько, то это лут или зона для поиска лута, затем жмем поднять мышкой или клавишей.
Поиск нескольких картинок это ваще фигня по времени. Вы ничего не потеряете)

нет дело не в том что искать долго а в том что даже не будет пытаться потому что текущее выполнение скрипта будет внутри другого оператора
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 4:37
Сообщение #52


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 4:35) *

вот должно работать

Эта работает, ага, там такая жесть, что я не особо понял что там вообще происходит )))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 4:41
Сообщение #53


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



Ставьте лайки и подписывайтесь на канал, через год будет еще одно трехминутное видео (IMG:style_emoticons/default/biggrin.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 4:50
Сообщение #54


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 4:35) *

нет дело не в том что искать долго а в том что даже не будет пытаться потому что текущее выполнение скрипта будет внутри другого оператора


Прекрасно, у тебя есть функция :loot где ты проверяешь его и подбираешь если требуется или что как ты его там.

Так вот ты можешь к ней обращаться КОГДА угодно ОТКУДА угодно. Из любой другой функции. Что мешает gosub loot добавить в несколько мест кода? и усёёё)) Или давай конкретный пример с участком кода приводи, если всё ещё не согласен...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 5:08
Сообщение #55


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



хорошо, вот кусок кода отвечающий за нажатие скилла и мышки для передвижения и хлебание бутылок, до этого участка и после идут вычисления. Чтоб сделать как вы говорите нужно будет вставить поиск цвета лута findcolor вроде бы еще 3 раза - до нажатия скилла, после нажатия скилла и после передвижения чтоб он после каждого действия проверял есть лут или нет и отправлял в ту часть скрипта где сбор лута. Даже если так, там есть wait 100 wait 600 за это время, которое отводится на передвижение он пробежит мимо лута.
Код
if timer1 > 2200
            sendex_down e
            set timer1 0
            wait 1500
            sendex_up e
            end_if
            set #flask #flask + 1
    if #flask > 1
        if_not 329, 1052 1052944
            sendex 1
            else
            sendex 2
        end_if
        if 376, 1052 1250322 and 329, 1052 1052944
            sendex 3
        end_if
        set #flask 0
    end_if
    move #tupx, #tupy
    wait 100
    sendex qqq
    kleft_down #tupx, #tupy
    wait 600
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 5:24
Сообщение #56


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 5:08) *

хорошо, вот кусок кода отвечающий за нажатие скилла и мышки для передвижения и хлебание бутылок, до этого участка и после идут вычисления. Чтоб сделать как вы говорите нужно будет вставить поиск цвета лута findcolor вроде бы еще 3 раза - до нажатия скилла, после нажатия скилла и после передвижения чтоб он после каждого действия проверял есть лут или нет и отправлял в ту часть скрипта где сбор лута. Даже если так, там есть wait 100 wait 600 за это время, которое отводится на передвижение он пробежит мимо лута.
Код
if timer1 > 2200
            sendex_down e
            set timer1 0
            wait 1500
            sendex_up e
            end_if
            set #flask #flask + 1
    if #flask > 1
        if_not 329, 1052 1052944
            sendex 1
            else
            sendex 2
        end_if
        if 376, 1052 1250322 and 329, 1052 1052944
            sendex 3
        end_if
        set #flask 0
    end_if
    move #tupx, #tupy
    wait 100
    sendex qqq
    kleft_down #tupx, #tupy
    wait 600




findcolor вставлять не нужно всюду. Его только 1 раз нужно вставить в функцию лута

Код
:loot
findcolor
if bla bla
   gosub pick_up
end_if
return


И вот в ваш код вставляем лишь gosub loot как вы хотите до нажатия скила, после и т.д. лишь строчку gosub loot


Далее, куда он убежит, если он поднимает лут? а после поднятия вернется в бой, ведь в лут он ушел по госабу. Т.е он спокойно поднимет дроп, потом додерется, потом подвигается.
Разницы по времени не будет вообще между тем что у вас сейчас по разным скриптам и если объединить всё в один.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 5:36
Сообщение #57


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



в таком случае нужно будет вставить gosub так

Код

gosub loot                         //перед нажатием скилла нужна проверка тоже
  if timer1 > 2200
            sendex_down e
            set timer1 0
            wait 1500
            sendex_up e
            end_if
gosub loot                       // после скилла

..... //бутылки          

    move #tupx, #tupy
    wait 100
    sendex qqq
gosub loot           // после телепортации
    kleft_down #tupx, #tupy  // передвижение без времени отведенного на него не получится
    wait 600                         // за это время как я и сказал он может пробежать пол экрана и пропустить что то важное
gosub loot     //после бега
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 5:49
Сообщение #58


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 5:36) *

в таком случае нужно будет вставить gosub так

Код

gosub loot                         //перед нажатием скилла нужна проверка тоже
  if timer1 > 2200
            sendex_down e
            set timer1 0
            wait 1500
            sendex_up e
            end_if
gosub loot                       // после скилла

..... //бутылки          

    move #tupx, #tupy
    wait 100
    sendex qqq
gosub loot           // после телепортации
    kleft_down #tupx, #tupy  // передвижение без времени отведенного на него не получится
    wait 600                         // за это время как я и сказал он может пробежать пол экрана и пропустить что то важное
gosub loot     //после бега



Для начала сгодится.

Далее, по бегу - потому что он неправильно реализован у вас. Я имею ввиду wait.

Вместо wait 600 используем цикл:

Код
set #timeOut timer + 600
set #timer timer
while #timer < #timeOut
   gosub loot
   //gosub ещё что-то что вам надо там смотреть в это время
   set #timer timer
   wait 1  
end_while


Таким образом, пока он в этом цикле на 600 мс, он выслеживает лут и т.п.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
nykep
сообщение 8.3.2019, 6:03
Сообщение #59


****

Apprentice
Сообщений: 233
Регистрация: 1.9.2012
Группа: Пользователи
Наличность: 1195
Пользователь №: 15.246
Возраст: 25



может быть и так можно, если будет не влом попробую, а то придется переделывать много чего и тестировать еще долго
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 8.3.2019, 6:06
Сообщение #60


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(nykep @ 8.3.2019, 6:03) *

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

Не просто так можно, я бы даже сказал - так нужно =)
Ваш способ со скриптами принесет ещё много проблем, помимо текущих.
А чем жирнее будет разрастаться код, тем больше нужно будет переделывать) поэтому лучше сразу переделать, пока код маленький.

Но смотрите сами, я думаю, что со временем вы в любом случае дойдете до этого. Во всяком случае так было у меня.
Успехов!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 7:07
Designed by Nickostyle