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

11 страниц V « < 9 10 11  
Ответить в эту темуОткрыть новую тему
> Lua
DarkMaster
сообщение 15.1.2018, 18:52
Сообщение #201


***********

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



Я так и делал. Чет проблемы какие-то при этом. Где-то пашет, где-то нет.


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


***********

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



Ошибка.

--lua
send(" ")


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


********

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



Кнайт, не знаю, рассматривал ли ты такой вариант, но есть такой вариант не убивать машину после окончания скрипта.

Есть апи :
Код
luaL_dostring


Сейчас ,как я понимаю, ты юзаешь luaL_dofile. Тут можно самому прочитать файл(даже можно что-то препроцессировать). Далее полученный буффер оборачиваешь в тот же цикл while (понятно как ?) и отдаешь на запуск. Скрипт крутится как надо.

Если используешь какие-то обертки, то думаю не проблема запустить луа именно из строки, а не файла.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.2.2018, 18:11
Сообщение #204


***********

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



Цитата
Кнайт, не знаю, рассматривал ли ты такой вариант, но есть такой вариант не убивать машину после окончания скрипта.

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


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


********

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



1)Почему все вкладки хостятся в одной машине ?
2)Так по предложенному методу все данные удалятся по выходу из while-обертки. (и при условии что под каждую вкладку выделяется одна машина).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.2.2018, 22:25
Сообщение #206


***********

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



Цитата
1)Почему все вкладки хостятся в одной машине ?

Уже возможно нет, но в целом это интересный метод взаимодейсвия через глобальные переменные.
do
...
end
никто не отменял, если нужно сделать локальное пространство имен, но в целом я не уверен, как правильно было бы все это реализовать. С одной стороны необходимо иметь связь между вкладками, с другой нужно иметь бОльшую изоляцию, чем просто отсутсвие local перед переменной имхо.
2) даже то, что внутри while, если не прописан local, будет глобальным.


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


********

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



Я не понял, что ты написал, поэтому напишу свое видение (IMG:style_emoticons/default/smile.gif)

Если брать работу луа без оберток, то одна машина представлена одним объектом lua_State. Представим, что их 3 : a1, a2, a3.

Создаем

Код
a1 = luaL_newstate();
a2 = luaL_newstate();
a3 = luaL_newstate();


Добавим по одной глобальной переменной.

Код
lua_pushinteger(a1, 100);
lua_setglobal(a1, "a1");
lua_pushinteger(a2, 200);
lua_setglobal(a2, "a2");
lua_pushinteger(a3, 300);
lua_setglobal(a3, "a3");


Все переменные действительны только в своих машинах, т.е. переменной a1 нет в машине a2 и a3 и т.п.
Можем делать что угодно, не боясь зацепить другую вкладку по сути.

А если нам нужен доступ к переменной другой вкладки, то получаем его так :

Код
lua_getglobal(a1, "a1"); //вытолкали на верх стека значение a1 в машине а1
lua_pushinteger(a2, lua_tointeger(a1, lua_gettop(a1))); //скопировали из машины a1 на верх стека a2
lua_setglobal(a2, "a2"); //присвоили в машине a2 переменной a2


Все изолированно. Доступ к другим вкладкам имеется. Разумеется, допилить можно еще получше, но это, как я считаю, работает уже сносно (ну или хотя бы в теории).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 25.2.2018, 23:47
Сообщение #208


********

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



Ну, а это реализация абстрактной script_variable(<script number>, "varname")

Код
//global (in pilot)
int vmsCnt = 20;
lua_State *vms = new lua_State[cmsCnt];

int script_variable(lua_State *L)
{
   int vm = lua_tointeger(L, /*param number*/);
   lua_getglobal(vms[vm], lua_tostring(L, /*param number*/));
   lua_xmove(vms[vm], L, 1);
   return 1;
};
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2018, 0:08
Сообщение #209


********

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



while не имеет понятия локальности. Как и в любом языке работа идет после объявления переменной. Если требуется в функции обрабатывать локальную переменную с таким же именем, то переопределяем ее с пометкой local. local в глобальной видимости = global. По сему, локальность может быть только в функциях(local не обязательно указывать, если нет глобальных с таким же именем), неймспейсах или че там еще есть. НУ ИЛИ Я ОЧЕНЬ СИЛЬНО ОШИБАЮСЬ, и луа девелоперы решили перевернуть систему и по моему мнению не очень умные люди.

Код
global r = 100

function mem()
   local r = 2 --переопределили
   while 1 do
      log(r)
   end
end

function mem2()
   while 1 do
      log(r)
   end
end

function loc()
--здесь все локальное, даже без пометок
end

mem()
mem2()



Не работает у меня, эксепшен бьет, поправьте.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2018, 0:23
Сообщение #210


********

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



Да, действительно, я не прав, local нужно писать в каждой функции, иначе будет создавать глобальная переменная. Что тут сказать...

Но в любом случае речь не идет о счетчиках для циклов и т.п. Нам нужны вещи типа clickoffset, так что этот вопрос мало что дает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.2.2018, 17:31
Сообщение #211


***********

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



Цитата
А если нам нужен доступ к переменной другой вкладки, то получаем его так :

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


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


********

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



Не вижу проблем использовать синхронизацию. Крит. секции например. Обернуть в них геттер/сеттер а дальше все система разрулит.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.2.2018, 20:48
Сообщение #213


***********

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



Цитата
Не вижу проблем использовать синхронизацию. Крит. секции например. Обернуть в них геттер/сеттер а дальше все система разрулит.

Сколько лет фиксили, фиксили и фиксили пилот по этому поводу? Кстати насколько я знаю проблема осталась, но скорее, как теоретическая, т.к. на практике она только в многочасовых искуственных тестах иногда проявляется. Я так понимаю это проблема не системы, а старой версии делфи на которой написан пилот и которую вроде как даже обновить не получается.


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


********

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



Ну что там кнайт десяток лет фиксил я не знаю, кода не видел. Я лишь предлагаю варианты, а там уж он пусть сам решает как реализовывать. Сейчас у него есть шанс сделать нормально и без граблей пилота.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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