Редактирование движка X-Ray - Страница 132 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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


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

Ты темой ошибся. Что касается вопроса, приблизительно так:

function spawn_item_actor(item, count)
    if item then
        if count == nil then
            count = 1
        end
        for i = 1, count do
            alife():create(item, db.actor:position(), 0, 0, 0)
        end
    end
end

local level_1 = {
    af_vyvert = 3,
    af_blood = 2,
    wpn_bm16 = 1,
    antirad = 2
                }

function give_reward()
    for k,v in pairs(level_1) do
        spawn_item_actor(k, v)
    end
end

 

Ранее был известен под ником BoBaH_671.

20 минут назад, BoBaH_671 сказал:

Ты темой ошибся. Что касается вопроса, приблизительно так:


function spawn_item_actor(item, count)
    if item then
        if count == nil then
            count = 1
        end
        for i = 1, count do
            alife():create(item, db.actor:position(), 0, 0, 0)
        end
    end
end

local level_1 = {
    af_vyvert = 3,
    af_blood = 2,
    wpn_bm16 = 1,
    antirad = 2
                }

function give_reward()
    for k,v in pairs(level_1) do
        spawn_item_actor(k, v)
    end
end

 

Спасибо за помощь, попробую. Не подскажешь, как изменить перекрестие в игре, оно ж вроде в dll зашито, хотя бы принципом?)

Господа, можете мне подсказать вот по какому делу, относительно ТЧ версии движка. Так вот, все мы знает отличительную особенность СДК "сваривать" близко находящиеся вершины модели в одну, в целях "оптимизации". Так вот, я столкнулся с точно такой же проблемой, но уже на движке игры о_О.

Вот так это выглядит:

379c69de947c2c5f034eaf368c4f981b4f858229

Слева .ogf из корневой папки игры(уже прошедший через СДК), а справа - эта же модель уже на движке игры. Никто тут не в курсе, каким образом происходят подобные изменения?

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

//	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 и что за магические расчеты во второй строке вместо этой константы?

 

Появилась такая проблема : На адаптированном движке с билда 3210 на тч, нужно подключить рендера из огсе(а точнее правки от туда выловить). Правки нужны для линз(прозрачные поверхности), мягкие партиклы.

3 часа назад, dsh сказал:

что за магическая константа 0.8333

Поправка на растягивание картинки наверное. Интересно, что 1980/1080= 1.8333

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

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

0.8333 - это для формата 16:10. На эту цифру множится ширина текстуры, а также координаты по x на экране, чтобы получить правильные пропорции (от базового 1024х768) и положение на экране. 0.75 - это для 16:9. В ЗП в движке появилась ф-ция get_current_kx() получения нужного кооф. для конкретного формата экрана.

Изменено пользователем Zagolski
  • Спасибо 1
  • Нравится 2
  • Полезно 1

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

	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;
}

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

 

Этот 0.75 - не конечный результат для формата 16:9 (хотя для него он тоже 0.75), тут они взяли уже готовый 0.75 как результат деления базы (768/1024), это по сути вот это и есть: float res = (h / w) / (UI_BASE_HEIGHT / UI_BASE_WIDTH) из второго случая.

 

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

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

 

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

Уважаемые, подскажите пожалуйста - как повернуть онлайновый объект (не НПС) вокруг своей оси?
Пытаюсь так:

Движок

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

void CScriptGameObject::SetRotation(const Fvector &rot)
{
    object().Direction().setHP(rot.x, rot.y);
    CKinematics *pK = PKinematics(object().Visual());
    if (pK)
    {
        pK->CalculateBones_Invalidate();
        pK->CalculateBones();
    }
    CSE_ALifeDynamicObject* se_obj = object().alife_object();
    if (se_obj)
    {
        object().XFORM().getXYZ(se_obj->angle()); //запись в o_Angle
    }
}

 

 

Скрипт:

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

local sobj = create("televizor",....)
level.client_spawn_manager():add(sobj.id, 0,
            function (dp, id, obj)
                obj:set_direction(vector():set(0,1.57,0))
            end
        , nil)

 

 

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

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

Платформа-то какая? Вот код под 1.6:

function spawn_object_with_direction(actor, obj, p)
--' p[1] - секция кого спаунить
--' p[2] - имя патрульного пути где спаунить.
--' p[3] - direction_x в радианах
--' p[4] - direction_y в радианах
--' p[5] - direction_z в радианах
if p then
	local spawn_sect = p[1]
	local path_name = p[2]
	if path_name == nil then
		abort("Wrong path_name for 'spawn_object_with_direction' function %s. For object %s", tostring( path_name ), obj:name() )
	end
	if not level.patrol_path_exists( path_name ) then
		abort("Path %s doesnt exist. Function 'spawn_object_with_direction' for object %s ", tostring( path_name ), obj:name() )
	end
		local ptr = patrol( path_name )
		local direction_x = tonumber(p[3]) or 0
		local direction_y = tonumber(p[4]) or 0
		local direction_z = tonumber(p[5]) or 0	
		local se_obj = alife():create(spawn_sect, ptr:point(0), ptr:level_vertex_id(0), ptr:game_vertex_id(0))
		se_obj.angle = vector():set( direction_x, direction_y, direction_z )
	end
end
%=spawn_object_with_direction(ammo_7.62x54_7h1:ammo_pos_on_bunker:0:1.57:0)%

 

Ранее был известен под ником BoBaH_671.

ТЧ 1.0007

Ну с серверным объектом все нормально. в скрипты экспортирован o_Angle. По аналогичной схеме задаю ему при спавне угол и единственное - надо перевести online/ofline - и он поворачивается.

Но

1) данная схема почему то не "поворачивает" НПС - только обычные "неживые" объекты.

2) хочется повернуть без перевода offline/online. т.е. оперировать клиентским объектом.

Даже и не знаю, сюда писать или нет. Кто-нибудь пользуется скриптовым хранилищем из 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

Я бы от греха подальше отказался бы от сохранения и восстановления LUA_TLIGHTUSERDATA,LUA_TFUNCTION,LUA_TUSERDATA,LUA_TTHREAD.

Этих достаточно: LUA_TNIL, LUA_TBOOLEAN,  LUA_TNUMBER , LUA_TSTRING, LUA_TTABLE. саму реализацию в xp-dev я не смотрел, но эти типы прекрасно сериализуются в IWriter/IReader. CRegistryHelperProcess помогает записать/прочитать в сейв. причем все реализуемо с той механикой, которая уже есть в движке оригинальном.

 

Всем привет. Народ - кто нибудь собирал исxодники СоС? в общем скачал с репо, ну первая странность: вроде проекты заточены под VS2013, но при открытии все проекты выгружены - не xочет в VS2013 загружаться, зато в VS2017 только в путь, при загрузке спросил на перевод всеx проектов на инструменты по новее VS2017 - я отказался, всё кроме "xrGame.dll" собирается без проблем, при построении xrGame.dll в самом конце, на стадии линк, вылетает такое:

1>LINK : fatal error C1510: Cannot load language resource clui.dll

Что означает:

Цитата

Не можете открыть языковой ресурс клуж.файл DLL
Компилятор не может загрузить библиотеку DLL языкового ресурса.
Есть две общие причины для этой проблемы. При использовании 32-разрядного компилятора и средств, может появиться эта ошибка для больших проектов, использующих более 2 ГБ памяти во время связи. Возможным решением в 64-разрядных системах Windows является использование 64-разрядного собственного или кросс-компилятора и средств для генерации кода. Это использует больше памяти, доступных в 64-битных приложений. Если необходимо использовать 32-разрядный компилятор, поскольку выполняется в 32-разрядной системе, в некоторых случаях можно увеличить объем памяти, доступной компоновщику, до 3 ГБ.

Ну как я понял - копилятор x32, и если превышает допустимое ОЗУ=слетает, ну так другой компилятор и не поюзаешь - проект то "Release x32".
На некоторыx ресурсаx встречается совет - "отключить оптимизацию для проекта", я попробовал: ну во первыx - сборка пошла сначала, во вторыx - в два раза дольше, но всё же закончилась успеxом(впервые собрал исxодники СоС):

1>   Создается библиотека X:\src\..\_build\lib\Release\xrGame.lib и объект X:\src\..\_build\lib\Release\xrGame.exp
1>Создание кода
1>Создание кода завершено
1>xrGame.vcxproj -> E:\STALKER\Games\bin_rel\xrGame.dll
1>Сборка проекта "xrGame.vcxproj" завершена.
========== Сборка: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

Так в чём вопрос: можно ли эту ошибку - 

1>LINK : fatal error C1510: Cannot load language resource clui.dll

исправить как нибудь иначе, кроме того, как отключать оптимизацию? А то как-то не улыбается - после малейшей правки ждать более двуx часов сборки, и к тому же на компе в это время больше ничего не сделаешь(прям как локацию компилить)...

 

 

Мать: 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.

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

2 минуты назад, Romann сказал:

 

исправить как нибудь иначе, кроме того, как отключать оптимизацию? А то как-то не улыбается - после малейшей правки ждать более двуx часов сборки, и к тому же на компе в это время больше ничего не сделаешь(прям как локацию компилить)...

 

Минимальное перестроение.

3 минуты назад, jargon сказал:

Минимальное

А это как? Если можно подробнее.

 

Мать: 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.

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

В 31.10.2017 в 23:55, drksnc сказал:

Подскажите куда копать.

Сам отвечу на свой вопрос: нужно научить клиента загружать граф и АИ-сетку, дополнив метод GameSpecific_Before класса CLevel. Пример можно увидеть в исходниках soProject. Клиент исправно получает хиты и может убивать NPC и монстров. Вот только с синхронизацией положения и поворотов не могу разобраться - как что откуда и куда надо передавать, исходники soProject не помогают:(. Единственное предположение - надо передавать tNetPacket.w_vec3 (o_Position) и все остальные данные из нужного класса в xrServer_Objects_Alife_Monsters.cpp, а потом в клиентском классе (напр. CAI_Stalker(?)) делать set_State с этими данными. Но как такое провернуть - не знаю.

EOAU7YipH-k.jpg

 

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

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

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

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

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

Войти

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

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

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