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 Ссылка на комментарий
Norman Eisenherz 354 Опубликовано 18 Августа 2018 Поделиться Опубликовано 18 Августа 2018 Здрасьте. Пытаюсь добавить подложку к счетчику радиации в контейнере для 8 артов (солянка 2010), чтобы сделать текст заметным на фоне любого арта. Добавил в список новую текстуру (строки, отмеченные знаком "+"), теперь вижу счетчик на подложке, но поверх пустых ячеек – текстуры артов не отображаются. Поменял местами текстуры артов и подложки – вижу исходный вариант с счетчиком поверх артов, но без подложки. Какой должен быть код, чтобы получить порядок вывода "ящик - арт - подложка - счетчик"? [scripts\arc_ui_8container_menu.script] b:InitTexture("ui\\ui_icon_equipment") b:SetOriginalRect(tx,ty,50,50) + b:InitTexture("ui\\ui_dg_arc_back") + b:SetOriginalRect(0,0,50,50) b:SetText(t) b:SetTextColor(255,0,255,255) Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
vampirnik77 121 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 (изменено) Можно ли считать код равносильным? Скрытый текст function get_stat(index) -- index= int return string if(index==0) then return "00:00:00" elseif(index==1) then return tostring(xr_statistic.actor_statistic.surges) elseif(index==2) then return tostring(xr_statistic.actor_statistic.completed_quests) elseif(index==3) then return tostring(xr_statistic.actor_statistic.killed_monsters) elseif(index==4) then return tostring(xr_statistic.actor_statistic.killed_stalkers) elseif(index==5) then return tostring(xr_statistic.actor_statistic.artefacts_founded) elseif(index==6) then return tostring(xr_statistic.actor_statistic.founded_secrets) end end Скрытый текст local IndTbl = {} IndTbl[0] = "00:00:00" IndTbl[1] = "xr_statistic.actor_statistic.surges" IndTbl[2] = "xr_statistic.actor_statistic.completed_quests" IndTbl[3] = "xr_statistic.actor_statistic.killed_monsters" IndTbl[4] = "xr_statistic.actor_statistic.killed_stalkers" IndTbl[5] = "xr_statistic.actor_statistic.artefacts_founded" IndTbl[6] = "xr_statistic.actor_statistic.founded_secrets" function get_stat(index) -- index= int return string if (IndTbl[index]) then return IndTbl[index] end end Изменено 20 Августа 2018 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
WinCap 322 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 @vampirnik77, Что бы код стал равносильным нужно второй вариант изменить на: Скрытый текст local IndTbl = {} IndTbl[0] = "00:00:00" IndTbl[1] = xr_statistic.actor_statistic.surges IndTbl[2] = xr_statistic.actor_statistic.completed_quests IndTbl[3] = xr_statistic.actor_statistic.killed_monsters IndTbl[4] = xr_statistic.actor_statistic.killed_stalkers IndTbl[5] = xr_statistic.actor_statistic.artefacts_founded IndTbl[6] = xr_statistic.actor_statistic.founded_secrets function get_stat(index) -- index= int return string if IndTbl[index] then return tostring(IndTbl[index]) end end Как мне кажется, второй вариант не только "читабельнее", но и быстрее. 1 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
vampirnik77 121 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 @WinCap, Да, первый вариант это от пыс, второй от меня, перелопачиваю чуть по чуть скрипты в рамках Scripting basis. 1 Официальная страница проекта Neof-One Crew Ссылка на комментарий
Graff46 619 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 В луа_хелп метод alive прописан у серверных объетов, в скриптах видел его применение к клиентским объектам, я же использовал этот метод к серверным но иногда получал вылеты с указанием на отсутствие такого метода. Так к каким объектам этот метод применять? Ссылка на комментарий
AndreySol 215 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 28 минут назад, Graff46 сказал: ... в скриптах видел его применение к клиентским объектам... Если можно, давай фрагмент скрипта в студию. Очень хочется увидеть. Ссылка на комментарий
Kirgudu 1 307 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 @AndreySol, например, ряд функций в xr_conditions.script - is_alive, is_alive_one, is_alive_all, actor_alive и др. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий
AndreySol 215 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 @Kirgudu, @Graff46 Не приходилось явно использовать эту ф-цию, по этому посмотрел в исходники: .def("alive", &CScriptGameObject::Alive) bool CScriptGameObject::Alive() const { CEntity *entity = smart_cast<CEntity*>(&object()); if (!entity) { ai().script_engine().script_log(ScriptStorage::eLuaMessageTypeError,"CSciptEntity : cannot access class member Alive!"); return (false); } return (!!entity->g_Alive()); } IC BOOL g_Alive() const { return GetfHealth()>0; } Так что ф-ция явно клиентская, и оказалась примитивнее не куда - простая проверка на то, что здоровье больше 0. А lua_help, видимо в наше время читать уже не стоит... Ссылка на комментарий
lordmuzer 743 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 (изменено) alive есть и у серверного объекта см: https://github.com/joye-ramone/xray-1.0007-origin/blob/99a20ebf9847c21d9d86151bd60acf54cdbdabdb/xr_3da/xrGame/xrserver_objects_alife_monsters_script3.cpp#L73 Но, только у cse_alife_creature_abstract Изменено 20 Августа 2018 пользователем lordmuzer Ссылка на комментарий
Graff46 619 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 Как это тогда? или game_object включает cse_alife_creature_abstract ? Ссылка на комментарий
lordmuzer 743 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 Не понял вопроса, db.actor вернет cse_alife_creature_actor который есть наследник cse_alife_creature_abstract Ссылка на комментарий
Graff46 619 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 @lordmuzer db.actor это клинтский объект же Ссылка на комментарий
lordmuzer 743 Опубликовано 20 Августа 2018 Поделиться Опубликовано 20 Августа 2018 (изменено) Тьфу, под вечер глаз уже не тот. Прочитал как alife():actor() Да, db.actor клиентский. Но у него тоже вроде бы есть "alive" свойство как ужу сказали выше. Изменено 20 Августа 2018 пользователем lordmuzer Ссылка на комментарий
AndreySol 215 Опубликовано 21 Августа 2018 Поделиться Опубликовано 21 Августа 2018 (изменено) 4 часа назад, lordmuzer сказал: alive есть и у серверного объекта Там это не метод(ф-ция) класса, а свойство(переменная класса). Не путаем два разных понятия. Изменено 21 Августа 2018 пользователем AndreySol 4 Ссылка на комментарий
Graff46 619 Опубликовано 21 Августа 2018 Поделиться Опубликовано 21 Августа 2018 Просмотрел луа_хелп еще раз - оказывается alive есть у серверных объектов и у game_object! Почему alive иногда не видится у серверных объектов - не понятно, приходится дополнительно условие писать if obj and obj.alive and obj:alive() then ... end @AndreySol alive всегда функция, посмотрите lua_help и как alive "написан" в скриптах (через двоеточие и со скобками в конце). Ссылка на комментарий
dsh 3 824 Опубликовано 21 Августа 2018 Поделиться Опубликовано 21 Августа 2018 @Graff46, потому, что alive() у серверных объектов есть только у живых, т.к. сказать: if obj and ( IsStalker( obj ) or IsMonster( obj ) ) and obj:alive() then @lordmuzer вон там выше указал, у кого этот метод есть. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Graff46 619 Опубликовано 21 Августа 2018 Поделиться Опубликовано 21 Августа 2018 @dsh, в моем случае obj подразумевается только НПС. Ссылка на комментарий
dsh 3 824 Опубликовано 21 Августа 2018 Поделиться Опубликовано 21 Августа 2018 @Graff46, может там Сидорович затесался? А то он такой... dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Graff46 619 Опубликовано 22 Августа 2018 Поделиться Опубликовано 22 Августа 2018 @dsh, У него сталкера клсид? Ссылка на комментарий
dsh 3 824 Опубликовано 22 Августа 2018 Поделиться Опубликовано 22 Августа 2018 @Graff46, не уверен. Скорее script_trader. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти