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

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

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

Kirag,

Да, всё так. Ещё раз спасибо за участие в нашей проблеме!

Но, вроде бы, такой конструкции там нет: alife():create(N).

Там конструкции строго на стори_айди - alife():story_object(N) или я чего то пропустил?

А стори_айди у нас как раз и не совпадали. Вот и спавнился "воздух".

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

antreg

Ну, вот например, из 2-й функции:

--спавним аномалии

--initial_spawn()

local obj = alife():story_object(6000)

if not obj then

alife():create(2)

obj = alife():story_object(6000)

end

 

 

 

Функция проверяет наличие объекта со стори ИД = 6000, если не находит - создает из алл.спавна.

Что там получилось в алл.спавне за номером 2 после перекомпиляции - кто ж его знает. Но врядли это остался тот самый объект, у которого 6000-й СИД. И таких моментов несколько...

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag, Artos,

После "чистки" от неиспользуемых у нас условий и функций, с функцией first_run() теперь всё в норме. Сложнее оказалось с функцией check_spawn()

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

остался вот такой массив:

function check_spawn()

amk_anoms.init()

spawn_unspawned_respawners()

if (news_main) then

news_main.init()

end

if (amk_offline_alife) then

amk_offline_alife.init()

end

if (amk_corpses) then

amk_corpses.init()

end

if (amk_objects) then

amk_objects.init()

end

 

if amk.load_variable("freeplay",0)==1 then

amk.save_variable("freeplay",2)

elseif amk.load_variable("freeplay",0)==2 and (not has_alife_info("cit_fail_first_task")) then

db.actor:give_info_portion("cit_fail_first_task")

end

 

--level_changers section

local lname = level.name()

local sname = amk.load_variable("level_on_save","")

 

if (amk_offline_alife) then

amk_offline_alife.update_npc_tables()

end

if (amk_corpses) then

amk_corpses.update_all_corpses()

end

if lname ~= sname and amk_objects then

amk_objects.update()

end

 

-- Выдадим сообщения при переходе на уровень.

if news_main then

if (lname ~= sname and sname ~= "") then

if (news_main.isIsolatedLevel(lname)== true and news_main.isIsolatedLevel(sname) == false) then -- Спустились под землю.

news_main.on_disconnect()

elseif (news_main.isIsolatedLevel(lname) == false and news_main.isIsolatedLevel(sname) == true) then -- Выбрались из-под земли.

news_main.on_connect()

end

if (amk_offline_alife) then

amk_offline_alife.update_trade()

end

end

end

 

if weather_types[lname]==0 then

w=amk.load_variable("dynweather",nil) or level.get_weather()

else

w=level.get_weather()

end

if amk.load_variable("blowout",0)>0 then amk.save_variable("weather",level.get_weather()) end

level.set_weather("amk_for_blow",true)

game.start_tutorial("restore_sun")

 

if amk.load_variable("blowout",0)>0 and amk.load_variable("blowout",0)<4 then

local bt=blowout_type()

level.add_cam_effector("camera_effects\\earthquake.anm", 2002, true, "")

if bt<1 then

level.set_weather("amk_for_blow",true)

level.add_pp_effector("vibros.ppe", 2001, true)

blowout_psy_sound("start")

end

end

 

if db.actor and not has_alife_info("game_over") then

local flame = db.actor:object("wpn_flame")

if flame then

db.actor:iterate_inventory(

function(dummy,item)

if item:section()=="wpn_flame" then

alife():release(alife():object(item:id()))

end

end

,db.actor)

 

end

end

end

 

 

Комментирование оставшихся составляющих массива функции check_spawn()

для того, чтобы отловить проблемную функцию,

приводит к вылету при сэйв/лоад с логом:

! Unknown command: ZAMET:start_game_callback___called

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: d:\st\008_tt2_final\gamedata\scripts\_g.script:1245: attempt to index global 'amk' (a nil value)

 

 

Получается, что тут, как бы, вторая ступень коллбэков.

И непонятно, куда дальше "копать", откуда идёт вызов тех функций и условий,

что остались. Возможно, эта задача, что мы хотим решить, не имеет решения,

а возможно и имеет.

К сожалению, я не имею навыков в прочтении таких функций.

1) Можно ли расшифровать оставшиеся составляющие функции check_spawn()

для дальнейшей работы по отлову проблемного в нашем случае места?

И второй вопрос: комментирование коллбэка на всю функцию check_spawn()

целиком, в файле бинд_сталкер.скрипт к каким последствиям приведёт в дальнейшем?

Чего мы лишаемся в этом случае?

 

Изменено пользователем antreg
Ссылка на комментарий
[error]Arguments : LUA error: d:\st\008_tt2_final\gamedata\scripts\_g.script:1245: attempt to index global 'amk' (a nil value)

Указывает на то что синтаксическая ошибка в файле амк.скрипт. Скачай lua_cheker или скрипт_синтаксис_чекер и проверь скрипт на наличие ошибок

Freedom

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

_Призрак_,

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

 

Ссылка на комментарий
antreg, этот вылет всегда означает ровно одно - синтаксическая ошибка в amk.script, в результате которой скрипт не может корректно подгрузиться. Применительно к твоим условиям - закомментил лишний end или, наоборот, чего-то недокомментил. Что толку искать функции и условия, если испортили синтаксис? Изменено пользователем KD87
Ссылка на комментарий

KD87,

Конечно, но вопрос то совсем в другом был. То, что я искусственно создал такой вылет - это и так понятно.

Комментирование функции с вызовом через колбэк конечно вызовет синтаксическую ошибку.

Вопрос то совсем не в этом. Это только последствия последовательных действий поиска проблемы, с целью найти причину, мешающую нам адаптировать то, что задумано. Поиск проблемы адаптации пока зашёл в тупик, так как пропала возможность путём "тыка" (комментирования) найти некорректный контент, мешающий адаптации. Если кто-то может реально помочь, прошу поучаствовать в решении. Только прошу, вникните вначале в суть вопроса.

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

antreg

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

 

У меня для этого в _g.script есть функция:

function qqq(n,o)
    local scr = true
    local con = true
    if o then
        if o == 1 or o == 0 then
            scr = false
        end
        if o == 2 or o == 0 then
            con = false
        end
    end
    local k = "debug data QQQ "..tostring(n)
    if scr then
        if db.actor then
            news_manager.send_tip(db.actor, k, nil, nil, 5000) 
        end
    end
    if con then
        get_console():execute    ("load "..k)    
        get_console():execute    ("flush")    
    end
end

Выкидывает сообщение на экран и в лог, второй параметр необязателен, он позволяет указать явно, куда нужен вывод инфы.

 

Расставь qqq("mark 1")...qqq("mark N") в функции check_spawn(), и после вылета посмотри, какое сообщение прошло последним. Проблема должна быть между последним сработавшим qqq и следующим за ним. Так ты хотя бы область поиска сузишь. Потом можешь в этом фрагменте поставить qqq почаще, может, с точностью до строки найдешь проблему...

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий
antreg, не понял. Как ты комментируешь? Если закоментировать строчку mod_call("check_spawn") такого вылета не будет. check_spawn же в amk_mod.script, а вылет у тебя по amk.script. Давай тогда и amk.script выкладывай.
Ссылка на комментарий

Кто-нибудь выкладывал логику неписей, чтобы ходили по Зоне сквадом/группой, т.е. чтобы не разбредались по одиночке - "кто куда". В принципе, не важно куда они пойдут и зачем, пусть шарохаются по Зоне, но вместе. Просто задумал сделать несколько таких спец.групп, гуляющих по Зоне. По задумке, они являются некими "карателями" для ГГ, и очень бы хотелось сделать встречу с ними случайной/рандомной, а, соответственно, внезапной для ГГ - можно нарваться на них, а можно и разминуться. Мод - "Народная Солянка". Если можно, то желательно без редактированния all.spawn. Знаю только, чтобы их не засосал какой-нибудь гулаг, нужно прописать -

[smart_terrains]

none = true

----------------

По большому счету, на этом мои познания в логике неписей и заканчиваются )). Если кто-то сможет помочь с этим вопросом, буду весьма благодарен! Можно в личку.

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

PavelSnork

 

Вот так:

local ar = device().aspect_ratio
if ar <= 0.75 then
-- WIDE SCREEN
else
-- NORMAL SCREEN
end

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Ребят,а возможно ли заспавнить НПС,который спавнится через all.spawn, в другом месте без разбора спавна?

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

Таак.Ок.

Другой вопрос:насколько я знаю,ACDC для НарСоли нет в общем доступе (или есть?;)).Существует ли другой ACDC,которым можно распаковать all.spawn Соли?Универсальный какой-нибудь,чтоли.

---

И можно ли удалить гулаг с локации?Или отключить его?

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

Miller, тоже удаляй смарттеррейн из спавна и, если у неписей в логике прописан этот гулаг - просто убери им его с логики, поставь другой или вообще запрети быть в гулагах.

Ещё можно отредактировать скрипт с гулагом, чтобы возвращало неписям всегда состояние другое, которое не прописано в работах, которого вообще нет, должны тоже разбежаться. Ну это у меня так сделали.

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

Разбирает по готовым базам или автоматом определяет новые секции?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

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

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

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

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

Войти

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

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

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