-
Число публикаций
618 -
Регистрация
-
Последнее посещение
-
Дней в топе
1 -
AMKoin
37 [Подарить AMKoin]
Весь контент пользователя Nazgool
-
@Dennis_Chikin, Всё это сложно выглядит. Я похожее сделал как-то так Если бы я всё помнил, то уже с ума сошел наверное от забитой оперативы
-
Только обратил внимание. У всех такая дикая функция в treasure_manager.script ?
-
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@UnLoaded, Нет разницы. Используй то, что тебе удобнее. -
@Dniwe, local t = {1,2,3,4,5,6,7,8,9,10} local t_used = 0 function get_my_rnd(tab) local t_len = #tab t_used = (t_used == t_len and 1) or (t_used + 1) local index = math.random(t_used, t_len) local value = tab[index] tab[t_used], tab[index] = value, tab[t_used] return value end get_my_rnd(t) ... Вместо local t = {1,2,3,4,5,6,7,8,9,10} твой массив.
-
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Xdlic, Вы наверное не полностью поняли о чем я писал. Во-первых скажу, что если Вы ничего не будете делать, т.е. оставите всё как есть, то это не отменит вызова стандартного метаметода при сравнении двух юзердат )) Во-вторых вызов этого метаметода не приводит к результату. Вернее приводит к результату печальному. В-третьих. Раз метаметод вызывается, то предположительно внутри что-то присходит. И на это затрачивается некое кол-во шагов алгоритма. Так почему не сделать правильно, т.е. выбросить прежние "накладные расходы", как Вы говорите, и не заменить своими. Вы должны были заметить, что это не обертка для прежнего "__eq", это новый метод "__eq". В-четвертых, каким образом код станет зависимым от этой правки, если этот метаметод, повторю, вызывается только! при сравнении двух юзердат, и более того - результат его работы плачевен. Что мы теряем? Ну и в-пятых пользуемся привычным сравнением "==" "~=" не задумываясь, - "А не юзердаты ли сравниваемые переменные?" -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Xdlic, Действительно, стандартное сравнение пользовательских данных в сталкере не работает. Но это легко изменить, используя расширение lua. Прежде всего стоит определить утверждения, касающиеся lua в игре, которые и помогут в решении. 1. Для типа 'userdata' установлена единая метатаблица. P.S. Категорично утверждать не буду, не все проверял, но например для UI окон и для Волка она едина. Это позволяет предположить, что если для таких различных объектов метатаблица едина, то она едина и для всех остальных. 2. Метаметод '__eq' вызывается только при сравнении двух юзердат (тот, что не работает). Сравнение 'userdata' == 'другой тип данных' обрабатывается обычным образом. 3. Поскольку при сравнении двух типов 'userdata' вызывается метаметод '__eq', то результат сравнения нужно произвести без вызова метаметода. Функция 'rawequal' именно это и делает. Отсюда следует, что можно переопределить метаметод '__eq', даже не сохраняя ссылку на прежний, т.к. этот метод больше ни для чего не нужен, и ничего не затрагивает. local userdata_mt = debug.getmetatable(CUIStatic()) function userdata_mt.__eq (a, return rawequal(a, end Вместо "CUIStatic()" можно использовать любое получение 'userdata'. Ну и наконец вызов этого кода необходимо поставить на 'net_spawn', т.к. после каждой загрузки новые данные поля 'userdata_mt.__eq' будут зачищаться. -
@Pro100The-Best, Такое руководство подойдет? https://yadi.sk/d/wzSTaTNVh8Eeb
-
Я таким вроде никогда не занимался, да и способностей нет, но получается что накаркал? Прошу прощения.
-
Интересно? Пожалуй да. Но не больше. Я думаю, что присутствие морды лица не сильно изменит впечатления от много(летнего, постового) общения с тем или иным человеком. Хотя тут могут присутствовать и физиономисты, которым под силу распознать истинную сущность. Полагаю что таких единицы. Или даже меньше. Если на то пошло, то нужно выкладывать всё. Метрику. Автобиографию...что там ещё? Некоторые, возможно, не хотят чтобы их узнали, т.к. в жизни не являются теми, кого из себя представляют тут. Может быть кто-то уже и пожалел что показал фото. Вдруг в твоё фото будут иголки втыкать или на него проклятия насылать. Такое ведь делают P.S. Мне как-то всё равно. Ну выложу я фото. Опять же вопрос. А что это изменит?
-
local obj = alife():create(taynik, vector():set(-660.22509765625,19.935060501099,72.809051513672), 125131, 314) level.map_add_object_spot_ser(obj.id, "ui_pda2_actor_box_location" , "DEBAG")
-
@Clayman, Функции я бы написал малость по другому. В таком плане : @Clayman, сорри. Я не правильно понял задачу. Прочитал ещё раз внимательнее. Ведь нужно при каждом вызове функции обновлять данные для определенной локации? Тогда никаких внешних таблиц не нужно. Все проще, и ещё малость быстрее.
-
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
Если Вы считаете что развернутый вопрос, то этот самый развернутый ответ Вы будете ждать о-о-очень долго. -
@nego, Можно так Или так В принципе вариантов не мало. Замечания : 1. Взять любое из условий. Например если у ГГ есть медицинская аптечка, то 4 раза производится обращение к глобальным данным "db". Правильнее кешировать эту глобальную "db" в локальной переменной. local actor = db.actor 2. Если снова взять это же условие, то происходит два раза получение одного и того же объекта db.actor:object("medkit") ... db.actor:eat(db.actor:object("medkit")) Напрасная трата процессорного времени. Достаточно получить один раз и потом использовать local medkit = actor:object(medkits[1]) ... actor:eat(medkit) 3. В каждом из условий объявлена переменная local news_text = ... Компилируется каждая из трех строк. Они отличаются одним словом. Напрасная трата памяти. Есть возможность съэкономить. local news_text = ... ..medkits[2].. ... 4. Последние проверки лишние elseif db.actor:object("medkit") == nil and db.actor:object("medkit_army") == nil and db.actor:object("medkit_scientic") == nil then Если ни одно из условий выше не сработает, то очевидно что аптечек нет.
-
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@RafMadMan, Покажи хоть файл gamedata\config\misc\gulag_yantar.ltx Это он в бункере не хочет идти, или уже после выброса? -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Winsor, Может уже и есть какие-то способы и информация. Тот кто знает больше поправит. А я пока могу сказать следующее : 1. Никак. Стандартных методов нет. Не стандартный - распарсить файлы xml самому с помощью io (нужно расширение Lua от RvP) 2. Никак. Полагаю что только ковырять движок. 3. Напрямую зависит от компа. 4. Деталей не знаю, но время доступа к кешу текстур не будет отличаться. 5. ? Не понял идеи. Зачем? Тем не менее сначала нужно иметь возможность доступа к процессу работы движка с текстурами (см. п.2.). 6. см.п.2. 7. Аналога нет, но думаю скриптово можно организовать. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Winsor, ... local xml = CScriptXmlInit() xml:ParseFile("any.xml") -- не знаю какой там у тебя файл xml:InitFrame("main_form", self) ... xml <main_form x="312" y="134" width="400" height="500" stretch="1"> <texture>название_текстуры</texture> <!-- не знаю где она(они) располагаются --> </main_form> название_текстуры - на самом деле это не одна текстура, а вроде 9 штук (не помню). Называются они соответственно : название_текстуры_l -- левая название_текстуры_lt -- левый верхний угол название_текстуры_t -- верхняя название_текстуры_rt -- правый верхний угол название_текстуры_r -- и .т.д. название_текстуры_rb название_текстуры_b название_текстуры_lb девятая текстура - заполнитель, не помню какое там у неё "расширение". Примеры посмотри в файлах игры. Так вот указывать нужно <texture>название_текстуры</texture> без "расширений". А InitFrame дальше сам сложит всё как положено. -
[SoC] Ковыряемся в файлах
Nazgool ответил на тему форума автора Halford в Скрипты / конфиги / движок
@Winsor, А InitFrame не устраивает? -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Xdlic, Зачем обертка? Вставлять стандартным способом, только принудительно указывать место вставки table.insert(tt, #tt+1, "value") #tt как раз и определит длину массива, а +1 поставит значение в конец. А если делать обертку, то так, чтобы не навредить вызовам table.insert в других скриптах do local old_insert = table.insert function table.insert(t,p,v) old_insert(t, v and p or #t+1, v or p) end end -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@_Призрак_, function f() return end print(f()) --> ничего print(type(f())) --> bad argument #1 to 'type' (value expected) т.е. Lua значения нет function f() return nil end print(f()) --> nil print(type(f())) --> nil -- а тут значение есть. nil ведь одно из 8-ми значений Lua -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Xdlic, Да, иногда в сталкере стандартные действия Lua ведут себя совсем не так. Когда то меня чуть не предали анафеме за мои высказывания в сторону ненормальности сталкеровского Lua. Но уже который раз это подтверждается Что там сделали с Lua я не знаю, но ... Значение "nil" хоть и обозначает отсутствие значения, всё-таки это одно из значений Lua, в отличии от отсутствия вообще какого-либо значения. Возьми к примеру функции : function f() return end и function f() return nil end Первая не возвращает ничего, а вторая возвращает значение. nil ведь тоже значение. Видимо в сталкере разрабы как-то акцентировали на этом внимание, поэтому такие результаты. В любом случае этот вопрос решается просто. Ты используешь : for i = 1, #tt do tt[i] = nil end На самом деле ты присваиваешь полям значения (nil). А нужно удалять поля : for i = #tt, 1, -1 do table.remove(tt, i) end -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Карлан, Постучу сюда, ведь в ЛС не отвечаешь. Как там мой вариант переопределения? Работает? -
Язык Lua. Общие вопросы программирования
Nazgool ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
@Xdlic, После выполнения for i = 1, #tb do tb[i] = nil end у меня и в SciTE, и в игре функции insert и remove работают одинаково правильно, т.е. ставит 'value' в поле с индексом 1. Покажи весь код, на котором ты тестировал и получал таблицу {nil, nil, nil, nil, nil, nil, nil, nil, nil, value} -
Подсветка синтаксиса Lua
Nazgool ответил на тему форума автора Murarius в Скрипты / конфиги / движок
Согласен. Пусть будет N++. P.S. Довод к SciTE. Вопросы в основном задают ковыряльщики, а разбираются со всем этим разработчики -
Подсветка синтаксиса Lua
Nazgool ответил на тему форума автора Murarius в Скрипты / конфиги / движок
@Murarius, Полагаю, что тот кто хотел уже высказался. Из обсуждения видно, что основных варианта два - N++ и SciTE. По всей видимости выбирать придется Вам. Не знаю как. То ли исходя из личных симпатий, то ли просто бросить монетку. Не важно. -
И по этой же теме цитата из ковырялки Стандартных способов конечно нет, но если бы мне это нужно было, то я бы распарсил все конфиги с помощью io и "пар(с)ился" бы. Это заняло бы это несколько секунд при загрузке (текста ведь не мало) и 3-4 Мб памяти. Но если очень нужно, то можно пережить.
- [ЧН] 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
- ...и другие моды