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 Ссылка на комментарий
AndreySol 215 Опубликовано 27 Июля 2022 Поделиться Опубликовано 27 Июля 2022 @Colder Можно, CUIListWnd в руки. Если нужно пример реализации - стучи в ЛС. Ссылка на комментарий
Colder 12 Опубликовано 20 Августа 2022 Поделиться Опубликовано 20 Августа 2022 (изменено) Есть функция которая выдает все тайники Скрытый текст function CTreasure:create_random_stash() for k,v in pairs(self.treasure_info) do self:give_treasure(k) end end Помогите сделать что бы она выдавала 1 тайник. Изменено 20 Августа 2022 пользователем Colder Ссылка на комментарий
Manool 145 Опубликовано 20 Августа 2022 Поделиться Опубликовано 20 Августа 2022 @Colder Скрытый текст function CTreasure:create_random_stash() for k, v in pairs(self.treasure_info) do self:give_treasure(k) break end end Объединённый Пак OGSR Engine Ссылка на комментарий
Colder 12 Опубликовано 20 Августа 2022 Поделиться Опубликовано 20 Августа 2022 @Manool Выдаёться один и тот же тайник Ссылка на комментарий
Manool 145 Опубликовано 20 Августа 2022 Поделиться Опубликовано 20 Августа 2022 (изменено) @Colder Выдаст рандомный тайник - Скрытый текст function CTreasure:create_random_stash() local t = {} for k, v in pairs(self.treasure_info) do table.insert(t, k) end self:give_treasure(t[math.random(#t)]) end Изменено 20 Августа 2022 пользователем Manool 1 Объединённый Пак OGSR Engine Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 24 Августа 2022 Поделиться Опубликовано 24 Августа 2022 Здрасьте. [ТЧ/ЧН] Изменение подсказки при взаимодействии с объектом через метод set_tip_text(string): при тесте на трупе мутанта подсказка меняется на один апдейт, после чего возвращается к исходному виду "Обыскать труп". Как заставить игру сохранить изменение? Spoiler [scripts\bind_monster.script] function generic_object_binder:use_callback(obj) if not obj:alive() then self.object:set_nonscript_usable(false) self.object:set_tip_text("test") end end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
mole venomous 3 531 Опубликовано 24 Августа 2022 Поделиться Опубликовано 24 Августа 2022 (изменено) Не хватает костного мозга в холодце, как добавить в исключения предмет на поясе по id, что бы размер этого предмета не учитывался в ограниченном объёме рюкзака? По типу такого: Скрытый текст local OutfitSlot = db.actor:item_in_slot(6) if OutfitSlot ~= nil then IdOutfit = OutfitSlot:id() end Всё, распихиваемое по слотам, места не занимает. С предметами на поясе же у меня постоянно вопросы, которые оставляю здесь... Движок ОГСР. Изменено 24 Августа 2022 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
Manool 145 Опубликовано 24 Августа 2022 Поделиться Опубликовано 24 Августа 2022 @mole venomous Скрытый текст local excluded_ids = {} for i = 0, db.actor:belt_count() - 1 do -- цикл всех предметов на поясе local item = db.actor:item_on_belt(i) if item then excluded_ids[item:id()] = true end end -- проверка на исключение: if excluded_ids[id] then -- id здесь предмета, который нужно проверить end 1 1 Объединённый Пак OGSR Engine Ссылка на комментарий
dsh 3 824 Опубликовано 24 Августа 2022 Поделиться Опубликовано 24 Августа 2022 6 hours ago, Norman Eisenherz said: подсказка меняется на один апдейт Вот это вот мне подсказывает, что что-то ещё меняет подсказку. Может скрипт какой, или движок, тебе должно быть виднее. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 24 Августа 2022 Поделиться Опубликовано 24 Августа 2022 Кто-нибудь кто применял метод set_text_tip на чистой версии ТЧ/ЧН может ответить? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 25 Августа 2022 Поделиться Опубликовано 25 Августа 2022 @Norman Eisenherz generic_object_binder:update(delta) там несколько упоминаний set_tip_text, соответственно, на апдейте постоянно корректируется подсказка. Об этом, кстати, dsh намекнул... Копай туда. Ссылка на комментарий
Hind 29 Опубликовано 25 Августа 2022 Поделиться Опубликовано 25 Августа 2022 Привет всем! Решил намутить рабочую гитару, чтобы после 43 секунд игры мелодии, она возвращалась обратно в инвентарь. Забацал 2 файла, один dmb.script, второй dmb2.script. Скрытый текст local tSound ={ dmb_pleer = "interface\\inv_guitar", } function muzika() alife():create("dmb_pleer", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end function use_item(obj) local obj = obj:section() if obj then if obj == "dmb_pleer" then dmb2.start_timer() end end if obj and tSound[obj:section()] then local snd = xr_sound.get_safe_sound_object(tSound[obj:section()]) if snd then snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0) end end end А вот второй скрипт, куда я запихнул таймер Скрытый текст function action_timer() alife():create("dmb_pleer", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end function start_timer() local iTimer = time_global() + 43000 local function check_timer() return time_global() > iTimer end level.add_call(check_timer, action_timer) end И при попытке юзануть ту самую гитару, вылазит ЭТО: [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ....l.k.e.r. Тень Чернобыля\gamedata\scripts\dmb.script:22: attempt to call method 'section' (a nil value) Помогите пожалуйста) Hind Upgrade Mod Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 25 Августа 2022 Поделиться Опубликовано 25 Августа 2022 (изменено) @Hind Путаница в типе и значениях переменных: сначала obj – объект, потом obj – секция, то есть строка, и для этой строки ты еще раз пытаешься прочитать секцию. @AndreySol Получается решение вида "заново менять уже измененную подсказку каждый апдейт". Кроме проверки по таблице id уже обработанных мутантов, как можно добиться варианта "смерть, 1 апдейт и остановка + запоминание при перезагрузке"? Изменено 25 Августа 2022 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 27 Августа 2022 Поделиться Опубликовано 27 Августа 2022 (изменено) 25.08.2022 в 22:19, Norman Eisenherz сказал: Получается решение вида "заново менять уже измененную подсказку каждый апдейт". Ну так оно единственно верное. У тебя для монстров и нпс есть апдейт(generic_object_binder:update(delta)), в нем постоянно корректируется подсказка, в зависимости от состояния объекта. Вот тебе пример из модика(мод "Мясник" (CoP) от Singapur22), который меняет логику обыска трупов монстров, тебя интересует выделенный фрагмент: Скрытый текст if self.object:alive() then if self.object:is_talk_enabled() then self.object:set_tip_text("character_use") else self.object:set_tip_text("") end else if self.used then self.object:set_tip_text("") else local character_use = read_if_exist("s",nil,self.object:section(),"character_use","dead_monster_use") self.object:set_tip_text(character_use) end end Для дохлого монстра подсказка меняется сразу по факту его помирания, а в методе use_callback она возвращается в исходное значение. Изменено 27 Августа 2022 пользователем AndreySol 1 Ссылка на комментарий
gam 117 Опубликовано 27 Августа 2022 Поделиться Опубликовано 27 Августа 2022 @AndreySol Если речь об определенных НПС, то в логики схемы Ремарк - есть работа параметра snd = ** Ссылка на комментарий
НаноБот 742 Опубликовано 5 Сентября 2022 Поделиться Опубликовано 5 Сентября 2022 Как поменять скриптом отношения между мутантами? Надо чтобы даже дружественные мутанты начали враждовать, даже между собой начали грызтись. Со сталкерами разобрался, работает, с мутантами не работает. Имею ввиду метод change_goodwill. ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
НаноБот 742 Опубликовано 6 Сентября 2022 Поделиться Опубликовано 6 Сентября 2022 Поковырял движок. В общем, отношение между мутантами так легко не поменяешь, как прописано в monster_relations так оно и будет. Ну ладно, фиг с ним! 4 ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
dsh 3 824 Опубликовано 7 Сентября 2022 Поделиться Опубликовано 7 Сентября 2022 Могу посоветовать делать это через combat ignore, забыл, как колбек называется. Т.е. нужные мутанты изначально враги, а в колбеке возвращать, что они игнорируют друг друга до нужного момента. Ещё можешь глянуть вот на этот скрипт https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh/dsh_rats.script Здесь меняется отношение между крысами и актором. Уже не помню точно, наверное я в движок что-то добавлял для этого. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
НаноБот 742 Опубликовано 7 Сентября 2022 Поделиться Опубликовано 7 Сентября 2022 @dsh у тебя там метод set_monster_relation в level есть. Так что проще добавить просто скриптовый метод, который меняет индивидуально отношение между монстрами. ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
Pir@t@s 36 Опубликовано 8 Сентября 2022 Поделиться Опубликовано 8 Сентября 2022 День добрый. Подскажите пожалуйста: Как сделать проверку на состояние предметов в слотах (слот 1,слот 2, слот 6)? Версия игры : SoC 1.0006 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти