Перейти к контенту

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

И снова я с безумными идеями добавить новые фишки в многострадальный task_manager.script.

Вроде есть возможность задать уникальную иконку циклическому заданию с чтением её из конфига, но как? В SoC Recession Addon в news_manager.script нашёл упоминание такого. Но как оно там работает - непонятно. 

@Im-not, понял, спасибо большое за информацию и за файлик!

 

Странно это все, конечно, сегодня немного модифицировал код и ставил аддон "Воля Отступника". Начал ловить странные вылеты, если Не использую очередь. При использовании очереди, все нормально (под использованием имею ввиду взять значение/создать новую очередь (хотя если в это условие никогда не заходят, то остается только действие "взять значение")). Странно это все. Похоже, что функция или от старой версии осталась или делалась с запасом на все возможные использования (что я одобряю полностью, но разобраться в этом сложно, конечно :) ). 

@Капрал Хикс 

Если за ориг. ТЧ, то у класса CGameTask (lua_help.script) нету метода для смена иконки. В ЗП он есть, пример чтения из конфига - task_objects.script (self.icon).

Подскажите как вывести в GUI окне количество итемов.

Заголовок спойлера (редактируемый)

    local List = rx_utils.collect_section(ini, "loadout_points_" ..num)
    for k,v in pairs(List) do

    itt.item_name:SetText(gts(axr_base.get_inv_name(v))) -- имя

    itt.item_count:SetText(k) -- номер строки \ а нужно количество

 

таблица в ltx

 

[loadout_points_1]
novice_outfit        = 1
wpn_bm16        = 1
ammo_12x70_buck = 2

 

[loadout_points_2]
bandage            = 2
wpn_pm            = 1
ammo_9x18_fmj        = 3

 

 

@Colder тут  local List = rx_utils.collect_section(ini, "loadout_points_" ..num)

должно быть так  local List = rx_utils.collect_sections(ini, {"loadout_points_" ..num}) 

 

 

Вот эта функция работает у меня из main_menu

Рабочий код

function bb(num)
local ini1 =ini_file("misc\\proba.ltx")
--local itt
local List = rx_utils.collect_sections(ini1, {"loadout_points_" ..num})
    for k,v in pairs(List) do
--    itt.item_name:SetText(gts(axr_base.get_inv_name(v))) -- имя

--    itt.item_count:SetText(k) -- номер строки \ а нужно количество

--k = name

--v = count
sms("%c[sender]"..translate("name_obschaya_set")..":\\n%c[sms_red]"..k.." = "..v, nil, "nano", 30000)
 end

end

 

Изменено пользователем Blum
Форматирование(сохранено в названии файлов)
  • Спасибо 1

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

Занятная древняя опечатка в xr_conditions.script:


function esc_bandits_die(sctor,npc)
    if has_alife_info("esc_kill_bandits_quest_kill") or has_alife_info("esc_kill_bandits_noquest_kill") then
        return true
    end
    return false
end

 

У аргумента должно быть actor по идее-то...

  • Нравится 1

Очень древняя опечатка в bind_stalker.script в function actor_binder:save(packet),

и что забавно (нет), не видел ни одного мода где её исправили, печаль.

 

	--' Сохраняем данные об отключенном вводе
	if self.st.disable_input_time == nil then
		packet:w_bool(false)
	else
		packer:w_bool(true)  -- ?????????????????
		utils.w_CTime(packet, self.st.disable_input_time)
	end

 

@Капрал Хикс Внутри функции ни один из аргументов не задействован, поэтому всё проходит без ошибки.:biggrin:

@Chypakabra Видимо disable_input_time всегда равен nil или вся функция целиком осталась для красоты:az1000106:

Изменено пользователем Blum

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

10 часов назад, Chypakabra сказал:
disable_input_time

В оригинале это свойство принимает значение только в функции, накладывающей эффект после удара в морду (см. xr_effects.actor_punch), а она, емнип, нигде не используется. Как уже совершенно справедливо заметил @Blum , до ошибки дело просто не доходит, потому никто не заметил и не исправил.

Такого мусора в скриптах полно, вычищать можно долго.

  • Полезно 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

@Капрал Хикс а вот эта функция в escape_dialog.script

 

function bandits_die(actor,npc)
    if has_info("esc_kill_bandits_quest_kill") and not has_info("esc_kill_bandits_noquest_kill")
    then
        return true
    end
    return false
end

 

Ничего не напоминает?:crazy2:

  • Спасибо 1

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

17.03.2026 в 00:39, Chypakabra сказал:

не видел ни одного мода где её исправили, печаль.

