Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » Скрипты (Небольшие уроки для новичков, но с углубленным объяснением.)
Скрипты
Украина  stalker-MiX
Четверг, 16.01.2014, 01:40 | Сообщение # 31
Статус:
Неопытный:
Сообщений: 534
Награды: 2
Регистрация: 20.02.2013

Цитата LaRento ()
А кто все? в ЗП было множество мест для костров, и сталкеры сидели там. Схема рабочая абсолютно.

Нет, ты не прав, та схема используется только в ТЧ и ЧН. Для этого нужны пути (чего в ЗП нет) :
Код
smart_terrain_**_kamp_1_task
smart_terrain_**_kamp


То, что они сидят у костра - это просто каверы:
animpoint_sit_low
animpoint_sit_normal
animpoint_sit_high


aleksn09,
Цитата aleksn09 ()
посиделки, как я помню, как раз через аним поинты и делаются. Но чтобы эта схема заработала, в логике нужно поставить чтобы аним поинт использовал схему посиделок. И если НПС попадает в камп зону, то у него срабатывает эта схема и он рассказывает анекдоты и играет на гитаре.

Это я знаю. Дело не поседелках, а чтобы саму схему xr_kamp воскресить у ЗП, и чтобы работало аналогично как в предыдущих частях (ЧН та ТЧ). Именно это меня интересует.
Сообщение отредактировал stalker-MiX - Четверг, 16.01.2014, 01:52
Российская Федерация  DukeKAn
Четверг, 16.01.2014, 18:47 | Сообщение # 32
Статус:
Неопытный:
Сообщений: 491
Награды: 8
Регистрация: 25.11.2012

Ещё немного дополнил урок про биндер, про то, как включать/выключать свои функции в апдейт биндера
Российская Федерация  Scouser
Четверг, 16.01.2014, 22:20 | Сообщение # 33
Статус:
Опытный:
Сообщений: 1610
Награды: 16
Регистрация: 21.10.2012

stalker-MiX, Ну хорошо, спасибо, что поправил. Однако схема рабочая всё-равно, я неоднократно сажал кампов у костра через эту схему. :)
Сообщение отредактировал LaRento - Четверг, 16.01.2014, 23:38
Украина  BozKurt
Четверг, 16.01.2014, 23:35 | Сообщение # 34
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Есть не только готовый мод где используется динамическое подключение функций, но и, на мой взгляд, достаточно подробное описание работы файла xr_s.script: >>ClicK Me<<.
Украина  stalker-MiX
Пятница, 17.01.2014, 00:16 | Сообщение # 35
Статус:
Неопытный:
Сообщений: 534
Награды: 2
Регистрация: 20.02.2013

LaRento, я почему-то никогда не проверял ее. Раз не используют - значит могли удалить, или отключить за ненадобностью, как например схему Сидоровича. Ну, если работает - то хорошо, спс за инфу!!! :)
Сообщение отредактировал stalker-MiX - Пятница, 17.01.2014, 00:20
Украина  Viнt@rь
Пятница, 17.01.2014, 01:21 | Сообщение # 36
Spectrum project
Статус:
Новичок:
Сообщений: 380
Награды: 2
Регистрация: 10.10.2010

stalker-MiX, и LaRento, на анимпоинты(они же каверы) перешли сами ПЫС из за того, что нпс усаживались не корректно у костра, иногда даже друг на друге, но основной проблемой этой схемы - то, что при перезагрузке игры или при переходе из локи на локу, нпс под такой схемой спавнятся в центре костра и потому мрут, именно по этому мы могли наблюдать картину множества смертей в кострах, в ЗП это пропало благодаря расставленым анимпоинтам под смартами, и как говорил Artos(мы с ним уже вели разговор по поводу этих двух схем) в идеале объединить бы эти обе схемы camp и kamp, это было бы именно то, что нужно, но что у меня, что у него(как я понял) руки до этого не доходят...

Добавлено (17.01.2014, 01:21)
---------------------------------------------
DukeKAn, по поводу первой статьи: в Lua классов, как таковых, нет, это все чудеса Lua bind(на АМК форуме есть его(ну почти оригинальная) реализация от xStream) сами же "классы" являются метатаблицами с метаметодами и не более. class("foo") идентичность function class("foo"), а методы идентичны этому
foo = {}
foo.print = function (msg)
print(msg.." from foo")
end
foo.print("test msg")

ЗЫ
Говорить что в Lua классы, это все равно, что говорить о Lua, как о ООП языке программирования, которым он не является...

ЗЫЫ
Я как-то раз используя код реализации Lua bind от xStream в Intellij IDEA реализовал вполне рабочий функционал подобный тому, что есть в Сталкере, "классы" создавались точно так же, с легкостью прикрутилась своя песочница(за основу взята песочница от Artos) регистрировались и отрабатывались коллбэки

помимо Lua bind нашел еще множество реализаций создания подобия классов для чистого Lua...

ЗЫЫЫ
Это было адресовано не столько что бы исправить тебя, сколько что бы внести уточнение, и мб кому то это интересно было бы, а вообще подобная тема уже давненько существует на АМК форуме(а даже две) "Скриптование" и "Язык Lua. Общие вопросы программирования."
Сообщение отредактировал Viнt@rь - Пятница, 17.01.2014, 01:23
Украина  stalker-MiX
Пятница, 17.01.2014, 02:39 | Сообщение # 37
Статус:
Неопытный:
Сообщений: 534
Награды: 2
Регистрация: 20.02.2013

Viнt@rь, это является весомой причиной, чтобы ее не использовать. Даже здесь проблема в том, что под нее попадает любой нпс с противогазом (шлемом) и использует колбасу, водку, хлеб - что является не правильным.

Плюсом я вижу то, что всем хватает работы, благодаря большому количеству нпс вокруг костра.
Российская Федерация  DukeKAn
Воскресенье, 02.02.2014, 13:55 | Сообщение # 38
Статус:
Неопытный:
Сообщений: 491
Награды: 8
Регистрация: 25.11.2012

Цитата Viнt@rь ()
Говорить что в Lua классы, это все равно, что говорить о Lua, как о ООП языке программирования, которым он не является...

Да, чисто ОО-языком он не является, но всё-же даёт возможности для написания скриптов в ОО-стиле. Всё-таки и сама игра написана разработчиками в объектном стиле (хотя временами и грязноватом). Поэтому я решил для простоты назвать их классами и сосредоточиться на игровой теории, а не синтаксисе и строении языка.
Цитата Viнt@rь ()
а вообще подобная тема уже давненько существует на АМК форуме

Да-да, возможно, большую часть знаний я оттуда и почерпнул. Там же и интересная тема про Lua. Но здесь я решил ещё и подкреплять теорию небольшими, но (желательно) интересными маленькими модами, что для новичков, я считаю, будет некоторым стимулом к изучению.

Добавлено (31.01.2014, 17:16)
---------------------------------------------
Урок по созданию GUI элементов (окон).

Этот урок не будет содержать теории (а чтобы с ней ознакомиться, настоятельно рекомендую прочитать этот топик : АМК ), разберём мы сегодня создание окон. Конкретнее, разберём мы целых 3 разных применения создания окон в ТЧ – скриптовая эмуляция слота, вывод окна с кнопками и вывод статика на экран во время игры. Ну и создадим мод, в котором все 3 эти возможности применены.

Давайте сделаем так, что у ГГ есть специальный слот, или «карман» для аптечки. Чтобы каждый раз не открывать инвентарь, для того, чтобы узнать, лежит ли там аптечка, мы будем выводить на экран изображение аптечки, если она в кармане.
Для создания мода нам понадобится написать 2 класса. Первый – класс для эмуляции слота, второй – для окошка меню взаимодействия с аптечкой в слоте.

Скриншоты



Создаём слот


Создание окна взаимодействия с аптечкой



Статик аптечки в слоте


Скачать готовый мод для разбора можно здесь Яндекс_диск.

Вообще, мод несколько нелогичен. Зачем нужен такой слот – непонятно. Поэтому будет правильно сделать горячую клавишу для использования аптечки из слота. Но т.к. это уже оффтоп темы про создание окон, то допишу (или напишу новый) урок по установке и использованию перехватчика клавиатуры позже.

Добавлено (02.02.2014, 13:55)
---------------------------------------------
Урок по использованию перехватчика клавиатуры.

Сообщение отредактировал DukeKAn - Воскресенье, 02.02.2014, 12:57
Украина  BozKurt
Воскресенье, 02.02.2014, 15:45 | Сообщение # 39
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Перехватчик клавиш можно сделать и стандартными функциями игры, без каких-либо сторонних утилит.
>>ClicK Me<<
Российская Федерация  DukeKAn
Воскресенье, 02.02.2014, 16:06 | Сообщение # 40
Статус:
Неопытный:
Сообщений: 491
Награды: 8
Регистрация: 25.11.2012

ColR_iT, Красиво) Спасибо, не знал о таком способе.
Казахстан  Max_Warlock
Вторник, 18.02.2014, 12:55 | Сообщение # 41
Clear Sky - Remake
Статус:
Опытный:
Сообщений: 1543
Награды: 3
Регистрация: 18.01.2013

Требуется помощь. Мне нужно получить из файла actor параметр и сопоставить его с переменной.
Проблема в том, что распространенные в модах функции:
get_ltx
get_ltx_new
и
read_from_ini
в данном случае не подходят, так как секция actor происходит от секции common_ph_friction_params_on_npc_death
Все функции жалуются на отсутствие данной секции в конфигах.
Мне нужна функция, которая получала бы значение параметра не из секции, а просто из файла.
Например, параметр max_weight все равно лишь один в файле и оглядываться на секцию мне нафик не сдалось.

Зачем нужно? Делаю античит-систему, При запуске игра проверяет некоторые параметры, и сели они правились выводит окошко с предупреждением, после чего закрывает игру. Всё готово, кроме способа получить значение из actor.ltx
Украина  BozKurt
Вторник, 18.02.2014, 13:33 | Сообщение # 42
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Max_Warlock, а как ты собираешься свою систему "анти-школоло" защитить? Ведь никто не мешает изменить значение в конфиге и твою проверку на значение, а то и вовсе от неё избавится.

Но раз нужно - могу подсказать.
Получить значение можно не привязываясь к какому либо файлу, но один параметр может повторятся в нескольких секциях, поэтому в любом случае нужно указывать в какой именно секции находится нужный тебе параметр - это раз. Два - чтобы получить значение из конфига, нужно определится какого именно типа значение тебе нужно: число (целое, дробное), строка, вектор или логическое значение, т.к. от этого зависит выбор метода для того, чтобы "вытащить" значение из ltx.
В качестве универсальной функции могу предложить вот такую:
Код
function GetParamFromConfig (fileName, sectionName, paramName)
    local ini = ini_file(fileName)
    local paramValue = ini:section_exist(sectionName) and ini:line_exist(sectionName, paramName) and ini:r_string(sectionName, paramName) or ""
    return paramValue    
end

fileName - это полный путь до файла, относительно папки config;
sectionName - секция, в которой находится нужный тебе параметр;
paramName - собственно название нужного тебе параметра.
Возвращает всегда строку(!), поэтому сравнить нужно со строкой.
Например, для параметра max_walk_weight проверка будет выглядеть так:
Код
if GetParamFromConfig([[creatures\actor.ltx]], "actor_condition", "max_walk_weight") ~= "60" then
    --# значение в конфиге отличается от оригинального.
end
Сообщение отредактировал ColR_iT - Вторник, 18.02.2014, 14:31
Казахстан  Max_Warlock
Вторник, 18.02.2014, 13:57 | Сообщение # 43
Clear Sky - Remake
Статус:
Опытный:
Сообщений: 1543
Награды: 3
Регистрация: 18.01.2013

Цитата ColR_iT ()
Max_Warlock, а как ты собираешься свою систему "анти-школоло" защитить? Ведь никто не мешает изменить значение в конфиге и твою проверку на значение, а то и вовсе от неё избавится.

Поставить проверку на присутствие самой системы. Запаковать в архив .db
75% школоты, да и не только отсеиваются автоматически smile

Добавлено (18.02.2014, 13:57)
---------------------------------------------

Цитата ColR_iT ()
но один параметр может повторятся в нескольких секциях, поэтому в любом случае нужно указывать в какой именно секции находится нужный тебе параметр

Не в моём случае...

Цитата ColR_iT ()
нужно определится какого именно типа значение тебе нужно

Число.

Отлично! Спасибо, сейчас проверю и отпишусь.
Украина  BozKurt
Вторник, 18.02.2014, 14:18 | Сообщение # 44
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

Цитата Max_Warlock ()
Не в моём случае...
Скажи это ПЫС. Указывать имя секции, в которой находится нужный тебе параметр, придётся в любом случае - этого требуют скрипты.
Сообщение отредактировал ColR_iT - Вторник, 18.02.2014, 14:18
Казахстан  Max_Warlock
Вторник, 18.02.2014, 14:23 | Сообщение # 45
Clear Sky - Remake
Статус:
Опытный:
Сообщений: 1543
Награды: 3
Регистрация: 18.01.2013

ColR_iT, Скажу, как увижу biggrin

Добавлено (18.02.2014, 14:23)
---------------------------------------------
А чем "<>" лучше "~="?

Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » Скрипты (Небольшие уроки для новичков, но с углубленным объяснением.)
Поиск: