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

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

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, форум АМК съел моё старое имя и не хочет отдавать о_О

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

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

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

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

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

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

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

Войти

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

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

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