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

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


Rolan

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

@Lagos, вот такое желтое изображение я получал играясь с FOV.

 

 

Кто-нибудь использовал

 

local res = level.perform_ray_pick_query()
 
из x-ray extensions? Посмотреть бы на примеры использования.
 
Еще вопрос по get_weight(). В вики написано:
 

 

 

[ТЧ] Добавлен метод get_weight класса game_object, который работает только для актора и позволяет получить суммарную массу вещей в инвентаре. 

 

У кого-нибудь get_weight() для актора работает? Сегодня попробовал - вылетает. А для объектов из инвентаря - работает.

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

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


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

Может уже кто делал, т.ч. спрошу заранее. Есть способ поменять вес предмета в инвентаре? Возможно с помощью set_inventory_item_* или set_go_* ? Кто-нибудь уже находил соотв. смещения?

 

Спасибо.

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


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

Уточню. Правильное смещение для веса - 164. Вот рабочий вариант:

function set_inv_weight( obj, weight )
  obj:set_inventory_item_float( nil, weight, 164 )
end

  • Нравится 1
  • Полезно 1

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


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

Даже не знаю, в какой теме спрашивать. Есть какой-нибудь способ поменять normal_time_factor из alife.ltx, не начиная новую игру? По исходникам вижу, что значение из ltx сохраняется в сейве и в дальнейшем, значение из ltx просто переопределяется тем, которое сохранено в сейве.

PS. Вообще не понятно, зачем этот параметр сохраняется в сейве.

 

@Dennis_Chikin, не, set_time_factor() устанавливает time_factor, а мне нужно normal_time_factor поменять.

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

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


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

Нужна помощь в добавлении колбека на клик по предмету в инвентаре.

 

А в чем там проблема? Есть же

в _g.script:

callback_ex = {
	["on_select_item"]               = 133,
}

в bind_stalker.script:

  self.object:set_callback(callback_ex.on_select_item, self.on_select_item, self)		-- перемещение предмета в слот

function actor_binder:on_select_item( obj )
end

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


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

 

 

в 1.0007 такого нет, поэтому я и спрашиваю

 

А-а-а, тебе для исходников. Я подумал, ты для x-ray extensions спрашивал.

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


Ссылка на сообщение
5 hours ago, Shkiper2012 said:

Методы для CInventoryItem:  set_inventory_item_flags(flags16)  и  get_inventory_item_flags()

Вот так вот, например

function set_item_ungroupable( item )
  local f = item:get_inventory_item_flags()
  f:set( global_flags.FIUngroupable, true )
  item:set_inventory_item_flags( f )
end

В xp-dev нет этих флагов в global_flags, т.ч. можешь просто число там указывать, которому соотв. нужный тебе флаг.

 

  • Спасибо 1

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


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

@Shkiper2012 в xp-dev флаг неторгуемости не обрабатывается, а флаг негруппируемости обрабатывается только после вызова соотв. коллбека и сбрасывается после его обработки, т.е. служит только для возврата результата из коллбека.

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


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

@Shkiper2012 если не внести свои изменения в xp-dev, то на торгуемость влиять нельзя. На группируемость - можно. Нужно подключить обработчик для коллбэка "on_group_items", в который передаются два предмета, и в нем этим предметам выставлять флаг негруппируемости, если нужно. Коллбэк вызывается для выяснения, можно-ли сгруппировать эти два предмета.

 

Если же вносить свои изменения, то см. для примера

 

https://github.com/dsh2dsh/OGSR-Engine/commit/eff43a33936c6fdffbf58c70f06a4b7f68df1801

https://github.com/dsh2dsh/OGSR-Engine/commit/22069d0d62a04ea075497540cf98ecdeef3eddf5

 

  • Спасибо 1

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


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

Народ, может кто узнает это

//	float kx = (UI()->is_16_9_mode())?0.8333f: 1.0f;
	float kx = (UI()->is_16_9_mode()) ? Device.dwHeight / Device.dwWidth / 0.75 : 1.0f;

Это из UICustomItem.cpp, из CUICustomItem::Render(). У кого-нибудь есть идеи, что за магическая константа 0.8333 и что за магические расчеты во второй строке вместо этой константы?

 

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


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

Теперь понятно. Но вот в чем странность. Вот это

	float kx = (UI()->is_16_9_mode()) ? Device.dwHeight / Device.dwWidth / 0.75 : 1.0f;

и вот это

	float kx = UI()->is_16_9_mode() ? UI()->get_current_kx() : 1.0f;
float ui_core::get_current_kx()
{
	float h = float(Device.dwHeight);
	float w = float(Device.dwWidth);

	float res = (h / w) / (UI_BASE_HEIGHT / UI_BASE_WIDTH);
	return res;
}

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

 

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


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

@KRodin подсказал, что грабля была в том, что в первом случае ширина и высота не приводились к float.

 

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

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


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

Даже и не знаю, сюда писать или нет. Кто-нибудь пользуется скриптовым хранилищем из xp-dev? Вроде оно как-то userdata сохраняет, только мне не понятно, что с ней потом делать, как использовать? Вот есть у меня vector(), оно его без проблем сохранит и прочитает. Только вот прочитанное уже не признается, что он vector(). Т.е. var.x уже не сделать, оно ругается что это userdata и его нельзя индексировать. Что с этим делают, как используют, для чего? Поделитесь, пожалуйста, опытом. Кстати, в xp-dev там ошибка. Грабля бьет по лбу, если сохранять вложенные списки. Оно тогда все индексы превращает в строковые и уже не получится использовать ipairs(), да и не только. Вот тут ошибка

			sv.type = LUA_TTABLE;
			if (sv.T->is_array)	sv.type |= SVT_ARRAY_TABLE;
			if (sv.T->zero_key)	sv.type |= SVT_ARRAY_ZEROK;			

Я не могу понять, зачем тут затирается оригинальный sv.type и через задницу восстанавливаются в нем флаги. В общем, перестраховался и исправил вот так

			int type = sv.type;
			sv.type = LUA_TTABLE;
			if (sv.T->is_array)	sv.type |= SVT_ARRAY_TABLE;
			if (sv.T->zero_key)	sv.type |= SVT_ARRAY_ZEROK;			
			if ( (type & SVT_KEY_MASK) == SVT_KEY_BOOLEAN )
			  sv.type |= SVT_KEY_BOOLEAN;
			else if ( (type & SVT_KEY_MASK) == SVT_KEY_NUMERIC )
			  sv.type |= SVT_KEY_NUMERIC;

А так, мне кажется, достаточно убрать

			sv.type = LUA_TTABLE;

что бы сохранялись все флаги. Странное оно тут, странное.

 

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

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


Ссылка на сообщение
23 hours ago, Winsor said:

CRegistryHelperProcess помогает записать/прочитать в сейв

А это что за процесс такой? Не нахожу такого в исходниках движка.

 

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


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

Есть у меня элементарный вопрос. Вот делаем мы

local v = vector()

Чему должны быть равны x, y, и z этого вектора? nil, 0, случайное значение? Если 0, то почему? Я не могу найти в движке инициализацию в нулевые значения.

 

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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