|
|
  |
Пожелания, Предложения по развитию сюда |
|
|
BSW_rama |
27.2.2013, 9:48
|
   
Apprentice
Сообщений: 188
Регистрация: 28.1.2013 Группа: Пользователи Наличность: 0
Пользователь №: 15.728
Возраст: 32

|
я так понял что снимать данные с экрана это процесс долгий, но обрабатывать картинку быстро.. иначе как объяснить скорость findcolor, если тот же get color работает на порядок медленее?... и вот решил с помощью findcolor выполнить функцию getcolor, поставил диапазон 0-16777215... но обломко findcolor в масив пишет координаты, а цвет как бэ нет... и так нужен get color который бы создавал порядковый масив (ага масив третьего уровня.. но мы обойдёмся двухмергым) формат вывода в масив такой %color[#x #y]color ну или просто %color[#a]color где #x #y - порядковые координаты точек (шаг и зона задаётся в команде) color - цвет точки, или #a - порядковый нормер точки. пример: getcolor (0 0 500 500 100 100 %color Т) - в поле 0,0-500,500 с шагом 100 100 снять цвета в масив %color, Т - тип масива, скажем 1 это одномерный, 2 - двухмерный.
|
|
|
|
xolost |
11.3.2013, 0:40
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Понял я чего не хватает реально. Какой-нить бряки для gosub, которая будет обнулять все активные ссылки. Т.е. Сейчас так: Код goto a3
:a1 if #a = 1 goto a2 else gosub a2 end_if
:a2 return goto a1
:a3 gosub a1 И как результат, в случае, если #a = 1, то на a2 мы вернемся в :a3, который нам уже не нужен, как оказалось, входе дальнейшей работы. Соответственно, если сделать бряку, которая все помнящие уходы по госапу будет чистить, то получится так: Код goto a3
:a1 if #a = 1 Break_return // название бряки от балды goto a2 else gosub a2 end_if
:a2 return goto a1
:a3 gosub a1 И меня уже кинет туда куда нужно. Уже 40 минут пытаюсь отследить, какой из госапов у меня подвисает в памяти, а в следствии этого рушится бот в одном месте. Логов у меня около 200 строчек, а найти пока не удалось. Бряка бы конечно порешала бы эту проблему.
|
|
|
|
xolost |
11.3.2013, 1:09
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата(Zeleax @ 11.3.2013, 1:50)  xolost Если честно - ничего не понял \ Уверен на 99%, что здесь что-то лишнее накручено )
Вообще, считается хорошим стилем программирования не использовать goto без крайней надобности. Иначе в программах и чёрт ногу сломит (как и получается в данном случае).
В том и дело, что гото мне очень помогает, как и госап, потому приходится совмещать. И откуда вообще такое убеждение, что если гото использовать, то плохой программист? Я совершенно не считаю себя плохим программистом(пока ещё не достаточно опытным, но не плохим), но ботов высококлассных уже сделал несколько(об этом свидетельствуют желания моих клиентов). И считаю что гото ОЧЕНЬ прекрасно вписывается в данный контент программирования. А что именно не ясно? Не ясен пример, или не ясно пожелание? Вот вы юзаете цикл for когда нужно из него выйти - юзаете break по сути тоже самое госап. сделал ряд госапов, а потом вышел как-то иначе. И вот тут поможет обнулить память госапов - break2 какой-нить..
|
|
|
|
Zeleax |
11.3.2013, 9:29
|
        
ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010 Группа: Пользователи Наличность: 0 Из: Киев
Пользователь №: 13.093

|
1) Я не говорил, что программист плохой. Я говорил, что использование goto не считается хорошим стилем программирования. Это как построить дом из кирпичей, бутылок, банок, бумаги, а потом облицовать. Вроде и дом отличный с виду, свои функции выполняет, а потом начинаешь перестраивать и всё разваливается )
2) Из gosub нужно выходить только по return, и никак иначе.
Сообщение отредактировал Zeleax - 11.3.2013, 9:33
--------------------
|
|
|
|
xolost |
11.3.2013, 9:42
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата(Zeleax @ 11.3.2013, 10:29)  1) Я не говорил, что программист плохой. Я говорил, что использование goto не считается хорошим стилем программирования.
2) Из gosub нужно выходить только по return, и никак иначе.
1) (IMG: style_emoticons/default/smile.gif) Не буду спорить, может быть и не считается. 2) Вот тебе примерчик! Идет человек по улице - у него задача доехать на автобусе до какой-то точки. Идет идет - выполняя скрипт хотьбы. Доходит до остановки, видит автобус, видит номер его и принимает решение сесть в автобус - госап. Едет в автобусе постоянно проверяя не его ли остановка(т.е. сидит в цикле госапа и палит контору). Но неожиданно, на него нападает другой пассажир и он вынужден уйти в битву. Значит, из предыдущего варианта он может ЛИБО сделать ретурн - по Вашему стилю, потом ждать когда в основной части скрипта прочитается строка с битвой. И потом как-то после боя суметь вернуться в автобус. Либо, не теряя ни секунды, уходим по новому госапу в битву. Когда битва закончится, всё пойдет снова ок. Но может в битве что-то серьезное случилось(нам поломали голову и т.д.) и нам нужно вернуться к шапке в самое начало, где мы по новой подгружаем все системы и т.д. т.е. через гото уходим в шапочку. И вот 2 госапа остались не возвращенными и висят.
|
|
|
|
Zeleax |
11.3.2013, 9:58
|
        
ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010 Группа: Пользователи Наличность: 0 Из: Киев
Пользователь №: 13.093

|
Всё зависит от реализации. У меня обычно реализуется так: скрипт1: - крутится бесконечный основной цикл движения и поиска мобов; - постоянно проверяется: а) состояние перса (атакован/неатакован) б) близость мобов Если перс атакован, то ныряем в gosub битвы, где устанавливаем глобальную переменную-флаг битвы, бьем моба до смерти, выходим по return. Если моб близко, то атакуем моба и переходим на следующий круг цикла. Если перс неатакован, но флаг битвы установлен, то собираем дроп и убираем флаг битвы. (Если атакован, то снова ныряем в битву. Это всё тот же общий цикл). скрипт2: проверка уровня жизни перса. Если жизни мало - лечимся
Сообщение отредактировал Zeleax - 11.3.2013, 10:11
--------------------
|
|
|
|
xolost |
11.3.2013, 10:22
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Цитата(Zeleax @ 11.3.2013, 10:58)  Всё зависит от реализации. У меня обычно реализуется так: скрипт1: - крутится бесконечный основной цикл движения и поиска мобов; - постоянно проверяется: а) состояние перса (атакован/неатакован) б) близость мобов Если перс атакован, то ныряем в gosub битвы, где устанавливаем глобальную переменную-флаг битвы, бьем моба до смерти, выходим по return. Если моб близко, то атакуем моба и переходим на следующий круг цикла. Если перс неатакован, но флаг битвы установлен, то собираем дроп и убираем флаг битвы. (Если атакован, то снова ныряем в битву. Это всё тот же общий цикл). скрипт2: проверка уровня жизни перса. Если жизни мало - лечимся
Вот всё в первую очередь зависит от размера скрипта. У тебя несколько скриптов, выполняют функции, а у меня один скрипт, выполняет 30-40 функций. И там объемы соответствующие, зато запустил один скрипт и всё работает, никакой головной боли(в итоге). И вот последняя деталька - этот обнулитель нужен....)))
|
|
|
|
xolost |
20.3.2013, 2:04
|
     
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035

|
Не могу с уверенностью сказать что это так необходимо, но все равно предложу, а там уже сами решайте)
Дать возможность принтскрину скринить картинку не полностью. Т.е. оставлять в ней дыры(например белового цвета). Поясняю. Указываю делать скрин от x = 500 y = 500 в ширину 200 и высоту 200. но примерно от 600 600 до 650 650 есть лишний элемент графический, который на скрине категорически не нужен. Поэтому, сейчас приходиться руками закрашивать фоном этот кусок. А было бы клёво, если бы можно было указать в команде принтскрина, какую область закрасить(причем несколько мест сразу) т.е. маркеровка - фон и не нужную часть.
Лично у меня вот какая ситуация сложилась, в игре поменяли половину графики и около 500 скринов пошли лесом... Скринил руками и нарезал и закрашивал лишнюю часть. И вот встроел в бота автоскринилку скринить часть нужной картинки, т.е. без лишнего куска, и потому 30% скринов получаются неудачными и нужно все равно руками их перескринивать. А если бы кусок автовырезан на фон, то 100% картинок будут удачными.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|