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

Редактирование движка X-Ray

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

Не могу отправить сообщение администраторам сайта, по-этому пишу где прийдется - что с сайтом творится ? И когда закончится ?

  • Согласен 1
Ссылка на комментарий
В 23.12.2017 в 04:29, yurikteam сказал:

как мне вернуть квадратную форму миникарты в зп?

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

  • Согласен 3
 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

В дебаг-режиме прогнал модуль, вроде все корректно пишется, судя по логам. И да, в кастомдату и пишется корректно и читается оттуда, в этом проблем нет. Проблемы с изменением кондиции, например, у артефактов или еды. В двигле эти классы я не затрагивал. Есть тут спецы по этому модулю нет-пакетов, кроме самого Артоса?

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

В zone_map.xml настраивается и по текстурам.

Про миникарту? Нее, в ТЧ только квадратная, да можно сделать имитацию круглой - скрыв углы квадрата текстурой круга вокруг, как в "DMX моде", а что со стаминой полукруга? В ТЧ возможны только вертикальные и горизонтальные.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

У меня класс CSE_ALifeInventoryItem под ЧН/ЗП переделан, а в модуле пакетов в net_cse_alife_inventory_item изменения я не внес... Сейчас модуль переделал, заработало. Тьфу-тьфу.

Там скорее всего не так как нужно пакеты писались и из-за этого сбоило (вообще не писались).

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

В НЛС 6 делали круглую карту и с круглой стаминой, и без движка (сорцов тогда и не было). Но да, в ЗП сама карта обрезается в круг движком (правда, все равно криво, ромбовидно), в ТЧ/ЧН вроде такого не сделать. Нужно попробовать в сторону WorkingArea копать (в ЗП), может там обрезается, точно не могу сказать.

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

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

Ссылка на комментарий
19 hours ago, Zagolski said:

Проблемы с изменением кондиции, например, у артефактов или еды.

Я сейчас вспомнил, что с едой проблема была и на оригинальном движке. Изменение ее состояния через нетпакет не влияло на состояние клиентской части. Новое состояние появлялось только после сейв-лоада. До меня только сейчас дошло, чего же у все неписей была новенькая еда, хотя состояние должно быть рандомное. Все руки не доходили заняться этим. Сейчас провел эксперимент, но уже на OGSR движке, и да, спауню в инвентарь консервы, через m_netpk делаю им condition = 0.1 и они новехонькие. Их новое состояние я вижу только после загрузки сейва. И это не связано конкретно с m_netpk. Я экспортировал в скрипты m_fCondition и все равно, измененное состояние я вижу только после загрузки сейва. И это не связано с online-offline, т.к. я заспаунил неписю эти консервы из акторского net_spawn, когда этот непись в онлайн еще не вышел, и все равно, новое состояние я вижу только после загрузки сейва.

 

Как ты в итоге это поправил?

 

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

А попробуй не спавнить еду и тут же применять к ней, а к примеру положить ее в ящик из своего инвентаря и применить пакет. В этом случае сразу изменится? У тебя может спавн клиентского объекта не успевает отработаться.

И попробуй принудительно после спавна вызывать из скриптов Level.net_Update(), предварительно экспортировав (возможно понадобится еще и Level.on_Frame и alife():update()).

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

@Zagolski вроде я этот вопрос решил. Черт, не знаю, как в этой студии обыкновенный дифф получить. Т.ч. так покажу. Было вот так

	if (alife_object)	{
		m_flags.set(Fuseful_for_NPC, alife_object->m_flags.test(CSE_ALifeObject::flUsefulForAI));
	}

	CSE_ALifeInventoryItem			*pSE_InventoryItem = smart_cast<CSE_ALifeInventoryItem*>(e);
	if (!pSE_InventoryItem)			return TRUE;

	//!!!
	m_fCondition = pSE_InventoryItem->m_fCondition;

Стало вот так

	if (alife_object)	{
		m_flags.set(Fuseful_for_NPC, alife_object->m_flags.test(CSE_ALifeObject::flUsefulForAI));
	}

	auto se_obj = object().alife_object();
	if ( se_obj ) {
		CSE_ALifeInventoryItem *itm = smart_cast<CSE_ALifeInventoryItem*>( se_obj );
		if ( itm ) {
			m_fCondition = itm->m_fCondition;
		}
	}

	CSE_ALifeInventoryItem			*pSE_InventoryItem = smart_cast<CSE_ALifeInventoryItem*>(e);
	if (!pSE_InventoryItem)			return TRUE;

	//!!!
	//m_fCondition = pSE_InventoryItem->m_fCondition;

Это в inventory_item.cpp. Судя вот по этой последней строчке, которую я закомментировал, тут что-то подобное уже хотели сделать, да то-ли даже не попробовали, как оно работает, то-ли просто плюнули.

 

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

Это лучше делать в ChangeCondition:

 

void  CInventoryItem::ChangeCondition(float fDeltaCondition)
{
 m_fCondition += fDeltaCondition;
 clamp(m_fCondition, 0.f, 1.f);

}

 

заменить на

 

void  CInventoryItem::ChangeCondition(float fDeltaCondition)
{
 m_fCondition += fDeltaCondition;
 clamp(m_fCondition, 0.f, 1.f);
 auto se_obj = object().alife_object();
 if (se_obj)
 {
  CSE_ALifeInventoryItem *itm = smart_cast<CSE_ALifeInventoryItem*>(se_obj);
  if (itm)
   itm->m_fCondition = m_fCondition;
 }
}

