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

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

@dsh, да, с бинтом это меня устроит. А если это оружие с определённым состоянием, зарядом, обвесами и т.д.?   

Как-то же возможно изменить y-координату?

 

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

@phalcor, с оригинальным движком, наверное, только через нетпакет. В m_netpk, если я правильно помню, как раз описывается пример с указанием то-ли координат, то-ли направления.

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

Я обозначил проблему в этой теме, однако есть основание полагать, что вопрос связан со скриптами. Смысл такой:

В задании "Защитить лагерь новичков от наёмников" (которое даёт Фанат на Кордоне) нужно убить 7 наёмников. После чего задание засчитывается (устанавливается инфопоршн escape_lager_killers_die). 

Если теперь сделать save и затем load - трупы наёмников пропадают!  При этом промежуточные save/load (когда убиты ещё не все наёмники) такого эффекта не вызывают - трупы не пропадают.

Если вручную толкнуть означенный выше поршень, то ещё живые наёмники исчезают. 

Вопрос: как сделать так, чтобы  трупы наёмников были как и обычные трупы - НЕ ИСЧЕЗАЛИ после save/load. Видимо, есть какой-то параметр/свойство..

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

@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 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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