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 Ссылка на комментарий
Viнt@rь 50 Опубликовано 7 Августа 2013 Поделиться Опубликовано 7 Августа 2013 (изменено) @*Shoker*, лично я пользуюсь скриптом actor_menu, с помощью него можно отловить открытие/закрытие всех окон помимо пда, с пда немного по другому, вешаешь свою функцию на коллбэк ГГ получения инфопоршня. В коллбэк вторым параметром передается полученный инфопоршень, а далее проверкой, на открытие пда выдается инфопоршень ui_pda, на закрытие ui_pda_hide. Изменено 7 Августа 2013 пользователем Viнt@rь 1 GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
DX11.2 91 Опубликовано 8 Августа 2013 Поделиться Опубликовано 8 Августа 2013 Есть вопрос по level.main_input_receiver() Получаю текущее открытое окно test_wnd = level.main_input_receiver(), скрываю его test_wnd:Show(false). Далее идёт старт таймера, по его окончанию пытаюсь показать обратно то окно test_wnd:Show(true), но ловлю вылет. В логе только это: Цитата stack trace:001B:03DA7261 xrGame.dll Ссылка на комментарий
Viнt@rь 50 Опубликовано 8 Августа 2013 Поделиться Опубликовано 8 Августа 2013 @DX11.2, ты ссылку на свое окошко нигде не потерял? GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
DX11.2 91 Опубликовано 8 Августа 2013 Поделиться Опубликовано 8 Августа 2013 Viнt@rь, проверял пару раз, не терял. Этот способ так и не заработал, сделал скрытие окна иначе.. Ссылка на комментарий
*Shoker* 322 Опубликовано 10 Августа 2013 Поделиться Опубликовано 10 Августа 2013 (изменено) @abramcumner,@Shredder, @Viнt@rь, Спасибо за советы, я просто искал универсальный метод, т.к если мои наработки будут использоваться в других модах, об этом могут тупо забыть. ----------------------------------------------------------------------- Такой вот вопросец по биндеру объектов, возможно это уже баян, но для меня было новостью.Может даже косяк из за правленых экзешников, но сейчас уже поздно проверять и это, надо игру переставлять, собстно такое дело:Платформа ЗП 1.6.02, экзешники из Мизери и там хз какие правки вносились но по идее стандартные на рендер, солнце и т.д, собственно сделал в скриптах свой биндер (object_binder) в него добавил методы save\load чтобы сохранять свои данные. И тут вылезла такая проблема. Если сохранять\загружать игру на одной и той же локации то оба метода прекрасно вызываются, однако если перейти на другую локацию а потом обратно то метод load у объекта не вызывается, соответственно сохранённые данные уже не грузятся и полезность данных методов падает до нуля. Я сперва думал что проблема тока с моим биндером, но потом сделал вывод в консоль из motivator_binder (который хранит инфу о онлайн-сталкерах) и оказалось что там та-же самая проблема, притом что ПЫС хранят там в save\load довольно много инфы, а функция load просто не вызывается при переходе из другой локации соответственно вся сохранённая инфа теряется, и это ведь только один из кучи биндеров!Я завтра ещё проверю но вообще интересно - это нормальная ситуация? Сбоев с игрой я пока не ловил, но я уже давно не делал в ней длинные сессии, да и то всегда на одной локации. Изменено 14 Августа 2013 пользователем ColR_iT Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 205 Опубликовано 11 Августа 2013 Поделиться Опубликовано 11 Августа 2013 @*Shoker*,да, для оригинального ЗП совершенно нормальная ситуация. 1 Ссылка на комментарий
*Shoker* 322 Опубликовано 11 Августа 2013 Поделиться Опубликовано 11 Августа 2013 (изменено) @abramcumner, "для оригинального", а что есть решение? На других частях сталкера всё нормально? Или ты просто имеешь ввиду что в ЗП так и должно быть, если да то странно. Просто на save\load же повешены пстор и прочие данные объектов, я вообще удивлён что игра после этого ещё работает. Вообщем разобрался, оказывается чтобы клиентские данные сохранялись при переходе на другой уровень нужно в серверном классе добавить метод keep_saved_data_anyway(), возвращающий true.Другой вопрос что у тех же сталкеров в ЗП этот метод в серверном классе не прописан, остаётся выяснить - это баг или фича. %) Изменено 11 Августа 2013 пользователем *Shoker* 1 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 В bind_smart_terrain.script есть код: function smart_terrain_binder:net_spawn( server_object )function smart_terrain_binder:net_spawn( server_object ) if not object_binder.net_spawn( self, server_object ) then return false end -- получить ссылку на настоящий серверный объект self.se_smart_terrain = alife():object( server_object.id )Вопрос: до этого самого server_object как-то можно добраться, чтобы хотя-бы просто тупо его прибить ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 205 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 (изменено) @Dennis_Chikin, странный вопрос. Зачем до него "добираться", вот же он. Прибить вестимо как: alife():release(server_object.id), правда так лучше не делать - на следующем апдейте там удалить. Изменено 12 Августа 2013 пользователем abramcumner Ссылка на комментарий
AndrewMor 533 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 (изменено) В следующий раз прочти шапку темы перед тем, как задать вопрос. ColR_iT Изменено 14 Августа 2013 пользователем ColR_iT Сталкер - наше всё! Ссылка на комментарий
Malandrinus 615 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 Да, вопрос не до конца понятен. @abramcumner, удаление идёт не по id, а по ссылке на объект. Т.е. alife():release(server_object, true) 1 Полезный утиль (Показать) Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 (изменено) alife():release(server_object.id) - это оригинально, да. И в любом случае желательно бы сделать это еще до netspawn() По тому как по имени находится то же, что и alife():object( server_object.id ), благополучно удаляется, а потом здесь получаем nil со всеми вытекающими... Изменено 12 Августа 2013 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 205 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 @Dennis_Chikin, по-прежнему ничего не ясно. Что ты хочешь изменить/исправить? Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 Удалить я хочу smart_terrain. В данном случае. По имении что-то находится, и удаляется. Потом обнаруживается некий server_object, у которого id удаленного smart_terrain'а. Вот хочется, чтобы и он тоже удалился, вместе с binder'ом. Желательно, сразу. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Malandrinus 615 Опубликовано 12 Августа 2013 Поделиться Опубликовано 12 Августа 2013 @Dennis_Chikin, Ну если честно запутал вконец. Удаляешь по имени, затем ищешь по id. Откуда имя взялось, откуда id? В приведённом выше фрагменте ничего такого нет. Там присутствуют аж две ссылки на серверный объект: self.se_smart_terrain и server_object. Вторая - это ссылка на базовый, не все методы доступны, потому и получаем объект повторно по id, Для удаления однако годятся обе ссылки. Зачем ещё что-то по имени получать? Вместе с клиентским объектом удалить не получится, по-любому придётся ждать завершения жизненного цикла клиентского объекта. Сразу после удаления клиентский ещё можно будет найти с помощью level.object_by_id(). А вот если сразу после удаления можно найти серверный, то либо удалял не тот объект, либо удаление не сработало. Кстати, а зачем удалять смарт? Не лучше ли отключить? Полезный утиль (Показать) Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 13 Августа 2013 Поделиться Опубликовано 13 Августа 2013 Смарт не нужен. Совсем. Имя известно. Получаем, удаляем. Через 15 секунд - вылет. db.add_smart_terrain() получил из binder'а nil, и попытался извлечь из него id. Странный какой-то жизненный цикл... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
*Shoker* 322 Опубликовано 13 Августа 2013 Поделиться Опубликовано 13 Августа 2013 (изменено) @Dennis_Chikin, ну дык игрой наверно не предусмотрено удаление смарта прямо во время игры, это всё таки довольно комплексная вещь на которую завязаны многие скрипты, и оригинальная игра не предусматривает внезапное удаление смарта соответственно в скриптах нет никаких проверок на его существование, а того гляди и в движке какая нибудь хрень вылезет. Вообще странно зачем удалять смарт во время игры а не сделать это через all.spawn? Но если это так критично, то попробуй в скрипте smart_terrain.script там в классе class "se_smart_terrain" (cse_alife_smart_zone) в функциях, которые регистрируют созданный смарт поставить проверку по имени на ненужный тебе смарт, чтобы он не регистрировался ни в какие скрипты. Аналогично в биндере проверку по имени делай и не позволяй смарту заносить себя в какие либо таблицы, или даже можешь попробовать в биндере в функции net_spawn() возвращать false для ненужного смарта, тогда по идее он не заспавнится или не перейдёт в онлайн. Изменено 13 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Malandrinus 615 Опубликовано 13 Августа 2013 Поделиться Опубликовано 13 Августа 2013 Dennis_Chikin, Цитата Через 15 секунд - вылет. db.add_smart_terrain() получил из binder'а nil Поставь в bind_smart_terrain.script затычку. Если серверного объекта нет, то не биндить. Типа такого function bind( obj ) if not alife():object(obj:id()) then return end ...function bind( obj ) if not alife():object(obj:id()) then return end ... Полезный утиль (Показать) Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
riddik121 193 Опубликовано 19 Августа 2013 Поделиться Опубликовано 19 Августа 2013 Подскажите пожалуйста. Вот функция, делающая НПС другом к ГГ Показать function glavny_vrag(first_speaker, second_speaker) second_speaker:set_relation(game_object.friend, first_speaker)end На что мне надо заменить слово friend, чтобы НПС стал врагом? Большая Зона - ещё не конец (Показать) Надо дело довести до конца! Ссылка на комментарий
FantomICW 678 Опубликовано 19 Августа 2013 Поделиться Опубликовано 19 Августа 2013 @riddik121, на слово enemy. То есть выходит: function glavny_vrag(first_speaker, second_speaker) second_speaker:set_relation(game_object.enemy, first_speaker) endfunction glavny_vrag(first_speaker, second_speaker) second_speaker:set_relation(game_object.enemy, first_speaker) end Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти