|
Очередность в Lua, /--/ |
|
|
Levo222 |
22.9.2019, 14:45
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(Fors1k @ 22.9.2019, 18:19) Код //-----Условия set $a 100, 200 0 and 300, 400 435346 set $b 500, 600 0 and 700, 800 43475 set $c ??? //-----Условные действия while ($a) = 1 // приоритет 1 send A // действия приоритет 1 end_while while ($b) = 1 and ($a) !=1 // приоритет 2 send B // действия приоритета 2 end_while while ($c) = 1 and ($a) != 1 and ($b) != 1 // приоритет 3 send C // действия приоритета 3 end_while Про таймер - непонятна задача. Типа если send A выполняется уже минуту подряд, то нужно вернуться куда-то в начало, или как? Ладно, если применительно к Lua, например пишем функцию Код local TimerB = function () --ограничение на вызов действия по таймеру B - 6 сек local Timeb = 6 local endTimerb = os.clock() + Timeb if os.clock() <= endTimerb then --таймер B истёк local Timeb = 0 end local TimerS = function () --ограничение на вызов действия по таймеру S - 5 сек local Times = 5 local endTimer = os.clock() + Times if os.clock() <= endTimer then --таймер S истёк local Times = 0 end
while #a = 1 // приоритет 1 if TimerB() = 0 --время вышло then send A // действия приоритет 1 else --TimerB ~=0 -- время не вышло send A2 -- действия приоритет 1.1 -- потому что действие Send A часто возможно но не целесообразно чаще чем раз в 6 секунд, поэтому вводим таймер. else end end while #b = 1 and #a !=1 // приоритет 2 if TimerS = 0 --время вышло then send B // действия приоритет 2 else --TimerS ~=0 -- время не вышло send B2 -- действия приоритет 2.1 else send B // действия приоритета 2 end end while #c = 1 and #a != 1 and #b != 1 // приоритет 3 и так далее send C // действия приоритета 3 end_while
таймер для действий которые возможно осуществить но не целесообразно чаще чем раз в N секунд если чаще - лучше перейти к более приоритетным задачам К примеру: У нас есть солдат У него есть возможность построить окоп и стрелять, построение окопа увеличивает обороноспособность солдата, но отнимает его силы К примеру он построил окоп и начал стрелять, но враг разрушил окоп, солдат опять построил окоп, но враг опять разрушил окоп Поскольку окоп по трудовым затратам стоит намного больше простой стрельбы нужно ограничить его применение таймером, чтобы солдат всё же вел какие-то боевые действия потому что в конечном счете наша задача застрелить врага, а не сидеть в окопе! / с окопом, или без него / а не только строить окоп, для этого нужен таймер. Наиболее часто выполняемое действие лица за единицу времени определяет его статус. Если он будет строить окопы - он будет строитель а не солдат, а такого в планах не было. ---------------------------------------- P.S: Я так и не понял какое значение будет иметь например строчка return в функции Код local TimerB = function () --ограничение на вызов действия по таймеру B - 6 сек local Timeb = 6 local endTimerb = os.clock() + Timeb if os.clock() <= endTimerb then --таймер B истёк local Timeb = 0 end если я её добавлю, кажется что недостаточно функциональный скрипт без этих команд что и куда она будет возвращать? P.S: Я забыл что в языке Lua есть возможность использовать математические функции умножение и вычитание так бы функция таймера выглядела примерно: Код local Time1 = 0 local GetTime = os.clock() + Time1 if GetTime()-Time1>3 then
|
|
|
|
Levo222 |
22.9.2019, 18:20
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
еще бы кто-то показал на простом примере как значения из одной программы передать в интерпретатор/файл, который прочитает интерпретатор а прочитав интерпретатором, обновить, или обмен данными через оперативную память, а то что-то все эти findcolorы и image уже мягко говоря напрягают) например нашел в функциях общего Lua такой пример: Код -- table is in the stack at index 't'
lua_pushnil(L); // first key while (lua_next(L, t) != 0) { printf("%s - %s\\n", luaL_typename(L, -2), luaL_typename(L, -1));
lua_pop(L, 1); } по типу ключ-значение, как я понимаю при копировании в оперативную память нужно присваивать какую-то шифровку данным, чтобы они не путались между собой? Как в данном случае между 2-мя программами будет выглядеть"отправка-запись-чтение-интерпретация-действие"? Скажем между 2-мя пилотами?
|
|
|
|
Fors1k |
23.9.2019, 0:31
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2420
Пользователь №: 18.746
|
Цитата(Levo222 @ 22.9.2019, 14:45) К примеру: У нас есть солдат У него есть возможность построить окоп и стрелять, построение окопа увеличивает обороноспособность солдата, но отнимает его силы К примеру он построил окоп и начал стрелять, но враг разрушил окоп, солдат опять построил окоп, но враг опять разрушил окоп Поскольку окоп по трудовым затратам стоит намного больше простой стрельбы нужно ограничить его применение таймером, чтобы солдат всё же вел какие-то боевые действия потому что в конечном счете наша задача застрелить врага, а не сидеть в окопе! / с окопом, или без него / а не только строить окоп, для этого нужен таймер. Код //-----Условия set $a 100, 200 0 and 300, 400 435346 set $b 500, 600 0 and 700, 800 43475 //-----Условные действия while ($a) = 1 // окопа нет send A // строим окоп end_while // окоп готов set timer1 while (($b) = 1 and ($a) !=1) or (($b) = 1 and timer1 < 6000) // есть враг, окоп построен. Если окоп разрушен, то пойдем его строить не ранее, чем через 6 сек. после его предыдущей постройки. send B // стреляем end_while // враг убит, или пора чинить окоп
--------------------
Для связи
|
|
|
|
bumer |
23.9.2019, 15:52
|
Apprentice
Сообщений: 167
Регистрация: 2.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 14.998
|
Fors1k В общем это будет наверное овтоп, но всё же хочется понять Код set $a 100, 200 0 and 300, 400 435346
Что чего определяет set $a (100, 200) это наверно координаты х,у. 0 нолик цвет? and (300, 400) вторая координата х,у.? 435346 это наверное ещё одни цвет... Я всё правильно понимаю?
|
|
|
|
Fors1k |
23.9.2019, 18:21
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2420
Пользователь №: 18.746
|
Цитата(bumer @ 23.9.2019, 15:52) Fors1k В общем это будет наверное овтоп, но всё же хочется понять Код set $a 100, 200 0 and 300, 400 435346
Что чего определяет set $a (100, 200) это наверно координаты х,у. 0 нолик цвет? and (300, 400) вторая координата х,у.? 435346 это наверное ещё одни цвет... Я всё правильно понимаю? Ага, все верно
--------------------
Для связи
|
|
|
|
Levo222 |
26.9.2019, 14:19
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(Fors1k @ 23.9.2019, 22:21) Ага, все верно
НУ вобщем то таймер написал, но он выглядит громоздко. И код как-будто давится им Код lastTimeProcessed = os.clock() local function IsTimeToProcess(currentTime) span = currentTime - lastTimeProcessed if span >= 6 then lastTimeProcessed = currentTime return true end return false end Нельзя ли сделать попроще? потому что в блоке приходится проверять и IsTimeToProcess(os.clock()) и true, что несколько не соответствует упрощению кода.
|
|
|
|
Levo222 |
28.9.2019, 22:06
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 29.9.2019, 1:08) Что в итоге хочется сделать?
Хочется цикличность блоков задать в виде Цитата(Fors1k @ 28.8.2019, 2:05) Код local a = (...) local b = (...) local c = (...) local f = (...)
... while #a = 1 do// приоритет 1 if f == 1 then send A // выполняем необходимые действия elseif f1 == 1 then send B end end end
while (#b = 1 and #a !=1) do // приоритет 2 if f == 1 then send A1 // выполняем необходимые действия elseif f2 == 1 then send B1 end end end
while (#c = 1 and #a != 1 and #b != 1) do // приоритет 3 if f == 1 then send A2 // выполняем необходимые действия elseif f3 == nil send B2 end end end
Но я слаб в функциях Много очень переменных - вобще сложилось впечатление что производители Lua кода, да и может других языков, каждый раз лепят какого-то "франкенштейна" из нерабочих частей что-то слепили, оно вроде шевелится, но непонятно за счет чего работает.
|
|
|
|
DarkMaster |
29.9.2019, 18:04
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Цитата Много очень переменных - вобще сложилось впечатление что производители Lua кода, да и может других языков, каждый раз лепят какого-то "франкенштейна" из нерабочих частей что-то слепили, оно вроде шевелится, но непонятно за счет чего работает. Из того с чем работал, считаю луа самым логичным и выверенным языком. Тут кончено нужно понимать, что он и достаточно мал сам по себе и вылизать такой объем несопопставимо проще, но тем не менее. При этом еще и в рамках этой простоты получить такую гибкость...
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|