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

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


Halford

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

(изменено)

Всем доброго времени суток. Помогите решить проблему.

Я добавил в игру еду и решил сделать чтобы НПС у костра ели новою еду (как по стандарту хлеб,колбасу...) 

Для этого работал в xr_kamp.script

-- есть хлеб
if npc:object("bread") then
    self.npc[npc_id].states["eat_bread"] = true
else
    self.npc[npc_id].states["eat_bread"] = false
end
-- есть новою еду
if npc:object("new_food") then
    self.npc[npc_id].states["eat_bread"] = true
else
    self.npc[npc_id].states["eat_bread"] = false
end

Для новой еди взял анимацию eat_bread.

В результате НПС ко рту подносят пустую руку и типа едят , то есть моделька новой еди не отображается . Но сразу говорю с моделью все в порядке . Например если модель переименовать в bred.ogf , то вместо хлеба нпс нормально едят новую еду. Помогите пожалуйста решить проблему. Заранее благодарю. :)

 

Еда, которую они будут есть, должна быть у них в инвентаре. Ты её им прописал?

ColR_iT

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

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


Ссылка на сообщение
(изменено)

Только , что дописал , но всё равно не работает   :(
 

Новую игру начинал?

ColR_iT



Да , начинал



Да , новою еду прописал почти каждому сталкеру

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

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


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

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

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


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

Свою проблему решил. Надо было поработать еще в state_lib.scriptstate_mgr_animation.scriptstate_mgr_animation_list.script , xr_rest.script и использовать новую анимацию , а не - eat_bread.

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


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

Всем привет сталкеры.) Решил создать НПС с логикой охранника (схема zoneguard ). Заспавнил сталкера , создал смартеррейн и 2 спейс рестриктора . Также прописал в путях walk , look.

При загрузке происходит вылет. 

Expression : fatal error

Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: d:\games\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

 

Вот посмотрите alife_l01_escape и логика нпс : 

[871]
; cse_abstract properties
section_name = stalker
name = esc_noobik
position = -213.266388,-7.910840,-23.080528
direction = 0,0,0

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_noobik

; cse_alife_object properties
game_vertex_id = 69
distance = 0
level_vertex_id = 40075
object_flags = 0xffffffbf
custom_data = <[smart_terrains]
esc_ukr = true

[logic]
cfg = scripts\guard_logic.ltx
END
story_id = 10000

; cse_visual properties
visual_name = actors\soldier\soldier_beret_1

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 1
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -213.266388,-7.910840,-23.080528
upd:o_model = 0
upd:o_torso = 0.028013030067086,0,0.9996075630188
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 1

; cse_alife_monster_abstract properties

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 1,2,2,1,2
predicate4 = 0,1,1,1

; cse_ph_skeleton properties

upd:start_dialog =

; se_stalker properties


[872]
; cse_abstract properties
section_name = space_restrictor
name = esc_noobik_guard_kill_zone
position = -235.432271,-11.955380,-8.549372
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 67
distance = 0
level_vertex_id = 20205
object_flags = 0xffffff3e


; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 22.37,0,0
shape0:axis_y = 0,22.37,0
shape0:axis_z = 0,0,22.37
shape0:offset = 0,0,0
; cse_alife_space_restrictor properties
restrictor_type = 3

[873]
; cse_abstract properties
section_name = space_restrictor
name = esc_noobik_guard_warn_zone
position = -194.129272,-5.444299,-25.573578
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 69
distance = 0
level_vertex_id = 58089
object_flags = 0xffffffbe

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 30.17,0,0
shape0:axis_y = 0,30.17,0
shape0:axis_z = 0,0,30.17
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3


 

[logic]
active = zoneguard

[zoneguard]
path_walk = esc_noobik_guard_walk1
path_look = esc_noobik_guard_look1
zone_guard = esc_noobik_guard_kill_zone
zone_warn = esc_noobik_guard_warn_zone
no_move = true
team = guard1

 

 

Подскажите  пожалуйста , что я неправильно делаю . Заранее благодарю. (Я думаю, что вылет происходит из-за того , что у меня в спейс рестрикторах нет логики. Что нужно написать , чтобы при входе в спейс рестр. актора убивали?).

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


Ссылка на сообщение
(изменено)

а еще smart_terrain (забыл скопировать сюда)

[870]


; cse_abstract properties
section_name = smart_terrain
name = esc_ukr
position = -213.721481,-7.887858,-22.157705
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 69
distance = 9.09999942779541
level_vertex_id = 40076
object_flags = 0x==3e
custom_data = <[smart_terrain]
type = esc_ukr
capacity = 1
squad = 1
groups = 1
END

; cse_shape properties (параметры шейпа объекта)
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 6.55957102775574

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties

 

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

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


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

Всем привет. Не могу заспавнить нпс на локации Бар . Делаю все по уроку из stalkerin`a . Вылета нет и НПС тоже нет , все перерыл - нпс просто не появляется . А на локации Кордон все работает , нпс спавнится. Может кто встречался з этой проблемой? Буду благодарен за помощь. (Сталкера создаю в alife_l05_bar.ltx и пути тоже в way_l05_bar.ltx)

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


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

Да , координаты и вертексы точно верные . Работал с помощью ACDC  , вот урок http://stalkerin.gameru.net/wiki/index.php?title=All.spawn._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_NPC , логика walker  , path_walk и path_look . Что странно что на Кордоне все работает...

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


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

подскажите пожалуйста какие строки в конфигах оружия отвечают за приселивание через мушку?

За положение оружия в режиме прицеливания отвечают эти строчки: 
 
zoom_offset = OX,OY,OZ 
zoom_rotate_x = RX 
zoom_rotate_y = RY

Всем привет ребята. Может кто-то знает как реализовать смену моделей после какого-то действия через скрипт в сталкер тч  ? Примерно как в моде :"Худ ТЧ: Смена рук при смене костюма " , только нужно чтобы руки не прятались когда меняешь костюм/модель. Заранее благодарю.

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


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

А может еще кто-то знает как заскриптить смену модели не таким способом как в моде "Худ ТЧ: Смена рук при смене костюма " где меняються все модели оружия , а мне надо только выборочно один предмет. Скрипт Кирака плохо понял.

 

local exowpnid
local restore_slot
local suit_last_sect
local g_change
local re_sect
local wdat = {}
local upd = 0


local suit_table = {
no_outfit = "noou_",
novice_outfit = "ntrl_",
stalker_outfit = "ntrl_",
scientific_outfit = "dolm_",
exo_outfit = "ntre_",
bandit_outfit = "bndl_",
killer_outfit = "dolm_",
monolit_outfit = "ntrl_",
military_outfit = "dolm_",
specops_outfit = "milm_",
svoboda_light_outfit = "milm_",
svoboda_heavy_outfit = "milm_",
dolg_outfit = "bndl_",
dolg_scientific_outfit = "dolm_",
ecolog_outfit = "ecol_",
protection_outfit = "ecoh_",
outfit_novice_m1 = "ntrl_",
outfit_stalker_m1 = "ntrl_",
outfit_stalker_m2 = "ntrl_",
outfit_exo_m1 = "ntre_",
outfit_bandit_m1 = "bndl_",
outfit_killer_m1 = "dolm_",
outfit_specnaz_m1 = "milm_",
outfit_svoboda_m1 = "milm_",
outfit_dolg_m1 = "bndl_",
mp_exo_outfit = "ntre_"
}
--[[Состав:
noou=Нет костюма, свитер
ntrl=Оригинал, Новичок
ntrm=Оригинал, Нейтрал
ntrs=Чёрный кисть закрыты, Сева Нейтрал учёный
ntre=Экзо
bndl=Чёрный кисть открыта, Бандит
kilm=Чёрный кисть закрыты, Наёмники
monm=Оригинал, Монолит
milm=Зелёный защитный, Военный
milh=Зелёный защитный, Спецназ
svom=Зелёный защитный, Свобода Лёгкий
svoh=Зелёный защитный, Свобода Тяжёлый
dolm=Чёрный кисть закрыты, Долг
dols=Чёрный кисть закрыты, Долг учёный
ecol=Жёлтый кисть закрыты, учёный
ecoh=Зелёный кисти закрыты, укреплённый учёный
Оригинал+ЖКЗ+ЗКЗ+экзо+ЧКЗ+ЧКО+ЗЗ+НК]]


function change_pattern(str,pat1,pat2)
-- замена в строке str n-го фрагмента pat1 на фрагмент pat2
if not pat2 then pat2 = "" end -- если pat2 не задано, фрагмент pat1 просто вырезается
local i,o = string.find(str,pat1)
if not i then return str end
local str_i = string.sub(str,1,i-1)
local str_o = string.sub(str,o+1,-1)
return str_i..pat2..str_o
end


function insert_pattern(str,pat,pos)
if not pat or not pos then return str end
-- if pos < 0 then pos = pos + string.len(str) + 1 end
local str_i = string.sub(str,1,pos-1)
local str_o = string.sub(str,pos,-1)
return str_i..pat..str_o
end


function update()
if exowpnid ~= nil then -- если условие выполняется, значит на прошлом апдейте меняли оружие, надо его подобрать и выйти
upd = upd + 1
local weapon = level.object_by_id(exowpnid)
if weapon then
db.actor:transfer_item(weapon,db.actor)
exowpnid = nil
upd = 0
wdat = {}
re_sect = nil
else
if upd > 100 then
get_console():execute ("load exo_weapons.script line 66: re-spawning") 
get_console():execute ("flush") 
alife():release(alife():object(exowpnid),true)
local pos = device().cam_pos
pos.x = pos.x + 0.5
local sobj = alife():create(re_sect, pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
if sobj then
exowpnid = sobj.id
weap_data.set_weapon_data(wdat,sobj)
re_sect = ch_sect
upd = 0
end
end
end
return
end


if restore_slot then
db.actor:activate_slot(restore_slot)
restore_slot = nil
end


local suit = db.actor:item_in_slot(6)
local active_sect, suit_sect
local act_slot = db.actor:active_slot()
local active = db.actor:item_in_slot(act_slot)
-- костюм
if suit then
suit_sect = suit:section()
else
suit_sect = "no_outfit"
end
-- [[
if not suit_last_sect then
suit_last_sect = suit_sect
end
if suit_last_sect ~= suit_sect then -- костюм изменился
if act_slot == 3 then -- если активны гранаты
db.actor:activate_slot(1)
g_change = true
return
else
change_grens(suit_sect) -- спокойно меняем
if g_change then
db.actor:activate_slot(3)
g_change = nil
end
end
end
suit_last_sect = suit_sect


-- оружие
local pref_len = 0 -- болт
if active then
active_sect = active:section()
if string.sub(active_sect,1,8) == "grenade_" then -- гранаты
pref_len = 8
elseif string.sub(active_sect,1,4) == "wpn_" then -- все остальное
pref_len = 4
end
else
return -- Если нет предмета в активном слоте, то и менять нечего, выход
end
local mod_section, mod_pattern
if string.len(active_sect) < (pref_len + 6) or not system_ini():section_exist(string.sub(active_sect,1,pref_len)..string.sub(active_sect,(pref_len + 6),-1)) then
mod_section = false -- немодифицированный вариант
mod_pattern = ""
else
mod_section = true -- модифицированный вариант
mod_pattern = string.sub(active_sect,(pref_len + 1),(pref_len + 5))
end
local ch_sect, ch_pattern
ch_pattern = suit_table[suit_sect] or "ntrl_"
if mod_pattern == ch_pattern then
return -- модификация оружия соответствует костюму
end
if mod_section then -- оружие - модифицированный вариант
ch_sect = change_pattern(active_sect,mod_pattern,ch_pattern)
else 
ch_sect = insert_pattern(active_sect,ch_pattern,(pref_len + 1))
end
if not system_ini():section_exist(ch_sect) then -- если заменять надо бы, но не на что, то выходим
return
end


-- если надо менять и есть на что - меняем
if act_slot == 1 or act_slot == 2 then -- пистолет или автомат
local wobj = alife():object(active:id())
wdat = weap_data.get_weapon_data(wobj)
alife():release(wobj,true)
local pos = device().cam_pos
pos.x = pos.x + 0.5
local sobj = alife():create(ch_sect, pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
if sobj then
exowpnid = sobj.id
weap_data.set_weapon_data(wdat,sobj)
re_sect = ch_sect
end
restore_slot = act_slot
elseif act_slot == 3 then -- гранаты
-- ничего не делаем, гранаты меняются в другом месте
elseif act_slot == 5 then -- болт. у этой сволочи нет серверного объекта, просто выбрасываем
db.actor:drop_item(active)
alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
restore_slot = 5
else -- бинокль, нож
local wobj = alife():object(active:id())
alife():release(wobj,true)
alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
restore_slot = act_slot
end
end


function change_grens_on_take(item)
local suit = db.actor:item_in_slot(6)
local suit_sect
if suit then
suit_sect = suit:section()
else
suit_sect = "novice_outfit"
end
local ch_pattern = suit_table[suit_sect] or "ntrl_"
if (db.actor:active_item() == nil or (db.actor:active_item() ~= nil and db.actor:active_item():id() ~= item:id())) then
local active_sect = item:section()
local mod_section, mod_pattern
if string.len(active_sect) < 14 or not system_ini():section_exist(string.sub(active_sect,1,8)..string.sub(active_sect,14,-1)) then
mod_section = false -- немодифицированный вариант
mod_pattern = ""
else
mod_section = true -- модифицированный вариант
mod_pattern = string.sub(active_sect,9,13)
end
if mod_pattern ~= ch_pattern then
local ch_sect
if mod_section then -- оружие - модифицированный вариант
ch_sect = change_pattern(active_sect,mod_pattern,ch_pattern)
else 
ch_sect = insert_pattern(active_sect,ch_pattern,9)
end
if system_ini():section_exist(ch_sect) then -- если заменять надо, и есть на что, то меняем
local wobj = alife():object(item:id())
alife():release(wobj,true)
alife():create(ch_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
end
end
end


function change_grens()
db.actor:iterate_inventory(
function(dummy, item)
if string.sub(item:section(),1,8) == "grenade_" then
local wobj = alife():object(item:id())
alife():release(wobj,true)
alife():create(item:section(), db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
end
,db.actor)
end

 

 

 .  

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


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

Всем привет ребята. Интересует вот такой вопрос : Какая функция отвечает за медленное движение ГГ и звук одышки, когда здоровье ГГ меньше 0.2 (примерно) ? 

Буду очень благодарен.

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


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

, Помню у меня пропали звуки шагов  после создания нового визуала для ГГ и неправильной настройки костей.

  • Нравится 1

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


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

 

Просто у меня почему-то эти текстуры не используются, вернее всё время высвечивается мужик в противогазе

db.actor:give_game_news(text, "ui\\ui_iconsTotal",Frect():set(663,146,193,104), 0, 3000)                          -- где Frect():set(x,x,x,x) -    координаты иконки

  • Полезно 1

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


Ссылка на сообщение
(изменено)

Попробуй этот эффект level.add_cam_effector("camera_effects\\dream.anm"1false""

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

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


Ссылка на сообщение
(изменено)

@AndrewMor, Может так попробуй.

 

xr_effects.script:

 

 

function show_static()
local hud = get_hud()
local static_rad = hud:GetCustomStatic("cs_radiation_danger")
if static_rad == nil then
      hud:AddCustomStatic("cs_radiation_danger", true)
      hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger")
end

end

function hide_static()
local hud = get_hud()
local static_rad = hud:GetCustomStatic("cs_radiation_danger")
  if static_rad ~= nil then
       hud:RemoveCustomStatic("cs_radiation_danger")
  end
end

 

 

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

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


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

Тоже этим занимался. Но я создавал просто спейсрестриктор и там ловил выстрел от топора. Мне интересно а можно ли как-то отследить хит по дереву от ГГ? Или отследить насколько близко ГГ к деревьям ?

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


Ссылка на сообщение
(изменено)

Но можно заспавнить невидимые фейки в деревья, как например у инвентарных ящиков и уже от них измерять. 

Оо вот это уже интересно, но вот спавнить фейк в каждое дерево чувствую будет долго.

Не поделишься кодами решения?

Сейчас кода и не найду, это давно писал. 

Я просто создавал спейсрестриктор в all.spawn`e и проверял, если гг в этой зоне, в руках топор и происходит выстрел, то спавним дрова в инвентарь. 

 

Главное, для меня, чтобы это происходило когда ГГ повёрнут именно к центру рестра.

Это я не делал. 

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

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


Ссылка на сообщение
(изменено)

@Worklad, gamedata\sounds\scripts\magnitofon\magnitofon_2.ogg . Заменяй на твой музыку.

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

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


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

AMK-Team.ru

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