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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Автохилер ВоВ 2.4.3, скрипт для хилинга 1-5 юнитов в пати. Хочется добиться работы с readme
Alfer
сообщение 23.9.2016, 17:12
Сообщение #1


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



Итак есть интерес нарисовать хилера.

Формально от 1 до 5 разных окон запущенного клиента из одной и той же папки.
Система Win7 x64.
Клиент "WoW 2.4.3 build 8606 Jul 10 2008"

Для начала беру 2 окна.
Для двух окон родился код через поиск цвета точки, что неудобно.
Код

// перед запуском скрипта прописать макросы для лечения фокуса и DD выбрать в фокус.
set #hanldewinheal 1644826 // указать хендл окна хилера
set #hanldewinDD 596864 // указать хендл окна DD
set $hppoint1 "40, 155 57344" // DD тут ткнуть Ктрл+А для указания точки срабатывания начала лечения игрока. Где-то 70-75% ХП
set $hppoint2 "39, 182 52480" // Heal тут ткнуть Ктрл+А для указания точки срабатывания начала лечения хилера. Где-то 50-70% ХП
set #tw1 0
set #gcd 1500
set #hp1 1234
set workwindow #hanldewinDD
readmem #hp1 0x24543D1C R
log #hp1
wait 40s
:check
set windowpos [1 715 [494 325 [#hanldewinheal]]]
set windowpos [69 288 [1208 753 [#hanldewinDD]]]
set workwindow #hanldewinDD
while ($hppoint1) and ($hppoint2)
if_not ($hppoint1)
goto heal_1
end_if
if_not ($hppoint2)
goto heal_2
end_if
end_while
:heal_1
set workwindow #hanldewinheal
set timer
send {num_4} #gcd
send {num_5} #gcd
set workwindow #hanldewinDD
if_not ($hppoint2)
goto heal_2
end_if
set workwindow #hanldewinDD
if ($hppoint1)
goto check
end_if
set workwindow #hanldewinheal
send {num_4} #gcd
set workwindow #hanldewinDD
if ($hppoint1)
goto check
end_if
set workwindow #hanldewinheal
send {num_4} #gcd
set workwindow #hanldewinDD
if_not ($hppoint2)
goto heal_2
end_if
set workwindow #hanldewinDD
if ($hppoint1)
goto check
end_if
set workwindow #hanldewinDD
while_not ($hppoint1)
set workwindow #hanldewinheal
send {num_6} 2000
set workwindow #hanldewinDD
if_not ($hppoint2)
goto heal_2
end_if
set workwindow #hanldewinheal
send {num_0}
if timer > 11000
set workwindow #hanldewinDD
if ($hppoint1)
goto check
end_if
goto heal_1
end_if
end_while
goto check
:heal_2
set workwindow #hanldewinheal
set timer
send {num_7} #gcd
send {num_8} #gcd
set workwindow #hanldewinDD
if_not ($hppoint1)
goto heal_1
end_if
set workwindow #hanldewinDD
if ($hppoint2)
goto check
end_if
set workwindow #hanldewinheal
send {num_7} #gcd
set workwindow #hanldewinDD
if ($hppoint2)
goto check
end_if
set workwindow #hanldewinheal
send {num_7} #gcd
set workwindow #hanldewinDD
if_not ($hppoint1)
goto heal_1
end_if
set workwindow #hanldewinDD
if ($hppoint1)
goto check
end_if
set workwindow #hanldewinDD
while_not ($hppoint2)
set workwindow #hanldewinheal
send {num_9} 2000
set workwindow #hanldewinDD
if_not ($hppoint1)
goto heal_1
end_if
set workwindow #hanldewinheal
send {num_0}
if timer > 11000
set workwindow #hanldewinDD
if ($hppoint2)
goto check
end_if
goto heal_2
end_if
end_while
goto check


Эта конструкция работает вполне сносно. Но решил углубиться в работу с памятью. Перечитал, что по-человечески нужно отталкиваться от базового адреса с цепочкой оффсетов, но пока не понял как ее отследить.

Основной алгоритм предполагается такой
пока ((ДД_ХП_актуал)\(ДД_ХП_макс) > 0.75) И ((Хил_ХП_актуал)\(Хил_ХП_МАХ) > 0.75) ждать
Иначе проверяем чьё меньше и отправляемся в процедуру его отхила.
процедура отхила ДД
процедура отхила Хила

Через ArtMoney нашёл 4 адреса(ДД хп макс и актуал, и Хил ХП макс и актуал )
Но это значение не читается в переменную
set workwindow #hanldewinDD
readmem #hp1 0x<Адресартмани> D (а Артмани тип целое 4 байта)
log #hp1
Но переменная выдает ошибку. (-1) при выводе переменной в лог

Перепробовал все возможные варианты типа данных и типа переменной всегда ошибка (-1)

Что не так подскажите куда копать в работе с памятью wow.
перечитал длинную тему про оффсеты, слазил на буржуйский форум не нашёл готовой цепочки офсетов для ХП своего и членов пати\рейда, и не нашёл механизма поиска этой цепочки. Но ведь если АртМани находит адрес памяти значит как минимум из этого адреса можно получить цифру в переменную, а вот не отдает. Подскажите куда копать ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 23.9.2016, 22:06
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Как раз сейчас обсуждаем с кнайтом проблему чтения памяти вова. При этом я 100% могу сказать, что память вова я читал, причем на бк. Старые версии поднимал - рабочую не нашел. Есть код на с++ который точно отрабатывает по чтению адресов вова. В данным момент данная проблема в работе.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.9.2016, 0:56
Сообщение #3


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Чем пилот в этом плане отличается от c++?. апи то одно и тоже.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 12:30
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Апи чего? Чтения памяти другого процесса? Это не апи. В последней бете проблема решена. Почему-то требуется двойная привязка, думаю, это будет пофиксено в ближайшее время.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.9.2016, 14:57
Сообщение #5


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Хорошо, перефразирую. Чтение памяти вов чем-то отличается от чтения памяти других приложений ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 24.9.2016, 15:25
Сообщение #6


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



Можете подсказать как искать цепочки оффсетов ?

Ищем значение, дальше вторым артмани ищем значение адреса памяти ? и из первого адреса вычитаем второй таки образом получая смещение ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 15:27
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



артмани/читинжи. Либо сайтец по вову есть в виде форума, там кучи оффсетов.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 15:57
Сообщение #8


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата
Хорошо, перефразирую. Чтение памяти вов чем-то отличается от чтения памяти других приложений ?

Как оказалось да. Нужны некоторые дополнительные привилегии.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 24.9.2016, 16:20
Сообщение #9


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



А еще вопрос. есть базовый адрес приложения (wow.exe). Если их запущено несколько из одной и той же папки, у них будет одинаковый базовый адрес? И как оффсеты тогда как считать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 16:50
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Что есть базовый адрес? Адрес начала модуля? Может быть статикой, может быть динамикой. Если под базовым подразумевается некоторая статика с указателем, то вот пример считывания двух указателей и прибавление оффсетов:
Код
    readmem #pointer1 0xB4B2BC d
    log #pointer1  errorlevel
    set #pointer1 #pointer1 + 0x65B8
    readmem #pointer2 #pointer1 d
    log #pointer2   errorlevel
    set #pointerCam #pointer2 + 0x40
    readmem $cam #pointerCam f
    log $cam       errorlevel


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.9.2016, 17:17
Сообщение #11


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Цитата(DarkMaster @ 24.9.2016, 16:57) *

Как оказалось да. Нужны некоторые дополнительные привилегии.



Флаги доступа к процессу или что-то другое ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 19:45
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



В общак писать не буду схему реализации. Ни к чему это. Если интересно, могу в личку.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 24.9.2016, 20:14
Сообщение #13


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Ночная сборка b18 полный фикс.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 25.9.2016, 20:13
Сообщение #14


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



Спасибо, теперь память читается. А что, пилот с нецелыми числами не работает ? результат делания меньшего числа на большее - 0

К примеру в две переменные читаю максимальное и текущее значения ХП.
а дальше хочу получить цифру от 0 до 1, чтобы понять какая часть от максимального ХП осталась.

set #hp1 #hp_act / #hp_max

и тут я заметил, что переменная #hp1 не может быть дробной 0,67 например.
Т.е. пилот не работает с нецелыми числами ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.9.2016, 20:25
Сообщение #15


**********

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



Цитата
Т.е. пилот не работает с нецелыми числами ?

Через плагин работает.
https://forum.uokit.com/index.php?showtopic=29139
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 25.9.2016, 21:07
Сообщение #16


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



Цитата
использование чисел с плавающей точкой(в т.ч. их разницы) в пилоте
по средствам оператора if может быть не корректным.


Это как ? Т.е. может нормально работать, а может и нет ? Как раз в Ифе и использоватьсябудет. И только с ифом проблема, или с любой проверкой Например AND или XOR ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.9.2016, 21:44
Сообщение #17


**********

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



Цитата
Т.е. может нормально работать, а может и нет ?

Код
if 10 = 10.0
   log !!!
end_if

Условие не выполнится, хотя с точки зрения математики верно.

Я бы использовал проценты, вместо сравнивания дробных чисел.
Код
set #hpmax 5000                        // максимальное хп
set #hpact 1234                        // текущее хп

set #hp1 #hpact * 100 / #hpmax         // процент хп
if #hp1 < 30                           // если хп меньше 30%
   log #hp1
end_if
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 25.9.2016, 21:56
Сообщение #18


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



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


Да я их использовать и хочу. Только что-то после получения нуля в делении меньшего на большее как-то не подумал множить на 100 перед делением и решил делить на 4 части и множить на 3...


Пока получается какая-то такая конструкция:

Код

Код

// перед запуском скрипта прописать макросы для лечения фокуса и лечимый объект выбрать в фокус.
// себя не лечит.
set #hanldewinheal 459404 // указать хендл окна хилера
set workwindow #hanldewinheal
set #base_adress 0x00e29d28 // базовый, где хранится адрес ячейки начала структуры чара.
readmem #first_adress #base_adress D
set #offset_maxHP_heal 0x26b0
set #offset_maxHP_DD 0x65F26B0
set #adress_maxHP_DD #first_adress + #offset_maxHP_DD //указать адрес максимального значения ХП ДДшника
set #adress_maxHP_Heal #first_adress + #offset_maxHP_heal //вычисляем адрес максимального значения ХП Хилера
set #adress_actHP_DD #adress_maxHP_DD - 0x18 //вычисляем адрес актуального значения ХП ДДшника
set #adress_actHP_Heal #adress_maxHP_Heal - 0x18 //вычисляем адрес актуального значения ХП Хиера
set #gcd 1500
log #base_adress
log #first_adress
log #adress_maxHP_Heal
//wait 40s
:0
set #mark 0
readmem #hpDD_m #adress_maxHP_DD D
readmem #hpDD_a #adress_actHP_DD D
readmem #hpheal_m #adress_maxHP_Heal D
readmem #hpheal_a #adress_actHP_Heal D
log #hpDD_m
log #hpDD_a
log #hpheal_m
log #hpheal_a
wait 40s
call hpdd_check #hpDD_m #hpDD_a
call hpheal_check #hpheal_m #hpheal_a
goto #mark
goto 0
:1
set timer
send {num_4} #gcd
send {num_5} #gcd
readmem #hpDD_m #adress_maxHP_DD D
readmem #hpDD_a #adress_actHP_DD D
set #mark 0
call hpdd_check #hpDD_m #hpDD_a
if #mark <> 1
    goto #mark
end_if
send {num_4} #gcd
readmem #hpheal_m #adress_maxHP_Heal D
readmem #hpheal_a #adress_actHP_Heal D
set #mark 0
call hpheal_check #hpheal_m #hpheal_a
if #mark <> 1
    goto #mark
end_if
send {num_4} #gcd
readmem #hpDD_m #adress_maxHP_DD D
readmem #hpDD_a #adress_actHP_DD D
set #mark 0
call hpdd_check #hpDD_m #hpDD_a
if #mark <> 1
    goto #mark
end_if
while timer < 11000
    send {g}
    send {num_6} 2100
    send {num_0}
end_while
goto 0
:2
set timer
send {num_7} #gcd
send {num_8} #gcd
readmem #hpheal_m #adress_maxHP_Heal D
readmem #hpheal_a #adress_actHP_Heal D
set #mark 0
call hpheal_check #hpheal_m #hpheal_a
if #mark <> 2
    goto #mark
end_if
send {num_7} #gcd
readmem #hpDD_m #adress_maxHP_DD D
readmem #hpDD_a #adress_actHP_DD D
set #mark 0
call hpdd_check #hpDD_m #hpDD_a
if #mark <> 2
    goto #mark
end_if
send {num_7} #gcd
readmem #hpheal_m #adress_maxHP_Heal D
readmem #hpheal_a #adress_actHP_Heal D
set #mark 0
call hpheal_check #hpheal_m #hpheal_a
if #mark <> 2
    goto #mark
end_if
while timer < 11000
    send {g}
    send {num_9} 2100
    send {num_0}
end_while
goto 0
Proc hpdd_check #hpDD_m #hpDD_a
set #cs current_script
set #hp1 div(#hpDD_m 4) * 3
if #hp1 > #hpDD_a
   set #mark.#cs 1
end_if
end_proc
Proc hpheal_check #hpheal_m #hpheal_a
set #cs current_script
set #hp2 div(#hpheal_m 4) * 3
if #hp2 > #hpheal_a
   set #mark.#cs 2
end_if
end_proc
end_script



Не могу пока что отследить куда пишется хп патимемберов. Собственное нашёл и после перезапуска работает.

А и еще заметил, что в процедуре почему-то не изменяется переменная скрипта типа $
Код

Proc hpheal_check #hpheal_m #hpheal_a
set #cs current_script
set #hp2 div(#hpheal_m 4) * 3
if #hp2 > #hpheal_a
   set #mark.#cs 2   <-- вот тут если использовать $mark.#cs то в скрипте переменная $mark не изменяет значение.
end_if
end_proc


Из-за чего пришлось использовать цифровые метки для переходов в основном скрипте.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.9.2016, 23:44
Сообщение #19


**********

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



Цитата
<-- вот тут если использовать $mark.#cs то в скрипте переменная $mark не изменяет значение.

Походу баг.
Можно сделать так:
Код
if #hp2 > #hpheal_a
   set %a [1] "$mark"
   eval (set %a [1].#cs 2)
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Alfer
сообщение 26.9.2016, 16:15
Сообщение #20


**

Neophyte
Сообщений: 17
Регистрация: 23.9.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.128
Возраст: 32



Что-то не могу победить изменение переменной скрипта в процедуре.

Код полный

// перед запуском скрипта прописать макросы для лечения фокуса и лечимый объект выбрать в фокус.
set #base_adress 0x00e29d28 // базовый, где хранится адрес ячейки начала структуры чара.
set #offset_maxHP 0x26b0 // смещение для поиска максимального значения ХП выбранного окна
set #hanldewinheal 66202360 // указать хендл окна хилера
set #hanldewinDD 3939646 // указать хендл окна ДД
set #gcd 1500
:0
set workwindow #hanldewinheal
readmem #first_adress #base_adress D
set #adress_maxHP_Heal #first_adress + #offset_maxHP //вычисляем адрес максимального значения ХП Хилера
set #adress_actHP_Heal #adress_maxHP_Heal - 0x18 //вычисляем адрес актуального значения ХП Хиера
set workwindow #hanldewinDD
readmem #first_adress #base_adress D
set #adress_maxHP_DD #first_adress + #offset_maxHP //вычисляем адрес максимального значения ХП ДДшника
set #adress_actHP_DD #adress_maxHP_DD - 0x18 //вычисляем адрес актуального значения ХП ДДшника
set #mark 0
//wait 40s
call hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD
call hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal
goto #mark
goto 0
:1
set workwindow #hanldewinheal
send {num_4} #gcd
send {num_5} #gcd
set #mark 0
call hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD #mark
if #mark = 1
send {num_4} #gcd
set timer
call hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal #mark
if #mark = 1
send {num_4} #gcd
call hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD #mark
if #mark = 1
log timer
while timer < 15000
send_down {DOWN}
send_up {DOWN}
send {num_6} 2100
send {num_0}
log timer
end_while
end_if
end_if
end_if
goto #mark
goto 0
:2
set workwindow #hanldewinheal
send {num_7} #gcd
send {num_8} #gcd
set #mark 0
call hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal #mark
if #mark = 2
send {num_7} #gcd
set timer
call hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD #mark
if #mark = 2
send {num_7} #gcd
call hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal #mark
if #mark = 2
log timer
while timer < 15000
send_down {DOWN}
send_up {DOWN}
send {num_9} 2100
send {num_0}
log timer
end_while
end_if
end_if
end_if
goto #mark
goto 0
Proc hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD #mark
set #temp_workwindow workwindow
//set #cs current_script
set workwindow #hanldewinDD
readmem #hpDD_m #adress_maxHP_DD D
readmem #hpDD_a #adress_actHP_DD D
set #hp1 #hpDD_a * 100 / #hpDD_m
log #hp1
log #mark.1
if #hp1 < 75
set #mark.1 1
else
set #mark.1 0
end_if
log #mark.1
set workwindow #temp_workwindow
end_proc
Proc hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal #mark
set #temp_workwindow workwindow
//set #cs current_script
set workwindow #hanldewinheal
readmem #hpheal_m #adress_maxHP_Heal D
readmem #hpheal_a #adress_actHP_Heal D
set #hp2 #hpheal_a * 100 / #hpheal_m
log #hp2
if #hp2 < 75
set #mark.1 2
else
set #mark.1 0
end_if
set workwindow #temp_workwindow
end_proc
end_script


Проблема тут:
Код

set #mark 0
call hpdd_check #hanldewinDD #adress_maxHP_DD #adress_actHP_DD #mark
<...>
Proc hpheal_check #hanldewinheal #adress_maxHP_Heal #adress_actHP_Heal #mark
     set #temp_workwindow workwindow
     set #cs current_script
     set workwindow #hanldewinheal
     readmem #hpheal_m #adress_maxHP_Heal D
     readmem #hpheal_a #adress_actHP_Heal D
     set #hp2 #hpheal_a * 100 / #hpheal_m
     log #hp2
     if #hp2 < 75
        set #mark.1 2       <---- Вот так выдается ошибка ( (7): Ошибка! Проверьте правильность скрипта! EAccessViolation Access violation at address 00547DF2 in module 'uopilot_b019.exe'. Read of address 00000040
set logging #mark.1)
     else
        set #mark.#cs 0    <---- А вот так переменная #mark в основном скрипте не меняется.
     end_if
     set workwindow #temp_workwindow
end_proc
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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