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

3 страниц V < 1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Последовательное выполнение скриптов
DarkMaster
сообщение 11.9.2021, 12:07
Сообщение #21


***********

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



Цитата
При таком методе - как я понимаю, имеется вероятность попадания в массив при перемешивании одного и того же значения. Что не допустимо в моем случае...

Всмысле? Дублироваться значения которые не дублировались ранее - не будет, никакие значения которые присутствовали в массиве не пропадут. Массив именно перемешивается.

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


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


***********

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



Цитата
set #rand 1 + random(#size)

Вот это разве что можно чуть изменить. Вроде как более правильное распеределение получается при:
set #dynamicpart #size - #i
set #rand #i + random(#dynamicpart)
читать можно про метод Дуршенфельда


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


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



Извиняюсь - не разобралсо )
А кто-нибудь заморачиввался попыткой управления в 3д шутере?

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.9.2021, 19:35
Сообщение #24


***********

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



Было дело. Смысла мало - динамика слишком велика для графического анализа. Если прям хочется, то тупо читать память, искать там координаты врагов, свои, считать вектора. Правда пилот тут уже становится постольку поскольку.


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


***********

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



Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, при статичном свапе от 1 до #arr отклонения от ожидаемого до 20%. math.random(i, #arr) однозначно лучше - отклонения в пределах статистической погрешности.
код для теста
Код
-- 1 - обмен позиций 1-10
-- 2 - обмен позиций i-10
local method = 2

math.randomseed(os.clock())

local n = 1000000

-- инициализируем счетчик
local counter = {}
for i = 1, 10 do
    counter[i] = {}
    for j = 1, 10 do
        counter[i][j] = 0
    end
end

for z = 1, n do
    local a = {1,2,3,4,5,6,7,8,9,10}
    for i = 1, #a do
        local tmp = a[i]
        local r
        if method == 1 then
            r = math.random(1,10)
        else
            r = math.random(i,10)
        end
        a[i] = a[r]
        a[r] = tmp
    end
    for i = 1, #a do
        counter[a[i]][i] = counter[a[i]][i] + 1
    end
end

local p = {}
for i = 1, 10 do
    p[i] = {}
    for j = 1, 10 do
        p[i][j] = math.abs(10 - counter[i][j] / (n / 100)) * 10
    end
end

for i = 1, 10 do
    log("% отклонения перемещения "..i.." от ожидаемого в позицию:")
    for j = 1, 10 do
        local s = string.format("%f",p[i][j])
        if p[i][j] < 10 then
            s = "0"..s
        end
        if j < 10 then
            log(" "..j..": "..s)
        else
            log(j..": "..s)
        end
    end
end

lua перемешать массив. готовая функция
Код
local shuffle = function(a)
    math.randomseed(os.clock())
    for i = 1, #a do
        local tmp = a[i]
        local r = math.random(i, #a)
        a[i] = a[r]
        a[r] = tmp
    end
    return a
end


Сообщение отредактировал DarkMaster - 12.9.2021, 14:18


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


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



Цитата(DarkMaster @ 12.9.2021, 6:56) *

Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, отклонения от жидаемого до 20%. math.random(i, #arr) однозначно лучше.



Это конечно хорошо - вещь иногда полезная весьма. Но тогда весь код надо на ЛУА переносить)
А с ориентацией в 3d играх, беда ( Затратный код получается - игру переписать можно) Слишком много входных данных для анализа нужно - цвет не вариант, изображения меняются взависимости от углаобзора, анализ растояния до припятствия невыполним, или слишком затратен.
Пока остается только - тригер -> время бега-> поиск очередного тригера -> опять бег
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.9.2021, 7:28
Сообщение #27


***********

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



Цитата
Но тогда весь код надо на ЛУА переносить

Я выше приводил код для фикса в старом синтаксисе. Там всего лишь добавляется одна переменная.

Цитата
set #dynamicpart #size - #i
set #rand #i + random(#dynamicpart)



Цитата
А с ориентацией в 3d играх, беда

Ориентация как раз зачастую более-менее решаемая, а вот динамическое определение окружающих мобов/игроков уже намного сложнее.


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


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



В игре - мобы и игроки разным цветом горят - это я вижу более менее решаемым. Сканировать экран на поиск цвета - при совпадении поворачивать игрока и центрировать на совпадение цвета.
Но тут встает вопрос - если игрок дальнобойный, то хорошо. А вот если ближнего боя - встает вопрос о дистанции. Как ее определить?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.9.2021, 8:27
Сообщение #29


***********

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



Цитата
Но тут встает вопрос - если игрок дальнобойный, то хорошо. А вот если ближнего боя - встает вопрос о дистанции. Как ее определить?

Размер цели, цвет скилов, миникарта. Все сильно зависит от приложения.


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


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



скилы всегда активны - они не привязаны к дистанции. Можно просто стоять и лупить со всех стволов в пустоту)) На миникарте кроме твоего расположения тоже нет информации..
А вот с размером цели - надо подумать. Мониторить массив совпадений цвета?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.9.2021, 10:45
Сообщение #31


***********

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



Цитата
Мониторить массив совпадений цвета?

Самый простой вариант.


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


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



затык очередной - почему скрипт так себя ведет?
kod+log

Код

    set $X findimage (20 70 300 200 (Scripts\Blade\img\arena_box.bmp) %arrt 2) // ищем панель управления аренами
    if $X >0 //
log найдена панель управления аренами
            set #X1 %arrt[#1 1]
            set #Y1 %arrt[#1 2]
            kleft #X1,#Y1     //
log тут #X1,#Y1
wait 2000

в логе получаем
21:34:22 2 (test.txt, 21): Открывваем управление аренами
21:34:25 2 (test.txt, 28): найдена панель управления аренами
21:34:26 2 (test.txt, 32): тут 0,0



область указывваю одну - получаю координаты левые ) Причем если картинка действительно на экране - все работает корректно

Вот где тут косяк? Час потратил отлавливая этот баг (IMG:style_emoticons/default/smile.gif)
code

Код

set $X findimage (10 70 300 1400 (Scripts\Blade\img\arena_box1.bmp) %arr 2) // Так все работает норм
if $X > 0
    log lose
    set $T FindImage (20 70 300 200 (Scripts\Blade\img\arena_box1.bmp) %ar 2) // так находит картинку даже если ее на экране нет
     if $T >0 //
                log найдена панель управления аренами вне цикла
            set #X1 %ar[#1 1]
            set #Y1 %ar[#1 2]
                kleft #X1,#Y1     //
                log тут #X1,#Y1   ar
     else
     log вне цикла нет панели арен
     end_if
end_if



Вопросик такой - находясь в процедуре можно вызывать другую процедуру?
Ответ - можно
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
BlackBot
сообщение 17.9.2021, 15:18
Сообщение #33


**

Neophyte
Сообщений: 33
Регистрация: 17.8.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.047



Цитата(DarkMaster @ 12.9.2021, 6:56) *

Вобщем не поленился я... Потестил нормальное распределение. Разница существенная, при статичном свапе от 1 до #arr отклонения от ожидаемого до 20%. math.random(i, #arr) однозначно лучше - отклонения в пределах статистической погрешности.


С многомерными массивами версия для пилота - не фурыкает. Склеивает значения в одномерный массив.
Это так для справки - если кто будет мучаться )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 18.9.2021, 4:54
Сообщение #34


***********

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



Цитата
С многомерными массивами версия для пилота - не фурыкает.

В смысле на старом синтаксисе? Вообще старый синтаксис очень условно "многомерный". Он двумерный. Дальше только лютыми костылями. Для двумерного массива не вижу особой проблемы поэлементно скопировать значения. Ну и мой код принципиально не отличается от кода Cirus'a - все проблемы будут те же самые. Это так на всякий случай для потомков) А то прозвучало с цитатой двусмысленно.


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


*

Registred
Сообщений: 8
Регистрация: 18.9.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.083



Народ через какую функцию в с++ осущесвлекн клик мышью по хендлеру, поскажите, я перепробовал sendmessage, postmessage,SendInput не идет чего то
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.9.2021, 18:08
Сообщение #36


**********

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



Цитата
Народ через какую функцию в с++ осущесвлекн клик мышью по хендлеру

SendMessage, WM_LBUTTONDOWN и WM_LBUTTONUP.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergei1234
сообщение 18.9.2021, 18:43
Сообщение #37


*

Registred
Сообщений: 8
Регистрация: 18.9.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.083



проблема решена
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 18.9.2021, 18:50
Сообщение #38


********

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



Цитата(Sergei1234 @ 18.9.2021, 18:43) *

это си шарп, но не столь важно



не думаю что это совсем верное утверждение, хотя бы из того, что подобный код на с++ не зависнет, а на шарпе повис.

Не видно что за FindWindow, там мб выхода из цикла нет
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.9.2021, 18:51
Сообщение #39


**********

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



Неверно заданы значения констант WM_LBUTTONDOWN и WM_LBUTTONUP.
Через пилот так:
Код
--lua
local ffi = require("ffi")
local WM_LBUTTONDOWN = 0x0201
local WM_LBUTTONUP = 0x0202
ffi.cdef[[
int SendMessageA(int hWnd, int Msg, int wParam, int lParam);
int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
]]

local wndHandle = workwindow()   -- привязаться к окну Ctrl+A
local x = 200
local y = 100

ffi.C.SendMessageA(wndHandle, WM_LBUTTONDOWN, 0, y * 65536 + x)
wait (100)
ffi.C.SendMessageA(wndHandle, WM_LBUTTONUP, 0, y * 65536 + x)

Если не работает SendMessage, то можно попробовать PostMessage.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergei1234
сообщение 18.9.2021, 19:07
Сообщение #40


*

Registred
Сообщений: 8
Регистрация: 18.9.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.083



Цитата(cirus @ 18.9.2021, 18:51) *

Неверно заданы значения констант WM_LBUTTONDOWN и WM_LBUTTONUP.
Через пилот так:
Код
--lua
local ffi = require("ffi")
local WM_LBUTTONDOWN = 0x0201
local WM_LBUTTONUP = 0x0202
ffi.cdef[[
int SendMessageA(int hWnd, int Msg, int wParam, int lParam);
int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
]]

local wndHandle = workwindow()   -- привязаться к окну Ctrl+A
local x = 200
local y = 100

ffi.C.SendMessageA(wndHandle, WM_LBUTTONDOWN, 0, y * 65536 + x)
wait (100)
ffi.C.SendMessageA(wndHandle, WM_LBUTTONUP, 0, y * 65536 + x)

Если не работает SendMessage, то можно попробовать PostMessage.


спасибо проблема решена я лохопед неверный код WM_LBUTTONDOWN сделал
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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