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 Ссылка на комментарий
aqraccy 0 Опубликовано 16 Марта 2011 Поделиться Опубликовано 16 Марта 2011 (изменено) Помогите с функцией, пожалуйста! function some_spawn() local shit = {"wpn_ak74", "wpn_abakan", "kolbasa", "bread", "vodka", "medkit", "bandage"} alife():create([math.random(table.getn(shit))], -- здесь я хочу, чтобы актору заспавнилось что-то из "shit" db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end В общем, поставил пока функцию в диалог с неписем, но в инвентарь абсолютно ничего не спавнится. Какая здесь ошибка? Изменено 16 Марта 2011 пользователем aqraccy Ссылка на комментарий
eXiu 7 Опубликовано 16 Марта 2011 Поделиться Опубликовано 16 Марта 2011 (изменено) Вот скрипт. lite_treshold = 0.05 --'насколько должно уменьшиться здоровье с предыдущего обновления, чтобы экран окрасился в красный crit_treshold = 0.30 --'насколько должно уменьшиться здоровье с предыдущего обновления, чтобы ГГ начало шатать drop_item_on_crit_prob = 0.20 --'вероятность того, что ГГ выронит оружие effector_power_coeff = 0.7 prev_health = -1 chk_h_t = 0 function wounded_pp_update() if (chk_h_t or 0) < time_global() then chk_h_t = time_global()+1000 if prev_health > (db.actor.health + lite_treshold) then level.add_pp_effector("fire_hit.ppe", 2011, false) local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff level.set_pp_effector_factor(2011, effector_power) if prev_health > db.actor.health + crit_treshold then level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) if math.random() < drop_item_on_crit_prob then local active_item = db.actor:active_item() if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end prev_health = db.actor.health end end Ну по такому случаю, тебе можно и не создавать новый скрипт, а подправить и этот, вот только как именно ты представляешь экран в крови, постэфектом или текстурой. Постэфект, если такой и есть делаеться аналогично, я думаю ты уже догадался, но вот есть ли он? Текстурой... грубовато будет, текстура будет резко появляться и так же резко изчезать. А вот про какой конфиг ты говорил - загадка. Куфзук Изменено 16 Марта 2011 пользователем Куфзук Ссылка на комментарий
TRAMP14 1 Опубликовано 16 Марта 2011 Поделиться Опубликовано 16 Марта 2011 (изменено) function some_spawn() local shit = {"wpn_ak74", "wpn_abakan", "kolbasa", "bread", "vodka", "medkit", "bandage"} alife():create(shit[math.random(7)], db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end А вот так? Изменено 16 Марта 2011 пользователем TRAMP14 Ссылка на комментарий
Капрал Хикс 558 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Такой вопрос, надеюсь, в нужной теме спрашиваю. Если что, пост под снос. Есть АМК 1.4.1 и новые локации. Для спавна динамических аномалий на новых локах вписать их в amk/anoms/anoms.ltx по точкам спавна, это вроде понятно, а вот как указывать вертексы в amk_anoms.script? Заранее спасибо. Ссылка на комментарий
=VENOM= 51 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Вот так : function some_spawn(first_speaker, second_speaker) local shit = {"wpn_ak74", "wpn_abakan", "kolbasa", "bread", "vodka", "medkit", "bandage"} local item = shit[math.random(table.getn(shit))] alife():create(item,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end Капрал Хикс, в amk/anoms/anoms.ltx прописываются "противоаномальные" зоны - то есть места, где динамические аномалии спониться не будут. Ссылка на комментарий
TRAMP14 1 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Напишите пожалуйста как сделать ввод текста на тип "Меток с хабаром". Очень надо но найти не могу Ссылка на комментарий
FSX 0 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Делаю смарт на ЗП для новой локации.Получаю следущее: Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...l.k.e.r. - Зов Припяти\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil) Ссылка на комментарий
_Призрак_ 11 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 у тебя смарт с логикой. Но игра не может или найти прописанный файл с логикой или не может найти в этом файле саму секцию логики, или не прописана актив = логика Freedom Ссылка на комментарий
=VENOM= 51 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 А у меня вот какой вопрос: возможно ли как-то изменить отношение непися к игроку в оффлайне? Ссылка на комментарий
Ulman 5 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Люди, вот такая у меня проблема, при старте игры на Кордоне такой вылет [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...game$\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:126: attempt to index local 'st' (a nil value) . Скажите как исправить, если надо могу залить свои скрипты. Ссылка на комментарий
TASTAN 1 Опубликовано 18 Марта 2011 Поделиться Опубликовано 18 Марта 2011 Подскажите как мне зделать чтоб група НПС перешла из одного смарта в другой(он на другой локации), но чтоб они туда бежали и были группой, а не разбегались? Ссылка на комментарий
allshaddad 0 Опубликовано 19 Марта 2011 Поделиться Опубликовано 19 Марта 2011 Не подскажете, как заставить вызвать окно диалога между мутантом и ГГ? Хотя бы как в диалоге с О-Сознанием? Или же сделать сталкера на модели мутанта? При всех моих попытках получались либо мутанты-инвалиды, окно не не вызывалось, либо значительно уменьшенный вариант нупса, чем-то напоминающий говорящий рюкзак.... Ссылка на комментарий
Полтергейст 38 Опубликовано 19 Марта 2011 Поделиться Опубликовано 19 Марта 2011 (изменено) возможно ли как-то изменить отношение непися к игроку в оффлайне? Можно сделать, чтобы его отношение изменилось при ближайшем переходе в онлайн - в его биндере сделать строку с условиями и результатами их выполнения (которая condlist). Но смысла нет - из оффлайна он игрока всё равно не подстрелит. В крайнем случае, в оффлайне можно сделать примерно то же самое, только перегрузить функцию community() в se_stalker и подставлять ей принудительные значения. Не знаю правда, как это понравится движку. Можно через net_packet'ы, в amk.script есть соотв. функции. Вообще непонятно, зачем разрабы сделали такие параметры, как health, community и т.п. в виде функций - проще же сделать в виде переменной, и менять её удобнее. xr_logic.script:126: attempt to index local 'st' Это бывает, когда для какого-то npc не создана таблица db.storage. Бороться с этим бесполезно, надо искать изменения, повлёкшие эти последствия. Изменено 19 Марта 2011 пользователем Полтергейст Ссылка на комментарий
=VENOM= 51 Опубликовано 19 Марта 2011 Поделиться Опубликовано 19 Марта 2011 Полтергейст, кто ищет, тот найдёт . Для одной локации я уже всё решил и написал. А вот если непись находится на другой - тут по-моему уже ничего не поделать. Дело не в стрельбе, а в изменении отношений по условию, в другом месте. Именно для того, чтобы не париться с нетспоном - переходом в онлайн и обратно. Зачем весь этот геморрой? Вот есть же очень удобные функции для изменения отношений группировок, хоть онлайн, хоть оффлайн - без разницы... А с отдельными неписями, независимо от того, в какой он группировке, вот так мудрить приходится ... Ссылка на комментарий
TRAMP14 1 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 Может глупый вопрос но: local tbl = {13, 95, 14, 96, 15, 97, 16, 98, 28, 99, 17, 100, 19, 22, 103, 23, 24, 104, 105, 29, 30, 107, 26, 108, 21, 20, 101, 102, 31, 109, 36, 110, 37, 111} Значения таблицы будут k или v? Ссылка на комментарий
_Призрак_ 11 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 v k - номер числа Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 v - значение, к - порядковый номер в таблице? Так? А где можно получить полную таблицу clsid? Ссылка на комментарий
_Призрак_ 11 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 Полтергейст Разве не применимы? Хм. По идее в k будет находится порядковый номер, а в v значение. Но можно как ты сказал перебрать такие таблицы так: for num = startn, endn do if tbl[num] == clsid.script_stalker then printf("This is stalker clsid") end end Но тогда уж лучше написать так: for num = startn, #tbl do if tbl[num] == clsid.script_stalker then printf("This is stalker clsid") end end верь часто не знаешь сколько значений в таблице Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 А вот ещё вспомнил: Давно хотел спросить - что значит next(название таблицы)? Всю голову сломал, никак додуматься не могу Ссылка на комментарий
Malandrinus 615 Опубликовано 20 Марта 2011 Поделиться Опубликовано 20 Марта 2011 TRAMP14, А где можно получить полную таблицу clsid? Это не таблица, а userdata. Проще говоря, это такой же класс, как и все остальные экспортированные из движка классы, только содержащий одни константы. Нет способа узнать скриптом, сколько там полей. С другой стороны, там только те константы, которые зарегистрированы движком (и их там фиксированное количество) и те, которые добавлены туда скриптом class_registrator.script. Так что можно составить их список вручную. Полтергейст, Циклы "for k,v in pairs(tbl) do" неприменимы к одномерным таблицам (вместо k и v можно написать всё, что угодно). Признаться, не понял, что такое "одномерные таблицы". Функция pairs применима к абсолютно любой таблице. TRAMP14, что значит next(название таблицы)? это основы Lua. Значит надо смотреть здесь www.lua.ru Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти