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/
dsh 3 824 Опубликовано 29 Июля 2018 Поделиться Опубликовано 29 Июля 2018 @Graff46, с оригинальным движком скорее всего никак. Там одни места берут имя из серверного объекта и его теоретически можно поменять через нетпакет, а другие места берут имя из клиентской части и туда доступа вроде нет. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192623
HellRatz 2 913 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 Никто не подкинет функцию скриптового спавна по story id (ТЧ, если важно)? Искал и не нашел подобных упоминаний такой функции нигде. Может где-то в модах есть, но не знаю где. Беда в том, что скриптовым спавном, в отличие от олл.спауна, к имени объекта добавляются еще цифры и некоторые функции перестают работать т.к не могут обработать это имя. Может быть спавн по "сид-у", а не имени секции, решит эту проблему? GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192744
dsh 3 824 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 @HellRatz, ты вот это имеешь ввиду local spawn_id = alife():spawn_id( story_ids.yantar_chernomor ) sobj = alife():create( spawn_id ) или что-то другое? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192752
HellRatz 2 913 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 7 минут назад, dsh сказал: ты вот это имеешь ввиду Возможно. Надо попробовать. Сейчас проверю. @dsh, нет, не совсем. Это спавн уже зашитого объекта в спаун (только заранее удаленного), я так понимаю? А мне надо по координатам без участия олл.спауна. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192753
dsh 3 824 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 @HellRatz, каким макаром? story_id имеет отношение к уже существующему объекту, либо в игровом мире, либо в all.spawn. Т.ч. что бы обратиться по story_id, объект должен уже быть в одном из этих мест или в обоих. 5 minutes ago, HellRatz said: А мне надо по координатам. Ну, можно сначала переспаунить из all.spawn, как я показал, а потом телепортировать на нужные координаты, если у тебя хотя бы xray extensions. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192758
buffy 4 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 (изменено) @dsh, может ему подойдет условие спавна [spawner]? Изменено 30 Июля 2018 пользователем buffy Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192759
HellRatz 2 913 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 4 минуты назад, dsh сказал: Т.ч. что бы обратиться по story_id, объект должен уже быть в одном из этих мест или в обоих. В общем суть. Есть, допустим, npc_1, заспавненный через олл.спаун, которого обрабатывает скрипт. Именно по этому имени. Если заспавнить его через скрипт, то его имя внутри игры уже будет не npc_1, а, какой-нибудь npc_1_20945, следовательно скрипт уже не может подхватить этого НПСа с таким именем. То есть я так понимаю, заспавнить объект по стори_айди, без его предварительного вшивания в спавн, - не реально? Тогда плохо. Ладно. @dsh, напишу в личку тогда в чем суть проблемы, дабы тут не разводить? Может быть глянешь мельком, поможешь. А сей вопрос тогда отменяется. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192762
Expropriator 2 119 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 @HellRatz, если грамотно написать пакет для спаунящегося, то будет всё работать и со спауном из скрипта. За нпс, не знаю, а вот с техникой проблем нет. Хотя, если спавн нпс сделать персональным на уровне корня класса, то тоже должно проканать. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192764
Expropriator 2 119 Опубликовано 30 Июля 2018 Поделиться Опубликовано 30 Июля 2018 Например (ЗП) спавн техники для скрипта. Как в ТЧ будет работать незнаю... [zat_boat_car_3] GroupControlSection = spawn_group discovery_dependency = $spawn = "vehicles\zat_boat_car_3" cform = skeleton class = HELCAR visual = physics\vehicles\boat\boat_car.ogf actor_visual = physics\vehicles\boat\boat_car.ogf cost = 250000 ef_equipment_type = 3 ph_mass = 10000 wallmark_section = explosion_marks script_binding = bind_physic_object_helcar.init story_id = zat_boat_car_3 Например как в ЗП спавнят Сидоровича-нпса скриптом: [sidor]:m_trader $spawn = "respawn\esc_trader_test" character_profile = obj_trader spec_rank = master community = trader story_id = obj_trader custom_data = scripts\escape\esc_trader.ltx Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192766
Гость Опубликовано 1 Августа 2018 Поделиться Опубликовано 1 Августа 2018 (изменено) Всем добрый день! Такой вопрос: может ли ЛУА получать текстовые значения из конфига .xml. Например, в коде у меня есть надпись " RU", а в xml файле <string id="st_currency"> <text>RU</text> </string> как получить эту самую ссылку из скрипта? Заранее признателен. Изменено 1 Августа 2018 пользователем Den “Angry Wolf” Koslov Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192955
buffy 4 Опубликовано 1 Августа 2018 Поделиться Опубликовано 1 Августа 2018 game.translate_string(key) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1192960
Гость Опубликовано 4 Августа 2018 Поделиться Опубликовано 4 Августа 2018 А есть ли возможность через скрипт удалять все объекты из инвентаря ГГ определенного класса, сразу одним махом? Кто-нибудь знает? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1193303
gam 118 Опубликовано 4 Августа 2018 Поделиться Опубликовано 4 Августа 2018 3 часа назад, Den “Angry Wolf” Koslov сказал: удалять все объекты из инвентаря ГГ определенного класса, сразу одним махом? Можно все что невозможно, Зона жеж... Как одна из кучи возможностей: db.actor:inventory_for_each(function(item) if item:section() == "секция_обжекта" then alife():release(item, true) end end) Ну или так: if db.actor:object("секция_обжекта") ~= nil then local obj = alife():object(db.actor:object("секция_обжекта"):id()) if obj then alife():release(obj) end end Вариации самих Разрабов можно отыскать в файле xr_effects.script для Арены хотя бы. Ну а если правильно описать зачем это Вам и для каких условий, то точно подскажут верное решение. А удалять по классу немного нелепо имхо - ибо один класс может содержать множество построенных на его настройках обжектов. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1193316
Гость Опубликовано 4 Августа 2018 Поделиться Опубликовано 4 Августа 2018 10 часов назад, gam сказал: А удалять по классу немного нелепо имхо Спасибо большое за примеры кода. Дело в том, что я создаю новый класс через движок, специально для этой цели. Идея заключается в следующем. Хотел реализовать, что-то на подобии команды "удалить весь хлам в инвентаре" при этом хламу дать свой класс, чтобы не перечислять секции item'ов, так как мне нужно сделать так, чтобы остальные предметы снаряжения в рюкзаке оставались на своих местах. Хлам - это фишка геймплея.Так что я не совсем уверен если подойдут имена секций. По моему так скрипт будет игру сильнее нагружать ради проверки на весь хлам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1193407
Graff46 623 Опубликовано 8 Августа 2018 Поделиться Опубликовано 8 Августа 2018 (изменено) 2 вопроса: 1. Можно-ли через скрипты получать\устанавливать опьянение ГГ в ТЧ с X-Ray extension 2. Почему не работает db.actor:set_actor_position(ya_old) Отсюда: Скрытый текст function effct() -- ЭТА ВЫЗЫВАЕТСЯ НИЖЕ! local npc = level_object_by_sid(926) local pos, dir = npc:position(), npc:direction() local v = vector():set(pos) v.x = pos.x + 3 * math.cos(dir:getH()) v.z = pos.z + 3 * math.cos(dir:getH()) db.actor:object('device_torch'):switch_torch(true) db.actor:set_actor_position(v) db.actor:set_actor_direction(-npc:position():sub(v):getH() ) end function pred_mon(act, npc) -- ВЫЗЫВАЕМАЯ Ф-ЦИЯ! function _off () -- ВЛОЖЕННАЯ Ф-ЦИЯ! ВЫЗЫВАЕТСЯ НИЖЕ! local npc = level_object_by_sid(926) db.actor:set_actor_position(ya_old) -- НЕ РАБОТАЕТ, НО ОШИБОК НЕ ВЫЗЫВАЕТ ya_old = nil switch_offline_id(npc:id()) end local a = db.storage[npc:id()].enemy if (a) and (a:section() == "dv_nom_x18_attack" or a:id() == 0) then _G.ya_old = vector():set(db.actor:position()) effct() -- ОНА ВВЕРХУ nt.timer(2000, _off) -- ТУТ ВЫЗЫВАЕТСЯ (ЧЕРЕЗ 2 СЕК) ВЛОЖЕННАЯ Ф-ЦИЯ return true end end Функция из таймера вызывается корректно (НПС в оффлайн переходит и таймер "проверенный"), но возвращаться ГГ на своё место ни как не хочет! Изменено 8 Августа 2018 пользователем Graff46 Дополнял Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1193991
Overfirst 637 Опубликовано 8 Августа 2018 Поделиться Опубликовано 8 Августа 2018 (изменено) Это не нужно заворачивать в вектор: _G.ya_old = db.actor:position() Не? Изменено 8 Августа 2018 пользователем Overfirst Ранее был известен под ником BoBaH_671. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1193995
Graff46 623 Опубликовано 8 Августа 2018 Поделиться Опубликовано 8 Августа 2018 @Overfirst На всякий случай. Таким способом создаём новый вектор с параметрами заданного, что бы после манипуляций с исходным векторам не получилось неожиданностей. В луа переменные хранят ссылки на объекты и если объект где-то изменился - то и значение переменной после этого тоже изменится, такая трабла с таблицами бывает бесит. Также смотри как тут, у разрабов, utils.vector_copy_by_val() Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1194006
Shkiper2012 35 Опубликовано 13 Августа 2018 Поделиться Опубликовано 13 Августа 2018 (изменено) [ЗП, СоС] Как заставить нпс скриптом перезарядить оружие, которое держит в руках (с анимацией и прочим)? Смотрел как сделано у @Bak в AI Additions, но так до конца и не понял. Вроде используется такая штука, после кучи проверок: npc:set_item(object.aim_force_full1,wpn) Пытаюсь сделать по аналогии, типа так: Скрытый текст -- добавление недостающих команд для оружия if not object.aim_force_full1 then object.aim_ready1 = object.drop+1 -- eObjectActionAimReady1 = 12 object.aim_ready2 = object.aim_ready1+1 -- eObjectActionAimReady2 = 13 object.aim_force_full1 = object.aim_ready2+1 -- eObjectActionAimForceFull1 = 14 object.aim_force_full2 = object.aim_force_full1+1 -- eObjectActionAimForceFull2 = 15 end local target_obj = level.get_target_obj() local npc = target_obj local wpn = npc and npc:active_item() if npc and wpn then log("reloading wpn -- start --") -- 1 -- Либо так: -- -- npc:set_item( object.reload, wpn ) -- npc:set_item( object.reload1, wpn ) -- npc:set_item( object.reload2, wpn ) -- 2 -- или так: npc:set_item( object.aim_force_full1, wpn ) log("reloading wpn -- end --") end Ничего "не выходит" - нпс просто стоит "как ни в чем не бывало". Или парой строк скрипта не обойтись (нужно писать схему поведения, добавлять в планировщик и т.д.)? Изменено 13 Августа 2018 пользователем Shkiper2012 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1194828
Гость Опубликовано 14 Августа 2018 Поделиться Опубликовано 14 Августа 2018 Возможно кому-то известно как динамически менять текстуру для модели оружия? Предположим есть 3 текстуры калаша: новый, ржавый и сильно ржавый в зависимости от состояния. Есть ли возможность как-то менять текстуру через скрипт? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1194937
Graff46 623 Опубликовано 14 Августа 2018 Поделиться Опубликовано 14 Августа 2018 @Den “Angry Wolf” Koslov Можно, на движковых правках. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/462/#findComment-1194945
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти