Graff46 598 Опубликовано 23 Августа 2018 Поделиться Опубликовано 23 Августа 2018 @dsh, тогда не он, я объекты по клсиду фильтровал. Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 28 Августа 2018 Поделиться Опубликовано 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 других вопросов? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 441 Опубликовано 29 Августа 2018 Поделиться Опубликовано 29 Августа 2018 @Norman Eisenherz, http://rgho.st/7Wg2KM7B4 Попробуй. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 29 Августа 2018 Поделиться Опубликовано 29 Августа 2018 12 hours ago, naxac said: @Norman Eisenherz, http://rgho.st/7Wg2KM7B4 Попробуй. Есть контакт. Спасибо. Как понимать запись "SetWindowName("bck"..s.."_"..button_number)"? Выглядит как соединение нового окна "z" с окном "s" (взять/положить) и количеством кнопок, но как такая форма записи следует из названия команды "присвоить имя окну"? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 441 Опубликовано 29 Августа 2018 Поделиться Опубликовано 29 Августа 2018 @Norman Eisenherz, это просто для того, чтобы имена у окон разные были Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 29 Августа 2018 Поделиться Опубликовано 29 Августа 2018 @naxac, если это просто имя, почему подложка не множилась с именем окна "black"? Или дело в начальной секции с условием? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 441 Опубликовано 30 Августа 2018 Поделиться Опубликовано 30 Августа 2018 @Norman Eisenherz, да, ты зря ставил условие. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 30 Августа 2018 Поделиться Опубликовано 30 Августа 2018 @naxac, Как работает такое условие? Оно проверяет существование переменной, заданной на строчку выше? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
buffy 4 Опубликовано 2 Сентября 2018 Поделиться Опубликовано 2 Сентября 2018 В 21.08.2018 в 20:27, dsh сказал: @Graff46, потому, что alive() у серверных объектов есть только у живых, т.к. сказать: if obj and ( IsStalker( obj ) or IsMonster( obj ) ) and obj:alive() then @lordmuzer вон там выше указал, у кого этот метод есть. Фантомы не живые и не мёртвые. Ссылка на комментарий
Graff46 598 Опубликовано 3 Сентября 2018 Поделиться Опубликовано 3 Сентября 2018 @buffy, фантомы имеют ид? Ссылка на комментарий
AndreySol 215 Опубликовано 4 Сентября 2018 Поделиться Опубликовано 4 Сентября 2018 17 часов назад, Graff46 сказал: фантомы имеют ид? Все спавн-объекты в игре имеют ID. Вопрос, видимо, подразумевал StoryID ? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 5 Сентября 2018 Поделиться Опубликовано 5 Сентября 2018 Вопрос к смотревшим исходники: а кто пытался разбираться,: как именно работают manager:action( блабла ):add_effect( блабла ) ? В частности вот это вот true|false и случай, когда add_effect() более одного ? Вопрос второй: что все-таки нужно, чтобы непись начал искать врага движково ? Обязательно иметь его в memory, или без этого тоже умеет ? Если все-таки первое, то правильно ли я понимаю, что впихнуть его насильно туда нельзя ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 5 Сентября 2018 Поделиться Опубликовано 5 Сентября 2018 Так... то-ли лыжи не едут совсем, то-ли мне столько не выпить... xr_camper.script: function evaluator_end:evaluate() return not xr_logic.is_active(self.object, self.a) end function evaluator_close_combat:evaluate() if not xr_logic.is_active(self.object, self.a) then return true end если непись не под схемой, возвращаем true. Если под схемой local action = this.action_patrol (object,"action_camper_patrol", storage) ... action:add_precondition (world_property(properties["end"], false)) action:add_precondition (world_property(properties["close_combat"], false)) начинаем выполнять этот самый патруль, или, если бой, то не начинаем. action:add_effect (world_property(properties["end"], true)) action:add_effect (world_property(stalker_ids.property_enemy, false)) а если начали - продолжаем, пока врагов не увидели, или не ушли из под схемы, что, вроде как, абсолютно с тем же успехом должно получаться в варианте local action = this.action_patrol (object,"action_camper_patrol", storage) ... action:add_precondition (world_property(properties["close_combat"], false)) action:add_effect (world_property(properties["close_combat", true)) но не получается: висим. Что я где проглядел ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 141 Опубликовано 7 Сентября 2018 Поделиться Опубликовано 7 Сентября 2018 (изменено) В 06.09.2018 в 00:12, Dennis_Chikin сказал: а если начали - продолжаем, пока врагов не увидели, или не ушли из под схемы, что, вроде как, абсолютно с тем же успехом должно получаться в варианте add_effect говорит движку немного другое: что, когда сталкер выполнит "action_camper_patrol", выставятся свойства properties["end"]=true и stalker_ids.property_enemy=false(то есть не будет врагов). На каждом апдейте движок расчитывает, что нужно предпринять НПЦ, чтобы разгадать загадку зоны. Одно из условий разгадывания загадки - отсутствие врагов. За устранение врагов отвечает action_combat_planner. В xr_camper.script ниже кода, который ты привел, action_combat_planner добавляется условие properties["close_combat"] == true. То есть кемпер-скрипт говорит движку, что устранить врагов на близкой дистанции(properties["close_combat"] == true) можно через action_combat_planner, на дальней через action_camper_patrol. Когда ты убираешь из эффектов action:add_effect (world_property(stalker_ids.property_enemy, false)) , то врагов на дальней дистанции становится нечем устранять и все зависает. И снова Отладочная сборка такие моменты подробно расписывает: из-за чего не получается разгадать загадку зону, какие сейчас свойства мира и тому подобное. Изменено 7 Сентября 2018 пользователем abramcumner Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 7 Сентября 2018 Поделиться Опубликовано 7 Сентября 2018 Я вообще-то про action:add_effect (world_property(properties["end"], true)) Если мы не под схемой, то precondition properties["close_combat"] == false не выполняется для action_camper_patrol и выполняется properties["close_combat"] == true для action_combat_planner stalker_ids.property_enemy вообще пока не трогаем. Впрочем, action_camper_patrol как раз должен не только врагов устранять, но и заставлять непися ходить-смотреть при их отсутствии. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 141 Опубликовано 7 Сентября 2018 Поделиться Опубликовано 7 Сентября 2018 (изменено) 1 час назад, Dennis_Chikin сказал: Я вообще-то про action:add_effect (world_property(properties["end"], true)) Ты удалил action:add_effect (world_property(properties["end"], true))? Несколькими строками ниже это свойство добавляется в прекондишен к xr_actions_id.alife. Так он вообще не сможет ничего вывести - не найдет ни одного action, который properties["end"] в true переведет. Изменено 7 Сентября 2018 пользователем abramcumner Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 7 Сентября 2018 Поделиться Опубликовано 7 Сентября 2018 Ага - то есть, если есть хоть одно упоминание, будет искать и экшены ? и тогда получается, что чего-то в исходном варианте все-таки не хватает, и в какой-то момент непись таки начинает тупить. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 141 Опубликовано 7 Сентября 2018 Поделиться Опубликовано 7 Сентября 2018 20 минут назад, Dennis_Chikin сказал: Ага - то есть, если есть хоть одно упоминание, будет искать и экшены ? Экшены всегда ищутся. Смотри, алгоритм такой: 0. Есть граф из состояний мира(набор свойств) и экшенов, которые обещают перевести мир из одного состояния(набор прекондишенов) в другое(набор эффектов). 1. вычисляются все зарегистрированные свойства мира, для этого вызываются их эвалюаторы 2. берется финальное состояние мира(свойство мира "загадка решена" = true) 3. ищется путь в графе от текущего состояния до финального. Как правило мир в финальное состояние переводит xr_actions_id.alife. С учетом добавленного properties["end"] в прекондишене у xr_actions_id.alife раньше подходил action_camper_patrol(он переводил properties["end"] из false в true). А после удаления из эффектов никакой экшен не подходит. На этом благополучно и зависает. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Сентября 2018 Поделиться Опубликовано 8 Сентября 2018 Короче, action_camper_patrol надо делить на часть, работающую при наличии врагов, и часть, работающую без врагов. Иначе будет как минимум одна ситуация, где непись таки висит. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Graff46 598 Опубликовано 9 Сентября 2018 Поделиться Опубликовано 9 Сентября 2018 Сделал скриптовый ГУИ диалог: Скрытый текст class "dialogs2" (CUIScriptWnd) function dialogs2:__init(name, hidx) super() self.hdx = hidx or 3 self:InitControls() self.dTable = tbl[name] self.cnt = 2 self:InitCallBacks() self.schet = 1 curr_polilog = name end function dialogs2:__finalize() curr_polilog = false end function dialogs2:InitControls() local xml = CScriptXmlInit() self:Init(0,0,1024,768) xml:ParseFile("dialogs2.xml") self.root = xml:InitFrame("root", self) xml:InitFrameLine("root:frameline", self.root) self.descr_scroll = xml:InitScrollView("root:descr_scroll", self.root) self.Texts1 = xml:InitStatic("root:Texts1", self.descr_scroll) xml:InitFrame("root:List1_frame", self.root) self.List1 = xml:InitList("root:List1", self.root) self.List1:ShowSelectedItem(true) self:Register(self.List1, "List1") --self.Texts1:SetHeight(self.Texts1:GetHeight() * self.hdx) end function dialogs2:InitCallBacks() self:AddCallback("List1", ui_events.LIST_ITEM_CLICKED, self.List1_list_item_clicked, self) self:AddItemTo_List1(string.format("%s: %s", self.dTable[1][1], self.dTable[1][2])) --LIST_ITEM_SELECT end ------------------- >>> Класс элемента списка List1 <<< ------------------- class "List1_ListItem"(CUIListItemEx) function List1_ListItem:__init() super() self.text_item = CUIStatic() self:AttachChild(self.text_item) self.text_item:SetFont(GetFontLetterica18Russian()) self.text_item:SetTextColor(255,216,186,140) end ------------------- >>> END <<< ------------------- function dialogs2:AddItemTo_List1(item_name) --/Добавление элемента в список List1 local _itm = List1_ListItem() _itm.text_item:SetText(item_name) self.List1:AddItem(_itm) end function dialogs2:List1_list_item_clicked() self.List1:RemoveAll() if table.getn(self.dTable) == self.cnt then if type(self.dTable[self.cnt]) == 'function' then self.dTable[self.cnt]() elseif type(self.dTable[self.cnt]) == 'string' then db.actor:give_info_portion(self.dTable[self.cnt]) end return self:Hide() end self:AddItemTo_List1(string.format("%s: %s", self.dTable[self.cnt][1], self.dTable[self.cnt][2])) self.Texts1:SetText(string.format("%s\\n***********\\n%s>>\\n%s", self.Texts1:GetText(), self.dTable[self.cnt-1][1], self.dTable[self.cnt-1][2]) ) self.cnt = self.cnt + 1 self.Texts1:AdjustHeightToText() end function dialogs2:talk() return self:IsShown() end function dialogs2:Hide() self:GetHolder():start_stop_menu(self, true) end function start(name, idx) local super_dlg = this.dialogs2(name, idx) level.start_stop_menu(super_dlg, true) return super_dlg end Как мне получить статус диалога (окна) (активен или нет), переменная super_dlg не зануливается после закрытия диалога, перехвать в методе __finalize - ничего недал? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти