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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Labadal 68 Опубликовано 28 Февраля 2025 Поделиться Опубликовано 28 Февраля 2025 Здравствуйте, можно ли как-то установить в нужный момент нужное время? К примеру, если мне нужно, чтобы при выдаче поршня info_time_0, устанавливалось время 00:00 (не перемотка до этого времени через увеличение тайм фактора, а именно установить это время). Спасибо God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502020
Баба ЯГА 12 Опубликовано 1 Марта 2025 Поделиться Опубликовано 1 Марта 2025 @RayTwitty файл абсолютно родной из Солянки, ничего не менялось, вот он на гитхабе: https://github.com/Gipnostalker/gipnostalker.github.io/blob/master/stalker/bind_physic_object.script Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502065
Баба ЯГА 12 Опубликовано 2 Марта 2025 Поделиться Опубликовано 2 Марта 2025 Всё. Вопрос таки решил. Месяц бился... Надо было менять в init, в update и в use_callback. В init добавил условие которое предложил @RayTwitty а именно: ... or item:clsid() == clsid.inventory_box then ... --' кстати, работает также и : .. or item:section() == "inventory_box" then ... --' вопрос только в том, что быстрее отрабатывает?... дальше, путём метода народного втыка и постоянного вывода в лог чтобы понять что и куда и когда, выяснил, что в update надо добавить условие для ящиков без логики и в этом условии ещё раз вызывать use_callback, а именно добавил: --' для всех inventory_box у которых нет логики вызываем callback отдельно ... else if item:clsid() == clsid.inventory_box then item:set_callback( callback.use_object, generic_physics_binder.use_callback, self ) end ... и, наконец, в use_callback заработало то, что мне было надо, а именно, если ГГ открыл ящик, то получаем object ящика: --' проверка нужна, т.к. use_callback возвращает и двери... if item:clsid() == clsid.inventory_box then my_global_var.GVObj(item) log("* [bind_physic_object](use_callback) obj: "..item:id()..", "..item:section()..", "..item:name() ) else log("! (1)[bind_physic_object](use_callback) obj: "..item:id()..", "..item:section()..", "..item:name() ) log("! (2)[bind_physic_object](use_callback) obj: " .. item:id() .. " - это не ящик") end Для чего было надо? Сделал кнопки при открытии ящика: Выложить еду, арты, части мутантов, патроны. Для меня очень удобно, вместо того чтобы клацать мышкой 50 раз, просто один раз на кнопочке - выложить в ящик, и все патроны, например, перекладываются. Также сделал кнопку в инвентаре, сбросить всё в рюкзак, если есть рюкзак, кроме того что в слотах. Всех кто участвовал - благодарю. 3 1 Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502099
RayTwitty 587 Опубликовано 3 Марта 2025 Поделиться Опубликовано 3 Марта 2025 03.03.2025 в 01:37, Баба ЯГА сказал: вопрос только в том, что быстрее отрабатывает?... Вопрос не в скорости (сравнение строк всегда медленнее, чем сравнение чисел), а в логике. Если когда-либо добавится новый ящик с другой секцией (vasya_box например), то тебе придется править все скрипты, логика которых завязана на имя секции. Проверка класса этот вопрос закрывает. Впрочем, если и добавляют какие-то спец-ящики, то для технических целей - их нельзя заюзать, соответственно обрабатывать событие нет нужды. Короче говоря, если логика работы позволяет проверить класс объекта, а не секцию, то надо проверять класс. 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502124
Stalkersof 232 Опубликовано 11 Марта 2025 Поделиться Опубликовано 11 Марта 2025 Пытаюсь после спавна костюма в рюкзак ГГ переместить его в слот. ОГСР движок. Получаю вылет, что не так то? function upgradeS:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then --self:on_quit() alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) db.actor:move_to_slot(db.actor:object(spawn_item)) --Перемещаем объект в слот end end Скрытый текст [C]: in function 'move_to_slot' ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:367: in function 'spawn_item' ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:419: in function <...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:374> [11.03.25 22:09:13.074] Locals: [11.03.25 22:09:13.074] string (*temporary) : [luabind::detail::class_rep::function_dispatcher] Caught unhandled exception! [11.03.25 22:09:13.074] End [11.03.25 22:09:13.074] Locals: [11.03.25 22:09:13.074] userdata (*temporary) : (game_object): 000002C97146F1D0 [11.03.25 22:09:13.074] nil (*temporary) : [not available] [11.03.25 22:09:13.074] End [11.03.25 22:09:13.074] Locals: [11.03.25 22:09:13.074] Userdata: self [11.03.25 22:09:13.074] userdata self.owner : (CUIGameCustom): 000002C9725967B0 [11.03.25 22:09:13.074] string spawn_item : novice_outfit_aa [11.03.25 22:09:13.074] number dist : 1.000000 [11.03.25 22:09:13.074] End [11.03.25 22:09:13.074] Locals: [11.03.25 22:09:13.074] Userdata: self [11.03.25 22:09:13.074] userdata self.owner : (CUIGameCustom): 000002C9725967B0 [11.03.25 22:09:13.074] nil actor : [not available] [11.03.25 22:09:13.074] nil npc : [not available] [11.03.25 22:09:13.074] userdata outfit : (game_object): 000002C97CC7C9D0 [11.03.25 22:09:13.074] number UPcost : 200.000000 [11.03.25 22:09:13.074] End [11.03.25 22:09:13.074] ********************************************************************************* [11.03.25 22:09:13.074] ******************************************************************************** [11.03.25 22:09:13.074] !![LogStackTrace] Thread: [X-RAY Primary thread] [11.03.25 22:09:13.097] !!stack trace: Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502504
Chypakabra 990 Опубликовано 11 Марта 2025 Поделиться Опубликовано 11 Марта 2025 (изменено) @Stalkersof, попробуй немного по другому: function upgradeS:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then --self:on_quit() local Sobj = alife():create (spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) if db.actor:object(Sobj) then db.actor:move_to_slot(db.actor:object(Sobj)) --Перемещаем объект в слот else -- тут действие если Sobj не найден!!! end end end Если я в чём-то не прав - вскоре @Купер, меня "поправит", в свойственной ему манере. Изменено 11 Марта 2025 пользователем ted.80 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502506
Stalkersof 232 Опубликовано 11 Марта 2025 Поделиться Опубликовано 11 Марта 2025 @ted.80 Не. вылетает. Скрытый текст [C]: in function 'object' ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:367: in function 'spawn_item' ...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:425: in function <...д fgm\fgm_v_1_7_4\gamedata\scripts\ui_upgr_select.script:380> [11.03.25 23:10:23.134] Locals: [11.03.25 23:10:23.134] string (*temporary) : [luabind::detail::class_rep::function_dispatcher] Caught unhandled exception! [11.03.25 23:10:23.134] End [11.03.25 23:10:23.134] Locals: [11.03.25 23:10:23.134] userdata (*temporary) : (game_object): 000002623DF0C060 [11.03.25 23:10:23.134] Userdata: (*temporary) [11.03.25 23:10:23.134] End [11.03.25 23:10:23.134] Locals: [11.03.25 23:10:23.134] Userdata: self [11.03.25 23:10:23.134] userdata self.owner : (CUIGameCustom): 0000026237A52B20 [11.03.25 23:10:23.134] string spawn_item : novice_outfit_aa [11.03.25 23:10:23.134] number dist : 1.000000 [11.03.25 23:10:23.134] Userdata: Sobj [11.03.25 23:10:23.134] End [11.03.25 23:10:23.134] Locals: [11.03.25 23:10:23.134] Userdata: self [11.03.25 23:10:23.134] userdata self.owner : (CUIGameCustom): 0000026237A52B20 [11.03.25 23:10:23.134] nil actor : [not available] [11.03.25 23:10:23.134] nil npc : [not available] [11.03.25 23:10:23.134] userdata outfit : (game_object): 0000026230270A50 [11.03.25 23:10:23.134] number UPcost : 200.000000 [11.03.25 23:10:23.134] End [11.03.25 23:10:23.134] ********************************************************************************* [11.03.25 23:10:23.134] ******************************************************************************** [11.03.25 23:10:23.134] !![LogStackTrace] Thread: [X-RAY Primary thread] [11.03.25 23:10:23.159] !!stack trace: Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502507
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 Короче мне ответили на гитхабе ОГСР. Что db.actor:move_to_slot() Принимает не строку а клиентский объект и удалили пост. Вот теперь вопрос как из строки(секции костюма)получить этот самый объект. Попробовал так. function upgradeS:spawn_item(spawn_item, dist) -- спавним только в игре if self:check_game() then alife():create(spawn_item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local s_obj = alife():object( spawn_item ) local c_obj = level.object_by_id(s_obj.id) db.actor:move_to_slot(c_obj) --Перемещаем объект в слот end end Вылет string (*temporary) : attempt to index local 's_obj' (a nil value) Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502516
Shkiper2012 35 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 @Stalkersof попробуй так: Скрытый текст function upgradeS:spawn_item(spawn_item_sec, dist) -- спавним только в игре if self:check_game() then local s_obj = alife():create(spawn_item_sec, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) if s_obj then local c_obj = level.object_by_id(s_obj.id) if c_obj then db.actor:move_to_slot(c_obj) -- Перемещаем объект в слот end end end end Ещё, у тебя метод называется "spawn_item" и параметр в этом методе называется так же --> upgradeS:spawn_item(spawn_item, dist) В примере выше, изменил параметр на "spawn_item_sec". Рекомендую их как-то различать, чтоб не было двойных толкований. В данном случае это не критично, но в других, может сыграть злую шутку. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502519
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 @Shkiper2012 Попробовал и вылета нет и не работает. Да я так тоже пробовал. Короче надо ждать ОГСРовцев может подскажут чего Убрал условие if c_obj then Вылет. nil c_obj : [not available] Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502521
Balavnik 178 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 @Stalkersof Откуда берёшь скрипт? В огсре по-моему у game_object вообще нет метода move_to_slot. Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502524
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 2 минуты назад, Balavnik сказал: @Stalkersof В огсре по-моему у game_object вообще нет метода move_to_slot. Я имел в виду движок ОГСР там есть этот метод. Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502526
Balavnik 178 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 @Stalkersof Ага, посмотрел в двиг, вижу. В lua_help почему-то не добавлен. Похоже, серверный объект уже существует, а клиентский нет. По-моему клиентский объект создаётся на следующем апдейте после создания серверного. 1 Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502527
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 13 минут назад, Balavnik сказал: @Stalkersof По-моему клиентский объект создаётся на следующем апдейте после создания серверного. А что делать? Таймер штоль мутить Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502529
Balavnik 178 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 @Stalkersof Можешь и таймер. А используешь огсе-сигналы? Там по идее есть установка на следующий апдейт? Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502530
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 3 минуты назад, Balavnik сказал: @Stalkersof А используешь огсе-сигналы? Использую, но я пока только научился скрипты к биндеру подключать Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502531
Stalkersof 232 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 Ну да в этом проблема была. Я через level.add_call() сделал. Ща поставлю там секунду по времени, а то у меня там еще костюм из слота удаляется. В общем спавню костюм в рюкзак, удаляю в слоте, через секунду(можно и меньше перемещаю в пустой слот. Короче таймер. Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502537
RayTwitty 587 Опубликовано 12 Марта 2025 Поделиться Опубликовано 12 Марта 2025 3 часа назад, Stalkersof сказал: Я через level.add_call() сделал. Ща поставлю там секунду по времени Это неверно, тебе нужен асинхронный вызов с условием появления объекта, @Купер уже все правильно написал. Просто отсрочка по времени может не сработать по тем или иным причинам (например в связи с низкой производительностью), да и задержка в секунду явно много - при открытом инвентаре ты буквально будешь наблюдать самопроизвольный "полет" предмета в слот. Вообще, подобного рода вопросы (действия с объектами при выходе в онлайн) уже баян, причем очень давний. 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1502554
Norman Eisenherz 355 Опубликовано 25 Марта 2025 Поделиться Опубликовано 25 Марта 2025 (изменено) [ТЧ 1.0006] Задача: привязать субтитры к звуку, который выдается после прибытия NPC в определенную точку и окончания анимации разворота. Пример логики: p2:name = wp02|sig=arrive|syn|s=mil_collect_phrase1 Привязка к флагу switched в [state_mgr.script] state_manager:set_state учитывает только прибытие на точку. Как правильно привязать обработку именно к моменту вывода звука? Spoiler [state_mgr.script] function state_manager:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys) (+) в конец if switched then if synsound then -- действие end end end Изменено 25 Марта 2025 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1503388
h0N0r 415 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 @Norman Eisenherz Я бы начал с этого: move_mgr.script, move_mgr:waypoint_callback - блок звук. Правильно понимаю, если в любом скрипте (в его начале, не в теле функции) объявить переменную, типа local my_var = 0 - то она локальна только для данного скрипта и функций в нём, и чтобы сделать её глобальной, нужно убрать local, или ещё перенести в _g.script? https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/633/#findComment-1503444
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти