Overfirst 630 Опубликовано 3 Ноября 2017 Поделиться Опубликовано 3 Ноября 2017 Ты темой ошибся. Что касается вопроса, приблизительно так: 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. Ссылка на комментарий
ComradE_AleX 5 Опубликовано 3 Ноября 2017 Поделиться Опубликовано 3 Ноября 2017 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 зашито, хотя бы принципом?) Ссылка на комментарий
killersan6 184 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 Господа, можете мне подсказать вот по какому делу, относительно ТЧ версии движка. Так вот, все мы знает отличительную особенность СДК "сваривать" близко находящиеся вершины модели в одну, в целях "оптимизации". Так вот, я столкнулся с точно такой же проблемой, но уже на движке игры о_О. Вот так это выглядит: Слева .ogf из корневой папки игры(уже прошедший через СДК), а справа - эта же модель уже на движке игры. Никто тут не в курсе, каким образом происходят подобные изменения? Ссылка на комментарий
dsh 3 824 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 Народ, может кто узнает это // 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 и что за магические расчеты во второй строке вместо этой константы? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
BeTep36 24 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 Появилась такая проблема : На адаптированном движке с билда 3210 на тч, нужно подключить рендера из огсе(а точнее правки от туда выловить). Правки нужны для линз(прозрачные поверхности), мягкие партиклы. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 3 часа назад, dsh сказал: что за магическая константа 0.8333 Поправка на растягивание картинки наверное. Интересно, что 1980/1080= 1.8333 Ссылка на комментарий
Zagolski 74 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 (изменено) 4 часа назад, dsh сказал: Это из UICustomItem.cpp, из CUICustomItem::Render(). У кого-нибудь есть идеи, что за магическая константа 0.8333 и что за магические расчеты во второй строке вместо этой константы? 0.8333 - это для формата 16:10. На эту цифру множится ширина текстуры, а также координаты по x на экране, чтобы получить правильные пропорции (от базового 1024х768) и положение на экране. 0.75 - это для 16:9. В ЗП в движке появилась ф-ция get_current_kx() получения нужного кооф. для конкретного формата экрана. Изменено 5 Ноября 2017 пользователем Zagolski 1 2 1 Ссылка на комментарий
dsh 3 824 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 Теперь понятно. Но вот в чем странность. Вот это 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; } дают разные результаты. Такое впечатление, что первый расчет выполняется не слева на право. Может я чего-нибудь в упор не замечаю? Вроде об расчета эквиваленты. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Zagolski 74 Опубликовано 5 Ноября 2017 Поделиться Опубликовано 5 Ноября 2017 (изменено) Этот 0.75 - не конечный результат для формата 16:9 (хотя для него он тоже 0.75), тут они взяли уже готовый 0.75 как результат деления базы (768/1024), это по сути вот это и есть: float res = (h / w) / (UI_BASE_HEIGHT / UI_BASE_WIDTH) из второго случая. Изменено 5 Ноября 2017 пользователем Zagolski Ссылка на комментарий
dsh 3 824 Опубликовано 6 Ноября 2017 Поделиться Опубликовано 6 Ноября 2017 (изменено) @KRodin подсказал, что грабля была в том, что в первом случае ширина и высота не приводились к float. Изменено 6 Ноября 2017 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Winsor 177 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 (изменено) Уважаемые, подскажите пожалуйста - как повернуть онлайновый объект (не НПС) вокруг своей оси? Пытаюсь так: Движок Скрытый текст 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) Пытался и радианы и градусы передавать - с объектом ничего не происходит, визуально он свое положение не меняет. Изменено 8 Ноября 2017 пользователем Winsor Ссылка на комментарий
Overfirst 630 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 Платформа-то какая? Вот код под 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)% Добавлено Overfirst, 8 Ноября 2017 Может и на ТЧ взлетит, не тестил. Автор makdm. Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Winsor 177 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 ТЧ 1.0007 Ну с серверным объектом все нормально. в скрипты экспортирован o_Angle. По аналогичной схеме задаю ему при спавне угол и единственное - надо перевести online/ofline - и он поворачивается. Но 1) данная схема почему то не "поворачивает" НПС - только обычные "неживые" объекты. 2) хочется повернуть без перевода offline/online. т.е. оперировать клиентским объектом. Ссылка на комментарий
dsh 3 824 Опубликовано 11 Ноября 2017 Поделиться Опубликовано 11 Ноября 2017 (изменено) Даже и не знаю, сюда писать или нет. Кто-нибудь пользуется скриптовым хранилищем из 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; что бы сохранялись все флаги. Странное оно тут, странное. Изменено 11 Ноября 2017 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Winsor 177 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 Я бы от греха подальше отказался бы от сохранения и восстановления LUA_TLIGHTUSERDATA,LUA_TFUNCTION,LUA_TUSERDATA,LUA_TTHREAD. Этих достаточно: LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER , LUA_TSTRING, LUA_TTABLE. саму реализацию в xp-dev я не смотрел, но эти типы прекрасно сериализуются в IWriter/IReader. CRegistryHelperProcess помогает записать/прочитать в сейв. причем все реализуемо с той механикой, которая уже есть в движке оригинальном. Ссылка на комментарий
Romann 619 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 Всем привет. Народ - кто нибудь собирал ис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. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
jargon 4 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 2 минуты назад, Romann сказал: исправить как нибудь иначе, кроме того, как отключать оптимизацию? А то как-то не улыбается - после малейшей правки ждать более двуx часов сборки, и к тому же на компе в это время больше ничего не сделаешь(прям как локацию компилить)... Минимальное перестроение. Ссылка на комментарий
Romann 619 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 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. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
jargon 4 Опубликовано 13 Ноября 2017 Поделиться Опубликовано 13 Ноября 2017 Только что, Romann сказал: А это как? Если можно подробнее. Включить минимальное перестроение 2 Ссылка на комментарий
drksnc 14 Опубликовано 14 Ноября 2017 Поделиться Опубликовано 14 Ноября 2017 В 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 с этими данными. Но как такое провернуть - не знаю. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти