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/
Dennis_Chikin 3 665 Опубликовано 12 Июля 2016 Поделиться Опубликовано 12 Июля 2016 Upd: кстати, вот только в новой соли аналогичную проблему поймал. Правда там вылетает прямо при сохранении. Разбираюсь. Конкретно смотрю, что у кого сохраняется, и где повиснет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025527
Zander_driver 10 348 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 function motivator_binder:save(packet) -- printf("motivator_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet) packet:w_bool(self.treasure_processed) xr_logic.save_obj(self.object, packet) dialog_manager.save(self.object, packet) trade_manager.save(self.object, packet) end Собственно вот, больше там ничего нет. Учитывая что у меня на руках есть сейв где при загрузке - виснет, но нету такого с которого я мог бы сохраниться и получить суть проблемы в методе save(), а сама проблема пока встретилась единственный раз - я не совсем представляю как мне это ловить... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025651
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 (изменено) local save_ok = 0 function motivator_binder:save(packet) if save_ok ~= 0 then bind_stalker.error = true; abort( ... ) end object_binder.save(self, packet) save_ok = 1 и т.д. после каждой строчки, save_ok = 0 end В обновлении актора - проверка error и вылет с руганью. Для xr_logic я где-то давал код сохранения/загрузки с контролем по осмысленности прямо по ходу действия. Там вылет более надежен, и не надо проверять конец пакета в биндерах. Изменено 13 Июля 2016 пользователем Dennis_Chikin 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025655
Zander_driver 10 348 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 Это мне поможет узнать если опять в сохраняемую инфу полезет что-то не то - я поймаю вылет, в логе увижу результаты этого безобразия. Но уже полученный убитый сейв получается никак не оживить и не выяснить почему он убился? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025659
dsh 3 824 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 @Zander_driver, то, что там 6 строчек - это ничего не значит. Вот тот же trade_manager прекрасно может битый сейв сделать. Из свежих воспоминаний. Соляночный Седой на АТП. Из-за наличия легкого бреда в конфиге торговли, сейв с ним в онлайне получался битый. Но уже полученный убитый сейв получается никак не оживить Ну почему не оживить. По тому, что ты показывал, у тебя не записалась онлайновая часть для Сахарова. Ну и бог бы с ним. Убери в скрипте для него abort, загрузись и переспаунь инвалида. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025660
Zander_driver 10 348 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 Да это то понятно) и одна строчка может бред сотворить. Меня таки интересуют мои возможности выяснить причины проблем, не дожидаясь когда это всплывет второй раз. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025662
Overfirst 637 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 Вопрос, наверно, глупый, но как вызывать функции из других скриптов без указания имени скрипта, в котором функция находится? Как это сделано, например, в _g.script. Там, полагаю, и нужно решать все это дело. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025773
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 Вопрос не столько глупый, сколько непонятный. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025783
Kober(BRUC) 99 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 А как заставить Lua работать с Русскими буквами? Вот код и он не работает: local say = "Гора" -- Текст на Русском языке local say = say:match("(.)$") function as() if say == "а" then print(say) end end as() print(say) Выдает вот такой символ: "�". А сама функция не работает 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025789
Overfirst 637 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 @Dennis_Chikin, что не так? Повторю. Как можно вызывать функции из других скриптов, при это не указывая их имя(скриптов, разумеется). Вот есть _1.script, в нем функция 123, как её вызвать из других скриптов без указания имени скрипта? _1.123(), а я хочу 123(). Где надо свои скрипты регистрировать, чтобы это работало? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025791
Expropriator 2 119 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 Где надо свои скрипты регистрировать, чтобы это работало? Я не заморачиваюсь с принцпиальностью. Этот твой вызов местного значения, для конкретного документа. Трудно ниже создать функцию? function 123() end Неужели твоя функция такая важная, что бы её можно было внедрять в других документах, по твоему желанию. Даже разрабы незаморачивались и делали _1.123() Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025794
Overfirst 637 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 @Дизель, ну я же задал вопрос. Ответа в твоём посте что-то не вижу, по делу, пожалуйста. Какая разница, для каких мне целей оно надо? Для удобства. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025797
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 (изменено) Вот теперь понятно. function _G.blabla() ... end Или function blabla() ... end _G.blabla = this.blabla В обоих случах скрипт должен быть сначала хоть раз откуда-нибудь вызван с любой целью. хоть дернуть за function init() end или, для текущего скрипта this.blabla = 123.blabla и далее везде можно писать просто blabla() Изменено 13 Июля 2016 пользователем Dennis_Chikin 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025798
Overfirst 637 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 (изменено) @Дизель, give_info, abort. Только они зареганы в _g.script, а я хочу в своём файле сделать подобное. Денис, спасибо, сразу твой пост не заметил. С телефона просто... Изменено 13 Июля 2016 пользователем BoBaH_671 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025802
Expropriator 2 119 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 (изменено) _g.script, этот файл является родительским для некоторых функций. потому тебе там всё равно надо регистрировать. Изменено 13 Июля 2016 пользователем Дизель Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025803
Dennis_Chikin 3 665 Опубликовано 13 Июля 2016 Поделиться Опубликовано 13 Июля 2016 (изменено) Этот файл не является "родительским". Он является запускаемым по умолчанию. http://www.lua.ru/doc/6.html Практическое применение, из модифицированного amk.script: this.parse_custom_data = parse_custom_data -- для идиотов, устраивающих "войны правок" this.gen_custom_data = gen_custom_data local force_offline = _G.force_offline if not force_offline then force_offline = {} _G.force_offline = force_offline end convert_npc = force_offline Изменено 13 Июля 2016 пользователем Dennis_Chikin Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025825
Desertir 202 Опубликовано 14 Июля 2016 Поделиться Опубликовано 14 Июля 2016 @Kober(BRUC), в Луа 5.3 завезли юникод, сохраняй файл в UTF-8. Если ты про сталкеровскую Луа, попробуй сохранить в cp1251. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025879
Gray Hawk 0 Опубликовано 14 Июля 2016 Поделиться Опубликовано 14 Июля 2016 @Kober(BRUC), кодировка неправильная, у тебя неправильная кодировка в самом скрипте 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025899
Kober(BRUC) 99 Опубликовано 14 Июля 2016 Поделиться Опубликовано 14 Июля 2016 (изменено) Добрый день. Где же я упустил ошибку?: local number = 10 say_tbl_one_ru = { -- Таблица с русскими ответами. 'Угадай число'; "Не верно. Чуть больше.", "Не верно. Чуть меньше.", "Вы угадали! Число равно:" } local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000 function gl() if complexity == 'esay' then local cly = 25 elseif complexity == 'normal' then local cly = 100 elseif complexity == 'hard' then local cly = 1000 elseif complexity == 'random' then local ran_data = math.randomseed(os.time()) local ran_data = math.random(100, 10000) local cly = ran_data local num = math.random(1, cly) if number < num then print(say_tbl_one_ru[1]) elseif number > num then print(say_tbl_one_ru[2]) elseif number == num then print(say_tbl_one_ru[3]) end end end gl() Изменено 14 Июля 2016 пользователем Kober(BRUC) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025965
Kirgudu 1 328 Опубликовано 14 Июля 2016 Поделиться Опубликовано 14 Июля 2016 (изменено) @Kober(BRUC), 1. "local cly = 25" и т. п., если не ошибаюсь, видно только в пределах своей ветки if ... else. Следует объявить переменную до if, а внутри только задавать значение. 2. math.randomseed результат не возвращает, а только задаёт случайное смещение для последующего math.random. Присваивание переменной в данном случае лишнее. 3. Выбор фразы для печати ты делаешь в одной из веток внутри if, а не за пределами оного. Конкретно, печать у тебя происходит только в случае опции "random". 4. Судя по всему, навыки чтения кода у тебя не очень высокие. В этом случае, чтобы делать меньше ошибок, будет хорошей практикой использовать отступ для вложенных элементов. local number = 10 say_tbl_one_ru = { -- Таблица с русскими ответами. 'Угадай число'; "Не верно. Чуть больше.", "Не верно. Чуть меньше.", "Вы угадали! Число равно:" } local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000 function gl() if complexity == 'esay' then local cly = 25 elseif complexity == 'normal' then local cly = 100 elseif complexity == 'hard' then local cly = 1000 elseif complexity == 'random' then local ran_data = math.randomseed(os.time()) local ran_data = math.random(100, 10000) local cly = ran_data local num = math.random(1, cly) if number < num then print(say_tbl_one_ru[1]) elseif number > num then print(say_tbl_one_ru[2]) elseif number == num then print(say_tbl_one_ru[3]) end end end gl() local number = 10 say_tbl_one_ru = { -- Таблица с русскими ответами. 'Угадай число'; "Не верно. Чуть больше.", "Не верно. Чуть меньше.", "Вы угадали! Число равно:" } local complexity = 'esay' -- 'esay' - Легко; 'normal' - Срдне; 'hard' - Хардкор; 'random' - Рандомное число от 100, до 10000 function gl() local cly if complexity == 'esay' then cly = 25 elseif complexity == 'normal' then cly = 100 elseif complexity == 'hard' then cly = 1000 elseif complexity == 'random' then math.randomseed(os.time()) cly = math.random(100, 10000) end local num = math.random(1, cly) if number < num then print(say_tbl_one_ru[1]) elseif number > num then print(say_tbl_one_ru[2]) else print(say_tbl_one_ru[3]) end end gl() Изменено 14 Июля 2016 пользователем Kirgudu 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/382/#findComment-1025987
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти