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 Ссылка на комментарий
weas 0 Опубликовано 7 Августа 2011 Поделиться Опубликовано 7 Августа 2011 (изменено) ColR_iT, За инфу спасибо, но когда из нее будут "вылезать" НПС? Добавлено через 1 мин.: Ой, тоесть через сколько? Почитай вот эту статью: Respawn ColR_iT Изменено 7 Августа 2011 пользователем ColR_iT Ссылка на комментарий
RayTwitty 516 Опубликовано 7 Августа 2011 Поделиться Опубликовано 7 Августа 2011 speczadanie, смотри это Ссылка на комментарий
*Shoker* 322 Опубликовано 7 Августа 2011 Поделиться Опубликовано 7 Августа 2011 А зачем в коде выбрасывания предмета создавать дубликат, чтобы "задержку" сделать что ле? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Ulman 5 Опубликовано 7 Августа 2011 Поделиться Опубликовано 7 Августа 2011 (изменено) Ребята, я задавал этот вопрос в другой теме, но мне кажется здесь это будет правильней. Как сделать чтобы уникального нпс не лечили и после смерти не обыскивали его? Добавлено через 259 мин.: И извиняюсь, забыл дописать, мой вопрос по ТЧ. Изменено 7 Августа 2011 пользователем ColR_iT Ссылка на комментарий
Kirag 39 Опубликовано 7 Августа 2011 Поделиться Опубликовано 7 Августа 2011 *Shoker* Чтобы предмет не вернулся в слот. Предмет роняем, слот освобождается. Если сразу поднять, предмет попадет в свободный слот. Если сначала заспавнить дубликат, то в слоте он и окажется, а поднятый предмет упадет в инвентарь - слот будет уже занят дубликатом. Потом дубликат удаляем. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
*Shoker* 322 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 Ulman В каждой из этих схем (их две), в скрипте нужно где нить прописать своего НПС. Где и как именно - нужно смотреть сам скрипт, как его сделал автор. Kirag Понятно, спасибо Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
=VENOM= 50 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 Ulman, если для "лечения" NPC используется т.н АИ-пак xStream'a (а скорее всего, так оно и есть), то в самом начале файла xrs_medic.script можно обнаружить табличку по имени excluded_npcs. Вот в неё и нужно заносить имена NPC, которых будут игнорировать NPC-"медики" - там, кстати, уже указаны несколько "беспомощных товарищей", так что разберёшься. Что касается исключений для обыска, тут сложнее, т.к. автор (кто забыл - Red75, файл watcher_act.script) отчего-то не предусмотрел такой возможности (зато изначально есть возможность определить тех, кто мародёрствовать не станет ), но добавить условие по "отсеиваию" имён (или по story_id, например, или по названию группировки и т.д. и т.п.) совсем несложно. Ссылка на комментарий
Disord 1 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 =VENOM=, вроде бы и watcher_act есть условие такое. Глянь переменную zombi. Ссылка на комментарий
Ulman 5 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 =VENOM=, спасибо большое, а то как то мимо пропустил таблицу. Disord, я тоже разбирался с этой переменной, туда вроде бы группировку вписывать надо? Ссылка на комментарий
Prozone97 0 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 Как сделать, чтоб при попадании гг в определенную точку, активирывалась функция?(и чтоб при следуйщих попаданиях функция не вызывалась, т.е. куда писать инфпоршень) И еще , как вызвать функцию при получение гг какого-нибудь предмета? Ссылка на комментарий
Капрал Хикс 542 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 Prozone97, первое - через спейс рестриктор в оллспавне. С логикой вида (примерно): [logic] active = ph_idle [ph_idle] on_actor_inside = give_info ... END Ссылка на комментарий
PavelSnork 3 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 Всем привет. Нужен ваш совет. Вот, например, у меня есть условие в функции: if db.actor:health > 0.1 and db.actor:health < 0.2 or db.actor:health > 0.5 and db.actor:health < 0.6 then ....... Я правильно понимаю, функция будет выполнятся при условии, если у гг здоровье будет, к примеру, 0.15 или 0.55, так? Просто мне надо, чтоб выполнялось или это db.actor:health > 0.1 and db.actor:health < 0.2 условие, или это db.actor:health > 0.5 and db.actor:health < 0.6. Ведь можно посчитать, что должно выполняться 3 условия: db.actor:health > 0.1, db.actor:health < 0.2 or db.actor:health > 0.5, и db.actor:health < 0.6... Жду ли я Сталкер 2? Хм... Ссылка на комментарий
Prozone97 0 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 в аллспавне не разбираюсь)), может можно без него как-нибудь? Ссылка на комментарий
*Shoker* 322 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 (изменено) Prozone97 А без него скриптами ещё лучше PavelSnork Почти так, тока ещё будут учитываться и 0.11, 0.12, 0.13 ... А вообще подробней опиши, как тебе надо. Изменено 8 Августа 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
ColR_iT 171 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 (изменено) Для Prozone97 Капрал Хикс, позволь тебя поправить, хотя даже не поправить, а дополнить. Чтобы рестриктор больше не проверял наличие в нем актора, нужно поставить перед выдачей инфопоршна nil, вот так: [logic] active = sr_idle [sr_idle] on_actor_inside = nil %+if_actor_inside% вместо выдачи инфопоршна (%+if_actor_inside%), можно выполнить функцию: [sr_idle] on_actor_inside = nil %=if_actor_inside% функция if_actor_inside должна находиться в файле xr_effects.script. Можно конечно произвести проверку и скриптово, но это сложнее и проверка будет выполняться всегда (хотя действие выполнится один раз), поскольку вызов функции придется вешать на апдейт актора. Что касаеться выполнения функции при получении какого либо предмета. Приблизительно так: В файле bind_stalker.script найти вот такую функцию function actor_binder:on_item_take (obj) и дописать в нее проверку, по такому типу: if obj:section() == "obj_section" and db.actor:dont_has_info("condition_info") then -- action db.actor:give_info_portion("condition_info") end где: obj_section - имя секции проверяемого предмета (например для АК-74 это wpn_ak74. Имя секции смотрим в конфиге предмета). action - вызов твоей функции. condition_info - инфопоршень, который ограничевает проверку на один раз. Т.е. получается, что если инфопоршня нет, производим провеку и выдаем инфопоршень, чтобы более действие не выполнялося. Если необходимо, чтобы проверка происходила постоянно убери проверку на инофпоршень. Оговорочка: это будет происходить, если актор подберет предмет сам (с земли, с ящика и т.д.), при трансфере, другими словами, при передачи предмета от кого-то к актору - это не сработает. Чтобы впринципе проверить наличие предмета в инвенторе, можно сделать так: function check_actor_inventory () actor = db.actor if actor and actor:object("item_section") ~= nil then -- action end end здесь: item_section - имя секции проверяемого предмета action - действия если предмет есть. Изменено 9 Августа 2011 пользователем ColR_iT Ссылка на комментарий
Kirag 39 Опубликовано 8 Августа 2011 Поделиться Опубликовано 8 Августа 2011 PavelSnork Лучше проставить скобки в подобных случаях - так ты будешь точно уверен, что поймет как нужно, а не как получится. Для твоих целей - вот так: if (db.actor:health > 0.1 and db.actor:health < 0.2) or (db.actor:health > 0.5 and db.actor:health) < 0.6 then Как и для обычной арифметики, сначала вычисляются выражения в скобках, потом уже общее. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
=VENOM= 50 Опубликовано 9 Августа 2011 Поделиться Опубликовано 9 Августа 2011 Disord, я уже отписал, что изначально в схеме можно указывать тех, кто не будет работать под схемой "мародёры" (то есть не будет обшаривать трупы). Это и есть пресловутая переменная "zombi". Не веришь - обрати внимание, там прописаны как раз зомбированные, а они, в свою очередь, как раз мародёрством не занимаются . Ну, это, конечно, исправить можно, если только у всех моделек зомбированных сталкеров имеется полный набор "сталкеровских" анимаций, иначе, как водится, будет стопудовый вылет. А Ulman'u надо, чтобы указанных персонажей именно не обшаривали после смерти. Ulman, если уж совсем просто, то сделай так - добавь в самое начало функции checkCorpse(obj) (файл watcher_act.script) вот такую строчку: if IsStalker(obj) and obj:name() == "stalker_name" then return false end "stalker_name" следует заменить на имя того сталкера, труп которого не должны обшаривать мародёры - но только не на "Вася" или "Петя", а на такое же, как и в файле xrs_medic.script для раненого, которому "не требуется" помощь. Ссылка на комментарий
Ulman 5 Опубликовано 9 Августа 2011 Поделиться Опубликовано 9 Августа 2011 Как я понял в эти 2 файла надо писать имя, которое прописано в all.spawn то есть например name = esc_vagon_wounded, то в скрипт надо писать esc_vagon_wounded. Сделал так, но его продолжают лечить. Чего я ещё неправильно делаю? Ссылка на комментарий
ColR_iT 171 Опубликовано 9 Августа 2011 Поделиться Опубликовано 9 Августа 2011 (изменено) Prozone97, да и всем кому интересно. Вот скриптовая функция для проверки нахождения ГГ в определенной области: function distance_to_point (lname, pos_x, pos_y, pos_z, dist) local actor = db.actor -- определим текущую локацию, дабы не определять гейм и левел вертексы, хотя можно и их local lev_name = level.name() -- зададим точке наши координаты local point = vector:set(pos_x, pos_y, pos_z) -- проверим существует ли актор и находится ли он на нужной локации if actor and lev_name == lname then -- определим координаты актора local actor_pos = actor:position() -- чтобы сэконимить ресурсы ПК проверим квадрат расстояния между ГГ и точкой if point:distance_to_sqr(actor_pos) <= dist*dist then return true end return false end end Вызов функции следующий if distance_to_point ("l01_escape", -210.632614135742, -20.050708770752, -142.461120605469, 10) then l01_escape - имя уровня на котором нужно проверить вхождение ГГ в область координаты ставим свои, я поставил координаты места спавна Волка 10 - расстояние до нужной точки. Поскольку вероятность того, что ГГ пройдет именно через точку - очень низкая, то используем область, радиус которой и определяет параметр dist P.S. Если где-то ошибся поправьте пожалуйста. Спасибо Charsi за указаные ошибки. Изменено 9 Августа 2011 пользователем ColR_iT Ссылка на комментарий
Ндр 3 Опубликовано 9 Августа 2011 Поделиться Опубликовано 9 Августа 2011 (изменено) Всем добрый вечер. Вопрос по редактированию death_manager'а: искал в этой теме и ковырялке 2 момента, насчет разрядки оружия мертвых НПС и состояния стволов, которые роняют раненые, падающие на землю. На первый нашел ответ, а на второй так и нет. Так вот, спрашиваю, как (и возможно ли) сделать, что бы оружие, которое выронил НПС, имело степень износа, а не было новым? Показалось, что это есть в моде LWR, поэтому это наверное возможно Изменено 9 Августа 2011 пользователем Ндр Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти