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

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

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

Были мысли об этом, но тогда бы аномалии записывались и другим неписям. Но другим не пишутся, записываются только нужные рестрикторы. Я этого товарища везде перепроверил, в т.ч. по цепочке вызовов к amk_anoms.syncronize(), не нашел связей.

Изменено пользователем Zagolski
Ссылка на комментарий

Отбой, проблему решил.

 

Аномалии не должны сразу все записываться в рестиркторы в амк-шной схеме. Это висит на медленном апдейте, запись происходит постепенно, чаще по две-три штуки, тех аномалий, которые ближайшие к неписю. Старые вычищаются, новые добавляются. А у меня при заходе на уровень происходила первая одиночная запись всех аномалий в игре неписям, чего быть не должно. Ну и переполнение буфера с последствиями. Вызов шел из blowout_scheme.script

Изменено пользователем Zagolski
Ссылка на комментарий

Господа, выручайте :(

При первом переходе на Неразведанную Землю ловлю вылет на этапе загрузке уровня:

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

Expression    : fatal error
Function      : CInifile::r_section
File          : E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
Line          : 342
Description   : <no expression>
Arguments     : Can't open section 'aver_musics'

Куда копать, подскажите пожалуйста

Ссылка на комментарий
6 минут назад, _Sk8_AsTeR_ сказал:

Куда копать, подскажите пожалуйста

Отсутствует секция предмета  aver_musics, но он где-то заспавнен или прописан кому-то в рюкзак.

Хотя может быть это секция не предмета, а амбиента на локации.

Изменено пользователем Graff46
Ссылка на комментарий

@Graff46

Посмотрел лог успешной загрузки другого уровня. Похоже что это грузятся звуки уровня.

На успешном логе проходит эта стадия успешно: Loading music tracks from 'marsh_musics'  (болота вроде грузил, где Чистое Небо тусуется)

А при загрузке Неразв. Земли тут загрузка спотыкается:  Loading music tracks from 'aver_musics'...    FATAL ERROR

Где-то нужно смотреть конфиги ззвуков на отсутствие соответствующей секции, если я все верно понял. Но вот где...

Ссылка на комментарий

@_Sk8_AsTeR_

1. К скриптованию никаким боком. Это конфиги.

2.

3 минуты назад, _Sk8_AsTeR_ сказал:

Но вот где...

В принципе тебе ответили, но - если сделать так:

забиваешь marsh_musics в поиск и ищешь, а где же оно прописано. И находишь САМ! именно этот файл))

 

  • Согласен 2
Ссылка на комментарий

Доброго времени!

Подскажите, возможно ли скриптом проверить, идёт ли дождь на локации?

Если можно, то каким образом?

Заранее спасибо!

Важнейшая задача цивилизации - научить человека мыслить.

Ссылка на комментарий

 

 

Всем привет!

Начну с того что маюсь поиском давно, и вариантов по одним и тем же функциям перепробовал множество, не знаю что и делать. Neeed help! 

 

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

Поделка_1 (таймфактор ломается после перезагрузки)

 

function start_timer()       


    local iTimer = time_global() + 10000 
    local function check_timer() 
    return time_global() > iTimer 
    end
    level.add_call(check_timer, action_timer) 
end
function action_timer() 
db.actor:give_info_portion("test_portion")
end


Поделка_2 (пропуск таймера и мгновенный переход к выполнению test_333)  не довёл до ума но увидел что с этой функцией невозможно побороть сейфлоад, так же пропадает после перезагрузки.

 

 

 


function start_timer_medpreparat(first_speaker,second_speaker) 
local function test_333() 
give_info("vikarii_quest_medpreparat_time") 
db.actor:give_game_news("vikarii_medpreparat_message", 0, "default", 10000) 
end 
CreateTimeEvent("test_222",zaebalsa, 5,test_333()) 
end
 

 

Изменено пользователем Lasplagas
Ссылка на комментарий

Всю жизнь не понимал, нафига вы заводите скриптовые таймеры и плодите функции, когда можно в рестрикторе всё это красивенько сделать, причём всё сохраняется. Я, может, что-то упустил?

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий
1 минуту назад, Overfirst сказал:

Всю жизнь не понимал, нафига вы заводите скриптовые таймеры и плодите функции, когда можно в рестрикторе всё это красивенько сделать, причём всё сохраняется. Я, может, что-то упустил?

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

Ссылка на комментарий
1 час назад, Lasplagas сказал:

 

 

Всем привет!

Начну с того что маюсь поиском давно, и вариантов по одним и тем же функциям перепробовал множество, не знаю что и делать. Neeed help! 

 

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

Поделка_1 (таймфактор ломается после перезагрузки)

  Показать

function start_timer()       


    local iTimer = time_global() + 10000 
    local function check_timer() 
    return time_global() > iTimer 
    end
    level.add_call(check_timer, action_timer) 
end
function action_timer() 
db.actor:give_info_portion("test_portion")
end


Поделка_2 (пропуск таймера и мгновенный переход к выполнению test_333)  не довёл до ума но увидел что с этой функцией невозможно побороть сейфлоад, так же пропадает после перезагрузки.

 

  Показать

 


function start_timer_medpreparat(first_speaker,second_speaker) 
local function test_333() 
give_info("vikarii_quest_medpreparat_time") 
db.actor:give_game_news("vikarii_medpreparat_message", 0, "default", 10000) 
end 
CreateTimeEvent("test_222",zaebalsa, 5,test_333()) 
end
 

 

пример_3 ( так же ломается при сейвлоаде)



local iTimer
function function_onetimer()
    iTimer = time_global() + 12*1000 
end
 
function timer_5_minutes()
    if iTimer and iTimer < time_global() then 
        iTimer = nil 
        db.actor:give_info_portion("vikarii_quest_medpreparat_time")
    end
end


регистрация в bind_stalker.scripts

dialogs_deadcity.timer_5_minutes()


 
Ссылка на комментарий
4 hours ago, Overfirst said:

может, что-то упустил?

Ну.. Как минимум то, что стоит уйти на другую локацию и такой таймер все, останавливается.

Ссылка на комментарий

@Lasplagas, не мучайся. Ни в одном из твоих примеров нет сохранения/загрузки таймера. Поищи готовую реализацию сохраняемых таймеров. Ну, например, можешь попробовать вытащить из OGSE.

 

Ссылка на комментарий

@dsh, Спасибо за подсказку. К сожалению вчера уже нашёл но я слишком деревянный что бы понять как собрать из их кусков что либо работающее. 
https://github.com/KRodinn/OGSE_0693_Optimized/blob/be4597706496ba810682b3f4f4754c6879b4b932/gamedata/scripts/ogse_st_mgr.script#L353 вот инструкция.

Ссылка на комментарий

Можно ли как-то "подключиться" к биндеру объекта? Пробовал так:

local a = level.object_by_id(mmobj.id)
local b = a:binded_object()
b.update = function(delta) get_console():execute("MY_BIND!") b.update(delta) end
a:bind_object(b)

Но ничего не происходит...

Изменено пользователем Graff46
Ссылка на комментарий

Полагаю, происходит завис.

Какова цель данного действа ?

Ссылка на комментарий
4 часа назад, Dennis_Chikin сказал:

Полагаю, происходит завис

Зависания нет, нпс дальше вполне нормально функционирует. Цель, подключиться к биндеру объекта и пользоваться, например, его апдейтом в своих целях. Я думал для этого сделан метод level.add_call(object, ...), Но эта функция странно себя ведёт.

Ссылка на комментарий

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

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

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

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

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

Войти

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

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

×
×
  • Создать...