Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Romann 623 Опубликовано 12 Июня 2016 Поделиться Опубликовано 12 Июня 2016 (изменено) Максимум, на десяток процентов, а далее ГГ начинает стукаться о воздух. Да, получилось, скриптом, но увеличение совсем не заметно, но ГГ спотыкается на ровном месте, получает xит. В ogse_actor_conditions_mgr.script добавил такой код: if db.actor:item_in_slot(6) and db.actor:item_in_slot(6):section() == "mon_nano_speed" then local cur_sprint_koef = override_sprint_koef or sprint_koef if act.satiety < light_hunger_limit then cur_sprint_koef = 1 + ( ( cur_sprint_koef + 5 ) * ( act.satiety / light_hunger_limit ) ) end if act.power < 1 then cur_sprint_koef = 1 + ( ( cur_sprint_koef + 5 ) * ( act.power / 1 ) ) end set_sprint_factor( cur_sprint_koef ) end Изменено 12 Июня 2016 пользователем Romann 1 Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
Zander_driver 10 343 Опубликовано 12 Июня 2016 Поделиться Опубликовано 12 Июня 2016 (изменено) Может мне тоже стоит, выкладывая примеры каких-то кодов, показывать логико-арифметическую мишуру, и не показывать само действие?) А еще говорить "сделано скриптом" о том что будет работать только на ХЕ/огсе как минимум несколько странно, это ведь общая тема. Изменено 12 Июня 2016 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Джон Сина 0 Опубликовано 13 Июня 2016 Поделиться Опубликовано 13 Июня 2016 Скажите у меня в скриптах есть скрипт dar_polter_grand_holder кто не знает это за полтергейстом бежит много мутантов типо парада. Как активировать этот скрипт чтобы этот парад был в тёмной долине? Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 13 Июня 2016 Поделиться Опубликовано 13 Июня 2016 Скажите у меня в скриптах есть скрипт dar_polter_grand_holder кто не знает это за полтергейстом бежит много мутантов типо парада. Как активировать этот скрипт чтобы этот парад был в тёмной долине? Знаешь, вот не знаем что ты там подразумеваешь под dar_polter_grand_holder. Откуда это, из какого мода? Что это за объект? Давай подробности в студию, ибо из того, что ты написал, понятно чуть меньше чем ничего... Не соответствует правилам. Ссылка на комментарий
PTB 8 Опубликовано 13 Июня 2016 Поделиться Опубликовано 13 Июня 2016 Здравствуйте форумчане! Если не сложно, объясните пожалуйста как пользоваться списками ------------------- >>> Класс элемента списка eat_1_ptb <<< ------------------- class "eat_1_ptb_ListItem"(CUIListItemEx) function eat_1_ptb_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 ui1_ptb:AddItemTo_eat_1_ptb(item_name) --/Добавление элемента в список eat_1_ptb local _itm = eat_1_ptb_ListItem() _itm.text_item:SetText(item_name) self.eat_1_ptb:AddItem(_itm) end Вопрос, как добавить в список что-нибудь? Заранее спасибо! В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Zander_driver 10 343 Опубликовано 14 Июня 2016 Поделиться Опубликовано 14 Июня 2016 @PTB, Вопрос такой же, как и на 3 поста выше. Точно так же единственно возможный ответ: Давай подробности в студию, ибо из того, что ты написал, понятно чуть меньше чем ничего... self.eat_1_ptb что это за объект, к какому классу он относится - я понятия не имею. function ui1_ptb: и что это за класс, от кого наследован, если наследован - тоже не понятно. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
PTB 8 Опубликовано 14 Июня 2016 Поделиться Опубликовано 14 Июня 2016 @Zander_driver, Вот скрипт: function ptb_eat(obj) if obj ~= nil then if obj:section() == "eat_ptb" then local hud = ui1_ptb(get_hud()) level.start_stop_menu(hud, true) end endendclass "ui1_ptb" (CUIScriptWnd)function ui1_ptb:__init() super() self:InitControls() self:InitCallBacks()endfunction ui1_ptb:__finalize()endfunction ui1_ptb:InitControls() local xml = CScriptXmlInit() self:Init(0,0,1024,768) xml:ParseFile("ui1_ptb.xml") self.frame2 = xml:InitFrame("frame2", self) self:Register(xml:Init3tButton("frame2:b_exit", self.frame2), "b_exit") self:Register(xml:Init3tButton("frame2:button3", self.frame2), "button3") xml:InitFrame("frame2:eat_1_ptb_frame", self.frame2) self.eat_1_ptb = xml:InitList("frame2:eat_1_ptb", self.frame2) self.eat_1_ptb:ShowSelectedItem(true) self:Register(self.eat_1_ptb, "eat_1_ptb") xml:InitFrame("frame2:eat_2_ptb_frame", self.frame2) self.eat_2_ptb = xml:InitList("frame2:eat_2_ptb", self.frame2) self.eat_2_ptb:ShowSelectedItem(true) self:Register(self.eat_2_ptb, "eat_2_ptb") self.Static3 = xml:InitStatic("frame2:Static3", self.frame2) self.Static4 = xml:InitStatic("frame2:Static4", self.frame2)endfunction ui1_ptb:InitCallBacks() self:AddCallback("b_exit", ui_events.BUTTON_CLICKED, self.b_exit_button_clicked, self) self:AddCallback("button3", ui_events.BUTTON_CLICKED, self.on_quit, self)endfunction ui1_ptb:b_exit_button_clicked() self:GetHolder():start_stop_menu(self, true) alife():create("eat_ptb", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())endfunction ui1_ptb:button3_button_clicked() alife():create("medkit_army", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())end------------------- >>> Класс элемента списка eat_1_ptb <<< -------------------class "eat_1_ptb_ListItem"(CUIListItemEx)function eat_1_ptb_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 ui1_ptb:AddItemTo_eat_1_ptb(item_name) --/Добавление элемента в список eat_1_ptb local _itm = eat_1_ptb_ListItem() _itm.text_item:SetText(item_name) self.eat_1_ptb:AddItem(_itm)end------------------- >>> Класс элемента списка eat_2_ptb <<< -------------------class "eat_2_ptb_ListItem"(CUIListItemEx)function eat_2_ptb_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 ui1_ptb:AddItemTo_eat_2_ptb(item_name) --/Добавление элемента в список eat_2_ptb local _itm = eat_2_ptb_ListItem() _itm.text_item:SetText(item_name) self.eat_2_ptb:AddItem(_itm)endfunction ui1_ptb:Hide() self:GetHolder():start_stop_menu(self, true)end @Zander_driver, Сделал в Stalker UI Creator В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Zander_driver 10 343 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 Винегрет из скриптов и обращений к xml Это к сожалению не по моей части. Не хочу сказать что это плохо - в свое время malandrinus доказывал что именно так и надо делать, и он наверное, может быть прав. Но я лично такие решения просто не понимаю, никогда подобным не занимался, и потому в таких вот конструкторах - "не шарю", привык делать интерфейсы чисто скриптами, без использования xml. Так что, ждем спецов по xml. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
abramcumner 1 181 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 А какой здесь винегрет? Все очень чисто и красиво. В список добавляют функции AddItemTo_eat_1_ptb("текст") и AddItemTo_eat_2_ptb("текст") 1 Ссылка на комментарий
PTB 8 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 @abramcumner, Простите за глупый вопрос(про100 я в скриптах плохо шарю) как в этот список вынести например предметы которые есть в инвентаре Например есть функция: function name_func() if db.actor:object("bread") then ... end if db.actor:object("kolbasa") then ... end if db.actor:object("vodka") then ... end if db.actor:object("conserva") then ... end end Что написать вместо точек? В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Max_Raf 35 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 @PTB, тебе нужно получить все конкретные объекты по этим секциям чтобы манипулировать с каждым? ... А наше дело маленькое - с ружьём да по болотам. (с) Ссылка на комментарий
PTB 8 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 @Max_Raf, Да, например выбрав 1 предмет из списка, нажав на кнопку что-то происходило. Заранее прошу прощения, за свои тупые вопросы! В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Max_Raf 35 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 @PTB, не догоняю, что ты именно хочешь. Что за список? В твоём примере просто функция, которая проверяет, есть ли объект по такой-то секции в инвентаре и так несколько раз. Если тебе надо достать какой то конкретный предмет после проверки на наличие, то пиши, можно сказать точно так же: function name_func() if db.actor:object("bread") then local object = db.actor:object("bread") -- получение вроде как первого попавшегося объекта хлебушка end --... end Спрашивай конкретней и опиши что именно ты хочешь. ... А наше дело маленькое - с ружьём да по болотам. (с) Ссылка на комментарий
PTB 8 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 http://www.amk-team.ru/forum/topic/6185-skriptovanie/?p=1018174 В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 @PTB, http://www.amk-team.ru/forum/topic/13087-forum-voprosy-i-predlozheniia/?p=1018456 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 181 Опубликовано 15 Июня 2016 Поделиться Опубликовано 15 Июня 2016 (изменено) @PTB, function ui1_ptb:name_func() if db.actor:object("bread") then AddItemTo_eat_1_ptb("bread") end if db.actor:object("kolbasa") then AddItemTo_eat_1_ptb("kolbasa") end if db.actor:object("vodka") then AddItemTo_eat_1_ptb("vodka") end if db.actor:object("conserva") then AddItemTo_eat_1_ptb("conserva") end end Изменено 15 Июня 2016 пользователем abramcumner 1 Ссылка на комментарий
Nazgool 250 Опубликовано 16 Июня 2016 Поделиться Опубликовано 16 Июня 2016 нажав на кнопку что-то происходилоОбъясни что именно должно происходить. И подробно, а то сейчас расскажу тебе что и как сделать, а потом выясняться подробности, которые заставят всё переделывать. Ссылка на комментарий
Zander_driver 10 343 Опубликовано 16 Июня 2016 Поделиться Опубликовано 16 Июня 2016 Я предполагаю, на кнопку вешается функция, которая делает что-то с выбранным в списке предметом. И наверное таких кнопок задумано несколько - под различные действия с выбранным предметом. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Nazgool 250 Опубликовано 16 Июня 2016 Поделиться Опубликовано 16 Июня 2016 @Zander_driver, Я к чему спрашивал? На мой взгляд винегрет получается не с кодом, а именно с действиями.Поясню.Судя из кода, но нажатию кнопки 'b_exit' в инвентарь спавниться какой-то там "eat_ptb", а по нажатию кнопки "medkit_army" аптечка.Т.е., я так полагаю, исходя из этого, при нажатии пункта из списка что-то должно спавниться В инвентарь.А тут вроде как обсуждается составление списка из того, что УЖЕ ЕСТЬ в инвентаре.И ни слова о том что же с этим делать? Как-то не согласовывается с исходным кодом.Вот и спрашиваю. Ссылка на комментарий
PTB 8 Опубликовано 16 Июня 2016 Поделиться Опубликовано 16 Июня 2016 (изменено) @Nazgool, self:GetHolder():start_stop_menu(self, true)alife():create("eat_ptb", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())-- спавним обратно в рюкзак alife():create("medkit_army", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())--а это для теста, просто при прохождении аптечек не хватало) Надо после, выбранного предмета из списка и нажатии на кнопку воспроизводилась функция. Изменено 16 Июня 2016 пользователем Kirgudu В жизни много плохих моментов. Пытайся избавляться от них ! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти