Nazgool 250 Опубликовано 25 Апреля 2013 Поделиться Опубликовано 25 Апреля 2013 (изменено) Callisto ,с io или без? Изменено 25 Апреля 2013 пользователем Gun12 Ссылка на комментарий
Callisto 2 Опубликовано 25 Апреля 2013 Поделиться Опубликовано 25 Апреля 2013 Gun12, да мне в принципе не важно. Совсем забыла указать версию, мне для ТЧ. Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Callisto Рад тебя видеть... Можно попробовать через _g таблицу... Вроде типа _g[имя скрипт] .. _g[Callisto] это если скрипт такой Callisto.script. Только проверь сначала, работает-ли вообще такое, local scrpt_hve = (type(_g[Callisto]) == "table" and "has script") вот пример, если распечатать переменку, то можно определить есть скрипт или нет... Изменено 26 Апреля 2013 пользователем Unnamed Black Wolf Ссылка на комментарий
Nazgool 250 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Callisto, для Сталкера, насколько припоминаю, есть такой ход : getFS():exist(path) path - вроде как полный путь к файлу (папке?). Пусть более знающие сталкера подскажут точнее. Во всяком случае, пока не ответят, можешь попробовать. А если для "нормального" lua нужно будет, то милости прошу. Изменено 26 Апреля 2013 пользователем Gun12 Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 fs_file* exist(<абсолютный путь до файла>); // если файл с абсолютным путём существует, то возвращает объект типа fs_file, иначе nil fs_file* exist(<корень>, <путь относительно корня>); // аналогично, но для корень+относительный путь тут стоить использовать абсл. путь, но вроде вообще такая вещь в фс не работает.. Но попробуй.... Хотя вид с таблицей намного проще, быстрее, и менее затратен... Ссылка на комментарий
Nazgool 250 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 В общем, можно ли проверить существование файла и папки? Непонятно какой именно, точнее где это должно находиться? Если это скрипт из папки scripts, то можно и через _g. А если какой-то другой... Callisto, уточни - что именно ты хочешь сделать? Ссылка на комментарий
Stiingray 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) ColR_iT, ошибка была в том, что в условии вместо == было =. renderer_r2 - это не новая переменная, а значение переменной ren, т.к. в консоле команда полностью выглядит вот так: renderer renderer_r2. И, соответственно, строка : local ren = con:get_string("renderer")запоминает не renderer, а значение данной команды: renderer_r2Как я уже говорил, если просто выводить значение переменной ren, то выдается: renderer_r2, но, если прописать условие: if ren == renderer_r2 then news_manager.send_tip(db.actor, "%c[0,0,255,25] р2", nil, nil, 20000) end, то игра не реагирует. Ну что за человек? Пока носом не ткнёшь, так и будет писать одно и тоже... Где ты там у себя же в условии увидел оператор присваивания вместо сравнения? И заключи ты в конце концов предполагаемую строку renderer_r2 в кавычки! P.S. Учи матчасть. ColR_iT Изменено 26 Апреля 2013 пользователем ColR_iT Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 ещё можно local chunk, err = dofile("..\\gamedata\\scripts\\personal_test.lua") если есть, то err будет пуста... путь надо определить методом расчета из фс.лтх... =) Ссылка на комментарий
Stiingray 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Где ты там у себя же в условии увидел оператор присваивания вместо сравнения? Вот я тоже не пониманию, где ты в условии увидел оператор присваивания? И заключи ты в конце концов предполагаемую строку renderer_r2 в кавычки! P.S. Учи матчасть. И будет вылет сразу после запуска игры. ЗЫ Если сам не разбираешься, зачем писать-то тогда? Изменено 26 Апреля 2013 пользователем Stiingray 2 Ссылка на комментарий
Nazgool 250 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2? Это глобальная переменная с именем renderer_r2? Или это может быть локальная, объявленная в данном модуле (блоке) до её использования? Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там. Поэтому она равна nil, и ничему другому. Вот поэтому проверка никогда и не пройдёт. Изменено 26 Апреля 2013 пользователем Gun12 Ссылка на комментарий
Callisto 2 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 Gun12, Unnamed Black Wolf, Как все однако запутано в сталкере? Я всего-лишь хотела проверять существование папки gamedata в корне игры, но спасибо Charsi подсказал другой путь для реализации моей "похателки". Всем спасибо, пока вопросов нет Ссылка на комментарий
Stiingray 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Gun12, renderer_r2 - это не переменная, а значение команды renderer в консоле. Чтобы разъяснить ситуацию, вот скрипт с r2_gloss_factor (3 - это значение r2_gloss_factor): if level.present() and (db.actor ~= nil) and db.actor:alive() then if dik == DIK_keys.DIK_NUMPAD1 then local con = get_console() local ren = con:get_string("r2_gloss_factor") if ren == 3 then news_manager.send_tip(db.actor, "%c[0,0,255,25] р2", nil, nil, 20000) end end end а вот с renderer: if level.present() and (db.actor ~= nil) and db.actor:alive() then if dik == DIK_keys.DIK_NUMPAD1 then local con = get_console() local ren = con:get_string("renderer") if ren == renderer_r2 then news_manager.send_tip(db.actor, "%c[0,0,255,25] р2", nil, nil, 20000) end end end Изменено 26 Апреля 2013 пользователем Stiingray 1 Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 Callisto Поделишься? интересно какой способ... Ссылка на комментарий
Artos 99 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Callisto или Charsi, колитесь ;-) Если способ существования реальной папки в директории установки игры действительно заслуживает внимания - то он может быть интересен и другим. Если же речь о "виртуальных" папках - то в контексте вопроса опять возникает недосказанность... Физически существующая папка на диске и ее "существование" для приложения - далеко не одно и то же. Даи опять же, не ясно, интересует существование имени 'gamedata' или же папки, соотнесенной через '$game_data$'? ТЧ не имеет нормальных методов (io или аналогов) работы с физическими дисками/папками/файлами, а работает только через свой движок (namespace 'getFS')... а уж там то пона(недо)ворочено... Изменено 26 Апреля 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 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 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Я уже разобрался, действительно не хватало кавычек. А после подстановки кавычек вылетало из-за другого. А renderer_r2 - это значение render, также как 3 - значение r2_gloss_factor (это же консольные команды). Так что во втором случае все аналогично первому и что самое главное, теперь уже работает. Изменено 26 Апреля 2013 пользователем Stiingray 2 Ссылка на комментарий
ColR_iT 171 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 (изменено) Gun12, можешь не утруждать себя в пояснениях. Человек просто-напросто не понимает простой истины, что функция get_string для объекта консоли возвращает строку, т.е. здесь: local ren = con:get_string("renderer")переменная ren будет строкой. Если он играет на втором ренедере, то действительно, строка эта будет выглядеть как "renderer_r2". И добиться он пытается проверки того, играет ли он на самом деле на динамике или нет. Stiingray, на данной странице тебе дан ответ решения твоей проблемы, дальнейшие твои посты на эту тему, с непониманием происходящего, будут расценены как флуд. P.S. Учи матчасть! Изменено 26 Апреля 2013 пользователем ColR_iT Ссылка на комментарий
Nazgool 250 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 А-а-а, мать-перемать, сравнивать нужно было со строкой : if ren == "renderer_r2" then... Теперь наконец-то всё стало на свои места. Ссылка на комментарий
Callisto 2 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 Callisto или Charsi, колитесь ;-) Да особо тут колоться и нечего Это мой врожденный логический кретинизм. Ну не могу я точно и ясно сформулировать задачу. Я хотела проверять наличие папки gamedata, как некую часть защиты от читеров. Но мне был предложен другой вариант реализации моей "похателки", где не требуется проверка папки. Т.ч. ничего нового нет, от меня уж точно Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 26 Апреля 2013 Поделиться Опубликовано 26 Апреля 2013 Гмм.. у меня две версии есть, хмм... Даже третья.... Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти