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/
ins33 16 Опубликовано 16 Июля 2012 Поделиться Опубликовано 16 Июля 2012 Shredder, Да, я только учусь. Это прописывал. Но вылет мешает, опять бинд. И если убрать : if note and type(note) == "number" then if not level.object_by_id(note) then Тот-же вылет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714463
Zander_driver 10 348 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 ins33, может перестать уже биться о стену и принять то что дают? Выше Shredder тебе дал абсолютно рабочую функцию, используй ее и все заработает как ты хотел без всяких вылетов. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714591
ins33 16 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Zander_driver, Согласен, но вылет стабилен! \s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:240: attempt to index global 'repair' (a nil value) В строчке 240: repair.use_repkit(). Если к коду добавить: if note and type(note) == "number" then if not level.object_by_id(note) then Девайс пропадает из инвентаря, а диалоговое окно ремонта не появляется. Изменено 17 Июля 2012 пользователем ins33 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714649
Desertir 202 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 ins33, смешно уже смотреть на твои попытки что то сделать. У нас нету твоего кода и мы не экстрасенсы. Этот вылет связан с тем. что в скрипте есть ошибка синтаксиса, так что либо выкладывай весь код, который там написан, либо иди учи луа, хотя это как раз и надо было сделать с самого начала. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714667
Scarabay 98 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 ins33, ты создал файл repair.script, содержащий твою функцию use_repkit()? Проверь все внимательно, где-то ошибка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714668
ins33 16 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Desertir, http://rghost.ru/39256261 чистый файл из тт2. Scarabay, Ошибок нет, без ключа всё работает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714674
Shredder 49 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 ins33, открываешь спойлер, выделяешь всё что там есть, делаешь Ctrl+C, потом в у себя в файле repair.script нажимаешь Ctrl+A, затем Ctrl+V. И вообще там код нужно переделывать, т.к. можно напрямую заюзать колбэк на использование предмета, а не проверять после дропа, исчез ли предмет. Но тебе до этого, как до Луны пешком... local note = nil function use_repkit() if note and type(note) == "number" then if not level.object_by_id(note) then if db.actor:object("key") then level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню end alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end note = nil end if note and type(note) == "userdata" then note = note:id() else note = nil end end function DeleteItem(iId) --добавляем функцию удаления предмета из инвентаря if iId then local seObj=alife():object(iId) if seObj then alife():release(seObj,true) end end end function repair_wpn_1() local item_in_slot = db.actor:item_in_slot(1) local medusa = db.actor:object("af_medusa") --и везде добавим проверку на медузу if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then item_in_slot:set_condition(1) DeleteItem(medusa:id()) --удаляем артефакт после ремонта end end function repair_wpn_2() local item_in_slot = db.actor:item_in_slot(2) local medusa = db.actor:object("af_medusa") if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then item_in_slot:set_condition(1) DeleteItem(medusa:id()) end end function repair_armora() local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil and 1 > item_in_slot:condition() then item_in_slot:set_condition(1) end end --/ спавн предметов в инвентори function spawn_item_in_inv(section,npc) if npc == nil then npc = db.actor end return alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end --функция вызываемая из дропа function use_repair(obj) if obj:section() == "repair_kit" then note = obj --если наша вещь, то запомнить его userdata end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714710
ins33 16 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Shredder, Спасибо, до этого не допёр: if db.actor:object("key") then. Проверка нужна для квеста. СПАСИБО!!! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714724
Z3oM 0 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Доброго всем времени суток! Есть таймер который выводит на монитор сообщение. Собственно вопрос можно ли как то реализовать в реал-тайме (в самой игре находясь) обновление инфы выводимой на экран? К примеру я сворачиваю игру в файле пишу другую инфу получаемую а он её подгружает? Думал сделать INCLUDE но ничего так и не нашел по этому поводу. Или я путаю? в LUA вообще есть функция INCLUDE? И будет ли правильно если таймер будет каждый 10 секунд подгружать другой файл? и будет ли вообще подгружать? Заранее благодарен! Изменено 17 Июля 2012 пользователем Z3oM Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714753
Shredder 49 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Что именно ты хочешь выводить на экран? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714756
Z3oM 0 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Я хочу чтобы у меня была запущена игра и крутился так сказать цикл непосредственной в игре. (ОН уже крутит месагу в игре каждые 10 секунд) Что я хочу. Я хочу чтобы у меня При включенной игре обновлялась эта месага к прмеру у меня local sactor = alife():actor() local cactor = level.object_by_id(sactor.id) cactor:give_game_news( "Тест Сообщение\\nЯ вывожу его!!!1", "", Frect():set(0,0,0,0), 1000, 8000 ) А получить пытаюсь не "Тест Сообщение\\nЯ вывожу его!!!1", а "Тест Сообщение я обновил сейчас!\\nЯ обновил его!!!1", НЕ выходя из игры. Такое возможно? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714757
Кактус_523 1 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Что то непонятно ты описываешь. Что за файлик? Как грузить? loadfile или file:read()? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714758
Shredder 49 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Z3oM, а в чём смысл? Нельзя сразу все необходимые тексты в отдельный файл записать? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714759
Z3oM 0 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Смотрите! Есть ТАЙМер =) зашел в игру, начало появляться сообщение с рисуночком и выводит текст как будто я получил задание, ну или тайник нашел, что та вроде этого. Оно вылазиет каждые 10 секунд со словами "Тест Сообщение\\nЯ вывожу его!!!1". Теперь, чтобы его поменять (текст) мне нужно изменить файл скрипта с этой строкой, сохранить и перезагрузить игру либо загрузиться. Вопрос собственно =) Возможно ли изменить сообщение не ПЕРЕЗАГРУЖАЯ ИГРУ? тоесть в РЕАЛ-ТАЙМЕ =) Какая функция отвечает за ПОДГРУЗКУ скрипта? Тоесть как в C++ мать его =) Есть inckude она подгружает в твой исходник функции. Есть такая же в LUA? Я хочу подгрузить в тело Таймера мессагу. И чтобы она подгружала её каждый раз? ) Или есть функция на подобе как у MEMO в obj pascal LoadFromFile +))) Я очень надеюсь что поможете =) Добавлено через 1 мин.: Shredder, В том та и прикол всего =) Нужно его подгружать динамически =) Изменено 17 Июля 2012 пользователем Z3oM Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714761
Кактус_523 1 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Делаешь файлик с сообщениями. Парсишь его. Набиваешь строки в таблицу. Дальше крутишь в апдейте таблицу меняя индекс время от времени. problem? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714762
Shredder 49 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 Ага, я тоже самое имел ввиду. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714763
Z3oM 0 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Кактус_523, loadfile или file:read()? Это не функции которые просто читают строки? Опа =) Сообразил =) Что если в переменную загнуть строки которые находятся в отдельном файле? И обновлять переменную в таймере.? Все сообразил. Можно пример небольшой по использованию file:read()? Или ссылку на пост. Заранее спасибо! C file:read() обращаться как с массивом строк или сплошной текст и Парс? Изменено 17 Июля 2012 пользователем Z3oM Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714764
Кактус_523 1 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Тебе не нужна никакая переменная. Тебе не нужны всякие функции чтения файлов. Это не те дроиды, которых вы ищите. function Parser() local hndl = io.open("bla_bla.file",'r') local tab = {} local rline local i = 1 while true do rline = hndl:read() if rline== nil then break end tab[i] = rline i=i+1 end return tab end Изменено 17 Июля 2012 пользователем Кактус_523 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714766
Z3oM 0 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) Новичок я в этом деле всмысле в LUA =) Описание функции данной есть? function _parser() Спасибо +) Изменено 17 Июля 2012 пользователем Z3oM Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714770
Кактус_523 1 Опубликовано 17 Июля 2012 Поделиться Опубликовано 17 Июля 2012 (изменено) ЭТО тебе поможет. Ну просто не может не помочь. Изменено 17 Июля 2012 пользователем Кактус_523 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/218/#findComment-714775
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти