Контент Nazgool - Страница 14 - AMK Team
Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. Nazgool

    Скриптование

    А-а-а, мать-перемать, сравнивать нужно было со строкой : if ren == "renderer_r2" then... Теперь наконец-то всё стало на свои места.
  2. Nazgool

    Скриптование

    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
  3. Nazgool

    Скриптование

    Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2? Это глобальная переменная с именем renderer_r2? Или это может быть локальная, объявленная в данном модуле (блоке) до её использования? Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там. Поэтому она равна nil, и ничему другому. Вот поэтому проверка никогда и не пройдёт.
  4. Nazgool

    Скриптование

    Непонятно какой именно, точнее где это должно находиться? Если это скрипт из папки scripts, то можно и через _g. А если какой-то другой... Callisto, уточни - что именно ты хочешь сделать?
  5. Nazgool

    Скриптование

    Callisto, для Сталкера, насколько припоминаю, есть такой ход : getFS():exist(path) path - вроде как полный путь к файлу (папке?). Пусть более знающие сталкера подскажут точнее. Во всяком случае, пока не ответят, можешь попробовать. А если для "нормального" lua нужно будет, то милости прошу.
  6. Nazgool

    Скриптование

    Callisto ,с io или без?
  7. По хорошему не нужно переписывать функции. Для кириллицы сделать отдельными, иначе скорость раза в 2 падает.
  8. Nazgool

    Скриптование

    Твоя таблица у меня работает нормально. Так что может ты не так что-то исправил, либо опять причуды lua а-ля сталкер. Отправил тебе ЛС. Смотри там. -------- Ага, таки ты всё-таки наисправлял... Пожалуйста.
  9. Nazgool

    Скриптование

    Не нужен там никакой второй аргумент. У меня всё работает. Можешь показать свою таблицу? Или дай несколько чисел, которые не правильно переводятся. Да, ещё найди и замени вот ещё что (там лишнее поле создаётся) : for i = 0, 9 do t100['0'..i] = char(240+i) end
  10. Nazgool

    Скриптование

    Да, действительно я забыл про 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
  11. Nazgool

    Скриптование

    Нет. Просто вызывай : 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] и т.д. И будут тебе твои таблицы в прежнем виде
  12. Nazgool

    Скриптование

    fCloneTable и fCopyTable можно одной функцией сделать Себе так и сделал. Да и на вид по-проще.
  13. Nazgool

    Скриптование

    Artos, OFF_ender, пробуй :
  14. Nazgool

    Скриптование

    Ну это смотря как кодировать. Если использовать 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 с компа и не парить себе мозги. Вот.
  15. Nazgool

    Скриптование

    В моём варианте ключи id_a, id_b, numb записываются только один раз. В сохраняемой строке они занимают всего 16 байт. Вот и весь выигрыш в пакете. Всё остальное это значения каждой из подтаблиц. После загрузки строки подтаблицы примут первоначальный вид, каждая с ключами и естественно со значениями. Так что решай что тебе нужнее - 16 байт или нормальный вид подтаблиц. Дальше. Если ты не обращался ко второй таблице, то и записывать её нет смысла. Передавай в вызове только одну s=toString(table1). ну или какую нужно. 8192 байта размер пакета Если тебе будет жалко 16-ти байт, давай подкину вариант, который экономит ещё порядка 200 (может и больше) байт (т.е. максимальный размер таблицы формата 2х50 не превысит 874 байта). А ещё другими словами - в тот же размер (1074) можно записать таблицы формата 2х62
  16. Nazgool

    Скриптование

    В твоём примере я стрингов не видел. В общем так. Я исхожу из следующих утверждений. 1. Таблицы две. 2. В каждой из этих таблиц находится массив из таблиц 3. Все таблицы из массива имеют одинаковые ключи (id_a, id_b и numb) 4. Каждое значение ключа - число из указанного диапазона. Если так, то, как я уже говорил, для 50-ти полей в каждой из таблиц и максимальных значений каждого поля размер будет 1074 байта
  17. Nazgool

    Скриптование

    OFF_ender Если очень нужно, то именно для твоих таблиц могу дать вариант "на скорую руку". Насколько я понял таблиц будет сохраняться две. Если в каждой будет по 50 полей, то размер сохраняемой строки составит около 1кб +-. Так что если ещё актуально - прошу. Хотя сорри. Что означает <1..65535>? кол-во символов или числа из этого диапазона?
  18. Если учитывать что у нас подавляющее большинство использует 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) Как раз сейчас ковыряюсь с конвертацией самых ходовых кириллических кодировок. Если сделать, то тогда и для всех остальных можно будет использовать.
  19. Когда-то давно попалась мне эта статья ещё в оригинале. Решил её исправить. В общем, как видели, начал писать, да духа не хватило. Если соберусь с силами - закончу. Да. И в данном случае нужно писать: table_1['0201'] = nil Так это вроде как эквивалентная запись, разве нет!?ColR_iT Это "обман зрения" Написав : table_1.0201 = nil Идёт обращение к ЧИСЛУ! - 0201 А по синтаксису lua к ключу, являющемуся числом, обращаются : table_1[0201] = nil Так что если мы хотим обратиться как строке, то остаётся только один вариант : table_1['0201'] = nil
  20. Artos, буду буквоедствовать. Если бы я сказал : "Каждое найденное вхождение такой строки..." Но было сказано именно "шаблона", который, как известно, хоть и является строкой, но есть набором специальных элементов со всеми вытекающими. Кстати, а зачем объявлять локальную sValue='' в строке local sPattern,sValue = "","" ? Она и так локальна для цикла for.
  21. На самом деле в этом примере итерации будет две. Вроде и знаю что две, но понять почему - не могу. Где-то тут зарыто : local s = 'abc' print(s:match('^()a()b()c()$')) -- 1 2 3 4 При "gmatch"-е с шаблоном ".-" находятся места символов (не сами символы) - 4 шт. При "gmatch"-е с шаблоном ".*" находится вся строка до нуль-символа. Вот тут думаю, что эта строка находится до последнего шаблона пустых скобок перед нуль-символом. А при следующей итерации определяется и сам нуль-символ (почему-то ???). Не пойму, короче.
  22. Ага. Понятно что тебе не понятно Действительно, в приведённом тобою примере смысла меньше, чем мало. Например в строке нужно найти слова, начинающиеся со строчной и заглавной буквы: 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
  23. Если есть некая строка "sDiv", то шаблон "sPattern" будет иметь вид - '[^%s%'..sDiv..']+' (иначе, наверное, другой ?) В строке "sStr" будет происходить поиск всех вхождений шаблона "sPattern" Каждое найденное вхождение такого шаблона записывается в переменную "sValue" и заноситься в таблицу "tRet". Думаю что объяснение не очень. Но и вопрос не лучше. Полнее пожалуйста. Что именно не ясно?
  24. Callisto, ну это смотря с чем ты работаешь. Для чистого lua можно сменить кодировку. У меня (Win7 rus) сработала эта: s = "строка" os.setlocale("Russian_Russia.10007") -- или "Russian_Russia.10017" (Ukraine) print(s:upper()) -- СТРОКА
  25. 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(...) что одно и то же в рамках одного модуля.
×
×
  • Создать...