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/
Kirgudu 1 337 Опубликовано 10 Июля 2014 Поделиться Опубликовано 10 Июля 2014 И вот здесь меня мучат сомнения: допустим, кровососы убиты в порядке 4,2,1,3, будет ли в таком случае k = 4? Разумеется. Поскольку в функции sosyci_proverka() нет преждевременных возвратов после каждой проверки, результат будет накапливаться. В итоге получишь правильную сумму вне зависимости от порядка. Вообще, это больше относится к азам программирования, чем к скриптам конкретно Сталкера. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-860873
Карлан 1 050 Опубликовано 10 Июля 2014 Поделиться Опубликовано 10 Июля 2014 (изменено) @Призрачный, может с такими вопросами лучше на ап-про? Там ребят твоего уровня побольше, ну и людей, которые на такие вопросы любят отвечать тоже. Конкретно у тебя вопрос, если так можно сказать, "туториальный", зайди в Справочник по функциям и классам, там ну очень подробно расписан класс effector, с помощью него реализовать тобою задуманное весьма не сложно. @Музафир, вешаешь на дез колбек убил ли ты кровососа, прибавляешь единичку (или сколько тебе надо) к числовой переменной, ее хранишь в сейве сколько нужно, хоть всю игру, хоть пока идет квест, ну в целом готово. Опять же скажу за себя, у меня в модуле доп. рангов за убийства монстров прибавляются очки и, если убито должное количество, повышается сам ранг, обе эти переменные хранятся подобным образом: for i=1, #clsIDMobs do if not has_alife_info(aRankData.monster_data[clsIDMobs[i]][#aRankData.monster_data[clsIDMobs[i]]].sInfo) then packet:w_u8(aRankData.monster_data[clsIDMobs[i]].index or 0) packet:w_u32(aRankData.monster_data[clsIDMobs[i]].count or 0) end endТебе нужно сделать что-то подобное, только проще раз в 10. Тебе достаточно использовать w_u8. Изменено 10 Июля 2014 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-860875
demon96 8 Опубликовано 12 Июля 2014 Поделиться Опубликовано 12 Июля 2014 (изменено) Как сделать срабатывание функции через некоторое время после вызова? Например,чтоб сообщение приходило через 15сек.У меня возникает странный вопрос: внутрь bind_stalker.script хоть раз доводилось заглядывать, или "не царское это дело" ? dc Изменено 12 Июля 2014 пользователем Dennis_Chikin Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861465
AndreySol 215 Опубликовано 12 Июля 2014 Поделиться Опубликовано 12 Июля 2014 (изменено) Как сделать срабатывание функции через некоторое время после вызова Никак, если вызвал ф-цию - она отработает все свое содержимое и завершится. Судя по Например,чтоб сообщение приходило через 15сек. тебе видимо требуется это ? void give_game_news( -- выдать на экран сообщениеstring, -- само сообщение. Может содержать некоторые форматирующие элементы string, --текстура, из которой берется аватара "отправителя" Frect, --координаты и размеры вырезаемого из текстуры изображения int, --начало показа сообщения с текущего момента (в миллисекундах) -- поставь 15000 и сообщение прийдет через 15 секунд после вызова ф-ции в которой это сообщение будет послано. int --длительность показа сообщения (в миллисекундах) ) Если-же требуется из одной ф-ции вызвать другую, но с какой-то временной задержкой - тогда юзай таймеры... Изменено 12 Июля 2014 пользователем AndreySol Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861516
demon96 8 Опубликовано 12 Июля 2014 Поделиться Опубликовано 12 Июля 2014 (изменено) @AndreySol,Ситуация такова: function teleport(actor, npc) level.add_cam_effector("camera_effects\\empty.anm", 160608, false,"tp.teleportate") level.add_pp_effector("peace_fade.ppe", 160608, false) end function teleportate() level.add_pp_effector ("teleport.ppe", 16060800, false) db.actor:set_actor_position( vector( -241.71509460448, -26.742816052856, -304.54711914063 ) ) sms_guider() end function sms_guider() news_manager.send_tip(db.actor, "%c[255,255,128,128] Ну вот и добрались, я развязываю тебе глаза и ухожу. Не пытайся меня искать, удачи! %c[default]", nil, "stalker", nil, 30000) endНужно, чтоб после телепорта спустя 15 сек. приходило сообщение. Таймер так и не понял как применять, может вписал не правильно. Изменено 12 Июля 2014 пользователем demon96 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861596
FantomICW 678 Опубликовано 12 Июля 2014 Поделиться Опубликовано 12 Июля 2014 @demon96, тебе же @AndreySol, конкретно указал на функцию и значение, которые нужно выставить...Вообще, можно, конечно, и движковую give_game_news использовать, но мне лично удобней просто задать третье значения в send_tip: news_manager.send_tip(db.actor, "%c[255,255,128,128] Ну вот и добрались, я развязываю тебе глаза и ухожу. Не пытайся меня искать, удачи! %c[default]", 15000, "stalker", nil, 30000) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861617
demon96 8 Опубликовано 12 Июля 2014 Поделиться Опубликовано 12 Июля 2014 (изменено) Получилось, только в таком случае в фкнкции указываются секунды, а не милисекунды, тоесть не 15000, а 15. Изменено 12 Июля 2014 пользователем demon96 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861621
NiKi BoY 18 Опубликовано 13 Июля 2014 Поделиться Опубликовано 13 Июля 2014 Не знал куда обратиться, но за что отвечает в AMK моде функция amk.start_timer??? Живу, дышу, да-да я существую. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861758
AndreySol 215 Опубликовано 13 Июля 2014 Поделиться Опубликовано 13 Июля 2014 Ну тут уж из самого названия, даже не глядя в содержимое ф-ции - старт\запуск таймера.... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861765
NiKi BoY 18 Опубликовано 13 Июля 2014 Поделиться Опубликовано 13 Июля 2014 Как адаптировать данный скрипт к оригиналу https://yadi.sk/d/j6bt1PmTWVt5z Живу, дышу, да-да я существую. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861883
AndreySol 215 Опубликовано 13 Июля 2014 Поделиться Опубликовано 13 Июля 2014 (изменено) Лучше спросить у автора(ов) скрипта. К какому оригиналу: ТЧ, ЧН, ЗП. Откуда скрипт взят ? Что он вообще делает -какие-то бомбы\мины\детонаторы... Судя по использованию таймеров - сначала надоадаптировать эти самые таймеры на не указаный оригинал. Надо знать - а есть-лисвязанные с этим скриптом другие скрипты, их тоже адаптировать. Конфиги незабыть... Изменено 13 Июля 2014 пользователем AndreySol Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-861905
Vadyanchikus 5 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 Люди, прошу помощи с одним скриптом. Бывалым скриптерам это труда не доставит. Суть скрипта в чём: мне нужно принести Сидоровичу один из артефактов: Выверт или Грави. За это он мне 1500 даёт. Если у игрока только Выверт - Сидор забирает Выверт, если только Грави - забирает Грави. Если и то, и другое - забирает Выверт. Проблема вот в чём: Сидор забирает у меня Грави, хотя его у меня нет в инвентаре, но есть Выверт, который так и остаётся в рюкзаке. Помимо этого он даёт 1500, получается, что ни за что. Помогите исправить эту проблему, пожалуйста. Вот код: function give_esc_art(first_speaker, second_speaker) local artefact=first_speaker:object("af_vyvert") if artefact==nil then dialogs.relocate_item_section(second_speaker, "af_gravi", "out") else dialogs.relocate_item_section(second_speaker, "af_vyvert", "out") end dialogs.relocate_money(second_speaker, 1500, "in") end Заранее спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863262
Kirgudu 1 337 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 (изменено) function give_esc_art(first_speaker, second_speaker) if db.actor:object("af_vyvert") ~= nil then dialogs.relocate_item_section(second_speaker, "af_vyvert", "out") elseif db.actor:object("af_gravi") ~= nil then dialogs.relocate_item_section(second_speaker, "af_gravi", "out") else return end dialogs.relocate_money(second_speaker, 1500, "in") end Изменено 18 Июля 2014 пользователем Kirgudu Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863265
Vadyanchikus 5 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 (изменено) Увы, помогло только частично. Теперь Сидорович забирает нужный артефакт (Выверт), но он всё ещё остаётся в рюкзаке. А, проблема в самой функции relocate_item_section. Я посмотрел скрипт, отвечающий за передачу водки механику "Свободы" - там функция relocate_item. Хотя она указана, как устаревшая. Я посмотрел функцию relocate_item_section, и в ней есть пометка, что она перемещает только квестовые предметы. Вот функция: function relocate_item_section(victim, section, type) if db.actor and victim then if type == "in" then --' Трансферить нужно только квестовые предметы. if quest_section[section] == true and victim:object(section) ~= nil then victim:transfer_item(victim:object(section), db.actor) else alife():create(section, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end elseif type == "out" then db.actor:transfer_item(db.actor:object(section), victim) end news_manager.relocate_item(db.actor, type, section) end end Наверное, из-за этого артефакт из моего рюкзака и не отбирается. Может, кто-нибудь подскажет, как сделать эту функцию универсальной, то есть не только квестовые предметы перетаскивать? Напоминаю: портянки убираем под спойлер. Kirgudu Изменено 18 Июля 2014 пользователем Kirgudu Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863271
Dennis_Chikin 3 665 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 local sim = alife() local actor -- db.actor local t_quest = {} -- квестовые предметы local news_relocate_item -- вывод сообщения о потере/получении предмета function relocate_item_section( who, sect, d, n ) -- todo: составить таблицы, потом перемещать local r = 0 if d == "in" then for i = 1, n or 1 do if who and t_quest[sect] and i == 1 then -- квестовые предметы перемещаем local item = who:object( sect ) if item then who:transfer_item( item, actor ) else sim:create( sect, vector(), 0, 0, 0 ) end r = r + 1 else sim:create( sect, vector(), 0, 0, 0 ); r = r + 1 end end elseif who and d == "out" then for i = 1, n or 1 do local item = actor:object( sect ) if item then actor:transfer_item( item, who ) r = r + 1 end end end if r ~= 0 then news_relocate_item( actor, d, sect, r ) end return r end переменные перед функцией определить на свои значения Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863276
Kirgudu 1 337 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 local news_relocate_item -- вывод сообщения о потере/получении предмета Здесь стоит добавить для тех, кто не в теме, что news_relocate_item - функция или ссылка на функцию. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863282
Vadyanchikus 5 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 Я в скриптах пока не очень понимаю, только если по шаблону писать. То есть этот скрипт на перемещение предметов подойдёт на ТЧ 1.0006? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863292
Карлан 1 050 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 (изменено) @Vadyanchikus, в сталкере есть непонятная лично мне особенность, сначала нужно забирать итем у актора, а потом дальше че-нить фигарить, иначе у актора нифига забираться не будет, несмотря на появленное сообщение. Так что переставь порядок функций и отпишись заработало или нет.Замечательно забирается. dc Эмпирически доказал для себя обратное, спорить я конечно не буду, у меня такой косяк имел место быть, хотя логики в нем не видно. Не забирается. Изменено 18 Июля 2014 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863322
aleksn09 2 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 (изменено) Приветствую! У меня тут такой вопрос. Как можно сделать условие, чтобы при наличии артефакта в инвентаре, повышался уровень радиации у ГГ, а когда убираешь артефакт в ячейку для артефактов, радиация переставала повышаться?А вот функция, которую я сделал. Но когда арт убираешь в ячейку для слотов, радиация все равно повышается. function artefact_radiation() if time_global() - flag_timer < 10000 then return end if db.actor.radiation <= 0.5 then flag_timer = time_global() if db.actor:object("af_oasis_heart") and db.actor:item_in_slot(11) ~= "af_oasis_heart" then local actor = db.actor local h = hit() h.draftsman = actor h.power = 0.3 h.type = hit.radiation actor:hit(h) end end end db.actor:item_in_slot(11) ~= "af_oasis_heart", как минимум... dc В том и прикол, что даже когда артефакт в ячейке, функция работает. Даже сделал функцию вывода сообщения, если артефакт в слоте, так сообщение не выводится.P.S. Надеюсь пост ниже не относится ко мне? Я всего-то задал вопрос, а отвечать или нет, ваше дело. Просто реально уже все перепробовал. Изменено 18 Июля 2014 пользователем aleksn09 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863330
Dennis_Chikin 3 665 Опубликовано 18 Июля 2014 Поделиться Опубликовано 18 Июля 2014 А вообще опять становится грустно... С одной стороны, вроде радоваться надо, что появляются люди, которым еще что-то интересно, а с другой - все сводится к дичайшему примитиву, и опять таки: "вот, я тут наделал - исправьте мне", и "дайте мне, чтобы все было"... 8( То есть, какой-то собственной работы не видно совсем. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/285/#findComment-863334
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти