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

[SoC] Ковыряемся в файлах


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

Roman82: ...Перерыл все моды, нигде подобной проверки не нашел...

...

И главное, ни в одном моде я не нашел проверок на боеприпасы. Вот что странно.

...

Матчасть я выучил 5 лет назад.

Как видно рыл в модах пятилетней давности, когда они только появлялись ... и были единичны и в пару килобайт :crazy:

Глупо, подозревать, что подобных проверок нет в модах: метания гранат (от xStream), в схеме стрельбы неписями из подствольников и в схеме менеджера оружия. Не говори глупости! В любом мало-мальски глобальном моде таких проверок море ...

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

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

А вот это:

Убираю прекондишены на гранату и боеприпасы, диалог начинает работать.
Скорее говорит об ошибке скрипта. Если бы потрудился бы последовать совету ColR_iT и расшифровал бы более понятн что же подразумеваешь под "работает" - возможно было бы и более конкретно что-то сказать.

И, видно понятие лога в твоих "учениях" матчасти отсутствовало ... а то бы давно бы вывел в лог нужную информацию и не гадал бы на кофейной гуще.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Roman82, только что проверил - всё работает!

Вот содержимое моего файла:

function have_n_items(section,number)
    if number == nil then
        number = 1
    end
    local actor = db.actor
    if actor then
        local cnt=0
        actor:iterate_inventory(function (dummy, item)
                                if item:section()==section then cnt=cnt+1 end
                                end, nil)
        return cnt>=number
    end
    return false
end

function have_1_medkit()
    if have_n_items("medkit_army",1) then
        log1("--Have medkit")
    else
        log1("!!Not have medkit")
    end
end

function have_2_tushenka()
    if have_n_items("conserva",2) then
        log1("--Have two conserva")
    else
        log1("!!Not have conserva")
    end
end

function have_2_bread()
    if have_n_items("bread",2) then
        log1("--Have two bread")
    else
        log1("!!Not have bread")
    end
end

function have_ammo()
    if have_n_items("ammo_5.45x39_ap",2) then
        log1("--Have two ammo")
    else
        log1("!!Not have ammo")
    end
end

function have_grenade()
    if have_n_items("grenade_rgd5",2) then
        log1("--Have two grenade")
    else
        log1("!!Not have grenade")
    end
end

function check_all ()
    have_1_medkit()
    have_2_tushenka()
    have_2_bread()
    have_ammo()
    have_grenade()
end

Функция log1 выводит в консоль текст в скобках и при вызове функции check_all из диалога, я в консоли увидел пять строк:

Have medkit
Have two conserva
Have two bread
Have two ammo
Have two grenade

Так что делай выводы.

ColR_iT, Artos

Друзья, дело в том что в консоле и у меня все работает! А в диалоге нет.

А теперь, самое интересное. Знаете в чем было дело? В схеме патроны и гранаты на поясе! Как я сразу не допер... К ним же там фэйки добавляются. Отключил схему, все заработало. Такие вот пироги.

Ради бога прошу прощения за все это. Кто бы мог подумать. Спасибо большое за помощь.

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

Вобщем, созрел вопрос, в той области с которой я раньше дела не имел, а пришлось.

С чем работаю: ТЧ 1,0004 + Пак локаций из "Сообщества мапперов", последняя из выложенных в их шапке версий, на чистую игру (т.е. не АМК)

В чем состоит цель: сделать на предбаннике стоянку новой группировки, Военных нато.

Группировку сделал, прописал как полагается, для теста зачислил в нее Волка - все нормально, Волк стал натовцем и пошел гулять из деревни т.к. в деревне работы для него такого нету.

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

 

[11625]
; cse_abstract properties
section_name = smart_terrain
name = predb_mnato_smart_terrain
position = -550.030944824219,14.6607055664063,286.763793945313
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3881
distance = 9.09999942779541
level_vertex_id = 105016
custom_data = <<END
[smart_terrain]
type     = predb_mnato_smart_terrain
capacity = 8
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 20.5595703125

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties


[11626]
; cse_abstract properties
section_name = respawn
name = predb_respawn_military_nato_post
position = -550.030944824219,14.6607055664063,286.763793945313
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 3881
distance = 10
level_vertex_id = 105016
object_flags = 0xffffff3e
custom_data = <<END
[respawn]
respawn_section = prb_milnato_respawn_1
max_count = 8
min_count = 4
max_spawn = 2
idle_spawn = medium
conditions = 100
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1

; cse_alife_space_restrictor properties
restrictor_type = 0

; se_respawn properties

 

 

 

[predb_mnato_smart_terrain_kamp]
points = p0
p0:name = name00
p0:position = -559.256103515625,14.6880102157593,282.203582763672
p0:game_vertex_id = 3881
p0:level_vertex_id = 92380


[predb_mnato_smart_terrain_walker_1_walk]
points = p0,p1,p2
p0:name = name00
p0:position = -557.199768066406,14.3911476135254,284.340942382813
p0:game_vertex_id = 3881
p0:level_vertex_id = 94401
p0:links = p1(1)

p1:name = name01
p1:position = -538.838684082031,17.3168258666992,290.285552978516
p1:game_vertex_id = 3881
p1:level_vertex_id = 121121
p1:links = p2(1)

p2:name = name02
p2:position = -552.039306640625,14.2716541290283,307.063873291016
p2:game_vertex_id = 3881
p2:level_vertex_id = 101861
p2:links = p0(1)


[predb_mnato_smart_terrain_walker_2_walk]
points = p0,p1,p2
p0:name = name00
p0:position = -566.4130859375,14.8234539031982,262.069152832031
p0:game_vertex_id = 3880
p0:level_vertex_id = 80983
p0:links = p1(1)

p1:name = name01
p1:position = -554.135864257813,15.1366109848022,262.086944580078
p1:game_vertex_id = 3880
p1:level_vertex_id = 98577
p1:links = p2(1)

p2:name = name02
p2:position = -553.250915527344,14.7384147644043,272.294494628906
p2:game_vertex_id = 3881
p2:level_vertex_id = 100733
p2:links = p0(1)

 

 

    if type == "predb_mnato_smart_terrain" then

                    for i = 1, 6 do

                            t = { section = "logic@predb_mnato_smart_terrain_kamp",
                    idle = 0,
                    prior = 8-i, state = {0,1},
                    in_rest = "", out_rest = ""
                }
                table.insert(sj, t)
            end

                        for i = 1, 2 do

                    t = { section = "logic@predb_mnato_smart_terrain_walker_"..i,
                        idle = 0,
                        prior = 9-i, state = {0,1},
                        in_rest = "", out_rest = ""
                    }
                    table.insert(sj, t)
                        end        

    end

 

 

    if type == "predb_mnato_smart_terrain" then
        return function (gulag)
            return 0
        end
    end

 

 

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
if type == "predb_mnato_smart_terrain" then
    ltx = "[logic@predb_mnato_smart_terrain_kamp]\n"..
        "active = kamp@predb_mnato_smart_terrain\n"..

            "[kamp@predb_mnato_smart_terrain]\n"..
            "center_point = kamp\n"..




        "[logic@predb_mnato_smart_terrain_walker_1]\n"..
            "active = walker_1@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_1]\n"..
        "path_walk = walk_1\n"..



                "[logic@predb_mnato_smart_terrain_walker_2]\n"..
            "active = walker_2@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_2]\n"..
        "path_walk = walk_2\n"



    return ltx
    end


    return nil
end

 

    if gulag_type == "predb_mnato_smart_terrain" then
        return npc_community == "military_nato"
    end

 

 

 

Где тут искать ошибку - не могу взять в толк. Подскажите кто разбирается в данном вопросе.

Если я не всю необходимую информацию привел - поправьте. голова уже кругом идет, мог и забыть что-то, все что требуется выложу.

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

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

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

Zander_driver

1. Появиться на локации у тебя кто-нибудь должен!

Твой респавнер на локации предбанника обязан при старте игры заспавнить как минимум 4-х неписей и далее отреспавнивать по паре ...

А вот останутся ли они в игре и на локации - это уже иной вопрос.

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

 

2. Очень странно, что ты засунул работы для гулага на одной локации в скрипт работ для другой (gulag_escape.script). В чем заключается такой "экономный" смысл, когда ничего не мешает и везде именно так и делается писать работы и пр. параметры гулагов именно в скрипт работ для конкретной локации, регистрируя его в xr_gulag.script.

 

3. Заодно не мешает показать начало xr_gulag.script, где регистрируется и собственно новая локация в табличке level_groups. Если не зарегистрирована локация то ... откуда твои респавнящиеся неписи будут получать свойство squad? Не уверен что дефолтный 0 даст возможность работать именно в твоем гулаге.

 

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Вынес гулаг в отдельный файл

local t = {}
local ltx = ""

function load_job(sj, gname, type, squad, groups)
    if type == "predb_mnato_smart_terrain" then

                    for i = 1, 6 do

                            t = { section = "logic@predb_mnato_smart_terrain_kamp",
                    idle = 0,
                    prior = 8-i, state = {0,1},
                    in_rest = "", out_rest = ""
                }
                table.insert(sj, t)
            end

                        for i = 1, 2 do

                    t = { section = "logic@predb_mnato_smart_terrain_walker_"..i,
                        idle = 0,
                        prior = 9-i, state = {0,1},
                        in_rest = "", out_rest = ""
                    }
                    table.insert(sj, t)
                        end        

    end
end

function load_states(gname, type)
return 0
end

--'------------------------------------------------------------------------
--' Dynamic ltx
--'------------------------------------------------------------------------
function load_ltx(gname, type)


if type == "predb_mnato_smart_terrain" then
    local ltx = "[logic@predb_mnato_smart_terrain_kamp]\n"..
        "active = kamp@predb_mnato_smart_terrain\n"..

            "[kamp@predb_mnato_smart_terrain]\n"..
            "center_point = kamp\n"..




        "[logic@predb_mnato_smart_terrain_walker_1]\n"..
            "active = walker_1@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_1]\n"..
        "path_walk = walk_1\n"..



                "[logic@predb_mnato_smart_terrain_walker_2]\n"..
            "active = walker_2@predb_mnato_smart_terrain\n"..

        "[walker@predb_mnato_smart_terrain_2]\n"..
        "path_walk = walk_2\n"



    return ltx
    end


    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
    if gulag_type == "predb_mnato_smart_terrain" then
        return npc_community == "military_nato"
    end
    news_manager.send_tip(db.actor, "check_stalker", nil, nil, 12000) 
end

function checkMonster(npc_community, gulag_type)
return false
end

 

 

В gulag_escape.script соответственно все изменения закомментил, и вот

 

level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar,
                gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag,
                gulag_deadcity, gulag_predbannik}

level_groups = {l01_escape = 1, l02_garbage = 2, l03_agroprom = 3, l03u_agr_underground = 4,
                l04_darkvalley = 5, l04u_labx18 = 6, l05_bar = 7, l06_rostok = 8,
                l07_military = 9, l08_yantar = 10, l08u_brainlab = 11, l10_radar = 12,
                l10u_bunker = 13, l11_pripyat = 14, l12_stancia = 15, l12u_sarcofag = 16, 
                l12u_control_monolith = 17, l12_stancia_2 = 18, predbannik = 19}

local gulag_tasks_file_name  = "misc\\gulag_tasks.ltx"
local gulag_tasks_ltx        = ini_file( gulag_tasks_file_name )

local job_position_threshold = 120 --'50  -- расстояние до места работы при котором персонаж в онлайне считается достигшим места работы
local job_idle_after_death   = 600 -- в течении такого периода времени после смерти персонажа его работа будет недоступна

idle_nil  = nil
idle_once = -1
idle_none = -2

local path_fields = { "path_walk", "path_main", "path_home", "center_point" }

-----------------------------------------------------------------------
class "gulag"

-- конструктор
function gulag:__init(smrttrn, type, squad, groups, npc_info, capacity)
    self.smrttrn  = smrttrn
    self.name     = smrttrn:name()
    self.type     = type
    self.squad    = squad
    self.groups   = groups or {}
    self.npc_info = npc_info
    self.capacity = capacity     -- общая ёмкость гулага
--    self.capacity_non_exclusive  -  ёмкость гулага для неэксклюзивных персонажей
    
    self.population = 0                    -- Население гулага
    self.population_comed = 0            -- Уже пришедшее население гулага
    self.population_non_exclusive = 0    -- Неэксклюзивное население



    self.Object                 = {} -- объекты по id. Значения: nil-нету такого, true-есть в офлайне, game_object-есть в онлайн
    self.Object_begin_job       = {} -- по id. true/nil достиг ли объект места своей работы
    self.Object_didnt_begin_job = {} -- по id. начинал ли объект хотя бы раз любую работу с момента добавления под смарт
    self.ObjectJob              = {} -- по id. номер работы для каждого персонажа
    self.JobLoaded              = {} -- для каждой работы загруженные из save данные
    self.Job_avail_in_state     = nil

    self.state      = 0
    self.stateBegin = nil

    self.casualities = 0
end

-- загрузка работ
function gulag:load_jobs()
    self.Job                  = {} -- работы
    self.Job_avail_in_state_0 = {}

    gulag_tasks.loadJob( self.Job, self.name, self.type, self.squad, self.groups, self )
    self:init_ltx( self.name, self.type )

    table.sort( self.Job, function(a,b) return a.prior > b.prior end )

    self:prepare_jobs_for_new_state()

    local capacity = 0

    for i, job in ipairs( self.Job ) do
        if self:job_exists_in_state_0( job ) then
            table.insert( self.Job_avail_in_state_0, job )
            capacity = capacity + 1
        end

        if type( job.online ) == "string" then
            job.online_condlist = job.online
            job.online          = xr_logic.parse_condlist( self.smrttrn, "gulag:setup_job_online", "job_online", job.online_condlist )
        end
    end

    self.capacity               = math.min( capacity, self.capacity )
    self.capacity_non_exclusive = self.capacity

--    printf("LOAD JOBS %s", tostring(self.name))
    -- DEBUG
--    self:validate_jobs()
end

-- проверки правильности набора работ.
-- а) в любом состоянии кол-во 100-но доступных работ должно быть >= ёмкости смарта
function gulag:validate_jobs()
    local jobs_avail_in_states = {}

    -- а)
    for i, job in ipairs( self.Job ) do
        if job.predicate == nil and
           job.idle == 0 and
           job.timeout == nil and
           job.fill_idle == nil
        then
            for j, state in ipairs( job.state ) do
                jobs_avail_in_states[state] = (jobs_avail_in_states[state] or 0) + 1
            end
        end
    end

    for i, v in ipairs( jobs_avail_in_states ) do
        if v < self.capacity then
            print_table( self.Job )
            abort( "[smart_terrain %s] type=%s state=%d capacity=%d: too few absolutely available jobs", self.name, self.type, i, self.capacity )
        end
    end
end

-- подготовка гулага к работе
function gulag:initialize()
    self.ObjectJobPathName = {} --' по id. имя патрульного пути места работы персонажа
    self.restrictors       = {} --' по id. назначенные гулагом рестрикторы для каждого персонажа

    self:prepare_jobs()

    self.calculateStates = gulag_tasks.loadStates( self.name, self.type )

    local ini = self.smrttrn:spawn_ini()
    local sect = "smart_terrain"
    if not ini:section_exist( sect ) then
        sect = "gulag1"
    end

    self.state_switch_0 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_0", utils.cfg_get_string(ini, sect, "switch_0", self.smrttrn, false, "", "") )
    self.state_switch_1 = xr_logic.parse_condlist( self.smrttrn, "gulag1", "switch_1", utils.cfg_get_string(ini, sect, "switch_1", self.smrttrn, false, "", "") )

    self.JobLoaded = nil
end

-- подготовить работы.
-- подготовить данные о местоположении каждой работы; о объекте, который на ней занят.
-- подсчитать ёмкость = min(кол-во работ в 0 состоянии, поле capacity в custom data)
function gulag:prepare_jobs()
    local ptrl, path_name
    local job_loaded
    local empty_table = {}

    for i, job in ipairs( self.Job ) do
        job.num              = i

        path_name            = self:get_job_path_name( job )
        ptrl                 = patrol( path_name )

        job.path_name        = path_name
        job.game_vertex_id   = ptrl:game_vertex_id( 0 )
        job.level_id         = game_graph():vertex(job.game_vertex_id):level_id()
        job.position         = ptrl:point( 0 )

        job_loaded           = self.JobLoaded[i] or empty_table

        job.begin            = job_loaded.begin
        job.fill_idle        = job_loaded.fill_idle
        job.idle_after_death_end = job_loaded.idle_after_death_end
    end

    local job

    for obj_id, jobN in pairs( self.ObjectJob ) do
        job        = self.Job[jobN]
        job.object = obj_id
        self.ObjectJobPathName[obj_id] = job.path_name
    end
end

Я тут менял только первые две таблицы - где тут что еще изменить надо, не вижу... все последующее без изменений осталось.

 

В итоге этих действий - при начале новой игры (точнее при попытке) вылет

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: error in error handling


stack trace:

 

Поставь вывод в лог строки при создании этим респавнером неписей
А кстати как это сделать? Разве, используя данные респавнера, сам спавн производит скрипт? Я думал что раз в алл-спавне прописано, то этим движок занимается...

 

Пара уточнений...

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

И еще одно - на локации предбанника изначально бродит некоторое количество неписей, но они все относятся к группировке одиночки. Соотв-но, места в гулаге занимать не должны, и не занимают, бродят вдалеке не проявляя интереса к этому месту. Но самих нпс более десятка. Это может как-то влиять?

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

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

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

Zander_driver, перебирайся с подобными ковыряниями и гданиями в соответствующий топик "[soC] Ковыряемся в файлах", т.к. к скрипам твои проблемы имеют самое последнее отношение. Там же (и в этом топике) почитай уже понаписанное про респавнеры.

Вообще советую вначале подучить матчасть по статьям создания смартов/гулагов и потренироваться на каком-нибудь простеньком на том же Кордоне, а не замахиваться на все новое (локация+смат+гулаг+респавн+группировка+...), тем более делаешь все методом "тыка" и "в темную" (без инфы в логах).

 

Если заглянешь в se_respawn.script, то даже по комментам разрабов игры и закомменированным строкам вывода в лог можно многое понять (было бы желание). Сам респавнер действительно спавнится движком по твоей инфе из алл.спавно, но с какого такого ... респавном неписей движек должен заниматься?

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

 

Ну и как с респавнером, поставив вывод в лог в smart_terrain.script ты сможешь не гадать, а видеть идет/пришел/начал работу и сколько таких в твоем гулаге. И если нет таких - разбирайся, почему же твой гулаг не принимает на работу. Что мешает "ручками" заспавнить подходящих неписей и отследить - идут ли они в гулаг или нет и почему?

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Засим, отправляюсь заниматься воплощением того что вы мне посоветовали, спасибо) надеюсь переползать в ковырялки с последующими вопросами мне уже не придется, и все благополучно разрешится.

 

 

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

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

Повторюсь - Возможно, ли убрать свет от ламп на статике при помощи all.spawn, то есть источник света удаляется, а освещение вокруг него остается, хочу полностью удалить освещение от ламп. И еще одно можете ли привести пример спавна ветряка (ветрогенератор) через all.spawn как в «Истории Прибоя» или «Paradise Lost beta» просмотрел весь all.spawn ИП так и не нашел как заспавнить, если спавнить просто модель вылетает и жалуется на анимацию.Заранее благодарен.

 

 

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

В некотрых оружейных конфигах есть эти параметры,

hit_probability_gd_novice = 0.80

hit_probability_gd_stalker = 0.85

hit_probability_gd_veteran = 0.90

hit_probability_gd_master = 0.95

но, не понятно, что именно они означают, где то стоят такие коменты,

hit_probability_gd_novice = 0.80 ; точность стрельбы,

hit_probability_gd_stalker = 0.85 ; когда оружие в руках НПС

hit_probability_gd_veteran = 0.90 ; в зависимости от уровня

hit_probability_gd_master = 0.95 ; сложности игры

а где то, стоят коменты, в которых говорится, что это урон, которое наносит оружие в зависимости от уровня сложности..

 

Мог бы просто перевести слово "probability" - вопрос бы сразу отпал. Вероятность попадания НПС по ГГ в зависимости от сложности. Cyclone

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

FANAT, читай коменты в одно предложение, это тоже самое что в actor.ltx но для данного оружия персонально Изменено пользователем Saruman

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Коллеги, возник вопрос.

Есть девайс. При его использовании на экран выводится окно. В этом окне я вывожу текстовую переменную:

if string.len(opisTXT) > 0 then

wopisTXT = CUIStatic()

wopisTXT:SetWindowName("wopisTXT")

wopisTXT:SetAutoDelete(true)

wopisTXT:SetText("Рецепт: "..opisTXT)

wopisTXT:SetTextColor(255,155,255,0)

wopisTXT:SetFont(GetFontGraffiti19Russian())

wopisTXT:Init(600,140,320,200)

self:AttachChild(wopisTXT)

end

Сама переменная opisTXT имеет (для примера) такой вид:

Артефакт Капли получается путем совместной трансмутации в аномалии Карусель сразу четырех ингредиентов: Хвост собаки, Водка, Бинт, Выверт. Преобразование происходит в течении 5-10 минут.

По идее этот текст должен выводиться в прямоугольник (wopisTXT:Init(600,140,320,200), а на практике - все выводится в одну строку и на экране я вижу только первые 4-5 слов, все остальное - улетает за край монитора.

Не подскажете в чем моя ошибка? Есть ли возможность вывести такую переменную в несколько строк в указанный диапазон координат экрана?

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

SoC v 1.0005

В секции детектора 'detector_advances' есть такой параметр:

night_vision_particle = damage_fx\heli_burn
Он имеет какое-то значение для детектора ?

 

Marafon6540

Проблема похоже в том, что окно класса CUIStatic по умолчанию не умеет отображать многострочный текст. И похоже методов класса, устанавливающих такое свойство нет.

Решить проблему можно прописав Ваше окно в xml-файле, к примеру так:

<st_wopisTXT x="600" y="140" width="320" height="200">
    <text align="c" complex_mode="1" x="1" y="1" a="250"></text> 
</st_wopisTXT>

здесь параметр complex_mode="1" как раз и обеспечивает многострочное отображение текста.

Затем создать окно, использовав этот xml-файл:

local xml = CScriptXmlInit()
xml:ParseFile("имя_файла.xml")-- файл-описатель элементов --
wopisTXT = xml:InitStatic("st_wopisTXT", self)

ну и далее, используйте wopisTXT для всех остальных манипуляций с окном.

 

Раз задаются вопросы про гулаги, у меня такой вопрос:

Из-за чего может быть зависание биндера непися (еще в лог пишет: Scheduler tried to update object имя_непися) при том, что ему назначен новый гулаг на новой локации? Пути и смарт создавал через СДК, поэтому самого спавна пока показать не могу (асдс глючит). Зарегистрировал новый файл гулагов и саму локу в xr_gulag.script:

level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar,
                gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag,
                gulag_deadcity, gulag_new_garbage}

level_groups = {l01_escape = 1, l02_garbage = 2, l03_agroprom = 3, l03u_agr_underground = 4,
                l04_darkvalley = 5, l04u_labx18 = 6, l05_bar = 7, l06_rostok = 8,
                l07_military = 9, l08_yantar = 10, l08u_brainlab = 11, l10_radar = 12,
                l10u_bunker = 13, l11_pripyat = 14, l12_stancia = 15, l12u_sarcofag = 16, 
                l12u_control_monolith = 17, l12_stancia_2 = 18, new_garbage = 19}

 

Содержимое gulag_new_garbage.script:

local t = {}

function load_job(sj, gname, type, squad, groups)    
    if type == "gar_depo_bandit" then
        t = { section = "logic@gar_depo_bandit_tower_sniper",
            idle = 0,
            prior = 9, state = {0,1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end
end

function load_states(gname, type)
    if type == "gar_depo_bandit" then
        return function(gulag)
            if db.actor ~= nil then
                if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 22 ) then
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return gulag.state
            end
        end
    end
end

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
    if gulag_type == "gar_depo_bandit" then
        return true --npc_community == "bandit"
    end

    return false
end

function checkMonster(npc_community, gulag_type)


    return false
end

 

Содержимое gulag_new_garbage.ltx (его я тоже подключил):

[logic@gar_depo_bandit_tower_sniper]
active = walker@gar_depo_bandit_tower_sniper

[walker@gar_depo_bandit_tower_sniper]
path_walk = tower_walk1
path_look = tower_look1

 

 

P.S. Еще одна интересная вещь: если уйти от непися, чтобы тот ушел в оффлайн, а потом вернуться, то он уже придет на тот заданной путь гулага, но опять зависший.

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

 

wikreznow, Локацию надо пересобирать, без этого источники света не пропадут.

AndreySol, этот параметр задается, чтобы данным партиклом отмечать аномалии при включенном ПНВ.

AndreySol,

если оставить строку night_vision_particle = damage_fx\heli_burn,

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

----------

Забыл добавить - если ПНВ включён, а не постоянно.

ТЧ v 1.0005

Вопрос по детекторам, артефактам и аномалиям:

1). Что и где надо изменить\убрать\добавить, что-бы убрать для всех артефактов эффекты свечения, подпрыгивания и др., ну т.е. чтоб они молча и тихо лежали на своих местах.

 

2). В ltx-файлах для аномалий указано много параметров, которые отвечают, судя по комментариям, за спаун артов при срабатывании аномалии. Эти параметры рабочие ? Просто, за все разы прохождения чистого ТЧ, ни разу не заметил случая, когда при срабатывании аномалии она бы рождала арт.

Там-же присутствуют параметры, опять-же судя по комментам, отвечающие за рождение артов в офф-лайне. Вопрос тот-же - они рабочие ?

 

3). По распознаванию зон детекторами:

у детектора 'detector_simple' для аномалии 'zone_radioactive' указано аж 8, как я понял из названия параметров (это начиная с "zone_sound_3_" и заканчивая "zone_sound_3_8"), звуковых эффектов. Чо они означают ? Предполагаю, что изменение звука при изменении расстояния до аномалии ?

Если я правильно предполагаю, то какое максимальное кол-во этих параметров, и как вычисляется сетка расстояний ?

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

AndreySol,

по первому вопросу - ну элементарно же, там в в файле artefacts.ltx комментарии проставлены:

;подсветка арта

lights_enabled = true

trail_light_color = 2.5, 2.4, 0

trail_light_range = 1.0

Ставим lights_enabled = false - подсветки не будет

jump_height = 0 - прыгать не будет.

 

 

Капрал Хикс

Понял, спасибо.

Еще немного про арты. В базовой секции 'af_base' эти параметры отсутствуют, но если я их уберу из наследованных секций и вставлю в базовую, будут ли все арты наследовать эти параметры ?

 

А по остальным вопросам ?

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

AndreySol,

По идее, да, будут наследовать, если в секциях артов убрать их.

Спавн в аномалиях нерабочий, ИМХО, это уже обсуждалось когда-то. Рудименты от билдов.

Про детекторы не в курсе.

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

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

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

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

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

Войти

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

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

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