|
Ошибка get scripts |
|
|
cirus |
7.3.2019, 20:06
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26707
Пользователь №: 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 при такой привязке работает гораздо быстрее Раньше было что неактивные вкладки работали быстрее чем активная. Хотя вроде исправлялось.
|
|
|
|
xolost |
7.3.2019, 23:01
|
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
Надеюсь, здешние мастера не закидают меня камнями, ибо самоучка, просто выбрал то, что удобно. А разносить по закладкам удобнее в других языках. Там именно вызываем функцию из другой закладки и не нужно этих танцев с бубнами. Поэтому там разносить можно, здесь смысла не имеет.
|
|
|
|
xolost |
8.3.2019, 3:21
|
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 Не знаю какая игра у вас, точнее какой режим у неё - пошаговая или как, но алгоритм по-сути универсальный.
|
|
|
|
nykep |
8.3.2019, 4:15
|
Apprentice
Сообщений: 233
Регистрация: 1.9.2012 Группа: Пользователи Наличность: 1200
Пользователь №: 15.246
Возраст: 25
|
изометрическая рпг Я че то не понимаю че с этим ютубом наделали, я в свой профиль захожу там даже мои видео не отображаются, которые я когда то давно делал, только если зайти в творческую студию можно их найти, а когда открываю это видео там нет ничего кроме видео, даже названия нет (. Ладно может оно еще обрабатывается, позже станет доступно. Скорость прохождения снизится потому что в то время когда он передвигается и использует скиллы он не сможет смотреть за лутом потому что он занят передвижением и атакой (IMG: style_emoticons/default/smile.gif)
|
|
|
|
xolost |
8.3.2019, 4:30
|
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035
|
Цитата(nykep @ 8.3.2019, 4:15) Скорость прохождения снизится потому что в то время когда он передвигается и использует скиллы он не сможет смотреть за лутом потому что он занят передвижением и атакой (IMG: style_emoticons/default/smile.gif) А что мешает смотреть лут после каждого удара? Вы думаете 5 секунд на это уходить будет? Я правильно же понимаю, что лут у вас такой: Ищем картинку или несколько, то это лут или зона для поиска лута, затем жмем поднять мышкой или клавишей. Поиск нескольких картинок это ваще фигня по времени. Вы ничего не потеряете) Т.е. пока в цикле избиения, после каждого удара или скила смотрим gosub loot и всего делов. И между мобами смотрим лут дополнительно.
|
|
|
|
nykep |
8.3.2019, 5:08
|
Apprentice
Сообщений: 233
Регистрация: 1.9.2012 Группа: Пользователи Наличность: 1200
Пользователь №: 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
|
|
|
|
xolost |
8.3.2019, 5:24
|
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 Далее, куда он убежит, если он поднимает лут? а после поднятия вернется в бой, ведь в лут он ушел по госабу. Т.е он спокойно поднимет дроп, потом додерется, потом подвигается. Разницы по времени не будет вообще между тем что у вас сейчас по разным скриптам и если объединить всё в один.
|
|
|
|
xolost |
8.3.2019, 5:49
|
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 мс, он выслеживает лут и т.п.
|
|
|
|
xolost |
8.3.2019, 6:06
|
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035
|
Цитата(nykep @ 8.3.2019, 6:03) может быть и так можно, если будет не влом попробую, а то придется переделывать много чего и тестировать еще долго
Не просто так можно, я бы даже сказал - так нужно =) Ваш способ со скриптами принесет ещё много проблем, помимо текущих. А чем жирнее будет разрастаться код, тем больше нужно будет переделывать) поэтому лучше сразу переделать, пока код маленький. Но смотрите сами, я думаю, что со временем вы в любом случае дойдете до этого. Во всяком случае так было у меня. Успехов!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|