-
Число публикаций
618 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
37 [Подарить AMKoin]
Весь контент пользователя Nazgool
-
А-а-а, мать-перемать, сравнивать нужно было со строкой : if ren == "renderer_r2" then... Теперь наконец-то всё стало на свои места.
-
Stiingray, дык а я тебе про что говорил? В первом случае ты получил значение ren : local ren = con:get_string("r2_gloss_factor") И теперь можешь его с чем-то сравнивать : if ren == 3 then Во втором случае ты получаешь какое-то значение ren : local ren = con:get_string("renderer") И с чем ты его сравниваешь? : if ren == renderer_r2 then ? (теперь внимательно, согласно синтаксису lua) Со значением переменной с именем renderer_r2 Т.е. есть некая область памяти, в которую записано ... НЕЧТО. Как lua найдёт эту область памяти? Нужно иметь координаты этой области. Вот координаты и записываются в имени этой области. Другими словами, если записано : renderer_r2, то lua ищет одноимённую запись в стеке (renderer_r2) которые на самом деле являются координатами области памяти, и обращаясь к этой области "показывает" то, что там "записано". Покажи мне - где у тебя ЕЩЁ (РАНЬШЕ) упоминается буквосочетание renderer_r2! В том коде что ты уже не один раз показываешь - НИГДЕ. А если нигде, то это значит только одно - nil
-
Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2? Это глобальная переменная с именем renderer_r2? Или это может быть локальная, объявленная в данном модуле (блоке) до её использования? Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там. Поэтому она равна nil, и ничему другому. Вот поэтому проверка никогда и не пройдёт.
-
Непонятно какой именно, точнее где это должно находиться? Если это скрипт из папки scripts, то можно и через _g. А если какой-то другой... Callisto, уточни - что именно ты хочешь сделать?
-
Callisto, для Сталкера, насколько припоминаю, есть такой ход : getFS():exist(path) path - вроде как полный путь к файлу (папке?). Пусть более знающие сталкера подскажут точнее. Во всяком случае, пока не ответят, можешь попробовать. А если для "нормального" lua нужно будет, то милости прошу.
-
Callisto ,с io или без?
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
По хорошему не нужно переписывать функции. Для кириллицы сделать отдельными, иначе скорость раза в 2 падает. -
Твоя таблица у меня работает нормально. Так что может ты не так что-то исправил, либо опять причуды lua а-ля сталкер. Отправил тебе ЛС. Смотри там. -------- Ага, таки ты всё-таки наисправлял... Пожалуйста.
-
Не нужен там никакой второй аргумент. У меня всё работает. Можешь показать свою таблицу? Или дай несколько чисел, которые не правильно переводятся. Да, ещё найди и замени вот ещё что (там лишнее поле создаётся) : for i = 0, 9 do t100['0'..i] = char(240+i) end
-
Да, действительно я забыл про tonumber. Найди в функции toTable : for m in v:gmatch('%S+') do t2[k[n]] = to10(m) n = n+1 end и замени на : for m in v:gmatch('%S+') do local x = to10(m) t2[k[n]] = tonumber(x) n = n+1 end
-
Нет. Просто вызывай : s = toString(table1) Таблица полностью запишется в строку. Вот эту строку и сохраняй Если будет несколько таблиц, то так и пиши : s = toString(table1,table2,table3,table4) -- и т.д. Все эти таблицы запишутся в одну строку. При загрузке получай из пакета строку и вызывай : tab = toTable(s) - s это полученная строка, tab - таблица с восстановленными таблицами table1, и т.д. Затем пишешь : table1 = tab[1] А если сохранял несколько, то : table1 = tab[1] table2 = tab[2] table3 = tab[3] и т.д. И будут тебе твои таблицы в прежнем виде
-
fCloneTable и fCopyTable можно одной функцией сделать Себе так и сделал. Да и на вид по-проще.
-
Artos, OFF_ender, пробуй :
-
Ну это смотря как кодировать. Если использовать HEX вариант то да, один байт экономиться. Т.е. число 1000 переводиться в 3-х значное hex-число, число 100 в 2-х значное Это значит что числа диапазона 256-4095 кодируются 3-мя символами(байтам), 4096-65535 4-мя байтами и т.д. Я использую кодирования с основанием 100 Поэтому диапазоны такие : 99-9999 кодируются 2-мя байтами), 10000-999999 - 3-мя, 1000000-99999999 4-мя и т.д. Так что, как видишь, для этой системы кодирования всё-равно что 100, что 1000. Кодироваться всё равно будет 2-мя байтами в отличии от HEX Насчёт индексов 1,2,3 или ключей стрингов. Функциям по барабану. Количество строки байтов увеличится на длину строк всех ключей - 3 Ну будет лишний десяток байт. Если не критично, то можешь писать стринги. Artos, мне хорошо известно в какую сторону иду я. Не знаю как для тебя, но для меня упражнения в lua дело очень даже полезное. Так что всем спасибо за предупреждения. Приняли. Подумаем на досуге... как-то... Ты же уже давно знаешь меня, и пора привыкнуть что для меня получить готовый результат не самоцель. Ну возьму я хранилища. Нет. Чего мелочиться. Качать готовые моды паком, удалить на фиг lua с компа и не парить себе мозги. Вот.
-
В моём варианте ключи id_a, id_b, numb записываются только один раз. В сохраняемой строке они занимают всего 16 байт. Вот и весь выигрыш в пакете. Всё остальное это значения каждой из подтаблиц. После загрузки строки подтаблицы примут первоначальный вид, каждая с ключами и естественно со значениями. Так что решай что тебе нужнее - 16 байт или нормальный вид подтаблиц. Дальше. Если ты не обращался ко второй таблице, то и записывать её нет смысла. Передавай в вызове только одну s=toString(table1). ну или какую нужно. 8192 байта размер пакета Если тебе будет жалко 16-ти байт, давай подкину вариант, который экономит ещё порядка 200 (может и больше) байт (т.е. максимальный размер таблицы формата 2х50 не превысит 874 байта). А ещё другими словами - в тот же размер (1074) можно записать таблицы формата 2х62
-
В твоём примере я стрингов не видел. В общем так. Я исхожу из следующих утверждений. 1. Таблицы две. 2. В каждой из этих таблиц находится массив из таблиц 3. Все таблицы из массива имеют одинаковые ключи (id_a, id_b и numb) 4. Каждое значение ключа - число из указанного диапазона. Если так, то, как я уже говорил, для 50-ти полей в каждой из таблиц и максимальных значений каждого поля размер будет 1074 байта
-
OFF_ender Если очень нужно, то именно для твоих таблиц могу дать вариант "на скорую руку". Насколько я понял таблиц будет сохраняться две. Если в каждой будет по 50 полей, то размер сохраняемой строки составит около 1кб +-. Так что если ещё актуально - прошу. Хотя сорри. Что означает <1..65535>? кол-во символов или числа из этого диапазона?
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Если учитывать что у нас подавляющее большинство использует Windows, и подавляющее большинство, из этого большинства, использует кириллицу, то у подавляющего большинства, из последнего большинства, несомненно установлена кодировка ANSI 1251 (cp1251). А если так, то обучать можно и не как-то, а красиво : local _lower = string.lower local _upper = string.upper function string.lower(s) return _lower(s:gsub("([А-Я])",function(c) return string.char(c:byte()+32) end):gsub("Ё", "ё")) end function string.upper(s) return _upper(s:gsub("([а-я])",function(c) return string.char(c:byte()-32) end):gsub("ё", "Ё")) end Сюда можно присоединить и тех немногих, у кого стоит ISO 8859-5 (cp28595) Как раз сейчас ковыряюсь с конвертацией самых ходовых кириллических кодировок. Если сделать, то тогда и для всех остальных можно будет использовать. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Когда-то давно попалась мне эта статья ещё в оригинале. Решил её исправить. В общем, как видели, начал писать, да духа не хватило. Если соберусь с силами - закончу. Да. И в данном случае нужно писать: table_1['0201'] = nil Так это вроде как эквивалентная запись, разве нет!?ColR_iT Это "обман зрения" Написав : table_1.0201 = nil Идёт обращение к ЧИСЛУ! - 0201 А по синтаксису lua к ключу, являющемуся числом, обращаются : table_1[0201] = nil Так что если мы хотим обратиться как строке, то остаётся только один вариант : table_1['0201'] = nil -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Artos, буду буквоедствовать. Если бы я сказал : "Каждое найденное вхождение такой строки..." Но было сказано именно "шаблона", который, как известно, хоть и является строкой, но есть набором специальных элементов со всеми вытекающими. Кстати, а зачем объявлять локальную sValue='' в строке local sPattern,sValue = "","" ? Она и так локальна для цикла for. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
На самом деле в этом примере итерации будет две. Вроде и знаю что две, но понять почему - не могу. Где-то тут зарыто : local s = 'abc' print(s:match('^()a()b()c()$')) -- 1 2 3 4 При "gmatch"-е с шаблоном ".-" находятся места символов (не сами символы) - 4 шт. При "gmatch"-е с шаблоном ".*" находится вся строка до нуль-символа. Вот тут думаю, что эта строка находится до последнего шаблона пустых скобок перед нуль-символом. А при следующей итерации определяется и сам нуль-символ (почему-то ???). Не пойму, короче. -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Ага. Понятно что тебе не понятно Действительно, в приведённом тобою примере смысла меньше, чем мало. Например в строке нужно найти слова, начинающиеся со строчной и заглавной буквы: local tRet = {} local sStr = "ab Ab aB AB" sPattern = '%l%S+' -- {'ab','aB'} sPattern = '%u%S+' -- {'Ab','AB'} for sValue in sStr:gmatch(sPattern) do table.insert(tRet, sValue) end -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Если есть некая строка "sDiv", то шаблон "sPattern" будет иметь вид - '[^%s%'..sDiv..']+' (иначе, наверное, другой ?) В строке "sStr" будет происходить поиск всех вхождений шаблона "sPattern" Каждое найденное вхождение такого шаблона записывается в переменную "sValue" и заноситься в таблицу "tRet". Думаю что объяснение не очень. Но и вопрос не лучше. Полнее пожалуйста. Что именно не ясно? -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Callisto, ну это смотря с чем ты работаешь. Для чистого lua можно сменить кодировку. У меня (Win7 rus) сработала эта: s = "строка" os.setlocale("Russian_Russia.10007") -- или "Russian_Russia.10017" (Ukraine) print(s:upper()) -- СТРОКА -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Dennis_Chikin, Именно к такой функции не бессмысленно. В отличии от модулей lua, в Сталкере, для функций каждого из файлов(т.е. модулей), окружением устанавливается не данный модуль, а глобальное окружение (_G) ! При вызове функций (использовании не локальных переменных), их поиск будет происходить в таблице _G. Поэтому, если вызвать функцию из примера просто как is_wounded(...), то эта функция будет и запрашиваться из таблицы _G. Там такой нет. Вылет. Функции с такими названиями есть в нескольких файлах (модулях). Напр. в xr_conditions, xr_wounded ну и в dialogs. Вот, как известно, и вызывается как имя_модуля.имя_функции : xr_wounded.is_wounded , dialogs.is_wounded ... Имена то загруженных модулей в _G есть. Также для каждого модуля устанавливается поле с именем - this (типа _М в lua) и значением - сам модуль (таблица, юзердата не важно) Теперь, если функция из модуля, должна вызвать другую функцию из этого же модуля, то нужно писать(из указанного примера) dialogs.is_wounded(...). Но поскольку есть переменная this (синоним dialogs), то можно писать и this.is_wounded(...) что одно и то же в рамках одного модуля.
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды