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/
Wookie 7 Опубликовано 22 Августа 2013 Поделиться Опубликовано 22 Августа 2013 Приветствую! У меня такой вопросец, как сменить текстуру в статике, не создавая новый статик, помню что строение было вроде такого: имя_статика:SetTexture Заранее спасибо. 1 1 https://www.youtube.com/embed/U0no-6tCxhU Канал на "Трубе" Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-791867
wanes101 0 Опубликовано 23 Августа 2013 Поделиться Опубликовано 23 Августа 2013 здравствуйте какой скрипт отвечает за поведение сталкера, после того как в него попадет пуля? Чистил обработчик в xr_motivator келбек hit, но сталкеры все равно стреляют в ответ. И еще смотрел настройку логики через кастом дату, за реакцию на это отвечает секция hit и описание не совсем ясно помогите растолковать Схема показывает, что происходит при нанесении повреждения NPC. on_hit = hit[hit]on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит.on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).Пример использования секции:[logic]...on_hit = on_hit@agr_factory_hold_fake[on_hit@agr_factory_hold_fake]on_info = {=hit_by_actor} %+agr_krot_skirmish_start% как понимать эту схему: on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит. И не ясно что присваивать в on_hit Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792016
ColR_iT 171 Опубликовано 23 Августа 2013 Поделиться Опубликовано 23 Августа 2013 (изменено) wanes101, колбек на хит - это событие, которое выполнится, когда нпс уже получит хит, а сам хит обрабатывает движок. Секция hit работает ровно также, только из логики. on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит.Это означает, что можно установит параметр, при помощи которого можно произвести какое-то действие (забрать\выдать инфопорцию, либо вызвать функцию), т.е. эффекты, они заключены в знаки процента, при этом можно задать дополнительные условия заключённые в фигурные скобки. Обо всём этом можно почитать на Wiki (ссылка у тебя есть).В on_info по сути ничего не присваивается. Файлы ltx по своей структуре идентичны ini файлам, таким образом on_info это поле, а значение этому полю будет то, что ты пропишешь. В последствии вся логика будет распарсена скриптами, основные скрипты находятся в xr_logic.script. P.S.Всё же ты немного промазал с темой, тебе прямая дорого в"ковырялку". Изменено 23 Августа 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792020
wanes101 0 Опубликовано 23 Августа 2013 Поделиться Опубликовано 23 Августа 2013 (изменено) Настройка логики. Часть 3. Для таких постов есть личка. ColR_iT Изменено 23 Августа 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792023
toxictrace 1 Опубликовано 23 Августа 2013 Поделиться Опубликовано 23 Августа 2013 (изменено) Доброго дня (ночи?). Возник такой вопрос — можно ли в Сталке точно определить какой вид камеры включен (скриптово). Т.е. вид от 1-го лица, от 3-го с фиксированой камерой или от 3-го со свободной камерой. Была попытка определить по разнице позиции актора и камеры. local cam_position = device().cam_pos local pos = db.actor: position() local third1 = cam_position:distance_to(pos) local thr1 = cam_position.y - pos.y Единственне более-менее связаные параметры это координаты Y. Но эта связка работает ( third1 - thr1 = 0, вид от 1-го лица), если ГГ стоит. Но при ходьбе и беге камера (в голове) качается и расстояние между позицией ГГ (ногами) и позицией камеры (головы) меняется. Можно ли что-то сделать? Изменено 23 Августа 2013 пользователем toxictrace 1 Когда умрёшь, увидишь кнопки "О'кей" и "Главное меню"Под ними "Новая" и "Выход" И неактивная "Назад" Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792052
*Shoker* 322 Опубликовано 23 Августа 2013 Поделиться Опубликовано 23 Августа 2013 (изменено) local cam_position = device().cam_pos --> Позиция камеры local pos = db.actor:bone_position("bip01_head") --> Позиция головы игрока local distance = cam_position:distance_to(pos) --> Расстояние от камеры до головы ГГ Не совсем понял как ты хочешь по разнице Y-ов определять что включён вид от 3-го лица с фиксированной или свободной камерой. Как вариант настройки камеры от разного лица хранятся в файле system.ltx, actor_cam_look_ или как то так, найдёшь там вообщем. Там есть такой параметр как максимальное удаление\приближение камеры к игроку (на +\-) Настрой эти параметры так чтобы от 3-го лица с фиксированной камерой приближение было одно (например от 2 до 5 метров или ровно 5-5 чтобы камера всегда в одном месте висела), а со свободной другое (от 5\6 и больше). Что то вроде этого. Тогда уже через distance определяй как далеко от игрока находится камера и соответственно для какого вида это расстояние приемлимо. Изменено 23 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792057
toxictrace 1 Опубликовано 24 Августа 2013 Поделиться Опубликовано 24 Августа 2013 Другой вопрос — нажали клавишу, надо проверить, висит на ней в user.ltx нужное мне действие или нет? Когда умрёшь, увидишь кнопки "О'кей" и "Главное меню"Под ними "Новая" и "Выход" И неактивная "Назад" Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792104
Сталкер Лом 356 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 Здравствуйте. Есть ли проверки на то, существует ли парт-тексутра(определённая область в текстуре, которая записывается в .xml - "научного" названия не знаю, называю так)? Нужно мне это для такой ситуации: если есть текстура с определённым именем (она будет в размерах больше), то загрузить её. Если нет, то загрузить текстуру другую (меньшего размера). Текстуры подгружаю в GUI. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792340
*Shoker* 322 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 @Сталкер Лом, глянь скрипты ui_save_dialog\ui_load_dialog.scriptЭто скрипты сохранения\загрузки и там показан пример проверки наличия текстуры в папке с сейвами.Делай по аналогии для своего скрипта проверку что такой файл существует. Само собой это при условии что ты знаешь название текстуры. По парт-текстуру первый раз слышу или не понял что это такое. 1 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792351
Reisen 3 Опубликовано 27 Августа 2013 Поделиться Опубликовано 27 Августа 2013 (изменено) Здравствуйте. Есть функция kоторая возвращает название комбинезона kak string.Проблема в том что я этот string хочу проверить по таблице. group_1 = {soldier_outfit_grey = true, soldier_outfit_brown = true, ... etc.} local get_visual = get_visual.main(obj) if group_1[get_visual] then -//kod//-- end Проблема в том что, так построений if даже не стартует, как будто не распознает аргумент.Но, если я построю if таким образом. group_1 = {soldier_outfit_grey = true, soldier_outfit_brown = true, ... etc.} local get_visual = get_visual.main(obj) if get_visual == "soldier_outfit_grey" then -//kod//-- end To сравнение удается, то есть, это не nil и название комбинезона фактически находится в get_visual.Какие-то советы, что делаю не так? Я читал lua tutorial и там сказано что это правильный способ чтобы сравнивать string со значениями в таблице но у меня как то не выходит. Изменено 27 Августа 2013 пользователем Reisen Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792528
Shredder 49 Опубликовано 27 Августа 2013 Поделиться Опубликовано 27 Августа 2013 Я бы тебе посоветовал использовать разные названия для переменных и для скриптов (get_visual) 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792556
boryan67 38 Опубликовано 27 Августа 2013 Поделиться Опубликовано 27 Августа 2013 Reisen, попробуй так сделать: local group_1= { ["soldier_outfit_grey"] = true, ["soldier_outfit_brown"] = true, ... etc. } Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792559
Reisen 3 Опубликовано 27 Августа 2013 Поделиться Опубликовано 27 Августа 2013 (изменено) Я бы тебе посоветовал использовать разные названия для переменных и для скриптов (get_visual) А вот я без особых надежд взял и изменил название на local get_oname = get_visual.main(obj) и сразу же заработало... Я на это потратил больше дня а надо было название взят другое, что самое смешное это такая нубовская ошибка, везде по голове молотком стучат чтобы этого не делать. Reisen, попробуй так сделать: На будущие постараюсь помнить что есть еще такой способ. Спасибо за помощь, надо мне было сразу же сюда писать, а не голову ламать часами. Изменено 27 Августа 2013 пользователем Reisen 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-792591
Dennis_Chikin 3 665 Опубликовано 2 Сентября 2013 Поделиться Опубликовано 2 Сентября 2013 (изменено) Интересно, на сколько я неправильно понимаю, что здесь что-то не так (amk-мод, amk.script): function fill_item_packet(ret,stpk,updpk) stpk:w_float(ret.condition) updpk:w_u8(ret.updnum_items) updpk:w_float(ret.updpos.x) updpk:w_float(ret.updpos.y) updpk:w_float(ret.updpos.z) readvu8uN(updpk,ret.updcse_alife_item__unk1_q8v4) readvu8uN(updpk,ret.updcse_alife_item__unk2_q8v3) readvu8uN(updpk,ret.updcse_alife_item__unk3_q8v3) return ret end Но ведь ни у кого ж ни разу не вылетало ? Изменено 2 Сентября 2013 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793614
*Shoker* 322 Опубликовано 2 Сентября 2013 Поделиться Опубликовано 2 Сентября 2013 (изменено) Я не смотрел скрипт АМК, поэтому не знаю что делает функция readvu8uN но в остальном тут не должно быть ошибок. Но вообще для работы с нэт-пакетами лучше использовать скрипт m_netpk (или как то так, ещё может m_net_utils.script называться) из Simbion Mod-а (потому что на форуме будет проблематично его найти) Там очень удобная библиотека функций для работы с нэт-пакетами. Ну или найди последние посты xStream-а в которых как раз обсуждались нэт-пакеты. Собстно вбей в поиск по этой теме m_netpk и найдёшь тут один из вариантов (если ещё нету более новых) Изменено 2 Сентября 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793619
Dennis_Chikin 3 665 Опубликовано 2 Сентября 2013 Поделиться Опубликовано 2 Сентября 2013 Удобная, но неторопливая. Кстати, на яндексе отдача файлов в очередной раз сдохла. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793621
Artos 99 Опубликовано 3 Сентября 2013 Поделиться Опубликовано 3 Сентября 2013 (изменено) @Dennis_Chikin, как говорится, спешка нужна при ловле блох. При работе с нет-пакетами торопливость противопоказана. ;-) Обновил и сам модуль и ссылку: m_netpk от 03.09.2013 Ну а по твоему вопросу: не было вылетов потому, что а) данный код не был востребован и б) искажение данных нет-пакета не всегда приводит к вылетам. Вспомни т.н. "рельсы", когда модели убитых монстров растягивались на пол локации. Отсутствие фатальной ошибки (вылета) нередко годами скрывает наличие ошибки, а в amk.script немало таких огрех и др. рудиментов... Изменено 3 Сентября 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793708
Dennis_Chikin 3 665 Опубликовано 4 Сентября 2013 Поделиться Опубликовано 4 Сентября 2013 "Вспомни т.н. "рельсы", когда модели убитых монстров растягивались на пол локации." Кстати, а что это вообще было ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793854
Artos 99 Опубликовано 4 Сентября 2013 Поделиться Опубликовано 4 Сентября 2013 (изменено) Ну так кратко уже упомянул: "б) искажение данных нет-пакета" Если не сильно углубляться в дебри, то "рельсы" возникают из-за: 1.В АМК-моде имеются динамические рестрикторы (например аномалии), которые спавнятся в процессе игры и удаляются из игры. 2. Объекты в игре зависимы от рестрикторов и имеются т.н. "out_restrictions" и "in_restrictions", которые прописываются движком в нет-пакеты объектов. 3.(!) Чтобы при удалении рестриктора(ов) не возникало вылетов из-за "хвостов" в нет-пакетах, в АМК-моде имеются зачистки рестрикторов в нет-пакетах (см. on_register иль net_destroy), для чего считываются нет-пакеты и => crvu32u16u2={}. 4. При смерти монстров/сталкеров их объект получает физическую оболочку (phisic_shell) и в нет-пакете меняется структура(расширяется). В параметре 'skeleton_flags' изменяются значения битов, появляются дополнительные параметры/значения скелета/костей (bones). Именно это и приводит к искажению пакетов, т.к. упрощенное (неверное!) чтение и запись искажает значения... Порою это приводит к вылетам иль "битым сэйвам", порой остается незаметным, а порою измененные величины векторов превращают трупы во что угодно, в том числе и "рельсы", вытягивая в том иль ином направлении. Примечание: Чтобы изменить требуемый параметр приходится считывать весь(!) нет-пакет объекта и его (пере)записывать, заменяя требуемое значение, а в АМК-моде (amk.script) это делается даже одновременно с двумя типами пакетов ("state" и "update"), и любой сбой при чтении приводит к непредсказуемости. Подобные косяки могут быть и с предметами, т.к. алгоритм чтения/записи параметров секции cse_alife_object_physic, как и cse_ph_skeleton, кастрирован (упрощен). Немало и других некорректных частей в алгоритмах нет-пакетов в amk.script. Изменено 4 Сентября 2013 пользователем Artos 2 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793871
S.K.Y.M.I.X.X.E.R.S 4 Опубликовано 4 Сентября 2013 Поделиться Опубликовано 4 Сентября 2013 Доброго времени всем суток. Возможно в ЗП проверить принадлежит ли данный смарт определенной группировке, так как ЧН? ПИС функция ЧН не работает, что надо поменять? function smart_captured_by_faction(actor , obj, p) local smart_name = p[1] local faction_name = p[2] if smart_name == nil or faction_name == nil then abort("Wrong parameters") end local smrt = sim_board.get_sim_board().smarts_by_names[smart_name] if smrt == nil then abort("Smart name [%s] doesn't exist.", smart_name) end if smrt.player_name == faction_name then return true end return false end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/263/#findComment-793908
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти