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

Скриптование


Svoboда

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

Попробуй сделать какую нибудь другую анимацию при приближении гг с оружием.

[meet]

meet_state_wpn = 10|ward@cit_base_guard_talk_to_actor2| 5|probe_2@gar_bandits_seryi; реакция НПС на подход гг с оружием в руках

victim_wpn = 10|actor;что то завязанное с расстоянием... попробуй поэкспериментируй с этим

use_wpn = true; возможно ли базарить с оружием.

 

Вот попробуй сделать эти секции, если получится отпишись. И да, ward@cit_base_guard_talk_to_actor2 = это анимация. Там ставь свою

 

Ничто не вечно под луной.

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


Ссылка на сообщение

byerer, добавить громкости музыке тока через обработку в X-Ray SDK.

Ничто не вечно под луной.

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


Ссылка на сообщение

Решил начать разбираться со сложными смарт-террейнами (раньше делал только general_lager). Ловлю постоянный вылет на подходе к смарту (видимо как только попадает он в онлайн):

 

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: ...:\games\gsc\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


stack trace:

 

 

Что прописано в gulag_escape.ltx:

;---------------------------------
;-------- Новый лагерь ----------
;---------------------------------

[logic@esc_new_lager_npc1_walk]
active = walker@esc_new_lager_npc1

[walker@esc_new_lager_npc1]
path_walk = npc1_walk

[logic@esc_new_lager_npc1_kamp1]
active = kamp@esc_new_lager_kamp1

[kamp@esc_new_lager_kamp1]
center_point = npc1_kamp
path_walk = camp_center_task
soundgroup = esc_new_lager
meet = meet@lager

[logic@esc_new_lager_npc2_guard]
active = guard@esc_new_lager_npc2

[guard@esc_new_lager_npc2]
path_walk = npc2_walk
path_look = npc2_look

[logic@esc_new_lager_npc2_kamp1]
active = kamp@esc_new_lager_kamp1

 

 

Что прописано в gulag_escape.script:

 

if type == "esc_new_lager" then
               t = {section = "logic@esc_new_lager_npc1_walk",
            idle = 0, prior = 5, state = {0},
            in_rest = "", out_rest = ""}
        table.insert(sj, t)

        t = {section = "logic@esc_new_lager_npc1_kamp1",
            idle = 0, prior = 5, state = {1},
            in_rest = "", out_rest = ""}
        table.insert(sj, t)
        
        t = {section = "logic@esc_new_lager_npc2_guard",
            idle = 0, prior = 5, state = {0},
            in_rest = "", out_rest = ""}
        table.insert(sj, t)

        t = {section = "logic@esc_new_lager_npc2_kamp1",
            idle = 0, prior = 5, state = {1},
            in_rest = "", out_rest = ""}
        table.insert(sj, t)
    end

 

 

Чую накосячил где-то в распределении работ) Помогите новичку пожалуйста.

 

p.s. - все пути которые нужны, в way_escape присутствуют.

Изменено пользователем KitkaT.Net

Ничто не вечно под луной.

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


Ссылка на сообщение

Так, вот работы:

 

if type == "esc_new_lager" then
        return function(gulag)
            if not db.actor then
                return gulag.state
            end
            if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then
                    return 0  
            else
                return 1  
            end
        end
    end

 

 

[esc_new_lager_npc1_kamp]
points = p0
p0:name = wp00
p0:position = -21.459390640259,2.4766421318054,72.145248413086
p0:game_vertex_id = 87
p0:level_vertex_id = 255507


[esc_new_lager_npc1_look]
points = p0
p0:name = wp00|t=10000
p0:flags = 0x1
p0:position = 3.7962260246277,2.4894599914551,71.421409606934
p0:game_vertex_id = 89
p0:level_vertex_id = 280207


[esc_new_lager_npc1_walk]
points = p0,p1,p2
p0:name = wp00
p0:position = 2.4627683162689,2.4790153503418,63.453559875488
p0:game_vertex_id = 89
p0:level_vertex_id = 279500
p0:links = p1(1)

p1:name = wp01
p1:position = -11.326374053955,2.4797053337097,66.62703704834
p1:game_vertex_id = 88
p1:level_vertex_id = 265797
p1:links = p2(1)

p2:name = wp02
p2:flags = 0x1
p2:position = -9.2513465881348,2.5201017856598,70.700996398926
p2:game_vertex_id = 88
p2:level_vertex_id = 267836
p2:links = p0(1)

[esc_new_lager_npc2_look]
points = p0
p0:name = wp00
p0:flags = 0x3
p0:position = 15.449903488159,2.4502758979797,62.299892425537
p0:game_vertex_id = 89
p0:level_vertex_id = 293062

[esc_new_lager_npc2_walk]
points = p0
p0:name = wp00
p0:flags = 0x3
p0:position = 3.8680720329285,2.4798147678375,61.760292053223
p0:game_vertex_id = 89
p0:level_vertex_id = 280908

[esc_new_lager_npc1_kamp_task]
points = p0
p0:name = wp00
p0:position = -21.459390640259,2.4766421318054,72.145248413086
p0:game_vertex_id = 87
p0:level_vertex_id = 255510

 

 

йеес!!)) Все заработало, спасибо большое :)

 

Добавлено через 23 мин.:

Назрел еще один вопрос :)

На викисталкере есть такая функция:

 

function fill_tbl(section, idle, prior, states, squad, group, in_rest, out_rest, online, gulag_name)
    local tbl = {}

    tbl.section = "logic@" .. gulag_name .. "_" .. section
    tbl.idle = idle
    tbl.prior = prior    
    tbl.state = {}

    for index = 1, #states do
        table.insert(tbl.state, states[index])
    end

    tbl.squad = squad
    tbl.group = group
    tbl.in_rest = in_rest
    tbl.out_rest = out_rest
    tbl.online = online
    return tbl
end

 

 

Куда ее нужно вставить чтобы она заработала ? В скрипты вроде "gulag_escape" ?

 

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

 

Ссылку на статью, пожалуйста!

ColR_iT

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

Ничто не вечно под луной.

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


Ссылка на сообщение

Йа ссылко

 

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

 

 

Ничто не вечно под луной.

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


Ссылка на сообщение

Пытаюсь заселить Скадовск, на перенесенной в ТЧ мапе. Можно ли реализовать открывание двери при приближении сталкеров к ней ? Насколько я помню, на Янтаре перед Кругловым дверь открывалась сама. Я уже понял что надо поставить рестрикторы перед дверью и за дверью, а вот что дальше ? Выдавать инфопоршн, на присутствие сталкера (как?), а в логике двери сделать проверку ?

Ничто не вечно под луной.

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


Ссылка на сообщение

Вот еще один неясный вопросец:)

 

Поставил смарт-террайн general_lager на локации из костяпака. (А конкретно на предбаннике):

 

[7188]

; cse_abstract properties
section_name = smart_terrain
name = predbannik_mil_vorota
position = -525.90728759766,18.635328292847,227.23803710938
direction = -0.0412191227078438, 0.00485695945098996, 0.117325648665428
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = 3880
distance = 2.09999990463257
level_vertex_id = 133668
object_flags = 0xffffffbe
custom_data = <<END
[smart_terrain]
type = general_lager
capacity = 13
communities = military
END

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

; cse_alife_space_restrictor properties
restrictor_type = 0

; se_smart_terrain properties

 

 

Создал секцию респавна:

 

[7187]

; cse_abstract properties
section_name = respawn
name = predbannik_soldier_respawn
position = 119.52111816406,8.4225988388062,-17.136754989624
direction = 0, 0, 0
version = 118
script_version = 6

; cse_alife_object properties
game_vertex_id = 4019
distance = 4.19999980926514
level_vertex_id = 1135044
object_flags = 0xffffff3e
custom_data = <<END
[respawn]
respawn_section = agr_soldier_veteran,5,agr_soldier_regular,10
max_spawn = 15
idle_spawn = often
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

 

 

Поставил time_factor в alife.ltx на 396, выждал два дня - реакции ноль. Как не было солдатиков так и нетю. Вопрос знатокам - почему ? Почему смарт мало того что не забирает солдат с других локаций, дак он еще и не видит респавнер под боком.

 

Добавлено через 34 мин.:

И да, в файлах smart_terrain_presets.ltx, general_lager.ltx возможность респавна прописал.

Ничто не вечно под луной.

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


Ссылка на сообщение

Ок, пишу здесь. (Просто подумал, что там уже просто в скрипте где-то ошибка и поэтому туда запостил)

 

function se_respawn:CreateObject(sProbability, sSpawnSection)
    if math.random(100) > tonumber(sProbability) then
        return
    end    
    
        
    local iSum = 0
    
    --[[
    --    Вычитываем секцию для спавна, по указанной вероятности. 
    --]]
    if not sSpawnSection then    
        for k,v in pairs(self.tSectionsToRespawn) do
            iSum = iSum + v.probability
        end
        
        iSum = math.random(0, iSum)
        for k,v in pairs(self.tSectionsToRespawn) do
            iSum = iSum - v.probability            
            if iSum <= 0 then
                sSpawnSection = v.section
                break
            end
        end
    end
    
    if sSpawnSection == nil then return false end        
    
    if self.iParent then
        local oParent = alife():story_object(self.iParent)
        if oParent == nil then
            abort("SPAWNING [%s], cant find parent with SID [%s]", self:name(), self.iParent)
            return
        end

        if oParent.id and self.bItemSpawn then
            local oItem = alife():create(sSpawnSection,    
                self.position,
                self.m_level_vertex_id,    
                self.m_game_vertex_id,
                oParent.id)                        
            table.insert(self.tSpawnObject, oItem.id)
            return true
        end
    else
        local oCreature = alife():create(sSpawnSection,    
            self.position,
            self.m_level_vertex_id,    
            self.m_game_vertex_id)    
        
        if self.sName==nil then
            if self.tSpawnProp[sSpawnSection].isCheck == true then
                oCreature:brain():update()
                local iSmartTerrainID = oCreature:smart_terrain_id()            
                if iSmartTerrainID ~= 65535 then        
                    table.insert(self.tSpawnObject, oCreature.id)
                    
                    return true
                else                    
                    alife():release(oCreature, true)
                    printf("Заспавнили, но удалились: "..tSpawnObject)- добавил эту строчку. Почему вылетает?
                    return false
                end
            end                        
            table.insert(self.tSpawnObject, oCreature.id)
            return true
        else    
            if self.sLogic ~= "nil" then
                if IsMonster(oCreature) then
                    local tData = net_packet_read.GetMonster(oCreature)                    
                    tData.sCustomData = "[logic]\ncfg = scripts\\"..self.sLogic..".ltx" 
                    net_packet_write.SetMonster(tData, oCreature)
                elseif IsStalker(oCreature) then    
                    local tData = net_packet_read.GetStalker(oCreature)
                    tData.sCustomData = "[logic]\ncfg = scripts\\"..self.sLogic..".ltx" 
                    net_packet_write.SetStalker(tData, oCreature)
                end
            end
            table.insert(self.tSpawnObject, oCreature.id)
            return true
        end
    end
end

 

 

Подскажите почему? Или скажите, как правильно определить какие сталкеры заспавнились и удалились.

 

p.s. Artos, проверил, у спавнящихся сталкеров кастомдаты нет. Но когда пробовал установить кастомдату самого респавна

 

[smart_terrains]
respawn_check = false

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

Ничто не вечно под луной.

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


Ссылка на сообщение

А как в функцию добавить паузу? Чтобы следующее например отключение инфопоршня произошло через секунду после его получения?

give_info("zamer_dozimetr")
????????????????????????????		
disable_info("zamer_dozimetr")

Ничто не вечно под луной.

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


Ссылка на сообщение

@Kondr48, пытаюсь запилить миссию в которой нужно некоторое время простоять в рестрикторе для замера радиации. Начало замера производится при помощи использования предмета в инвентаре.

  • Нравится 1

Ничто не вечно под луной.

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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