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

Nazgool

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

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

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

  • Дней в топе

    1
  • AMKoin

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

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

  1. Nazgool

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

    @Dennis_Chikin, Всё это сложно выглядит. Я похожее сделал как-то так Если бы я всё помнил, то уже с ума сошел наверное от забитой оперативы
  2. Nazgool

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

    Только обратил внимание. У всех такая дикая функция в treasure_manager.script ?
  3. @UnLoaded, Нет разницы. Используй то, что тебе удобнее.
  4. Nazgool

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

    @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} твой массив.
  5. @Xdlic, Вы наверное не полностью поняли о чем я писал. Во-первых скажу, что если Вы ничего не будете делать, т.е. оставите всё как есть, то это не отменит вызова стандартного метаметода при сравнении двух юзердат )) Во-вторых вызов этого метаметода не приводит к результату. Вернее приводит к результату печальному. В-третьих. Раз метаметод вызывается, то предположительно внутри что-то присходит. И на это затрачивается некое кол-во шагов алгоритма. Так почему не сделать правильно, т.е. выбросить прежние "накладные расходы", как Вы говорите, и не заменить своими. Вы должны были заметить, что это не обертка для прежнего "__eq", это новый метод "__eq". В-четвертых, каким образом код станет зависимым от этой правки, если этот метаметод, повторю, вызывается только! при сравнении двух юзердат, и более того - результат его работы плачевен. Что мы теряем? Ну и в-пятых пользуемся привычным сравнением "==" "~=" не задумываясь, - "А не юзердаты ли сравниваемые переменные?"
  6. @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' будут зачищаться.
  7. Nazgool

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

    @Pro100The-Best, Такое руководство подойдет? https://yadi.sk/d/wzSTaTNVh8Eeb
  8. Nazgool

    Общее фото

    Я таким вроде никогда не занимался, да и способностей нет, но получается что накаркал? Прошу прощения.
  9. Nazgool

    Общее фото

    Интересно? Пожалуй да. Но не больше. Я думаю, что присутствие морды лица не сильно изменит впечатления от много(летнего, постового) общения с тем или иным человеком. Хотя тут могут присутствовать и физиономисты, которым под силу распознать истинную сущность. Полагаю что таких единицы. Или даже меньше. Если на то пошло, то нужно выкладывать всё. Метрику. Автобиографию...что там ещё? Некоторые, возможно, не хотят чтобы их узнали, т.к. в жизни не являются теми, кого из себя представляют тут. Может быть кто-то уже и пожалел что показал фото. Вдруг в твоё фото будут иголки втыкать или на него проклятия насылать. Такое ведь делают P.S. Мне как-то всё равно. Ну выложу я фото. Опять же вопрос. А что это изменит?
  10. Nazgool

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

    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")
  11. Nazgool

    Уроки по модостроению

    @Clayman, Функции я бы написал малость по другому. В таком плане : @Clayman, сорри. Я не правильно понял задачу. Прочитал ещё раз внимательнее. Ведь нужно при каждом вызове функции обновлять данные для определенной локации? Тогда никаких внешних таблиц не нужно. Все проще, и ещё малость быстрее.
  12. Если Вы считаете что развернутый вопрос, то этот самый развернутый ответ Вы будете ждать о-о-очень долго.
  13. Nazgool

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

    @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 Если ни одно из условий выше не сработает, то очевидно что аптечек нет.
  14. @RafMadMan, Покажи хоть файл gamedata\config\misc\gulag_yantar.ltx Это он в бункере не хочет идти, или уже после выброса?
  15. @Winsor, Может уже и есть какие-то способы и информация. Тот кто знает больше поправит. А я пока могу сказать следующее : 1. Никак. Стандартных методов нет. Не стандартный - распарсить файлы xml самому с помощью io (нужно расширение Lua от RvP) 2. Никак. Полагаю что только ковырять движок. 3. Напрямую зависит от компа. 4. Деталей не знаю, но время доступа к кешу текстур не будет отличаться. 5. ? Не понял идеи. Зачем? Тем не менее сначала нужно иметь возможность доступа к процессу работы движка с текстурами (см. п.2.). 6. см.п.2. 7. Аналога нет, но думаю скриптово можно организовать.
  16. @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 дальше сам сложит всё как положено.
  17. @Winsor, А InitFrame не устраивает?
  18. @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
  19. @_Призрак_, 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
  20. @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
  21. @Карлан, Постучу сюда, ведь в ЛС не отвечаешь. Как там мой вариант переопределения? Работает?
  22. @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}
  23. Согласен. Пусть будет N++. P.S. Довод к SciTE. Вопросы в основном задают ковыряльщики, а разбираются со всем этим разработчики
  24. @Murarius, Полагаю, что тот кто хотел уже высказался. Из обсуждения видно, что основных варианта два - N++ и SciTE. По всей видимости выбирать придется Вам. Не знаю как. То ли исходя из личных симпатий, то ли просто бросить монетку. Не важно.
  25. Nazgool

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

    И по этой же теме цитата из ковырялки Стандартных способов конечно нет, но если бы мне это нужно было, то я бы распарсил все конфиги с помощью io и "пар(с)ился" бы. Это заняло бы это несколько секунд при загрузке (текста ведь не мало) и 3-4 Мб памяти. Но если очень нужно, то можно пережить.

AMK-Team.ru

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