[CoP] Создание инвентарного комплекса с Gui-элементами
|
|
|
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
SG, к примеру: Код function ui_medkit_ai2:OnButton_cystamine_clicked() db.actor:give_info_portion("gui_medkit_got_cystamine") give_object_to_actor("antirad_cystamine", 6) if xr_conditions.actor_has_item_count(actor, npc, {"antirad_cystamine", 6}) then for i=1,6 do db.actor:eat(db.actor:object("antirad_cystamine")) end end self.button_cystamine:Enable(false) end
|
|
Среда, 08.01.2014, 20:40
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
SG
Среда, 08.01.2014, 20:53 | Сообщение # 62
Статус: |
|
Новичок: |
|
Сообщений: |
237 |
Награды: |
0 |
Регистрация: |
12.09.2013 |
|
FantomICW, это вместо твоей 8 части? да?
Сообщение отредактировал SG - Среда, 08.01.2014, 20:53
|
|
Среда, 08.01.2014, 20:53
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
12.09.2013 |
|
|
|
|
|
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
SG, ну посмотри в коде основном, там где функция кнопки цистамина))
|
|
Среда, 08.01.2014, 20:57
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
SG
Среда, 08.01.2014, 21:08 | Сообщение # 64
Статус: |
|
Новичок: |
|
Сообщений: |
237 |
Награды: |
0 |
Регистрация: |
12.09.2013 |
|
Я так понял это надо вписать в это файл Код class "ui_medkit_ai2" (CUIScriptWnd) --Регистрация нового класса гуи-элемента от существующего класса CUIScriptWnd
function ui_medkit_ai2:__init(owner) super() --Иницилизируем класс, добавляем отсылки к функциям self.owner = owner self:InitControls() --Отсылка к функции регистрации элементов окна self:InitCallBacks() --Отсылка к функции регистрации коллбеков (условий) end
function ui_medkit_ai2:__finalize() --Функция завершения работы нового класса end
function ui_medkit_ai2:InitControls() --Функция иницилизации элементов окна self:SetWndRect (Frect():set(0,0,1024,768)) --Установка стандартных размеров файла local xml, ctrl = CScriptXmlInit(), CUIWindow() --Задаем локальные переменные на классы xml:ParseFile ("ui_gui_elements.xml") --Инициализация XML-файла Gui-элемента self.medkit = xml:InitStatic("medkit",self) --Регистрируем само окно xml:InitStatic ("medkit:caption_cystamine",self.medkit) --Регистрация текста: цистамин xml:InitStatic ("medkit:caption_kalium",self.medkit) --Регистрация текста: калиум xml:InitStatic ("medkit:caption_chlor",self.medkit) --Регистрация текста: хлор xml:InitStatic ("medkit:caption_sulfad",self.medkit) --Регистрация текста: сульфад xml:InitStatic ("medkit:caption_antiemetic",self.medkit) --Регистрация текста: противорвотная штука xml:InitStatic ("medkit:caption_medkit",self.medkit) --Регистрация текста: аптечка self.button_cystamine = xml:Init3tButton ("medkit:btn_cystamine",self.medkit) --Регистрация кнопки: цистамин self:Register (self.button_cystamine, "button_cystamine") self.button_kalium = xml:Init3tButton ("medkit:btn_kalium",self.medkit) --Регистрация кнопки: калиум self:Register (self.button_kalium, "button_kalium") self.button_chlor = xml:Init3tButton ("medkit:btn_chlor",self.medkit) --Регистрация кнопки: хлор self:Register (self.button_chlor, "button_chlor") self.button_sulfad = xml:Init3tButton ("medkit:btn_sulfad",self.medkit) --Регистрация кнопки: сульфад self:Register (self.button_sulfad, "button_sulfad") self.button_antiemetic = xml:Init3tButton ("medkit:btn_antiemetic",self.medkit) --Регистрация кнопки: противорвотная штука self:Register (self.button_antiemetic, "button_antiemetic") self.button_close = xml:Init3tButton ("medkit:btn_close",self.medkit) --Регистрация кнопки: кнопка закрытия окна self:Register (self.button_close, "button_close") end
function ui_medkit_ai2:InitCallBacks() --Функци коллбеков self:AddCallback("button_cystamine", ui_events.BUTTON_CLICKED, self.OnButton_cystamine_clicked, self) --Коллбек кнопки взятия цистамина self:AddCallback("button_kalium", ui_events.BUTTON_CLICKED, self.OnButton_kalium_clicked, self) --Коллбек кнопки взятия калиума self:AddCallback("button_chlor", ui_events.BUTTON_CLICKED, self.OnButton_chlor_clicked, self) --Коллбек кнопки взятия хлора self:AddCallback("button_sulfad", ui_events.BUTTON_CLICKED, self.OnButton_sulfad_clicked, self) --Коллбек кнопки взятия сульфада self:AddCallback("button_antiemetic", ui_events.BUTTON_CLICKED, self.OnButton_antiemetic_clicked, self) --Коллбек кнопки взятия противорвотной штуки self:AddCallback("button_close", ui_events.BUTTON_CLICKED, self.OnButton_close_clicked, self) --Коллбек кнопки закрытия end
function ui_medkit_ai2:OnKeyboard(dik,keyboard_action) --Функция закрытия окна по нажатию на клавиатуре "Escape" CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) --Инициализируем нажатие кнопки на клаве if keyboard_action == ui_events.WINDOW_KEY_PRESSED then --Условие: если нажата кнопка на клаве if dik == DIK_keys.DIK_ESCAPE then --Условие: если нажата конкретно кнопка "Escape" if has_alife_info("gui_medkit_got_cystamine") and has_alife_info("gui_medkit_got_kalium") and has_alife_info("gui_medkit_got_chlor") and has_alife_info("gui_medkit_got_antiemetic") and has_alife_info("gui_medkit_got_sulfad") then self:HideDialog() --То при нажатии на кнопку - закрываем окошко disable_info("gui_medkit_got_cystamine") --И деактивируем обратно инфы, чтобы потом не было глюков disable_info("gui_medkit_got_kalium") disable_info("gui_medkit_got_chlor") disable_info("gui_medkit_got_antiemetic") disable_info("gui_medkit_got_sulfad") else --В любом другом случае self:HideDialog() --При нажатии на кнопку закрытия, закрываем окошко give_object_to_actor("medkit_ai2") --Выдаем обратно аптечку end end end return true end
function ui_medkit_ai2:OnButton_cystamine_clicked() --Функция коллбека кнопки взятия цистамина db.actor:give_info_portion("gui_medkit_got_cystamine") --Инфопорция give_object_to_actor("antirad_cystamine", 6) --Выдаем цистамин self.button_cystamine:Enable(false) --После этих действий кнопка больше не работает end
function ui_medkit_ai2:OnButton_kalium_clicked() --Функция коллбека кнопки взятия калиума db.actor:give_info_portion("gui_medkit_got_kalium") --Инфопорция give_object_to_actor("antirad_kalium") --Выдаем калиум self.button_kalium:Enable(false) --После этих действий кнопка больше не работает end
function ui_medkit_ai2:OnButton_chlor_clicked() --Функция коллбека кнопки взятия хлора db.actor:give_info_portion("gui_medkit_got_chlor") --Инфопорция give_object_to_actor("antibio_chlor", 5) --Выдаем хлор self.button_chlor:Enable(false) --После этих действий кнопка больше не работает end
function ui_medkit_ai2:OnButton_antiemetic_clicked() --Функция коллбека кнопки взятия ПШ db.actor:give_info_portion("gui_medkit_got_antiemetic") --Инфопорция give_object_to_actor("antiemetic", 3) --Выдаем ПШ self.button_antiemetic:Enable(false) --После этих действий кнопка больше не работает end
function ui_medkit_ai2:OnButton_sulfad_clicked() --Функция коллбека кнопки взятия сульфада db.actor:give_info_portion("gui_medkit_got_sulfad") --Инфопорция give_object_to_actor("antibio_sulfad", 5) --Выдаем сульфад self.button_sulfad:Enable(false) --После этих действий кнопка больше не работает end
function ui_medkit_ai2:OnButton_close_clicked() --Функция коллбека кнопки закрытия --Если все медикаменты распакованы: if has_alife_info("gui_medkit_got_cystamine") and has_alife_info("gui_medkit_got_kalium") and has_alife_info("gui_medkit_got_chlor") and has_alife_info("gui_medkit_got_antiemetic") and has_alife_info("gui_medkit_got_sulfad") then self:HideDialog() --То при нажатии на кнопку - закрываем окошко disable_info("gui_medkit_got_cystamine") --И деактивируем обратно инфы, чтобы потом не было глюков disable_info("gui_medkit_got_kalium") disable_info("gui_medkit_got_chlor") disable_info("gui_medkit_got_antiemetic") disable_info("gui_medkit_got_sulfad") else --В любом другом случае self:HideDialog() --При нажатии на кнопку[code] закрытия (в окошке), закрываем окошко give_object_to_actor("medkit_ai2") --Выдаем обратно аптечку end end
function run_ui_medkit_ai2(folder) folder:ShowDialog(true) end заменяя нужные секции в данный момент эти Код self:AddCallback("button_cystamine", ui_events.BUTTON_CLICKED, self.OnButton_cystamine_clicked, self) --Коллбек кнопки взятия цистамина self:AddCallback("button_kalium", ui_events.BUTTON_CLICKED, self.OnButton_kalium_clicked, self) --Коллбек кнопки взятия калиума self:AddCallback("button_chlor", ui_events.BUTTON_CLICKED, self.OnButton_chlor_clicked, self) --Коллбек кнопки взятия хлора self:AddCallback("button_sulfad", ui_events.BUTTON_CLICKED, self.OnButton_sulfad_clicked, self) --Коллбек кнопки взятия сульфада self:AddCallback("button_antiemetic", ui_events.BUTTON_CLICKED, self.OnButton_antiemetic_clicked, self) --Коллбек кнопки взятия противорвотной штуки
|
|
Среда, 08.01.2014, 21:08
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
12.09.2013 |
|
|
|
|
|
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
SG, файл этот. Но причем тут функция регистрация функций кнопок? Тебе заменить нужно, в данном случае, функцию ui_medkit_ai2:OnButton_cystamine_clicked().
|
|
Среда, 08.01.2014, 21:09
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
SG
Среда, 08.01.2014, 21:15 | Сообщение # 66
|
Среда, 08.01.2014, 21:15
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
12.09.2013 |
|
|
|
|
|
JIyHep
Суббота, 25.01.2014, 12:19 | Сообщение # 67
Статус: |
|
Зевака: |
|
Сообщений: |
21 |
Награды: |
2 |
Регистрация: |
30.04.2012 |
|
FantomICW, Как ни странно инфопоршни деактивируются при закрытия GUI-аптечки не взяв какого-то элемента, при следующем открытии кнопки снова активны и можно читерить.
|
|
Суббота, 25.01.2014, 12:19
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
30.04.2012 |
|
|
|
|
|
Mirage
Понедельник, 03.02.2014, 02:31 | Сообщение # 68
Независимый аниматор
Статус: |
|
Бывалый: |
|
Сообщений: |
1130 |
Награды: |
2 |
Регистрация: |
09.06.2012 |
|
Никто так и не смог сделать так, чтоб предмет сразу юзался, а не клался в инвентарь? По вышеописанному методу не работает.
|
|
Понедельник, 03.02.2014, 02:31
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
09.06.2012 |
|
|
|
|
|
FantomICW
Понедельник, 03.02.2014, 11:39 | Сообщение # 69
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
Mirage, поясни-ка. Хочешь, чтоб аптечка после юза и закрытия больше не появлялась?
Сообщение отредактировал FantomICW - Понедельник, 03.02.2014, 11:39
|
|
Понедельник, 03.02.2014, 11:39
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
Mirage
Понедельник, 03.02.2014, 12:04 | Сообщение # 70
Независимый аниматор
Статус: |
|
Бывалый: |
|
Сообщений: |
1130 |
Награды: |
2 |
Регистрация: |
09.06.2012 |
|
Так, вот у нас например аптечка АИ. Когда через гуи открываешь аптечку и выбираешь например антирад, то антирад из аптечки переходит в инвентарь. А нельзя ли чтоб антирад при нажатии в окошке гуи сразу использовался(ГГ съел), а не переходил в инвентарь.
Добавлено (03.02.2014, 11:52) --------------------------------------------- Чтоб при использовании предмета, появлялось окно, в котором можно было бы выбрать, какой из компонентов медкомплекта использовать, при этом сам комплект бы исчезал, только после того, как из него были бы использованы все предметы. ColR_iT выразился как надо Добавлено (03.02.2014, 12:04) --------------------------------------------- вот эта функция Код function ui_medkit_ai2:OnButton_cystamine_clicked() db.actor:give_info_portion("gui_medkit_got_cystamine") give_object_to_actor("antirad_cystamine", 6) if xr_conditions.actor_has_item_count(actor, npc, {"antirad_cystamine", 6}) then for i=1,6 do db.actor:eat(db.actor:object("antirad_cystamine")) end end self.button_cystamine:Enable(false) end не работает
Сообщение отредактировал Mirage - Понедельник, 03.02.2014, 11:54
|
|
Понедельник, 03.02.2014, 12:04
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
09.06.2012 |
|
|
|
|
|
FantomICW
Понедельник, 03.02.2014, 12:07 | Сообщение # 71
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
Mirage, какие проблемы? Вот, пожалуйста, функция: Код db.actor:eat("предмет")
|
|
Понедельник, 03.02.2014, 12:07
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
Mirage
Понедельник, 03.02.2014, 12:07 | Сообщение # 72
Независимый аниматор
Статус: |
|
Бывалый: |
|
Сообщений: |
1130 |
Награды: |
2 |
Регистрация: |
09.06.2012 |
|
Ругается на xr_conditions
|
|
Понедельник, 03.02.2014, 12:07
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
09.06.2012 |
|
|
|
|
|
FantomICW
Понедельник, 03.02.2014, 12:08 | Сообщение # 73
Проект Смерти Вопреки
Статус: |
|
Опытный: |
|
Сообщений: |
2259 |
Награды: |
8 |
Регистрация: |
06.01.2013 |
|
Mirage, потому что в ТЧ нету той проверки.
|
|
Понедельник, 03.02.2014, 12:08
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
06.01.2013 |
|
|
|
|
|
Mirage
Понедельник, 03.02.2014, 12:15 | Сообщение # 74
Независимый аниматор
Статус: |
|
Бывалый: |
|
Сообщений: |
1130 |
Награды: |
2 |
Регистрация: |
09.06.2012 |
|
FantomICW, как мне этот ТЧ достал. А добавить никак?Добавлено (03.02.2014, 12:15) --------------------------------------------- Есть проверка, но не срабатывает -- true, если у актёра в инвентаре есть указанный предмет -- false, если нету, либо не задана секция предмета function actor_has_item(actor, npc, p) return p[1] ~= nil and actor:object( p[1] ) ~= nil end
|
|
Понедельник, 03.02.2014, 12:15
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
09.06.2012 |
|
|
|
|
|
BozKurt
Понедельник, 03.02.2014, 12:25 | Сообщение # 75
Статус: |
|
Опытный: |
|
Сообщений: |
1753 |
Награды: |
3 |
Регистрация: |
25.05.2012 |
|
Это не та проверка.
Сообщение отредактировал ColR_iT - Понедельник, 03.02.2014, 12:28
|
|
Понедельник, 03.02.2014, 12:25
|
Статус: |
|
Сообщений: |
666 |
Регистрация: |
25.05.2012 |
|
|
|
|