Перейти к контенту

Рекомендуемые сообщения

Callisto Рад тебя видеть...

Можно попробовать через _g таблицу... Вроде типа _g[имя скрипт] .. _g[Callisto] это если скрипт такой Callisto.script. Только проверь сначала, работает-ли вообще такое,

local scrpt_hve = (type(_g[Callisto]) == "table" and "has script")

вот пример, если распечатать переменку, то можно определить есть скрипт или нет...

:wub:

Изменено пользователем Unnamed Black Wolf
Ссылка на комментарий

Callisto, для Сталкера, насколько припоминаю, есть такой ход : getFS():exist(path)

path - вроде как полный путь к файлу (папке?).

Пусть более знающие сталкера подскажут точнее.

Во всяком случае, пока не ответят, можешь попробовать.

 

А если для "нормального" lua нужно будет, то милости прошу.

Изменено пользователем Gun12
Ссылка на комментарий

fs_file* exist(<абсолютный путь до файла>); // если файл с абсолютным путём существует, то возвращает объект типа fs_file, иначе nil

fs_file* exist(<корень>, <путь относительно корня>); // аналогично, но для корень+относительный путь

тут стоить использовать абсл. путь, но вроде вообще такая вещь в фс не работает.. Но попробуй....

Хотя вид с таблицей намного проще, быстрее, и менее затратен...

Ссылка на комментарий

В общем, можно ли проверить существование файла и папки?

Непонятно какой именно, точнее где это должно находиться?

Если это скрипт из папки scripts, то можно и через _g.

А если какой-то другой... Callisto, уточни - что именно ты хочешь сделать?

Ссылка на комментарий

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
, то игра не реагирует.

 

Ну что за человек? facepalm.gif Пока носом не ткнёшь, так и будет писать одно и тоже...

Где ты там у себя же в условии увидел оператор присваивания вместо сравнения?

И заключи ты в конце концов предполагаемую строку renderer_r2 в кавычки!

P.S. Учи матчасть.

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий

ещё можно

 

local chunk, err = dofile("..\\gamedata\\scripts\\personal_test.lua")
 

если есть, то err будет пуста... путь надо определить методом расчета из фс.лтх... =)

Ссылка на комментарий

Где ты там у себя же в условии увидел оператор присваивания вместо сравнения?

Вот я тоже не пониманию, где ты в условии увидел оператор присваивания? 

 

И заключи ты в конце концов предполагаемую строку renderer_r2 в кавычки!

P.S. Учи матчасть.

И будет вылет сразу после запуска игры. 

 

ЗЫ Если сам не разбираешься, зачем писать-то тогда?

Изменено пользователем Stiingray
  • Не нравится 2
Ссылка на комментарий

Stiingray, действительно, в проверке : if ren == renderer_r2 then , что такое renderer_r2?

Это глобальная переменная с именем renderer_r2?

Или это может быть локальная, объявленная в данном модуле (блоке) до её использования?

Нет. Ни то, ни другое. Переменной с таким именем нет ни там ни там.

Поэтому она равна nil, и ничему другому.

Вот поэтому проверка никогда и не пройдёт.

Изменено пользователем Gun12
Ссылка на комментарий

Gun12, Unnamed Black Wolf, Как все однако запутано в сталкере?  :)

Я всего-лишь хотела проверять существование папки gamedata в корне игры, но спасибо Charsi подсказал другой путь для реализации моей "похателки".

Всем спасибо, пока вопросов нет  :)

userbar368.png

Ссылка на комментарий

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 
Изменено пользователем Stiingray
  • Не нравится 1
Ссылка на комментарий

Callisto или Charsi, колитесь ;-)

Если способ существования реальной папки в директории установки игры действительно заслуживает внимания - то он может быть интересен и другим.

Если же речь о "виртуальных" папках - то в контексте вопроса опять возникает недосказанность... Физически существующая папка на диске и ее "существование" для приложения - далеко не одно и то же. Даи опять же, не ясно, интересует существование имени 'gamedata' или же папки, соотнесенной через '$game_data$'?

 

ТЧ не имеет нормальных методов (io или аналогов) работы с физическими дисками/папками/файлами, а работает только через свой движок (namespace 'getFS')... а уж там то пона(недо)ворочено...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

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

Ссылка на комментарий

Я уже разобрался, действительно не хватало кавычек. А после подстановки кавычек вылетало из-за другого.

 

А renderer_r2 - это значение render, также как 3 - значение r2_gloss_factor (это же консольные команды). Так что во втором случае все аналогично первому и что самое главное, теперь уже работает.

Изменено пользователем Stiingray
  • Не нравится 2
Ссылка на комментарий

Gun12, можешь не утруждать себя в пояснениях. Человек просто-напросто не понимает простой истины, что функция get_string для объекта консоли возвращает строку, т.е. здесь:

local ren = con:get_string("renderer")
переменная ren будет строкой. Если он играет на втором ренедере, то действительно, строка эта будет выглядеть как "renderer_r2".

И добиться он пытается проверки того, играет ли он на самом деле на динамике или нет.


Stiingray, на данной странице тебе дан ответ решения твоей проблемы, дальнейшие твои посты на эту тему, с непониманием происходящего, будут расценены как флуд.

P.S. Учи матчасть!

Изменено пользователем ColR_iT
Ссылка на комментарий

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

Теперь наконец-то всё стало на свои места.

Ссылка на комментарий

Callisto или Charsi, колитесь ;-)

Да особо тут колоться и нечего :) 

Это мой врожденный логический кретинизм. Ну не могу я точно и ясно сформулировать задачу.

Я хотела проверять наличие папки gamedata, как некую часть защиты от читеров. Но мне был предложен другой вариант реализации моей "похателки", где не требуется проверка папки. Т.ч. ничего нового нет, от меня уж точно :) 

userbar368.png

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...