Цитата

    --' Сохраняем данные об отключенном вводе
    if self.st.disable_input_time == nil then
        packet:w_bool(false)
    else
        packet:w_bool(true)                                        --// boryan67
        utils.w_CTime(packet, self.st.disable_input_time)
        packet:w_u16(self.st.disable_input_idle)                --// boryan67
    end

Сами знаете где))

  • Нравится 1

   УРАГАН.png

                 Краткий гид по моду Тайные Тропы 2

                                      ПАРТИКЛЫ TERRA

 

 

 

Всем привет. Пытаюсь принудительно завершить задания.

Заголовок спойлера (редактируемый)

function on_update(status)
    local tm = task_manager.get_random_task()
    local active = tm.active_task_by_type

    for desc, task_id in pairs(active) do    --// активные задания
    local task_status = tm.task_info[task_id].status
    if task_status == "completed" then
    tm:task_complete(p1)    -- пробовал так, но сразу вылет при взятии какого-либо предмета
    txt_tip.pda_test()    -- сообщение на проверку 
end
end
end

 

Изменено пользователем Colder

@Colder Ну начнем с того,что смотря в "cycle_task" ...вижу "active_task_by_type" и понимаю что возвращает она таблицу.{}..Ну если хотите массив...Возможно в вашем коде это не так...?

А у вас local active =.....И начинаете перебирать таблицу.Но это у вас совсем не таблица, там скорее всего одна единственная запись..

Я так понимаю, что скрипт task_manager вашей разработки? Поэтому не могу ничего сказать ни про объект tm , ни про параметр p1.

Можно попробовать например вывести в лог p1...И не только p1..Возможно увидите ошибку...И вообще при написании скриптов надо иметь возможность вывода и просмотра в логе параметров...значений...и т.д. Полезно будет...потом можно удалить или закоментировать.

Изменено пользователем Blum

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

Помогите прочитать секцию supplies у торговцев. Движок огср.

Скрытый текст

Вот так вызываю:

local supply_level = supply_level(npc, true) or 1
self.supply_lvl:SetText(gts("st_sulpplies_level").. " " .. supply_level)

 

Сама функция:

function supply_level(npc, as_num)
 local profile = trade_manager.get_trade_profile(npc:id(), "cfg_ltx")
 log1("dxr_trade: ".. profile) --// профиль торговца
 local config = trade_manager.get_trade_cfg(profile)
 if not config then return end
 local str = config:r_string("trader", "buy_supplies")
 if not (str) then
 return
end
 local condlist = xr_logic.parse_condlist(npc, "trader", "buy_supplies", str) —// тут не читает
 str = condlist and xr_logic.pick_section_from_condlist(db.actor, npc, condlist)
 if as_num then
 local num = str_explode(str, "_")
 return tonumber(num[2])
 else
 return str
end

end

 

Соответственно в ltx supplies_1, supplies_2 ... 

 

 

@Colder первый параметр вроде не должен быть npc..

===

-- список, что должно быть в продаже
        str = utils.cfg_get_string(ini_cfg, "trader", "buy_supplies", npc, false, "")
        if str then
            tt.buy_supplies = xr_logic.parse_condlist(str, npc, "trade_manager", "buy_supplies")
        else
            abort(npc:name() .. " invalid line: [buy_supplies] " .. cfg)
        end

Получилось что-то? из прошлого сообщения, непонятно..Что-то серьезное затеял?:az1000106:

Изменено пользователем Blum
  • Спасибо 1

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

@Colder  Посмотри саму функцию в xr_logic.script

function parse_condlist(src)
Предназначение:
  Распарсивает условия вида: {+infop1} section1 %-infop2%, {+infop3 -infop4} section2 ... в таблицу.

 

Там в функции есть строки printf(.....

Раскоментируй их прямо в xr_logic и получишь сообщения для поиска ошибки.

=

Кстати xr_logic.parse_condlist возвращает таблицу, а у тебя снова...local condlist

Может так надо ?  local condlist{} = ..

npc, "trader", "buy_supplies" только для сообщений об ошибках в ОП2.2 .В OGSR вообще один параметр только (src)..Обрабатывается вроде только str

Изменено пользователем Blum

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

@Colder 
str вида: {+infop1} section1 %-infop2%, {+infop3 -infop4} section2 ... в таблицу

Вот что у сидора должно быть. Это из ОП 2.2

 

[trader]
buy_condition = trader_generic_buy
sell_condition = {+esc_kill_bandits_quest_done} trader_after_fabric_sell, trader_start_sell
buy_supplies = {+esc_kill_bandits_quest_done} supplies_after_fabric, supplies_start
 

Изменено пользователем Blum

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

А как сделать так чтобы при начале новой игры выдавалось задание? (типо Убить Стрелка) Платформа ТЧ

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...