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

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


Svoboда

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

Здрасьте.

 

Пытаюсь добавить подложку к счетчику радиации в контейнере для 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)

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Пытаюсь ввести в интерфейс контейнера для артефактов (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 других вопросов?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение
12 hours ago, naxac said:

Есть контакт. Спасибо.

Как понимать запись "SetWindowName("bck"..s.."_"..button_number)"? Выглядит как соединение нового окна "z" с окном "s" (взять/положить) и количеством кнопок, но как такая форма записи следует из названия команды "присвоить имя окну"?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Солянка 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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Работает, спасибо.

 

Если я правильно понимаю, состояние "true" _любой_ указанной в начале переменной означает "исполнять скрипт дальше", а перевод переменной в состояние "false", соответственно, выключает оставшийся скрипт? 

 

Касательно отслеживания смерти: по умолчанию костюм пытается лечить мертвого и спамит сообщениями о примененных аптечках, поэтому условие начала лечения все равно надо было менять. Сообщение о смерти – попытка сделать костюм "умным" до конца.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Солянка 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

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Солянка, трансмутатор, кнопки прокрутки инвентаря: можно ли продублировать нажатие кнопки в интерфейсе прокруткой колеса мыши, и как обозначить такое событие в ui_events?

 

[scripts\amkII_transmutator.script]
    --    Прикрепляем кнопку управления СкроллБаром 'налево'.

    self:AddCallback("oButtonPrevLeft", ui_events.
BUTTON_CLICKED, self.PreviewScrollLeft, self)

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Исходная конструкция – список для сверки в самой функции:

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?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

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

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

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. Моя любимая проблема: правильная теория и невнимательность на практике.

2. Теперь ловлю вылет при отсутствии брони, хотя проверка в этом случае не должна выполняться дальше первого "else", и текст "options" должен остаться пустым. Что я упускаю?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Вооот… Я попытался сократить запись "slot:section()", но не учел того, что ее надо ставить после первой проверки. Всем спасибо, двигаюсь дальше.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Есть диалог выбора типа ПНВ при прокачке брони, который выглядит примерно так:

фраза 11: выбираю ПНВ "Зеленый" / действие: установка ПНВ тип 1

фраза 12: выбираю ПНВ "Цифровой" / действие: установка ПНВ тип 2

фраза 18: выбираю ПНВ "Белая ночь" / действие: установка ПНВ тип 8

 

Можно ли получить номер, id или текст последней задействованной в диалоге фразы, чтобы исходя из этого определять тип ПНВ и не писать 8 однотипных функций? Думаю, где-то должна храниться информация "скрипт был вызван из фразы phrase_id диалога dialog_id".

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Имеется массив:

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 }, …) не рассматривается.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Я вот так делаю

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.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

@Overfirst, Это, конечно, упущение, что вместо "break" из имеющихся примеров я поставил "else", который обратил первый же неправильный результат в "nope" вместо полного поиска по таблице. В остальном вопросов нет.

 

@Kirgudu, Такая конструкция работает, но как? Какова логическая цепочка в такой схеме поиска?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Здрасьте.

 

Один и тот же код, скопированный из одной функции в другую, в одном случае выдает число, а в другом "nil". Посмотрите кто-нибудь…

https://c1.staticflickr.com/5/4874/45786150651_e989b29f76_o.png

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

При выделении слова "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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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