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

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

Тема для обсуждения скриптов всего и всех в серии игр 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/

Парни помогите сделать что бы инфопорция выдавалась рандомно по 1 а не сразу 4 вот скрипт:

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

local post_info    = 1
local m_post_info = ""

local info_news = {
    db.actor:give_info_portion("encyclopedy_zone_artifact_af-cristall-flower"),
    db.actor:give_info_portion("encyclopedy_zone_artifact_af-night-star"),
    db.actor:give_info_portion("encyclopedy_zone_artifact_af-vyvert"),
    db.actor:give_info_portion("encyclopedy_zone_artifact_af-gravi")
}

function actor_on_map_info(obj)
    if (obj:section() == "maps_kit") then
    if math.random() < post_info then
    m_post_info = info_news[math.random(table.getn(info_news))]
end
end
end

 

Изменено пользователем Colder
4 часа назад, UriZzz сказал:

_g.script:1382: attempt to call global 'exit'

А что это за эксит? Начни с него. Я хелпера не сразу подключил, тоже из _g на него ругань сыпалась. Правда на 1.0006 всё было, но уже со значительными вмешательствами в глобальное пространство. 

Ругался, вроде, на функцию log или abort...

 

4 часа назад, UriZzz сказал:

Scheduler tried to update object

А это и всё остальное из скриптов следом идёт.

@Colder, 

Вот ссылка:

Там респаунер артефактов, который до сих пор я использую. Многовероятно, код идентичен с тем, что у приложенного тобой скрипта. Так или иначе, должен отметить, что этот аддон замечательно работает у меня в сборке, где полно всяческих дополнений, правок и костылей. У тебя, видимо, что то где то очень круто пересекается, раз такие дела творятся...

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

Здесь могла быть ваша реклама.

@Colder, как-то так:

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

local info_news = {
	"encyclopedy_zone_artifact_af-cristall-flower",
	"encyclopedy_zone_artifact_af-night-star",
	"encyclopedy_zone_artifact_af-vyvert",
	"encyclopedy_zone_artifact_af-gravi"
}