Тогда да, если у тебя там этого нет, дело было в этом. А net_Spawn трогать не желательно, иначе это лишние проверки и лишние тормоза. У тебя ведь set_condition после передачи пакета применяется?

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

@Zagolski то, что ты предлагаешь, уже есть. Это работает, когда меняется состояние через клиентский объект. Я же речь веду про изменение состояния через серверный объект. Вот тестовый код:

for i = 1, 1 do
  log3( "dsh: creating conserva %s", i )
  local sobj = alife():create(
    "conserva",
    db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),
    db.actor:id()
  )
  log3( "dsh: %s created", sobj:name() )
  sobj = alife():object( sobj.id )
  local sitem = sobj:get_inventory_item()
  if sitem then
    sitem.item_condition = 0.1
    log3( "dsh: sitem.item_condition = %s", tostring( sitem.item_condition ) )
  end
--[=[
  local pk = get_netpk( sobj, 1 )
  ASSERT(
    ( pk and pk:isOk() ), "can't read netpacket of %s", sobj:name()
  )
  local data = pk:get()
  data.condition = 0.1
  pk:set( data )
--]=]
end

Пока я не сделал вышеописанное изменение, консервы в инвентаре создавались новенькими, не зависимо от того, какой метод использовался, get_netpk() или прямая установка sitem.item_condition. И их состояние обновлялось только после сейв-лоада. После изменения inventory_item.cpp, консервы после создания имели состояние 0.1, как им и устанавливалось. Опять же, не зависимо от используемого метода установки.

 

А с set_condition() на клиентском объекте никаких проблем и не было.

 

Ссылка на комментарий
В 31.12.2017 в 21:37, dsh сказал:

Пока я не сделал вышеописанное изменение, консервы в инвентаре создавались новенькими

Вообще странно. У меня никаких проблем на старом коде нет, так что дело скорее всего в чем-то другом. Может у тебя с CSE_ALifeItemEatable что-то не так?

 

Да и новоиспеченный код

	auto se_obj = object().alife_object();
	if ( se_obj ) {
		CSE_ALifeInventoryItem *itm = smart_cast<CSE_ALifeInventoryItem*>( se_obj );
		if ( itm ) {
			m_fCondition = itm->m_fCondition;
		}
	}

по сути соответствует

CSE_ALifeInventoryItem			*pSE_InventoryItem = smart_cast<CSE_ALifeInventoryItem*>(e);
	if (!pSE_InventoryItem)			return TRUE;

	//!!!
	m_fCondition = pSE_InventoryItem->m_fCondition;

т.е. мы два раза делаем одно и то же. Разве нет?

Изменено пользователем Zagolski
Ссылка на комментарий
1 hour ago, Zagolski said:

т.е. мы два раза делаем одно и то же. Разве нет?

 

Похоже, что нет. В net_Spawn() передается CSE_Abstract, а в нем нет измененного condition, там 1.0. Я же и пишу, что кто-то пытался сделать, но то-ли даже не проверял, то-ли проверил и не осилил сделать рабочее.

 

Ссылка на комментарий
1 час назад, dsh сказал:

Похоже, что нет. В net_Spawn() передается CSE_Abstract, а в нем нет измененного condition, там 1.0. Я же и пишу, что кто-то пытался сделать, но то-ли даже не проверял, то-ли проверил и не осилил сделать рабочее.

Не, вру. У меня на нлс-шной скриптовой базе такая же ерунда, что и у тебя. Сейчас более подробно все проверил. Но там применяются кое-какие скриптовые костыли, чтоб все нормально было. И которые, кстати, мало того, что вешают постоянный апдейт, так и еще в момент обработки фризят игру до 150-200 мс. А ты же сейчас открыл быстрый движковый способ, за что большое спасибо!

 

1 час назад, Zander_driver сказал:

но не кажется ли вам, что вы в этой теме люто оффтопите?

Хоть и оффтоп, зато полезный оффтоп. Нужно заканчивать, главное важную инфу не затереть и не потерять. Куда-то в более подходящую тему перенести.

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

Кто знает, зачем в CharacterPhysicsSupport.cpp манипуляции с CollisionCorrectObjPos()? Может кто-то разбирался? Это из нее трупы в стенах оказываются и физ. объекты в воздух взлетают?

 

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

Поскольку подходящей темы не нашел, спрошу здесь.

Подскажите пожалуйста как назначить воспроизведение звука при поднятии предмета.

Добавлено  Murarius,

Перемещено.

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

Вот такой вопрос у меня, а как в сдк 0.4 и в самом сталкер тч кол-во костей модели увеличить или вообще как ограничение убрать? Для чего это мне? Ради скрипта из огсе скрывающего кости(обажаю облепливать оружие до степени фундервафли)

 

Ссылка на комментарий
2 часа назад, BeTep36 сказал:

а как в сдк 0.4 и в самом сталкер тч кол-во костей модели увеличить

Я полагаю юзать сдк ОГСЕ, если конечно Константин пересобрал АЕ. Напиши @KD87, если пересобран сдк, то там количество костей увеличено до сотни. Отпишись потом, что вышло.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий
6 часов назад, BeTep36 сказал:

и в самом сталкер тч кол-во костей модели увеличить

Движок править. Или ОГСР пробовать, КД выкладывал вместе с СДК.

 

@Romann, вроде, не пересобирал ничего, да и не появлялся уже с осени. Может, кто сам пересобрал?

А куда потом вставлять эти мультикости?..

Do what thou wilt shall be the whole of the Law.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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