Serge! 127 Опубликовано 20 Декабря 2015 итерация захватывает удаленный предмет, как решить? для ЗП я использовал метод drop_item_and_teleport. Из инвентаря он при этом точно удаляется движком. Есть ли такое в ТЧ не знаю. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 20 Декабря 2015 я использовал метод drop_item_and_teleport забыт уточнить. Предмет всё равно надо удалить, т.к. иначе потом метод level.object_by_id может его найти. Главное то, что он в инвентаре болтаться не будет и не надо ждать отработки уборщика. Кстати не помогло. дайте кусочек кода (хотя сюда, хоть в личку) мне просто интересно посмотреть. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 9 Февраля 2016 Помогите с кодом. попробуйте так get_console():execute("save" .. ' '..self.edit1:GetText()) Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 6 Апреля 2016 (изменено) Можно вообще любые элементы худа, окна статики и их наполнение любого вида и размера рисовать как вздумается и без xml. У меня при создании скриптом (без xml) у списка полоска прокрутки всегда стоит слева и направо её загнать не получается. Всё остальное легко, но не всегда такой путь лучший. Изменено 6 Апреля 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 9 Мая 2016 (изменено) как можно исправить? Я бы переписал так: function give_money(victim,who) local mon5_40,mon20_70,mon60_110,mon120_500 = math.random(5,40),math.random(20,70),math.random(60,110),math.random(120,500) local tbl_zom = { "zombie_trup2" = mon5_40, "zombie_trup" = mon5_40, "zombie_weak" = mon5_40, "zombie_hell13" = mon5_40, "zombie_babka_weak" = mon5_40, "electro_zombie" = mon5_40, "elekt_zomb1" = mon5_40, "zombie_normal" = mon20_70, "zombie_hell14" = mon20_70, "zombie_hell12" = mon20_70, "zombie_hell10" = mon20_70, "zombie_hell1" = mon20_70, "zombie_babka_normal" = mon20_70, "zombie" = mon20_70, "elekt_zomb2" = mon20_70, "elekt_zomb3" = mon20_70, "elekt_zomb4" = mon20_70, "zombie_ghost" = mon60_110, "zombie_blow" = mon60_110, "zombie_beee" = mon60_110, "zombie_hell15" = mon60_110, -- "zombie_babka_normal" = mon60_110, "zombie_immortal" = mon60_110, "zombie_hell9" = mon60_110, "zombie_hell8" = mon60_110, "zombie_hell7" = mon60_110, "zombie_hell6" = mon60_110, "zombie_hell5" = mon60_110, "zombie_hell4" = mon60_110, "elekt_zomb5" = mon60_110, "elekt_zomb6" = mon60_110, "controller_babka" = mon60_110, "zombie_plague_komar" = mon120_500, "zombie_plague" = mon120_500, "zombie_babka_strong" = mon120_500, "zombie_strong" = mon120_500, "ghoul" = mon120_500, "vodjanoj" = mon120_500, "controller_flame" = mon120_500, "elekt_zomb8" = mon120_500, "electro_zombie_0" = mon120_500, "electro_zombie_1" = mon120_500, "electro_zombie_2" = mon120_500, "electro_zombie_3" = mon120_500, } local zom_sec = victim:section() if victim and tbl_zom[zom_sec] then if who:id() == db.actor:id() then dialogs.relocate_money(db.actor,tbl_zom[zom_sec],"in") elseif not IsMonster(who) then who:give_money(tbl_zom[zom_sec]) game_stats.money_quest_update(tbl_zom[zom_sec]) news_manager.send_tip(db.actor,who:character_name().." получил "..tostrng(tbl_zom[zom_sec]).." рублей", nil, nil, 2000) end end end Изменено 9 Мая 2016 пользователем Serge! 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 9 Мая 2016 (изменено) Вылетает Возможно надо попробовать переписать фрагмент кода local zom_sec = victim:section() if victim and tbl_zom[zom_sec] then if who:id() == db.actor:id() then dialogs.relocate_money(db.actor,tbl_zom[zom_sec],"in") elseif not IsMonster(who) then who:give_money(tbl_zom[zom_sec]) game_stats.money_quest_update(tbl_zom[zom_sec]) news_manager.send_tip(db.actor,who:character_name().." получил "..tostrng(tbl_zom[zom_sec]).." рублей", nil, nil, 2000) end end вот так if victim then local zom_sec = victim:section() if tbl_zom[zom_sec] then if who:id() == db.actor:id() then dialogs.relocate_money(db.actor,tbl_zom[zom_sec],"in") elseif not IsMonster(who) then who:give_money(tbl_zom[zom_sec]) game_stats.money_quest_update(tbl_zom[zom_sec]) news_manager.send_tip(db.actor,who:character_name().." получил "..tostrng(tbl_zom[zom_sec]).." рублей", nil, nil, 2000) end end end а вообще лучше бы знать куда Вы это хотите вставить. Я ориентируюсь на оригинал ТЧ. В нём bind_monster.script содержит всего 187 строк, а у Вас ошибка в 611 строке. Очень большая модификация! Хотя проблема может быть и другая, например в глобальной функции IsMonster? Я глубоко не лез, а только чуть пригладил явную непристойность. Изменено 9 Мая 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 9 Мая 2016 В общем максимум, до работоспособности, получилось сделать так: Нет комментариев. Подскажите как поменять цвет текста, выводимых сообщений? Не знаю, но думаю что никак, т.к. это функция движка. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 9 Мая 2016 (изменено) @TIGER_VLAD, Спасибо! (модераторам, про кнопочку спасибо я знаю), век живи - век учись. Изменено 9 Мая 2016 пользователем Serge! 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 11 Мая 2016 (изменено) Оставить надежду навсегда? Надежда умирает последней и очень мучительно. А пока можно попробовать переписать таблицу weapon_classes_w_ammo вот в таком виде: weapon_classes_w_ammo = { [clsid.wpn_ak74] = {adc = true, ex = {}}, ... [clsid.wpn_lr300] = {adc = true, ex = {"wpn_flame",}}, ... [clsid.wpn_svd] = {adc = true, ex = {"wpn_gravigun",}}, ... [clsid.wpn_binocular] = {adc = false, ex = {}}, ... } потом в функции проверить надо ли разрядить данный класс оружия и не является ли он исключением. Как это сделать? это уже другой вопрос и не очень сложный. Можно и ещё упростить исходную таблицу выкинув, избыточное в общем то, логическое значение adc и оставив в ней только классы требующие разрядки со значением в виде таблицы исключений,т.е. weapon_classes_w_ammo = { [clsid.wpn_ak74] = {}, ... [clsid.wpn_lr300] = {"wpn_flame",}, ... } Изменено 11 Мая 2016 пользователем Serge! 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 12 Мая 2016 (изменено) А dsh на предыдущей странице писал что таблицы надо заполнять вот так: Это тоже самое, только вид сбоку. В последнем случае мы имеем массив, а в первом - таблицу значений. Таблица в данном случае избыточна, т.е. просто зря тратится память. Изменено 12 Мая 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 12 Мая 2016 зависит от реализации, сужу по тому как это сделано в других языках/системахВ общем случае это так и есть. Однако в Lua, изначально ориентированном на обработку массивов, внутренняя организация очень быстрая и при таких мизерных размерах этих структур в Сталкере разницы практически не будет. К тому же алгоритм реализации цикла for в Lua один из самых быстрых и оптимальных. Так что кодовая оптимизация становится определяющей. ИМХО. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 7 Июля 2016 (изменено) Помогите исправить... Может так? function spw_rad_high_food() if interval < time_global() then local st = true db.actor:iterate_inventory(function (dummy,item) if items_rad_high[item:section()] then this.del_item(item) this.spawn_item(tostring(item:section().."_high")) if st then news_manager.send_tip(db.actor, game.translate_string("tag_bad_food_tip")) (!!!вот кусок который добавил) st = false end end end, nil) interval = time_global() + 2000 end end Изменено 7 Июля 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 20 Июля 2016 ocal s_obj = {"[[ep\military\ml1]]","[[ep\military\ml2]]","[[ep\military\ml3]]"}Длинные строки в Lua, на сколько мне помнится, имеют несколько другой синтаксис. Может стоит попробовать написать так: ocal s_obj = {[[ep\military\ml1]],[[ep\military\ml2]],[[ep\military\ml3]]} 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 20 Июля 2016 (изменено) Romann, Serge!, Dennis_Chikin, никто из вас не прав, в данной проблеме... Да уж нет "уважаемый". В данной проблеме не правы Вы и только Вы. Указанный вам факт не являлся единственным ляпом представленного кода. Вот, пожалуйста, второй. local s_obj=s_obj[ math.random(#s_obj) ] Если Вы немного освежите в памяти описание Lua (или изучите его), то узнаете, что после описания local s_obj = ... доступ к разделу памяти таблицы звуков s_obj полностью будет потерян и все потуги в последующими буковками - просто ничто. А получилось в конечном примере потому, что там было изменено само имя таблицы звуков, но если даже и в ней написать длинные строки, как было написано раньше - гарантировано будет вылет. Таки кто не прав? Изменено 20 Июля 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 20 Июля 2016 Вполне законная операция. В данном контексте соглашусь, т.к. эти две локальные переменные имеют разные области видимости. Но, в общем такая практика весьма порочна. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 24 Августа 2016 (изменено) @Nazgool, Т.к. речь начиналась с необходимости создания именно "дубликата", то @Kirgudu более прав (или "правее"?) чем Вы. ipairs "продублирует" массив только до первого появления nil в качестве значения элемента массива. Ведь именно поэтому второй вариант вашего примера ничего на печать и не выводит (хотя массив и не пустой), а массивы со значением nil - не такая уж и редкая вещь. Естественно я рассматриваю только массивы c числовыми индексами (ключами), которые и приведены в Вашем примере. Использование pairs "дубль" не создаст, хоть вы и получите новый массив без элементов со значениями nil. ИМХО. Изменено 24 Августа 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 25 Августа 2016 (изменено) Если работать с массивами правильно, то такой необходимости не возникнет в принципе. Я бы так категорично и однозначно говорить поостерёгся. Например, таблица с дефолтными параметрами, некоторые из которых в ней должны присутствовать, но определяются позже в процессе инициализации. Вполне реальная ситуация. оба варианта (for i=1,#t и ipairs) в luajit, то заметной разницы в скорости выполнения ты не увидишь. Говорить о скорости при обработке таблиц в цикле for для Lua (в разрезе Сталкера с его относительно небольшими таблицами) это просто разговор ради чтоб поговорить. Lua разрабатывался для обработки именно таблиц с миллионами элементов. А цикл for там (по заверению разработчиков) один из самых оптимальных и быстрых. Изменено 25 Августа 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 26 Августа 2016 (изменено) в соответствии со стандартом языка невозможно сделать такие параметры со значениями nil. Позвольте с Вами не согласиться. А как-же целое понятие о "слабых таблицах" введённых и подробно рассмотренных разработчиками языка? Я не проверял работает ли это в Lua Сталкера, но и пока нигде не читал, что это не применимо. К тому же вспомните про параметры функции. Это что? Таблица - передается через стек, но стек в Lua это тоже таблица. А помните, что пареметры позиционно зависимы и могут отсутствовать, но их позиция должна быть определена? А это что такое? Дырки - т.е. nil. Вам никогда не встречались дистрибутивные функции, в которых прописана проверка параметров на nil? Мне встречались. Далее: "Последние отсутствующие параметры могут просто не указываться". Вам такое ничего не напоминает? Но ведь это стандарт языка в части определения таблиц. Так возможны и применимы или нет - nil в таблицах? А Вы говорите... см. цитату. Что касается некоторых примеров кода (приведённых выше), то не стоит их рассматривать очень серьёзно, т.к. в там не всегда учитываются основные ограничения языка, которые безусловно следует знать и соблюдать, но которые можно и обойти при большом желании. Работать можно заставить почти всё... даже стандартные методы, но не совсем стандартными способами и подходами. Практика говорит именно о таком. P.S. Дискуссия по этому вопросу (не слишком существенному) и впрям затянулать. Боюсь получить очередное взыскание, а по сему это было последнее, что я говорю по этому поводу. Все остальные непонятки только в ЛС, если у кого такое желание возникнет (прошу заранее снисхождения, т.к. я их читаю очень не регулярно). P.P.S. Что касается LuaJIT 2х, то про это в разрезе Сталкера говорить вообще не стоит, т.к. если это и будет кем-то реализовано???, то это уже будет не этот Сталкер и не этот форум. Изменено 25 Августа 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 26 Августа 2016 (изменено) Не хотел продолжать, но Вам отказать не могу. Уважаю. Стек - это стек, таблица - это таблица. Это разные вещи. А как быть с этим? Только цитаты из "Программирование на языке Lua. Третье издание." 1. "Таблицы являются главным (на самом деле единственным) механизмом структурирования данных в Lua." 2. "Поскольку таблицы являются динамическими сущностями, то реализовать связанные списки в Lua довольно легко." 3. "... Например, мы можем представить стек как (неограниченный) массив.". А теперь спросим: Что такое же это такое стек? Я (и не только я) отвечу - это связанный список. А что такое связанный список (т.е. стек) в понятиях и реализации Lua? Ваш ответ. Это вообще не о том. Не скажите. Весь этот механизм и был для этого разработан, т.к. таблицы МОГУТ иметь и ключи и значения nil, т.е. для нас здесь существенно что могут! и имеют (они им не свойственны и, в некоторых случая, противопоказаны, но могут же!). Вот ведь даже Разработчики так предполагали и разработали механизм для купирования таких моментов. Для чего? Это другой вопрос и мы сейчас не об этом. Правильно это или не правильно... сейчас тоже не об этом. А об этом сейчас что? - то, что такое возможно. просто он не должен быть неправильно сформирован. А вот это чистый популизм. Массив должен быть сформирован так, как это требуется для решения поставленной задачи. Всё остальное зависит от квалификации исполнителя в определённой области знаний. Посмотрите вокруг. Сколько ваших коллег для решения своих (не самых трудных) задач правят движок сталкера, хотя они подчас могут быть решены и без такого грубого вмешательства? Я противник этого и поэтому для решения своих проблем ищу лазейки в рамках определённых мне разработчиками. А кто ищет, тот почти всегда находит. Вот бы этот пуризм да в мирное русло, например применительно к вычищению всякой грязной нестандартщины из вашего любимого "того Сталкира". Но нет, вся энергия направляется на защиту заведомо ошибочного подхода. Что значит "нестандарщины" из вашего любимого "того Сталкира"? У Вас есть другой Сталкер? Где я могу посмотреть стандарт, от которого так отличается "тот Сталкер"? Фи, это не солидно. Сколько лет уже живёт этот "ошибочный подход"? А сколько лет живут или жили те творения, которые сделаны на его основе? Статистики пока нет, это точно. Да, "тот Сталкер" (ЧН практически не знаю) мне симпатичен. Это плохо? Новые? Симпатичны далеко не все. Это хорошо? А зашищать?... это очень далеко от меня. Я просто иногда занимаюсь тем, что мне интересно на данный момент. Теперь точно всё. Изменено 26 Августа 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 18 Сентября 2016 Что означет db.actor в коде функции? Ссылку на глобальную переменную "actor", находящуюся а файле db.script. 1 Поделиться этим сообщением Ссылка на сообщение