function actor_on_map_info(obj)
	if (obj:section() == "maps_kit") then
		db.actor:give_info_portion(info_news[math.random(#info_news)])
	end
end

 

 

  • Спасибо 1
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Привет комрады.

Помогите с одной функцией:

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

function sleep(obj)
    if obj:section() == "sleep_bag" then -- при использовании спального мешка будет открываться выборочное меню
        for k=0,65534 do
            local m_obj = level.object_by_id(k)
            if m_obj then
                if ((IsStalker(m_obj) and ogse.get_npc_relation(m_obj,db.actor)=="enemy") or IsMonster(m_obj))
                    and m_obj:position():distance_to(db.actor:position()) < 40 and m_obj:see(db.actor)  then
                    ogse.send_tip("Не получится заснуть пока вокруг шляются всякие", "Меченый", 0, 10, "mecheny")
                    ogse.spawn_item_in_inv("sleep_bag")
                else
                    local hud = sleep_ui(get_hud()) -- указываем на class "sleep_ui" (CUIScriptWnd)
                    level.start_stop_menu(hud, true) -- открываем меню
                end
            end
        end
    end
end

При использовании предмета меню всё равно появляется (то есть проверка не срабатывает), при этом фпс игры падает до, примерно, одного кадра в секунду.

Может что подскажете? Может я не правильно функцию оформил?

пы.сы. Да да да, я знаю что давно пора самому lua выучить. Не получается, либо мозгов не хватает, либо...

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

 Моя нычка, Нычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

20 минут назад, UriZzz сказал:

Помогите с одной функцией

Может, я не так понял вопрос, но если использовать флаг enemy и оператор break?

Для примера оригинальный код АМК:

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

    if alife():object(oid)==nil then
        local enemy=false
        for a=0,65534 do
            local obj=level.object_by_id(a)
            if obj then
                if (( IsStalker(obj) and amk.get_npc_relation(obj,db.actor)=="enemy" ) or 
                    IsMonster(obj)) and obj:position():distance_to(db.actor:position())<40 
                    and obj:see(db.actor) then
                    enemy=true
                    break
                end
            end
        end
        if enemy==true then
            amk.send_tip(game.translate_string("not_need_sleep_enemy"),nil,nil,5)
        else
            if amk.load_variable("blowout",-1)>-1 and amk.load_variable("blowout",-1)<5 then
                amk.send_tip(game.translate_string("blowout_not_sleep"),nil,nil,5)
            else
                if amk.load_variable("block_sleep_menu",0)==0 then
                    if amk.load_variable("gg_need_sleep",0)>10 then
                        local spwn=ui_cheat.cheat(get_hud())
                        level.start_stop_menu(spwn,true)
                    else
                        amk.send_tip(game.translate_string("not_need_sleep"),nil,nil,5)
                    end
                else
                    amk.send_tip(game.translate_string("not_need_sleep_nrg"),nil,nil,5)
                end
            end
         end
        amk.spawn_item_in_inv("matras")
    end

 

  • Спасибо 1

Здесь могла быть ваша реклама.

@mole venomous, ты прав, я переделал функцию, вот так:

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

function sleep(obj)
local enemy=false
    for k=0,65534 do
        local m_obj = level.object_by_id(k)
        if m_obj then
            if ((IsStalker(m_obj) and ogse.get_npc_relation(m_obj,db.actor)=="enemy") or IsMonster(m_obj))
            and m_obj:position():distance_to(db.actor:position()) < 40 and m_obj:see(db.actor)  then
                enemy = true
                break
            end
        end
    end
    if obj:section() == "sleep_bag" then -- при использовании спального мешка будет открываться выборочное меню
        if enemy == true then
            ogse.send_tip("Не получится заснуть пока вокруг шляются всякие", "Меченый", 0, 10, "mecheny")
            ogse.spawn_item_in_inv("sleep_bag")
        else
            local hud = sleep_ui(get_hud()) -- указываем на class "sleep_ui" (CUIScriptWnd)
            level.start_stop_menu(hud, true) -- открываем меню
        end
    end
end

И она заработала, благодарю за отзывчивость, сэр:good:

Я так понял, без оператора break перебор id объектов не прекращался, от того и фпс игры упало. Самая большая ошибка сталкера - невнимательность:WhiteVoid_2:

Изменено пользователем UriZzz
  • Согласен 3

 Моя нычка, Нычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

Есть способ вызвать вылет при помощи скриптов в ЗП (не, не, не ошибку в скриптах сделать, а чтоб функцией, которую можно в диалогах использовать)? abort пробовал, ничего не происходило

4 часа назад, Kirgudu сказал:

а просто всегда дёргаешь её в коллбэке на дроп (ТЧ) или использование предмета (ЧН, ЗП

Не не не, кэллбэк на юз итема в ТЧ тоже есть, его и юзаю. Он нормально работает, во всяком случае у меня не каких нареканий пока нет.

@Kirgudu, твоя функция прекрасно работает:good2:

 

 Моя нычка, Нычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

@UriZzz, ты, главное, принцип запомни. Пойми суть предложенных тебе изменений. :) А чем дальше, тем проще будет.

  • Спасибо 1

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

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

Я от себя добавлю :)

11.12.2020 в 17:39, UriZzz сказал:

да, я знаю что давно пора самому lua выучить.

Это не стишок же. Чтоб его выучить. С синтаксисом у тебя нормально - значит "выучил" уже. Осталось научиться вникать в код, и понимать что он делает.

Вернемся к твоему первоначальному скрипту. Используем его для того, чтоб по тренироваться в диагностике багов. Попробуем найти, что же именно с ним не так?

11.12.2020 в 17:39, UriZzz сказал:

меню всё равно появляется (то есть проверка не срабатывает)

Почему так решил? Проверка срабатывает. Но, в исходном варианте успешное прохождение проверки не останавливало цикл. И он крутился дальше, проверяя следующие и следующие объекты...

11.12.2020 в 17:39, UriZzz сказал:

при этом фпс игры падает до, примерно, одного кадра в секунду.

А это почему произошло, видишь?)

Т.к. если проверка не прошла, то у тебя открывается меню. И делается это внутри цикла. То... открывается оно для каждого объекта, не прошедшего проверку. Попался нам по id, бинт лежащий в двухста метрах - не прошел - открыли меню. Следующим попалась пачка патронов в рюкзаке ГГ. Она же не монстр и не сталкер? открываем еще меню. Ты представляешь, сколько раз это меню в первоначальном варианте, открывалось? :crazy2: Столько же, сколько в онлайне объектов. Отсюда и тормоза - от тысяч одинаковых, идентичных меню на экране.

Старайся замечать такие вещи :)

  • Нравится 3
  • Согласен 1

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

Возник вопрос по GPS-меткам с хабаром от Idler'а. Вернее, по их работе на движке OGSR. С переходом на новый движок они стали работать только до перезагрузки. Т.е. метка ставиться, список хабара или имя НПС отмечены, после сейв/лоада ничего уже нет. Просмотр отладочной информации мне даёт понять, что при загрузке "найдено 0 маячков и метка удалена". Кто-нибудь сталкивался с подобным при адаптации?

Здесь могла быть ваша реклама.

Парни такой вопрос! Как можно скриптово сделать что бы при двойном клике по аптечке, было написано не использовать а например выпить или сьесть! Может есть у кого наглядный пример или подскажет кто что и где нужно поучить! 

@Colder

Не выйдет скриптами такое сделать, это в движке зашито.

Можно сделать предмет на "съедобном" классе и назначить ему визуал аптечки. И прописать необходимые свойства, как у аптечки. 

  • Согласен 4

Добрый день

В секции с бронёй есть такие строки:
additional_inventory_weight =  0
additional_inventory_weight2 = 0

Скажите, можно как-то присвоить им значение скриптом?
очень нужно, спасибо

God save Hatsune Miku!

Здрасьте.

 

Оконный класс на базе CUIScriptWnd() + статик с текстурой для видимости.

ТЧ 1.0006: перезагрузка проходит без ошибок даже при открытом окне – окно успешно удаляется методом __finalize().

ЧН 1.5.10:

• перезагрузка при открытом окне приводит к вылету без лога, как будто окно теряется.

• принудительное обнуление окна в net_destroy() также приводит к вылету без лога, если окно было открыто хотя бы один раз и точно было закрыто на момент перезагрузки.

 

Что-то изменилось в методах __init() и __finalize()?

 

Spoiler

local w

-- // actor_binder:on_item_use(obj) -- custom // --
function use_check(obj)
	if obj:section() == "bandage" then
		w = pda()
		level.start_stop_menu(w, true)
	end
end


function Init(cuiw, x, y, w, h)
	cuiw:SetWndRect( Frect():set(x, y, x + w, y + h) )
end


local W, H = 1024, 768


class "pda" (CUIScriptWnd)

function pda:__init() super()
	Init(self, W/2, H/2, 1, 1)

	local bk = CUIStatic()
	self:AttachChild(bk)
	Init(bk, 0, 0, 1, 1)
	bk:InitTexture("---")
end

function pda:__finalize()
end

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

25.12.2020 в 06:16, Colder сказал:

проверку аномании в определеных метрах

В смысле, определить дистанцию до аномалии? Если чистый ТЧ, то не получится, нужен биндер аномалий (можешь взять из ЗП, файл "bind_anomaly_field.script"). Там на апдейте вписываешь ссылку на свою функцию и радуешься.

 

Вопрос к знатокам: как переместить актора строго по текущему направлению взгляда на нужное расстояние. Как переместить актора к видимому объекту или в нужные координаты - знаю. А тут нужно именно учесть направление, куда смотрит камера в момент перемещения.

  • Полезно 1

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

@Jekyll если я правильно помню, это что-то вроде db.actor:position():mul( db.actor:direction() , dist ) 

Получаешь позицию в том направлении, на том расстоянии. По памяти пишу, могу напутать. 

Изменено пользователем dsh
  • Нравится 1
  • Полезно 1
4 часа назад, dsh сказал:

db.actor:position():mul( db.actor:direction() , dist )

Получается как-то так (ЗП):
 db.actor:set_actor_position(db.actor:position():add(db.actor:direction():mul(10)))

 

Кто-нибудь может поделиться нормальной функцией спавна аномалий для ЗП? Аналогичной этой функции?

Предложенная здесь функция не совсем рабочая, что ли... Например, таймы не работают.

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

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

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

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

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

Войти

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

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

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