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

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

@dsh, знал бы точно, что и где искать? Вот в all.spawn есть семь секий (по числу наёмников), это оно?

Скрытый текст

 

[3118]
; cse_abstract properties
section_name = stalker
name = esc_killer1
position = -99.2369918823242,-4.79276275634766,-77.2306289672852
direction = 0.0865945741534233,-0.0213616397231817,0.147721081972122
unknown_id = 0
script_version = 7

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_killer_specnaz

; cse_alife_object properties
game_vertex_id = 75
distance = 8.39999961853027
level_vertex_id = 161287
object_flags = 0xffffffbf
custom_data = <<END
[spawner]
cond = {+escape_lager_spawn_killers}

[smart_terrains]
esc_killers = true
END

; cse_visual properties

 

 

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

@phalcor, Да, оно. Но в секции [spawner] тут только инфо escape_lager_spawn_killers на перевод наймов в онлайн.

 

Вот кусок из gulag_espace.script

Скрытый текст

 if type == "esc_killers" then
  return function(gulag)
   local actor = db.actor
   if not actor then
    return gulag.state
   end
   if not has_alife_info("escape_lager_spawn_killers") then
    return 0 -- offline
   elseif has_alife_info("escape_lager_spawn_killers") and not has_alife_info("esc_killers_raid") then
    return 3 -- wait
   elseif has_alife_info("esc_killers_raid") and not has_alife_info("esc_open_killer_fire") then
    return 4 -- raid
   elseif has_alife_info("esc_open_killer_fire") and xr_gulag.getGulagPopulationComed("esc_lager") > 0 then
    return 1 -- fight
   elseif has_alife_info("esc_open_killer_fire") and xr_gulag.getGulagPopulationComed("esc_lager") <= 0 then
    return 2 -- kamp
   end
   return gulag.state
  end
 end

Состояние 2 - это вот не для него случаем:

Скрытый текст

t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   position_threshold = 400,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)
  t = { section = "logic@esc_killer_kamp_offline",
   idle = 0,
   prior = 5, state = {0},
   online = false,
   position_threshold = 400,
   in_rest = "", out_rest = ""
  }
  table.insert(sj, t)

Сама логика:

Скрытый текст

[logic@esc_killer_kamp_offline]
active = kamp@esc_killer_kamp_offline

[kamp@esc_killer_kamp_offline]
center_point = kamp_wait

 

Изменено пользователем AndrewMor
  • Нравится 2

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

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

@AndrewMor, спасибо за подробный ответ! Начинаю понимать, где собака зарыта, но пока ещё ясности нет.

Пробовал менять возвращаемые статусы в условии  elseif has_alife_info("esc_open_killer_fire") and xr_gulag.getGulagPopulationComed("esc_lager") <= 0 then, но безрезультатно.

Если объяснять долго, какой именно параметр отвечает за "исчезновение" трупов, подскажи пожалуйста, можно ли об этом где-то почитать?

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

@phalcor, config/gameplay/info_l01escape.xml

Цитата

    <info_portion id="escape_lager_killers_die">
        <disable>escape_lager_spawn_killers</disable>
    </info_portion>

Инфопоршень escape_lager_killers_die убирает escape_lager_spawn_killers и наемники уходят в оффлайн из-за условия в cекции spawner в all.spawn.

Похоже надо удалить disable из выше процитированного кода.

Или в секции spawner написать как-то так

cond = {+escape_lager_spawn_killers}, {+escape_lager_killers_die}
Изменено пользователем abramcumner
  • Согласен 2
  • Полезно 1
Ссылка на комментарий

@phalcor, Похоже, что здесь, когда лагерь переходит в состояние 0 и неписи получают соотв. работы - им на этих работах запрещено переходить  в онлайн. Вот они и "пропадают". 
Возможно, что в момент гибели _всех_ наймов у актора забирают поршень "escape_lager_spawn_killers" - и поэтому трупы наймов снова сразу уходят в оффлайн.

Но состояние 2  - это если все _сталки_ в лагере убиты, и тогда наймы пойдут и займут их место.  Но вот это для состояния 2  выглядит странно - не знаю, как может быть _меньше нуля_ количество НПС в лагере )   Даже если это "пришедших" посчитали.

4 часа назад, AndrewMor сказал:

xr_gulag.getGulagPopulationComed("esc_lager") <= 0


 

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

След от кругов на воде - это тоже след (с)

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

@abramcumner@Okichi, парни, спасибо за внимание к моей проблеме! 

Сработало удаление <disable>escape_lager_spawn_killers</disable> - теперь трупы после load на месте, Фанат выдаёт награду,

и я смогу утолить свой мародёрский интерес не спеша :) 

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

  • Нравится 1
  • Полезно 1
Ссылка на комментарий
On 5/23/2020 at 10:20 AM, Norman Eisenherz said:

если текстура элемента списка указана ссылкой на описание в [ui_common.xls], текст этого элемента смещается вправо на ширину текстуры

Нашел причину:

[xr_3da\xrGame\ui\UIListItem.cpp]
void CUIListItem::InitTexture(LPCSTR tex_name)
{ CUIButton::InitTexture(tex_name);    
SetTextX(m_UIStaticItem.GetRect().width()); }

 

Видимо, таким способом предполагалось облегчить создание списков "иконка + название", но это смещение только мешает, если требуется сделать подложку _под_ текстом.

Сбросив значение SetTextX(0), можно выравнивать текст как обычно – может, кому пригодится.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
05.06.2020 в 11:34, abramcumner сказал:

config/gameplay/info_l01escape.xml

Вот куда я не догадался глянуть. Этот оно самое.

05.06.2020 в 11:34, abramcumner сказал:

Или в секции spawner написать как-то так

Если так сделать, нужно пересобирать спавн и начинать НИ. Проще в инфо убрать строчку и загрузить сейв до разговора с Фанатом.

05.06.2020 в 11:36, Okichi сказал:

Но вот это для состояния 2  выглядит странно - не знаю, как может быть _меньше нуля_ количество НПС в лагере ) 

Ага, я тоже внимание обратил. :)

05.06.2020 в 17:35, dsh сказал:

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

А разве их уборщик не подберет потом? Они вроде без уникальных стори айди.

  • Нравится 1

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

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

Здрасьте.

 

[ТЧ 1.0006] Оконный класс на базе CUIScriptWnd(), безлоговый вылет через несколько секунд после вывода нового окна. Если зарегистрировать в окне хотя бы одно событие, окно остается сколько угодно долго и к вылету не приводит. Почему так?
 

Spoiler

-- // actor_binder:use_object(obj) -- custom // --
function use_check(obj)
	if obj:section() == "bandage" then
		level.start_stop_menu(wnd(), true)
	end
end


class "wnd" (CUIScriptWnd)

function wnd:__init() super()
	self:Init(1024/2, 768/2, 128, 128)

	local bk = CUIStatic()
	self:AttachChild(bk)
	bk:Init("ui\\ui_frame_back", 0, 0, self:GetWidth(), self:GetHeight())
	bk:SetColor( GetARGB(255, 0, 255, 255) )

	self:Register(bk, "name")
	-- self:AddCallback("name", ui_events.WINDOW_LBUTTON_DB_CLICK, function() end, self)
end

function wnd:__finalize()
end

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, сборщик мусора удаляет экземпляр класса окна. Создайте переменную, запишите в нее екземляр класса, потом вызываете level.start_stop_menu с этой переменной

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

@Graff46 Переменную вне функции вызова окна, если точно.

Почему все-таки окно не удаляется тем же уборщиком при наличии привязанного события?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

А что означают вот такие параметры смарт-террейнов? 

 

1) esc_dogs_to_fox:      population=0   comed=0   State=1            (это вроде как собаки, которые должны нападать на лагерь 2)   - по факту - пусто, нет ни одной собаки. 

2) esc_stalker_camp:    population=1   comed=1   State=0            (это на Кордоне, где Лис стоял) по факту - никого нет.

 

Или может есть тема, где такие тонкости описываются?

 

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

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

@phalcor, population - общее количество неписей в гулаге; comed - количество неписей в гулаге, которые пришли на место работы и начали выполнять свою работу; state - текущее состояние гулага, задаётся соответствущими функциями в скриптe гулага (файлы gulag_*.script).

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac, да, поизучал xr_gulag.script, но так и не понял, что значит State=1 или 0.

Просто пытаюсь найти, в чём затык Циклического Задания Фаната на защиту лагеря - ну никак не закрывается это задание. Вот пытаюсь выяснить необходимые для этого условия.

Уже и cycle_task.script перелопатил - там условием на закрытие задания является

if xr_gulag.getGulagState(task_desc.defend_target) == 0 then
		task_desc.status = self.status.completed
		return true
end

 

Изменено пользователем phalcor
Ссылка на комментарий
Только что, phalcor сказал:

что значит State=1 или 0.

Это разные состояния гулага. В которых могут быть различные наборы работ или их условий.

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

Состояний может быть и больше. 0, 1, и т.д. - это просто номер состояния.

  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

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

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

@phalcor, это тебе надо брать твой смарт и смотреть в скрипте, по каким условиям он переключается в состояние 0. Вот пример для гулага pri_ambush7 (gulag_pripyat.script):

-- States ----------------------------------------------------------------
gulags.pri_ambush7.state = function(gulag)
    if has_alife_info("pri_wave7_start") then
        return 1
    else
        return 0
    end
end

Тут при наличии инфопорции "pri_wave7_start" он переключается в состояние 1, иначе - в состояние 0.

  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

РыбятЫ, привет. В общем такой вопрос, а можно как-то реализовать как-то чтение записок в виде текстуры, как книга например в Солянке, но чтоб при чтении игра ставилась на паузу автоматически, как в том же Метро?

Оц тоц перевертоц, бабушка здорова,
Оц тоц перевертоц кушает компот.
Оц тоц перевертоц и мечтает снова
Оц тоц перевертоц пережить налет!

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

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

Скрытый текст

[logic]
active = remark@base
danger = danger_ignore
invulnerable = true

[remark@base]
anim = wait
meet = meet
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true

[meet]
close_snd_hello = nil
close_snd_bye 	= nil
close_anim 		= nil
close_victim 	= nil
far_anim 		= nil
far_victim 		= nil
close_distance  = 0
far_distance 	= 0
use 			= {!actor_enemy} true
trade_enable = false
allow_break = false

 

Скрытый текст

-- Спавн нпс при старте игры
function start_game_spawn()
    -- Охотник
    alife():create("stalker_hunter", vector():set(111.529, -3.936, 190.043), 11576, 316)
end

 

Скрытый текст

local text
local vid
local gvid
local a = vector()
local text
a = db.actor:position()
vid = db.actor:level_vertex_id()
gvid = db.actor:game_vertex_id()
text = "Координаты:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid
news_manager.send_tip(db.actor, text, nil, nil, 30000)

 

Пробовал смотреть в другую сторону и снимать координаты, но при спавне нпс всеравно смотрит в стену. 

target = story | actor мне не подходит. Нужно чтобы непись смотрел в одну сторону. 

Платформа: COP 1.6.02 + Atmosfear + Shoker Weapon Mod 

wQ289zB.jpg

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

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

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

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

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

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

Войти

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

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

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