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

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


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

 

 

...вышел с Кордона, вернулся на АТП бандюки...

Респавнер на текущей локации не работает, если явно не указано работать онлайн. Соответственно, выйдя с локации, вы запускаете респавнеры, находящиеся на Кордоне.

 

 

...может ещё что нужно править.

Если речь идёт об оригинале ТЧ, то вот эта строка: if self.respawn_time < game.get_game_time() then, работает пока вы находитесь на локации. Стоит вам перейти на другую локацию или перезагрузится, параметр self.respawn_time принимает значение game.CTime(), что явно меньше текущей даты. Это происходит потому, что сам параметр self.respawn_time не сохраняется.

Посмотрите как это исправлено в "Народной Солянке".

  • Нравится 3

Вообще-то я белая и пушистая...

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

Такой вопрос возник: можно ли удалить аномалию, заспавненную через all.spawn, по выдаче инфопоршня?

 

Или возможно ли в секции спавна аномалии прописать условие спавна?

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

Сталкер - наше всё!

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

Доброго времени суток. Заранее приношу извинения, если не туда пишу. Играю в Народную солянку + ООП. Получил обыкновенный радар артефактов, вставил в пистолетный слот, а он не работает. Не пищит, хоть и стою рядом с артом. Вот и подумал может надо в файлах что-то подправить по этому поводу. Заранее благодарю.

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

Или возможно ли в секции спавна аномалии прописать условие спавна?

Скорее всего возможно, вот пример(сам не проверял, но работать должно)

[153]

; cse_abstract properties

section_name = zone_mosquito_bald_weak

name = esc_zone_mosquito_bald_weak

position = -62.7365341186523,20.1926517486572,169.534149169922

direction = -0.367405563592911,0.0629953369498253,0.17383885383606

 

; cse_alife_object properties

game_vertex_id = 165

distance = 39.2000007629395

level_vertex_id = 213209

object_flags = 0xffffff3e

custom_data = <<END

[spawner]

cond = {+название_поршня}

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 5.02300071716309

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

; cse_alife_custom_zone properties

max_power = 0

 

; cse_alife_anomalous_zone properties

offline_interactive_radius = 30

artefact_spawn_count = 32

 

; se_zone_anom properties

 

 

А чем мотивируется утверждение, если ты не проверял? Догадками?

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий

Скорее всего возможно, вот пример(сам не проверял, но работать должно)

Я сам не проверял, потому и спросил, может кто ответить точно. Просто вроде ни в одной секции аномалий такого не встречал. Будем пробовать.

 

Ну вот, попробовал и могу сказать: не работает такой способ. Аномалия спавнится в любом случае, независимо от того, выдан поршень или нет.

И не будет. Скрипты не читают секцию spawner в объектах отличных от НПС или мобов.

ColR_iT

Тогда такой вопрос: есть аномалия, спавненная скриптом. Как ее скриптом убрать? Известны ее координаты и вертексы.

Масса способов: заспавнить уникальную секцию или запомнить где-то переменную с id этой аномалии, как самое простое.

ColR_iT

 

 

 

Масса способов: заспавнить уникальную секцию или запомнить где-то переменную с id этой аномалии, как самое простое. ColR_iT

А примерчик не можете привести? Или ссылочку.

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

Сталкер - наше всё!

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

И снова я со своим АТП и бандитами-военными. Мне подсказали, что надо в gulag_escape.script сменить bandit на military...Я заглянул. Но думаю, что это не совсем то, что надо. Вот например кусок скрипта:

 

--' Бандиты на фабрике


if type == "esc_fabrika_bandit" then
-- часовые днём
t = { section = "logic@esc_fabrika_bandit_walker1",
idle = 0,
prior = 2, state = {0},
in_rest = "esc_prison_zone", out_rest = "esc_fabrika_bandit_space_restrictor"
}
table.insert(sj, t)
t = { section = "logic@esc_fabrika_bandit_walker2",
idle = 0,
prior = 2, state = {0},
in_rest = "esc_prison_zone", out_rest = "esc_fabrika_bandit_space_restrictor"
}
table.insert(sj, t)
t = { section = "logic@esc_fabrika_bandit_walker3",
idle = 0,
prior = 2, state = {0},
in_rest = "esc_prison_zone", out_rest = "esc_fabrika_bandit_space_restrictor"
}

 

 

Если тут что-то сменить с bandit, на military, я думаю, кроме вылета ничего не получу=/.. Что же все таки сделать, чтобы на АТП Шустрого пленили не бандиты, а военные, и при том никуда не расходились и Шустрого не губили?(Понятнее чтобы было, читайте вопрос на 577 стр.).

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

В продолжение темы: вот скрипт, который спавнит аномалию. Как здесь вписать ее id? Чтобы он сохранялся и читался из нет-пакета?

function get_story_id_not_replay()
   local ST
   ST = xr_logic.pstor_retrieve(db.actor, "ScriptAnomId", 0)
   if type(ST) ~= "number" or ST == nil then
     ST = 9000
     xr_logic.pstor_store(db.actor, "ScriptAnomId", ST)
  end
  if type(ST) == "number" or ST ~= nil then
    ST = ST + 1
    xr_logic.pstor_store(db.actor, "ScriptAnomId", ST)
  end
  return tonumber(ST)
end

function create_anom(name_anom, posit_anom, lvid_anom, gvid_anom, radius_anom, power_anom)
   local obj = alife():create(name_anom, posit_anom, lvid_anom, gvid_anom)
-----------------------write----------------------
local packet = net_packet()
obj:STATE_Write(packet)
-----------------------load-----------------------
-- cse_alife_object
local game_vertex_id = packet:r_u16()
local distance = packet:r_float()
local direct_control = packet:r_u32()
local level_vertex_id = packet:r_u32()
local object_flags = packet:r_u32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_u32()
local spawn_story_id = packet:r_u32()
-- cse_shape
local shape_count = packet:r_u8()
for i=1,shape_count do
local shape_type = packet:r_u8()
if shape_type == 0 then
-- sphere
local center = packet:r_vec3()
local radius = packet:r_float()
else
-- box
local box = packet:r_matrix()
end
end
-- cse_alife_space_restrictor
local restrictor_type = packet:r_u8()
-- cse_alife_custom_zone
local max_power = packet:r_float()
local owner_id = packet:r_u32()
local enabled_time = packet:r_u32()
local disabled_time = packet:r_u32()
local start_time_shift = packet:r_u32()
-- cse_alife_anomalous_zone
local offline_interactive_radius = packet:r_float()
local artefact_spawn_count = packet:r_u16()
local artefact_position_offset = packet:r_u32()
-- se_zone_anom
local last_spawn_time_present = packet:r_u8()
if (string.find (name_anom, 'zone_zharka_static') ~= nil
or string.find (name_anom, 'zone_witches_galantine') ~= nil
or string.find (name_anom, 'zone_mosquito_bald') ~= nil
or string.find (name_anom, 'zone_mincer') ~= nil
or string.find (name_anom, 'zone_gravi_zone') ~= nil
or string.find (name_anom, 'zone_buzz') ~= nil )
and packet:r_elapsed() ~= 0 then
abort("left=%d", left)
end
---------------------------save--------------------
-- cse_alife_object
packet:w_begin(game_vertex_id)
packet:w_float(distance)
packet:w_u32(direct_control)
packet:w_u32(level_vertex_id)
object_flags = bit_not(193)
packet:w_u32(object_flags)
packet:w_stringZ(custom_data)
packet:w_u32(get_story_id_not_replay())
packet:w_u32(get_story_id_not_replay())
-- cse_shape
packet:w_u8(1) -- количество фигур
packet:w_u8(0) -- тип фигуры: сфера
packet:w_vec3(vector():set(0, 0, 0))
if radius_anom ~= nil then
packet:w_float(radius_anom)
else
packet:w_float(1.0)
end
-- cse_alife_space_restrictor
packet:w_u8(restrictor_type)
-- cse_alife_custom_zone
if power_anom ~= nil then
packet:w_float(power_anom)
else
packet:w_float(max_power)
end
packet:w_u32(owner_id)
packet:w_u32(enabled_time)
packet:w_u32(disabled_time)
packet:w_u32(start_time_shift)
-- cse_alife_anomalous_zone
packet:w_float(offline_interactive_radius)
packet:w_u16(artefact_spawn_count)
packet:w_u32(artefact_position_offset)
-- se_zone_anom
packet:w_u8(last_spawn_time_present)
------------------------read------------------------
packet:r_seek(0)
obj:STATE_Read (packet, packet:w_tell())
end
-----------------------------------спавним аномалии-----------------------------------
function spawn_anom1()
this.create_anom('zone_witches_galantine_strong', vector():set(132.84954833984,8.5610275268555,-19.224378585815),1152755,4019, 3, 0.7)
end

 

 

Сталкер - наше всё!

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

PowerMonger

в gulag_escpase в конце у меня уже поставлено на бандиты вот

if gulag_type == "esc_bridge" then

return npc_community == "bandit"

end

 

if gulag_type == "esc_specnaz" then

return se_obj:profile_name() == "esc_soldier_specnaz"

end

 

if gulag_type == "esc_blokpost" then

return npc_community == "straj"

end

 

if gulag_type == "esc_killers" then

return npc_community == "killer"

end

 

if gulag_type == "esc_lager" then

return npc_community == "stalker"

end

 

if gulag_type == "esc_fabrika_bandit" then

return npc_community == "military"

end

 

if gulag_type == "esc_ambush" then

return npc_community == "bandit"

end

 

if gulag_type == "esc_corps" then

return npc_community == "stalker"

end

 

if gulag_type == "esc_assault" then

return npc_community == "stalker"

end

 

if gulag_type == "esc_stalker_camp" then

return npc_community == "stalker"

end

 

 

return false

end

 

  • Нравится 1
Ссылка на комментарий

@AndrewMor, Тут ты можешь можешь только все zone_witches_galantine_strong удалить. Как вариант можешь создать уникальную аномалию, или:

 

по имени:


for a=10,65635,1 do
local obj=alife():object(a)
if obj and string.find(obj:name(),"имя_аномалии") then -- name = из all.spawn

-- Если надо удалить все, то используй obj:section_name()
alife():release(obj,true)
end
end

 

Изменено пользователем ins33
Ссылка на комментарий

 

 


Тут ты можешь можешь только все zone_witches_galantine_strong удалить. Как вариант можешь создать уникальную аномалию, или:

Мне нужно удалить именно конкретные аномалии, которые я буду спавнить скриптом. Дать им уникальные id'ы, а потом по этим id/ам их удалить, также скриптово.

 

Хотя я могу эти аномалии и через all.spawn заспавнить, а удалить скриптово. Так даже удобнее будет. Спасибо, буду пробовать.

Сталкер - наше всё!

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

@AndrewMor, Поздно прочитал, тогда используй obj:section_name()

Только так, будет удалять все аномалии с такой секцией.

Изменено пользователем ins33
Ссылка на комментарий

Есть тут 1 проблема: 

После убийства пси собаки (которую я заспавнил на новой локации) я получаю вылет: 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...Oaie ?a?iiauey\gamedata\scripts\sim_statistic.script:12: attempt to index global 'xr_statistic' (a nil value)

Как исправить?

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

@MGS

ну очевидно же. В скрипте xr_statistic, скорее всего, синтаксическая ошибка.

Изменено пользователем Капрал Хикс
Ссылка на комментарий

Здравствуйте, сталкеры, и удачи, как в Зоне, так и в моддинге.

 

Я очень рад, что узнал об этом сайте вовремя, одновременно начав ковыряться в файлах S.T.A.L.K.E.R.'а. Раньше (года три назад) хорошо разбирался в конфигах и сделал небольшую модификацию, но потом забросил игру. Теперь снова решил окунуться с головой во вселенную S.T.A.L.K.E.R.'а. Но вот беда: за это время я забыл, где что находится и как делается... досада. Поэтому последовал вопрос: как сделать использование предметов в ТЧ и ЧН как в ЗП? Не мгновенным восстановлением здоровья аптечками, а постепенным и с возможностью установки времени лечения в конфиге. Сам в скриптах игры новичок, поэтому не злитесь, если глупыми вопросами достану.

 

Если не в ту тему попал или вопрос уже задавался, извините, ради Бога. Искал, искал, но ничего не нашёл. Заранее благодарен за помощь.

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

Заспавнил дверь на Затоне, как в ЗП в Железном лесу. При подключении логики двери - вылет:

Expression : motion_ID.valid()
Function : CKinematicsAnimated::ID_Cycle
File : E:\stalker\sources\trunk\xr_3da\SkeletonAnimated.cpp
Line : 136
Description : ! MODEL: can't find cycle:
Arguments :

 

Чего-то не хватает, анимации, что ли? И где ее взять?

Сталкер - наше всё!

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

Всем доброго здравия. Накопилась пара вопросов, по порядку. Использую стандартную ф-ю спавна alife():create и т.д. При спавне вместо 4х заявленных плотей появляется 3. Или вместо десяти девять не суть важно, но всегда на одну меньше. Не пойму куда девается одна единица. Можно конечно добавить лишнюю строчку и не морочаться, но хотелось бы разобраться. И второй вопрос: Наверное всем знаком РПК из соли rpk74_sk1, перенёс его в игру со всеми "хвостиками". Всё работает нормально, но, периодически возникает пачка красных строк в консоли can not find save ~ weapon_type(описание примерно). Как я понял это происходит при автосейве. Что это может значить, может кто сталкивался с подобным, тоже хотелось бы понять что не так. 

Безглючная работа компа и модов, зависит от присутствия у юзера драйверов mozgi.sys и pryami_hands.vxd.

 

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

@VVV32768, что касается недостачи одной спавненной единицы, то с 90% вероятностью могу сказать, что это неправильно составленная функция (спав, ведь происходит в цикле?).

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

  • Нравится 1
Ссылка на комментарий

@VVV32768, Валер, скорее всего ствол не прописан вот в этом скрипте, weap.script

Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g.

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

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

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

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

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

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

Войти

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

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

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