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 Ссылка на комментарий
Stalkersof 188 Опубликовано во вторник в 19:15 Поделиться Опубликовано во вторник в 19:15 Пытаюсь после спавна костюма в рюкзак ГГ переместить его в слот. ОГСР движок. Получаю вылет, что не так то? 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) Ссылка на комментарий
Chypakabra 399 Опубликовано во вторник в 19:41 Поделиться Опубликовано во вторник в 19:41 (изменено) @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 Если я в чём-то не прав - вскоре @Купер, меня "поправит", в свойственной ему манере. Изменено во вторник в 19:43 пользователем ted.80 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Stalkersof 188 Опубликовано во вторник в 20:14 Поделиться Опубликовано во вторник в 20:14 @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) Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 06:26 Поделиться Опубликовано в среду в 06:26 Короче мне ответили на гитхабе ОГСР. Что 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) Ссылка на комментарий
Shkiper2012 35 Опубликовано в среду в 07:21 Поделиться Опубликовано в среду в 07:21 @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. Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 07:41 Поделиться Опубликовано в среду в 07:41 @Shkiper2012 Попробовал и вылета нет и не работает. Да я так тоже пробовал. Короче надо ждать ОГСРовцев может подскажут чего Убрал условие if c_obj then Вылет. nil c_obj : [not available] Freeplay Graphic Mod(FGM) Ссылка на комментарий
Balavnik 149 Опубликовано в среду в 07:50 Поделиться Опубликовано в среду в 07:50 @Stalkersof Откуда берёшь скрипт? В огсре по-моему у game_object вообще нет метода move_to_slot. А где зима? Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 07:53 Поделиться Опубликовано в среду в 07:53 2 минуты назад, Balavnik сказал: @Stalkersof В огсре по-моему у game_object вообще нет метода move_to_slot. Я имел в виду движок ОГСР там есть этот метод. Freeplay Graphic Mod(FGM) Ссылка на комментарий
Balavnik 149 Опубликовано в среду в 07:57 Поделиться Опубликовано в среду в 07:57 @Stalkersof Ага, посмотрел в двиг, вижу. В lua_help почему-то не добавлен. Похоже, серверный объект уже существует, а клиентский нет. По-моему клиентский объект создаётся на следующем апдейте после создания серверного. 1 А где зима? Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 08:12 Поделиться Опубликовано в среду в 08:12 13 минут назад, Balavnik сказал: @Stalkersof По-моему клиентский объект создаётся на следующем апдейте после создания серверного. А что делать? Таймер штоль мутить Freeplay Graphic Mod(FGM) Ссылка на комментарий
Balavnik 149 Опубликовано в среду в 08:13 Поделиться Опубликовано в среду в 08:13 @Stalkersof Можешь и таймер. А используешь огсе-сигналы? Там по идее есть установка на следующий апдейт? А где зима? Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 08:17 Поделиться Опубликовано в среду в 08:17 3 минуты назад, Balavnik сказал: @Stalkersof А используешь огсе-сигналы? Использую, но я пока только научился скрипты к биндеру подключать Freeplay Graphic Mod(FGM) Ссылка на комментарий
Купер 3 034 Опубликовано в среду в 08:49 Поделиться Опубликовано в среду в 08:49 @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 --* и вот тут уже пытаемся что-то с ним сделать level.client_spawn_manager():add(s_obj.id, 0, function (id, obj) db.actor:move_to_slot(obj) end) end end end Поиском поищи по форуму level.client_spawn_manager() - что такое и зачем. 1 2 1 Ссылка на комментарий
Stalkersof 188 Опубликовано в среду в 09:05 Поделиться Опубликовано в среду в 09:05 Ну да в этом проблема была. Я через level.add_call() сделал. Ща поставлю там секунду по времени, а то у меня там еще костюм из слота удаляется. В общем спавню костюм в рюкзак, удаляю в слоте, через секунду(можно и меньше перемещаю в пустой слот. Короче таймер. Freeplay Graphic Mod(FGM) Ссылка на комментарий
RayTwitty 523 Опубликовано в среду в 12:27 Поделиться Опубликовано в среду в 12:27 3 часа назад, Stalkersof сказал: Я через level.add_call() сделал. Ща поставлю там секунду по времени Это неверно, тебе нужен асинхронный вызов с условием появления объекта, @Купер уже все правильно написал. Просто отсрочка по времени может не сработать по тем или иным причинам (например в связи с низкой производительностью), да и задержка в секунду явно много - при открытом инвентаре ты буквально будешь наблюдать самопроизвольный "полет" предмета в слот. Вообще, подобного рода вопросы (действия с объектами при выходе в онлайн) уже баян, причем очень давний. 1 2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти