Перейти к содержанию

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

 
 

после получения инфо поршня "esc_syjet_gonec_1_end" игра вылетает с таким логом "stack trace:". Что не так?  

Спойлер

[logic@gonec]
active = remark@1
suitable = {=check_npc_name(esc_gon_gonec)}true
prior = 100

[remark@1]
anim = wait
meet = meet@1
combat_ignore_cond = true
invulnerable = true
target = story | actor
trade_enable = false
on_info = {+esc_syjet_gonec_1_end} walker@1

[walker@1]
meet = no_meet
path_walk = esc_gon_terrain_guard_1_walk
path_look = esc_gon_terrain_guard_1_walk
invulnerable = true
def_state_moving = rush
trade_enable = false

[meet@1]
use = {=dist_to_actor_le(3) -npc_dialog_end} self, true
close_anim = nil
close_victim = nil
far_anim = nil
far_victim = nil
sound_start = nil   
sound_start_wpn = nil   
sound_stop = nil
trade_enable = false
allow_break = false
use_wpn = true
victim = actor
abuse = false


 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
12 минут назад, Emmis сказал:

игра вылетает с таким логом "stack trace:". Что не так?  

Если этот поршень больше ни на что не влияет, то очевидно, что ошибка в путях.

 


Терпение... И все получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

makdm а что в путях может быть не так? вот мой файл с путями, не понимаю где я ошибся 

Спойлер

[esc_gon_terrain_guard_1_walk]
points = p0,p1,p2,p3,p4,p5,p6,p7,p8
p0:name = wp00|p=0
p0:flags = 0x1
p0:position = -58.4013671875,-28.8403453826904,-424.794311523438
p0:game_vertex_id = 38
p0:level_vertex_id = 227430
p0:links = p1(1)

p1:name = wp01|p=0
p1:flags = 0x2
p1:position = -57.4502944946289,-30.354907989502,-359.788116455078
p1:game_vertex_id = 36
p1:level_vertex_id = 228652

p2:name = wp02|sig=stop_1
p2:flags = 0x4
p2:position = -59.8921279907227,-30.3380699157715,-348.706787109375
p2:game_vertex_id = 36
p2:level_vertex_id = 224167
p2:links = p3(1)

p3:name = wp03|p=0
p3:flags = 0x8
p3:position = -62.3007698059082,-23.7739162445068,-266.599700927734
p3:game_vertex_id = 39
p3:level_vertex_id = 220889
p3:links = p4(1)

p4:name = wp04|p=0
p4:flags = 0x10
p4:position = -53.4272003173828,-18.9124889373779,-202.8505859375
p4:game_vertex_id = 39
p4:level_vertex_id = 235267
p4:links = p5(1)

p5:name = wp05|sig=stop_1
p5:flags = 0x20
p5:position = -43.9371376037598,-17.5723266601563,-171.244964599609
p5:game_vertex_id = 39
p5:level_vertex_id = 246107
p5:links = p6(1)

p6:name = wp06|p=0
p6:flags = 0x40
p6:position = -134.095001220703,-11.0177240371704,-151.088150024414
p6:game_vertex_id = 6
p6:level_vertex_id = 120762
p6:links = p7(1)

p7:name = wp07|p=0
p7:flags = 0x80
p7:position = -184.912887573242,-20.2046928405762,-152.556259155273
p7:game_vertex_id = 35
p7:level_vertex_id = 65570
p7:links = p8(1)

p8:name = wp08|sig=stop_3
p8:flags = 0x100
p8:position = -186.212432861328,-20.2183227539063,-163.448608398438
p8:game_vertex_id = 35
p8:level_vertex_id = 64266


[esc_gon_terrain_guard_2_look]
points = p0
p0:name = wp00|a=sit_ass
p0:flags = 0x1
p0:position = -184.881851196289,-20.2144546508789,-156.615539550781
p0:game_vertex_id = 35
p0:level_vertex_id = 65564


[esc_gon_terrain_guard_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -188.99201965332,-20.2273235321045,-156.468597412109
p0:game_vertex_id = 35
p0:level_vertex_id = 61758

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
30 минут назад, Emmis сказал:

а что в путях может быть не так?

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

Плюс у вас имя пути walk сопадает с именем пути look, а в all.spawn вроде как точки разные.

 

 

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

Терпение... И все получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

makdm понял спасибо! Я в логике написал guard_1_walk вместо esc_gon_terrain_guard_1_walk и заработало. 

А в логике path_look я указал walk, чтобы нпс смотрел в следующую в точку которую идет.

Сейчас полностью переделаю пути и поменяю их названия, еще раз спасибо.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Всем кто это читает добра и позитива. Мне нужно заспавнить пачку трупов на локаций. 

Спойлер

--Взял за основу стандарную функцию по спавну трупов
function agr_und_start_spawn_corpse(actor, obj)
	local  corpse_table = {
							"esc_e2_wolf_spawn"
						  }
	
	local	way_table = {
							 "spawnd_corpse_1_way"
						}
	local obj_corp

	for k,v in pairs(corpse_table) do
		obj_corp = spawn_sect(k)
    -- obj_corp(k)
	end
	
	local obj_way
	for k,v in pairs(way_table) do
		obj_way = path_name(k)
	end
		
	local ptr = patrol(path_name)
	-- local index = p[3] or 0

	local se_obj = alife():create(obj_corp,--[[ ptr:point(index),--]] ptr:point(0), ptr:level_vertex_id(0),ptr:game_vertex_id(0))
	se_obj:kill()
end

 

При загрузке локаций получаю вылет

Спойлер

[error] Expression    : !m_error_code
[error] Function      : raii_guard::~raii_guard
[error] File          : E:\sourse\xray-16_clea\src\xrScriptEngine\script_engine.cpp
[error] Line          : 569
[error] Description   : ...alker call of pripyat\gamedata\scripts\xr_effects.script:3418: attempt to call global 'spawn_sect' (a nil value)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Kelvin 'spawn_sect' не существует, если эта функция из другого файла, то нужно писать: название_файла.название_функции (название файла пишется без ".script")

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

dasehak

17 минут назад, dasehak сказал:

Kelvin 'spawn_sect' не существует, если эта функция из другого файла, то нужно писать: название_файла.название_функции (название файла пишется без ".script")

 Функция вызывается из рескриптора.

Ну да, какой-то косяк с перебором или с таблицей. Только я вот и не могу понять в чём проблема?‍♂️

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Народ!
Кто шарит в создании глобальной карты?
Хочу сделать нормальную глобальную карту на основе реальной карты ЧЗО. Чтобы там были все локации из трилогии. Но так, чтобы оно выглядело всё логично, красиво и компактно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
10 минут назад, Kelvin сказал:

Функция вызывается из рескриптора.

Рескриптор - это тот кто текст переписывает? Или это из фармакологии?

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

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

на сайте есть тема по созданию бампа ?  если да то дайте силку а то я чет сам найти не могу 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Привет кто читает. Как сделать чтобы мутанты находились в рестрикторе и не выбегали за него, например когда бегут за игроком?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Подскажите пожалуйста, как резать ап в шлеме?, уменьшаю цифры и нифига....

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
15 часов назад, Emmis сказал:

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

Ставите in_restrictor в SDK, а в логике мутантов прописыаете out_restr = ....

 

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

Терпение... И все получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

del

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Del.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Написал три диалога для квеста. Первый стартовый типо NPC помощи просит. Второй стартовый если отказаться с первого раза. И третий конечный.

Цитата

Первый стартовый типо NPC помощи просит

Только диалог игрок начинает первым. У меня при нажатии на фразу игра вылетает без лога.

Спойлер

    <dialog id="zat_search_miron_quest_end">
        <has_info>zat_search_dialog_activator</has_info>
        <dont_has_info>zat_search_end_dialog_disable</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_end_1</text>
                <next>2</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_end_3</text>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_search_end_dialog_disable</give_info>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_end_0</text>
                <precondition>actor_has_mironpda</precondition>
                <next>1</next>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_end_2</text>
                <give_info>zat_b22_givepda_nimble</give_info>
                <next>3</next>
            </phrase>
        </phrase_list>
    </dialog>
    <dialog id="zat_search_miron_quest_start">
        <dont_has_info>zat_search_start_dialog_disable</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_start_1</text>
                <next>2</next>
                <next>22</next>
                <next>222</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_start_3</text>
                <give_info>zat_search_start_dialog_disable</give_info>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_start_2</text>
                <action>search_miron_tm</action>
                <give_info>zat_search_dialog_activator</give_info>
                <next>3</next>
            </phrase>
            <phrase id="222">
                <text>zat_search_miron_quest_start_222</text>
                <precondition>actor_has_mironpda</precondition>
                <next>4</next>
            </phrase>
            <phrase id="22">
                <text>zat_search_miron_quest_start_22</text>
                <give_info>zat_search_dialog_activator_start2</give_info>
                <give_info>zat_search_start_dialog_disable</give_info>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_start_0</text>
                <next>1</next>
            </phrase>
            <phrase id="4">
                <text>zat_search_miron_quest_start_4</text>
                <action>search_miron_tm</action>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_search_start_dialog_disable</give_info>
                <give_info>zat_b22_givepda_nimble</give_info>
            </phrase>
        </phrase_list>
    </dialog>
    <dialog id="zat_search_miron_quest_start2">
        <has_info>zat_search_dialog_activator_start2</has_info>
        <dont_has_info>zat_search_start_dialog_disable2</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_start2_1</text>
                <next>2</next>
                <next>22</next>
            </phrase>
            <phrase id="4">
                <text>zat_search_miron_quest_start2_4</text>
                <action>search_miron_tm</action>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_b22_givepda_nimble</give_info>
                <give_info>zat_search_start_dialog_disable2</give_info>
            </phrase>
            <phrase id="22">
                <text>zat_search_miron_quest_start2_22</text>
                <precondition>actor_has_mironpda</precondition>
                <next>4</next>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_start2_2</text>
                <action>search_miron_tm</action>
                <next>3</next>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_start2_0</text>
                <next>1</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_start2_3</text>
                <give_info>zat_search_dialog_activator</give_info>
                <give_info>zat_search_start_dialog_disable2</give_info>
            </phrase>
        </phrase_list>
    </dialog>

Спойлер

    <info_portion id="zat_search_start_dialog_disable"></info_portion>
    <info_portion id="zat_search_start_dialog_disable2"></info_portion>
    <info_portion id="zat_search_dialog_activator"></info_portion>
    <info_portion id="zat_search_dialog_activator_start2"></info_portion>
    <info_portion id="zat_b22_givepda_nimble"></info_portion>
    <info_portion id="zat_search_end_dialog_disable"></info_portion>

 


Дополнено 4 минуты спустя
Спойлер

string id="zat_search_miron_quest_end_0">
        <text>Насчёт твоего друга...</text>
    </string>
    <string id="zat_search_miron_quest_end_1">
        <text>Да, я слушаю. Что там с ним? Где он?</text>
    </string>
    <string id="zat_search_miron_quest_end_2">
        <text>Он...мёртв, его убил контролёр, при нём был КПК.</text>
    </string>
    <string id="zat_search_miron_quest_end_3">
        <text>Ээээх, такой хороший парень был. Ладно, держи деньги за возню с контролёром.</text>
    </string>
    <string id="zat_search_miron_quest_start2_0">
        <text>Ты предлогал мне поискать твоего друга...</text>
    </string>
    <string id="zat_search_miron_quest_start2_1">
        <text>Да, я тебя помню. Ты хочешь его найти?</text>
    </string>
    <string id="zat_search_miron_quest_start2_2">
        <text>Да, я хочу его найти.</text>
    </string>
    <string id="zat_search_miron_quest_start2_22">
        <text>Ты про этот КПК?</text>
    </string>
    <string id="zat_search_miron_quest_start2_3">
        <text>Спасибо, что взялся за его поиски! Жду!</text>
    </string>
    <string id="zat_search_miron_quest_start2_4">
        <text>Да! Спасибо...\nОх, не может быть, он мёртв. Держи деньги за возню с контролёром. Эхх, жаль пацана, хорош был.</text>
    </string>
    <string id="zat_search_miron_quest_start_0">
        <text>Слушаю внимательно.</text>
    </string>
    <string id="zat_search_miron_quest_start_1">
        <text>У меня был друг, Майроном звать. Хороший парень, есть на какую тему говорить, интересный, помогал с заказами, не отказывал в помощи. И в один момент он просто пропал, я не знаю как и куда.\nСам не могу этим заняться, у меня щас куча заказов.\nПожалуйста, найди его, если он мёртв то принеси его КПК.</text>
    </string>
    <string id="zat_search_miron_quest_start_2">
        <text>Конечно помогу, друзей в беде не бросают.</text>
    </string>
    <string id="zat_search_miron_quest_start_22">
        <text>У меня нету времени на это.</text>
    </string>
    <string id="zat_search_miron_quest_start_222">
        <text>Ты про этот КПК?</text>
    </string>
    <string id="zat_search_miron_quest_start_3">
        <text>Спасибо большое! Буду ждать.</text>
    </string>
    <string id="zat_search_miron_quest_start_4">
        <text>Да! Спасибо...\nОх, не может быть, он мёртв. Держи деньги за возню с контролёром. Эхх, жаль пацана, хорош был.</text>
    </string>

 


Дополнено 27 минуты спустя
27 минут назад, Misery сказал:

Написал три диалога для квеста. Первый стартовый типо NPC помощи просит. Второй стартовый если отказаться с первого раза. И третий конечный.

Только диалог игрок начинает первым. У меня при нажатии на фразу игра вылетает без лога.

  Диалог в dialogs_zaton.xml (Показать контент)

    <dialog id="zat_search_miron_quest_end">
        <has_info>zat_search_dialog_activator</has_info>
        <dont_has_info>zat_search_end_dialog_disable</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_end_1</text>
                <next>2</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_end_3</text>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_search_end_dialog_disable</give_info>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_end_0</text>
                <precondition>actor_has_mironpda</precondition>
                <next>1</next>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_end_2</text>
                <give_info>zat_b22_givepda_nimble</give_info>
                <next>3</next>
            </phrase>
        </phrase_list>
    </dialog>
    <dialog id="zat_search_miron_quest_start">
        <dont_has_info>zat_search_start_dialog_disable</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_start_1</text>
                <next>2</next>
                <next>22</next>
                <next>222</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_start_3</text>
                <give_info>zat_search_start_dialog_disable</give_info>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_start_2</text>
                <action>search_miron_tm</action>
                <give_info>zat_search_dialog_activator</give_info>
                <next>3</next>
            </phrase>
            <phrase id="222">
                <text>zat_search_miron_quest_start_222</text>
                <precondition>actor_has_mironpda</precondition>
                <next>4</next>
            </phrase>
            <phrase id="22">
                <text>zat_search_miron_quest_start_22</text>
                <give_info>zat_search_dialog_activator_start2</give_info>
                <give_info>zat_search_start_dialog_disable</give_info>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_start_0</text>
                <next>1</next>
            </phrase>
            <phrase id="4">
                <text>zat_search_miron_quest_start_4</text>
                <action>search_miron_tm</action>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_search_start_dialog_disable</give_info>
                <give_info>zat_b22_givepda_nimble</give_info>
            </phrase>
        </phrase_list>
    </dialog>
    <dialog id="zat_search_miron_quest_start2">
        <has_info>zat_search_dialog_activator_start2</has_info>
        <dont_has_info>zat_search_start_dialog_disable2</dont_has_info>
        <phrase_list>
            <phrase id="1">
                <text>zat_search_miron_quest_start2_1</text>
                <next>2</next>
                <next>22</next>
            </phrase>
            <phrase id="4">
                <text>zat_search_miron_quest_start2_4</text>
                <action>search_miron_tm</action>
                <action>money_mironpda</action>
                <action>recolate_mironpda</action>
                <give_info>zat_b22_givepda_nimble</give_info>
                <give_info>zat_search_start_dialog_disable2</give_info>
            </phrase>
            <phrase id="22">
                <text>zat_search_miron_quest_start2_22</text>
                <precondition>actor_has_mironpda</precondition>
                <next>4</next>
            </phrase>
            <phrase id="2">
                <text>zat_search_miron_quest_start2_2</text>
                <action>search_miron_tm</action>
                <next>3</next>
            </phrase>
            <phrase id="0">
                <text>zat_search_miron_quest_start2_0</text>
                <next>1</next>
            </phrase>
            <phrase id="3">
                <text>zat_search_miron_quest_start2_3</text>
                <give_info>zat_search_dialog_activator</give_info>
                <give_info>zat_search_start_dialog_disable2</give_info>
            </phrase>
        </phrase_list>
    </dialog>

  Инфопоршни в info_zaton.xml (Показать контент)

    <info_portion id="zat_search_start_dialog_disable"></info_portion>
    <info_portion id="zat_search_start_dialog_disable2"></info_portion>
    <info_portion id="zat_search_dialog_activator"></info_portion>
    <info_portion id="zat_search_dialog_activator_start2"></info_portion>
    <info_portion id="zat_b22_givepda_nimble"></info_portion>
    <info_portion id="zat_search_end_dialog_disable"></info_portion>

 


Дополнено 4 минуты спустя
  Текст в st_dialogs_zaton.xml (если кто будет открывать в DialogEditor) (Показать контент)

string id="zat_search_miron_quest_end_0">
        <text>Насчёт твоего друга...</text>
    </string>
    <string id="zat_search_miron_quest_end_1">
        <text>Да, я слушаю. Что там с ним? Где он?</text>
    </string>
    <string id="zat_search_miron_quest_end_2">
        <text>Он...мёртв, его убил контролёр, при нём был КПК.</text>
    </string>
    <string id="zat_search_miron_quest_end_3">
        <text>Ээээх, такой хороший парень был. Ладно, держи деньги за возню с контролёром.</text>
    </string>
    <string id="zat_search_miron_quest_start2_0">
        <text>Ты предлогал мне поискать твоего друга...</text>
    </string>
    <string id="zat_search_miron_quest_start2_1">
        <text>Да, я тебя помню. Ты хочешь его найти?</text>
    </string>
    <string id="zat_search_miron_quest_start2_2">
        <text>Да, я хочу его найти.</text>
    </string>
    <string id="zat_search_miron_quest_start2_22">
        <text>Ты про этот КПК?</text>
    </string>
    <string id="zat_search_miron_quest_start2_3">
        <text>Спасибо, что взялся за его поиски! Жду!</text>
    </string>
    <string id="zat_search_miron_quest_start2_4">
        <text>Да! Спасибо...\nОх, не может быть, он мёртв. Держи деньги за возню с контролёром. Эхх, жаль пацана, хорош был.</text>
    </string>
    <string id="zat_search_miron_quest_start_0">
        <text>Слушаю внимательно.</text>
    </string>
    <string id="zat_search_miron_quest_start_1">
        <text>У меня был друг, Майроном звать. Хороший парень, есть на какую тему говорить, интересный, помогал с заказами, не отказывал в помощи. И в один момент он просто пропал, я не знаю как и куда.\nСам не могу этим заняться, у меня щас куча заказов.\nПожалуйста, найди его, если он мёртв то принеси его КПК.</text>
    </string>
    <string id="zat_search_miron_quest_start_2">
        <text>Конечно помогу, друзей в беде не бросают.</text>
    </string>
    <string id="zat_search_miron_quest_start_22">
        <text>У меня нету времени на это.</text>
    </string>
    <string id="zat_search_miron_quest_start_222">
        <text>Ты про этот КПК?</text>
    </string>
    <string id="zat_search_miron_quest_start_3">
        <text>Спасибо большое! Буду ждать.</text>
    </string>
    <string id="zat_search_miron_quest_start_4">
        <text>Да! Спасибо...\nОх, не может быть, он мёртв. Держи деньги за возню с контролёром. Эхх, жаль пацана, хорош был.</text>
    </string>

 

Извините, я просто гигант мысли и отец Русской демократии. Я дебил который забыл указать из какого скрипта функции.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Иногда происходит вот такой случайный вылет.
С чем связано - вообще не могу понять.
Помогает только новая игра.

Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : c:\farthest edge\gamedata\scripts\state_mgr.script:247: C stack overflow

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

detoxe Причина вылета - переполнение стека при выполнении указанного скрипта. НО причина, как правило, совсем не в скрипте на котором переполнение произошло - причина может быть связана как с логикой, так и скриптами. А уж поиск этой причины чрезвычайно увлекательное занятие без конкретных рецептов.

 

  • Лайк 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Подскажите пожалуйста, как и в каком файле можно поставить ограничение на макс. 8 часов сон ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Kalambur ui_sleep_dialog.script

Там обрабатывается интерфейс диалогового окна сна.

  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 

Спойлер

local sleep_control = nil
local wide = true
class "sleep_dialog" (CUIScriptWnd)
function sleep_dialog:__init() super()
    self:SetWndRect(Frect():set(0,0,1024,768))
    self:SetAutoDelete(true)

    local xml = CScriptXmlInit()
    xml:ParseFile("ui_sleep_dialog.xml")

    self.back = xml:InitStatic("background", self)
--    self.sleep_static = xml:InitSleepStatic("sleep_static", self.back)

    self.sleep_static = xml:InitStatic("sleep_static", self.back)
    self.sleep_static2 = xml:InitStatic("sleep_static", self.back)
    self.static_cover = xml:InitStatic("static_cover", self.back)
    self.st_marker = xml:InitStatic("st_marker", self.static_cover)

    self.sleep_st_tbl = {}
    for i = 1, 24 do
        self.sleep_st_tbl = xml:InitStatic("sleep_st_"..i, self.back)
    end

    self.time_track = xml:InitTrackBar("time_track", self.back)
    self:Register(self.time_track, "time_track")

    self.btn_sleep = xml:Init3tButton("btn_sleep", self.back)
    self:Register(self.btn_sleep, "btn_sleep")

    self.btn_cancel = xml:Init3tButton("btn_cancel", self.back)
    self:Register(self.btn_cancel, "btn_cancel")

    self.sleep_mb = CUIMessageBoxEx()
    self.sleep_mb:SetAutoDelete(true)
    self:Register(self.sleep_mb, "sleep_mb")
--------------------------------------------------------------------------------
    self:AddCallback("btn_sleep", ui_events.BUTTON_CLICKED, self.OnButtonSleep, self)
    self:AddCallback("btn_cancel", ui_events.BUTTON_CLICKED, self.OnButtonCancel, self)
    self:AddCallback("sleep_mb", ui_events.MESSAGE_BOX_OK_CLICKED, self.OnMessageBoxOk, self)
end

function sleep_dialog:Initialize()
    local cur_hours = level.get_time_hours()
    for i = 1, 24 do
        local hours = cur_hours + i
        if(hours>=24) then
            hours = hours - 24
        end
        self.sleep_st_tbl:TextControl():SetText(hours..game.translate_string("st_sleep_hours"))
    end

    local delta = math.floor(591/24*cur_hours)
    local r = Frect():set(delta,413,591,531)
    self.sleep_static:SetTextureRect(r)
    local width = 591-delta
    if(wide) then
        width = width*0.8
    end
    self.sleep_static:SetWndSize(vector2():set(width, 118))

    r = Frect():set(0,413,delta,531)
    self.sleep_static2:SetTextureRect(r)
    local width = delta
    if(wide) then
        width = width*0.8
    end
    self.sleep_static2:SetWndSize(vector2():set(width, 118))

    local pos = self.sleep_static2:GetWndPos()
    pos.x = self.sleep_static:GetWndPos().x+self.sleep_static:GetWidth()
    self.sleep_static2:SetWndPos(pos)
end

function sleep_dialog:__finalize()
    sleep_control = nil
end

function sleep_dialog:TestAndShow()
    --[[
    if (self.ph_sleepbag_id and self.item_section) then
        local sim = alife()
        sim:create(self.item_section,db.actor:position(),0,0,0)
        local se_bag = sim:object(self.ph_sleepbag_id)
        if (se_bag) then
            sim:release(se_bag,true)
        end
        self.ph_sleepbag_id = nil
    end
    --]]
    -- Prevent sleep if not tired, but only if sleep deprivation is enabled.
    -- If the player has drunk too many energy drinks they will be too wired to sleep.
    --[[
    if (axr_main.config:r_value("mm_options","enable_sleep_deprived",1,false) == true) then
        if (sleep_dep) then
            if (sleep_dep.caff_chk and sleep_dep.caff_chk > 0) then
                SetHudMsg(game.translate_string("st_sleep_awake_wired"),4)
                return
            elseif (sleep_dep.last_sleep and sleep_dep.no_sleep and sleep_dep.last_sleep < sleep_dep.no_sleep) then
                SetHudMsg(game.translate_string("st_sleep_awake"),4)
                return
            end
        end
    end
    --]]
    local bleeding = db.actor.bleeding > 0
    local radiation = fasle --db.actor.radiation > 0
    
    -- Prevent sleep if bleeding and/or iradiated.
    if (bleeding or radiation) then
        if (bleeding and radiation) then
            SetHudMsg(game.translate_string("st_sleep_bleeding_irradiated"),5)
        elseif (bleeding) then
            SetHudMsg(game.translate_string("st_sleep_bleeding"),4)
        elseif (radiation) then
            SetHudMsg(game.translate_string("st_sleep_irradiated"),4)
        end
        return
    end
    
    -- Prevent sleep if an emission or psi-storm currently ongoing.
    if (xr_conditions.surge_started() or psi_storm_manager.is_started()) then
        if not (surge_manager.actor_in_cover()) then
            SetHudMsg(game.translate_string("st_sleep_event"),4)
            return
        end
    end    

    self:Initialize()
    self:ShowDialog(true)
end

function sleep_dialog:Update()
    CUIScriptWnd.Update(self)
    if self:IsShown() then
        local sleep_time = self.time_track:GetIValue()-1
        local x = math.floor(591/24*sleep_time)
        if(x==0) then
            x = 5
        end
        if(wide) then
            x = x*0.8
        end
        self.st_marker:SetWndPos(vector2():set(x, 0))
    end
end

function sleep_dialog:OnTrackButton()
end

function sleep_dialog:OnButtonSleep()
    if self:IsShown() then
        self:HideDialog()
    end
    utils.save_var(db.actor,"heli_enemy_flag",nil)
    xr_effects.disable_ui(db.actor, nil)
    level.add_cam_effector("camera_effects\\sleep.anm", 10, false, "ui_sleep_dialog.dream_callback")
    level.add_pp_effector("sleep_fade.ppe", 11, false)
    _G.mus_vol = get_console():get_float("snd_volume_music")
    _G.amb_vol = get_console():get_float("snd_volume_eff")
    get_console():execute("snd_volume_music 0")
    get_console():execute("snd_volume_eff 0")
    if self.forced then
        level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "ui_sleep_dialog.dream_callback")
    else
        level.add_cam_effector("camera_effects\\sleep.anm", 10, false, "ui_sleep_dialog.dream_callback")
        get_console():execute("snd_volume_music 0")
        get_console():execute("snd_volume_eff 0")
    end
    level.add_pp_effector("surge_fade.ppe", 11, false) --sleep_fade.ppe
    db.actor:give_info_portion("actor_is_sleeping")
    
end

function sleep_dialog:OnButtonCancel()
    if (self:IsShown()) then
        self:HideDialog()
    end
    --db.actor:give_info_portion("tutorial_sleep")
    disable_info("actor_is_sleeping")
    disable_info("sleep_active")
end

function sleep_dialog:OnMessageBoxOk()
    db.actor:give_info_portion("tutorial_sleep")
    disable_info("actor_is_sleeping")
    disable_info("sleep_active")
end

--------------------------------------------------------------------------------
function dream_callback()
    if sleep_control.forced then
        level.add_cam_effector("camera_effects\\surge_01.anm", 10, false, "ui_sleep_dialog.dream_callback2")
    else
        level.add_cam_effector("camera_effects\\sleep.anm", 10, false, "ui_sleep_dialog.dream_callback2")
    end
    
    
    local hours = sleep_control.forced or sleep_control.time_track:GetIValue()
    
    db.actor.satiety = hours*0.05
    db.actor.psy_health = hours*0.1
    
    --printf("dream_callback hours=%s",hours)
    level.change_game_time(0,hours,0)
    
    surge_manager.get_surge_manager().time_forwarded = true
    psi_storm_manager.get_psi_storm_manager().time_forwarded = true
        
    if(surge_manager.is_started() and level_weathers.get_weather_manager().weather_fx) then
        level.stop_weather_fx()
    end
    
    level_weathers.get_weather_manager():select_weather(true)
    db.actor.power = 1
end

function dream_callback2()
    xr_effects.enable_ui(db.actor, nil)
    get_console():execute("snd_volume_music "..tostring(_G.mus_vol))
    get_console():execute("snd_volume_eff "..tostring(_G.amb_vol))
    _G.amb_vol = 0
    _G.mus_vol = 0
    disable_info("tutorial_sleep")
    disable_info("actor_is_sleeping")
    disable_info("sleep_active")
    
    local flist = getFS():file_list_open_ex("$game_saves$",    bit_or(FS.FS_ListFiles,FS.FS_RootOnly),"*".. ui_load_dialog.saved_game_extension)
    local f_cnt = flist and flist:Size() or 0
   
    local inc = 0
    if (f_cnt > 0) then
        flist:Sort(FS.FS_sort_by_modif_down)
    
        for it=0, f_cnt-1 do
            local file_name = flist:GetAt(it):NameFull():sub(0,-6):lower()
            
            -- grab last modified quicksave increment count
            local d = tonumber( string.match(file_name,"sleep_autosave(%d+)") )
            if (d) then
                inc = d
                break 
            end
        end
    end
    
    inc = inc >= axr_main.config:r_value("mm_options","quicksave_cnt",2,5) and 1 or inc + 1
    get_console():execute("save sleep_autosave"..inc)
end

function sleep()
    if (sleep_control==nil) then
        sleep_control = ui_sleep_dialog.sleep_dialog()
    end
    sleep_control.forced = nil
    sleep_control.time_track:SetCurrentValue()
    sleep_control:TestAndShow()
end

function sleep_forced(hours)
    if(sleep_control==nil) then
        sleep_control = ui_sleep_dialog.sleep_dialog()
    end
    sleep_control.forced = hours or math.random(3,9)
    sleep_control:OnButtonSleep()
end

function main()
    sleep()
end

function sleep_bag(ph_sleepbag_id,sec)
    if (sleep_control==nil) then
        sleep_control = ui_sleep_dialog.sleep_dialog()
    end
    sleep_control.forced = nil
    sleep_control.item_section = sec
    sleep_control.ph_sleepbag_id = ph_sleepbag_id
    sleep_control.time_track:SetCurrentValue()
    sleep_control:TestAndShow()
    return sleep_control
end

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Привет всем! Не знаю возможно ли такое. Можно ли сделать так, чтобы после получения поршня через некоторое время (например 10 сек.) актеру приходило сообщение от нпс, и можно ли в этом сообщении сделать выдачу поршня? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
9 минут назад, Emmis сказал:

Можно ли сделать так, чтобы после получения поршня через некоторое время (например 10 сек.) актеру приходило сообщение от нпс, и можно ли в этом сообщении сделать выдачу поршня? 

Ну, как-то так. Логика рестриктора:
 

[logic]
active = sr_idle@info

[sr_idle@info]
on_info = {+инфопорция} sr_idle@time

[sr_idle@time]
on_game_timer = 100 | %=send_tip(st_ссылка_на_текст:иконка_из_news) +инфопорция% sr_idle@nil

[sr_idle@nil]

 

  • Спасибо 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу