Norman Eisenherz 354 Опубликовано 18 Августа 2018 Здрасьте. Пытаюсь добавить подложку к счетчику радиации в контейнере для 8 артов (солянка 2010), чтобы сделать текст заметным на фоне любого арта. Добавил в список новую текстуру (строки, отмеченные знаком "+"), теперь вижу счетчик на подложке, но поверх пустых ячеек – текстуры артов не отображаются. Поменял местами текстуры артов и подложки – вижу исходный вариант с счетчиком поверх артов, но без подложки. Какой должен быть код, чтобы получить порядок вывода "ящик - арт - подложка - счетчик"? [scripts\arc_ui_8container_menu.script] b:InitTexture("ui\\ui_icon_equipment") b:SetOriginalRect(tx,ty,50,50) + b:InitTexture("ui\\ui_dg_arc_back") + b:SetOriginalRect(0,0,50,50) b:SetText(t) b:SetTextColor(255,0,255,255) Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 28 Августа 2018 Здрасьте. Пытаюсь ввести в интерфейс контейнера для артефактов (arc_ui_8container_menu.script) подложку, чтобы счетчик радиации читался на любом фоне. Пробовал добавлять еще одну ссылку в секцию переменной "b" – читается только вторая текстура, и либо подложки не видно, либо самих артов. Скопировал секцию из функции "DrawBackground", вставил в функцию "DrawArtButton" с другой ссылкой (переменная "z") – подложка появилась, но только на первом арте, хотя функция "DrawButtons" (которая с циклом от 1 до максимума артов в коробке) включает функцию "DrawButton" полностью и подложка должна была повториться (наверное). Есть кто-нибудь, кто знаком с особенностями интерфейса контейнера? Измененные файлы для солянки 2010 (подозреваю, что в солянке 2016 контейнер точно такой же): https://drive.google.com/open?id=1UljHS8Om_va2pqlUykaf_-QFW8RHe9OP З.Ы. Может, я зря задаю вопрос в общую тему, где 50 человек уже обсуждают 40 других вопросов? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 29 Августа 2018 12 hours ago, naxac said: @Norman Eisenherz, http://rgho.st/7Wg2KM7B4 Попробуй. Есть контакт. Спасибо. Как понимать запись "SetWindowName("bck"..s.."_"..button_number)"? Выглядит как соединение нового окна "z" с окном "s" (взять/положить) и количеством кнопок, но как такая форма записи следует из названия команды "присвоить имя окну"? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 29 Августа 2018 @naxac, если это просто имя, почему подложка не множилась с именем окна "black"? Или дело в начальной секции с условием? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 30 Августа 2018 @naxac, Как работает такое условие? Оно проверяет существование переменной, заданной на строчку выше? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 29 Сентября 2018 Здрасьте. Солянка 2010, экзоскелет СКАТ-15М [scripts\meceniy_outfit.script]. Пытаюсь научить костюм регистрировать смерть носителя. Добавил приведенный ниже сегмент, костюм перестал делать припарки мертвому, но теперь просто спамит сообщением о смерти. Как так сделать, чтобы это сообщение выводилось только один раз? На мой неискушенный взгляд, условие написано как "если мертв, показать сообщение, _иначе_ обработать весь старый скрипт (включая приращение переменной t_upd)". [новый текст] function on_actor_update() … local act = db.actor if not act:alive() then news_manager.send_tip(act, "%c[skat_name]".."Система жизнеобеспечения:".."\\n".."%c[skat_msg]".."носитель мертв.".."\n", nil, nil, 30000) elseif t_upd<time_global() then … https://drive.google.com/open?id=1qxS9CaauRCcHkQjk0Onqq-OZBpbsyJcg Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 30 Сентября 2018 Работает, спасибо. Если я правильно понимаю, состояние "true" _любой_ указанной в начале переменной означает "исполнять скрипт дальше", а перевод переменной в состояние "false", соответственно, выключает оставшийся скрипт? Касательно отслеживания смерти: по умолчанию костюм пытается лечить мертвого и спамит сообщениями о примененных аптечках, поэтому условие начала лечения все равно надо было менять. Сообщение о смерти – попытка сделать костюм "умным" до конца. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 8 Октября 2018 Здрасьте. Солянка 2010, биорадар, хочу отделить точки нейтралов/друзей от врагов. Пробовал добавлять проверку через фразы obj:relation(db.actor)==game_object.enemy или amk.get_npc_relation(obj,db.actor)=="enemy" – в любом варианте видны только нейтралы и трупы. Где я нарушил логику? Примечание: в начальный список добавлен цвет ["enemy"] = GetARGB(0, 255, 0, 0) вместо цвета "unknown", который нигде не задействован. Spoiler Оригинал: "живой или зомби/труп" if IAmAStalker[obj:clsid()] then if obj:alive() then return colors["stalker"] else return colors["corpse"] end else … (дальше перебор мутантов) Мой вариант: "враг или нет, если живой", иначе "зомби/труп" if IAmAStalker[obj:clsid()] then if obj:alive() then if obj:relation(db.actor)==game_object.enemy then return colors["enemy"] else return colors["stalker"] end else return colors["corpse"] end else … Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 14 Октября 2018 Здрасьте. Солянка, трансмутатор, кнопки прокрутки инвентаря: можно ли продублировать нажатие кнопки в интерфейсе прокруткой колеса мыши, и как обозначить такое событие в ui_events? [scripts\amkII_transmutator.script] -- Прикрепляем кнопку управления СкроллБаром 'налево'. … self:AddCallback("oButtonPrevLeft", ui_events.BUTTON_CLICKED, self.PreviewScrollLeft, self) Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 31 Октября 2018 Здрасьте. Исходная конструкция – список для сверки в самой функции: if not string.find("a, b, c, d", "a") then … Требуемая конструкция – поиск в отдельном массиве: local array = {"a, b, c, d"} if not string.find(array, "a") then … Какой должен быть синтаксис для поиска строки в массиве и подходит ли для этого функция string.find? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 31 Октября 2018 Мне нужно проверить, что броня в слоте совпадает со списком выбранного мастера. https://c2.staticflickr.com/2/1935/45635885061_f2af981eb0_o.png Пока что код вот такой, и с ним скриптовое сообщение вообще не выводится (однако, и вылета нет): function armor_check() local slot = db.actor:item_in_slot(6) local sect = slot:section() local name = "" local options = "" local task_texture, task_rect = get_texture_info("ui_iconsTotal_lost_money") local armor_kuz = { ["outfit_soldier_m1"] = true, ["specops_outfit"] = true, ["military_outfit"] = true, ["militaryspec_outfit"] = true, ["specnaz_outfit_m1"] = true } -- проверка 1: брони нет/есть if slot == nil then name = "Боец, на тебе нет брони. С чем работать будем?" else name = "У тебя %c[list_armor]" .. game.translate_string(amk.get_inv_name(sect)) -- проверка 2: тип брони для другого/этого мастера if not armor_kuz[sect] options = ". Я с такой броней не работаю -- иди к (имя)." else options = ". Могу установить ПНВ или укрепить броню." end end local reply = name .. "%c[ui_clr_2]" .. options db.actor:give_talk_message(reply, task_texture, task_rect, "iconed_trade_info") end Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 31 Октября 2018 1. Моя любимая проблема: правильная теория и невнимательность на практике. 2. Теперь ловлю вылет при отсутствии брони, хотя проверка в этом случае не должна выполняться дальше первого "else", и текст "options" должен остаться пустым. Что я упускаю? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 31 Октября 2018 Вооот… Я попытался сократить запись "slot:section()", но не учел того, что ее надо ставить после первой проверки. Всем спасибо, двигаюсь дальше. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 2 Ноября 2018 Здрасьте. Есть диалог выбора типа ПНВ при прокачке брони, который выглядит примерно так: фраза 11: выбираю ПНВ "Зеленый" / действие: установка ПНВ тип 1 фраза 12: выбираю ПНВ "Цифровой" / действие: установка ПНВ тип 2 … фраза 18: выбираю ПНВ "Белая ночь" / действие: установка ПНВ тип 8 Можно ли получить номер, id или текст последней задействованной в диалоге фразы, чтобы исходя из этого определять тип ПНВ и не писать 8 однотипных функций? Думаю, где-то должна храниться информация "скрипт был вызван из фразы phrase_id диалога dialog_id". Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 4 Ноября 2018 Здрасьте. Имеется массив: local nv_type = { ["bad"] = { ["price"] = 10*k, ["id"] = 911 }, ["good"] = { ["price"] = 25*k, ["id"] = 912 }, … ["bast"] = { ["price"] = 30*k, ["id"] = 918 } } Как, имея конечное значение определенной строки, получить ссылку с названиями секций, например "nv_type.good.id" для значения "912"? Простой поиск через "for key, value in pairs do" с возвратом имени ключа результата не дает (видимо, потому, что массив многоуровневый). Сразу уточню, построение массива наоборот ( [911] = { [type] = "good", [price] = 10*k }, …) не рассматривается. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 4 Ноября 2018 Я вот так делаю Spoiler local result = "" for i, v in pairs(nv_type) do if v == choice then result = i else result = "nope" end end db.actor:give_talk_message(result, task_texture, task_rect, "iconed_trade_info") и получаю сообщение "nope". Как эту функцию перестроить, чтобы получить номер главной секции ("good") по значению входящего ключа ("id" = 911)? Примечание: choice = номер фразы в диалоге, 911…918. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 4 Ноября 2018 @Overfirst, Это, конечно, упущение, что вместо "break" из имеющихся примеров я поставил "else", который обратил первый же неправильный результат в "nope" вместо полного поиска по таблице. В остальном вопросов нет. @Kirgudu, Такая конструкция работает, но как? Какова логическая цепочка в такой схеме поиска? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 8 Ноября 2018 Здрасьте. Один и тот же код, скопированный из одной функции в другую, в одном случае выдает число, а в другом "nil". Посмотрите кто-нибудь… https://c1.staticflickr.com/5/4874/45786150651_e989b29f76_o.png Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 8 Ноября 2018 При выделении слова "price" включается подсветка для такого же слова в следующей функции (которая выдает число), так что либо везде одна и та же ошибка, либо все же ошибка не в этом слове. Spoiler local nv_type = { ["bad"] = { ["price"] = 10*k, ["id"] = 911 }, ["good"] = { ["price"] = 25*k, ["id"] = 912 }, ["default"] = { ["price"] = 15*k, ["id"] = 913 }, ["static"] = { ["price"] = 20*k, ["id"] = 914 }, ["kat_eye"] = { ["price"] = 30*k, ["id"] = 915 }, ["psy"] = { ["price"] = 25*k, ["id"] = 916 }, ["moon"] = { ["price"] = 25*k, ["id"] = 917 }, ["bast"] = { ["price"] = 30*k, ["id"] = 918 } } function nv_price_check(first_speaker, second_speaker, dialog_id, phrase_id) local choice = tonumber(phrase_id) local nv = "" for i, v in pairs(nv_type) do if v.id == choice then nv = i break end end local price = nv_type[nv].price end Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 354 Опубликовано 8 Ноября 2018 Файл: https://drive.google.com/open?id=1rC8HofVAt8h8jdb9ESuVRbafuwBtg9AR Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение