Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Modera
AndreySol, этот класс регистрирывается из луа, в class_registrator.script.
Код
cs_register (object_factory, "CElectricBall",   "se_artefact.se_artefact",  "SCRPTART", "artefact_s")
AndreySol
Цитата
этот класс регистрируется из луа, в class_registrator.script

Получается, регистрация из скриптов имеет приоритет над CObjectFactory::register_classes()?
И еще, получается, что все арты в игре - это класс CGraviArtefact. А на кой тогда еще куча классов, которые есть в CObjectFactory::register_classes() и по названиям явно имеют смысл для артефактов ?
Modera
Цитата(AndreySol @ 13.06.2019, 15:19) *
Получается, регистрация из скриптов имеет приоритет над CObjectFactory::register_classes()?

Никаких приоритетов. Если зарегаешь два класса с одинаковым названием будет ошибка.

Цитата(AndreySol @ 13.06.2019, 15:19) *
И еще, получается, что все арты в игре - это класс CGraviArtefact. А на кой тогда еще куча классов, которые есть в CObjectFactory::register_classes() и по названиям явно имеют смысл для артефактов ?

Остатки тотсталкира 2003 года, когда у каждого вида артефактов хотели делать уникальные поведение. Некоторые из этих классов пустышки, некоторые содержат код, например CBlackGraviArtifact.
ForserX
Да вы серьёзно? Объявляете объект из движка в скрипты, оттуда регистрируете его игровой CLASS_ID, позже цепляете его в конфиги.
???? PROFIT!!!!

(Самое простое объяснение)
atanda
Цитата(Modera @ 13.06.2019, 15:34) *
два класса с одинаковым названием

Что ты имеешь ввиду? С одинаковым clsid? Если так, то какая ошибка? Как я понимаю, по-умолчанию(чтобы были все необходимые сопоставления) в движке регистрируются все сопоставления по типу CLSID -> {server_class : client_class}, а скрипты потом, если это необходимо, дополняют таблицу заменяя их(недаром в скрипты экспортировано много классов-пустышек CWeaponAK74, CWeaponLR300, CTorch и тд)

между делом CLSID и script_clsid вроде как должны быть равны, просто используются в разных средах(первый в движке, второй в скриптах)

Цитата(ForserX @ 13.06.2019, 16:31) *
Да вы серьёзно? Объявляете объект из движка в скрипты, оттуда регистрируете его игровой CLASS_ID, позже цепляете его в конфиги.
???? PROFIT!!!!

А в чём профит, если то же самое можно сделать в движке? biggrin.gif
ForserX
Цитата(buffy @ 13.06.2019, 20:48) *
А в чём профит, если то же самое можно сделать в движке?

Если ты про .ltx CLASS_ID, то не особо выйдет. Там нужно луашный класс цеплять.

Цитата(buffy @ 13.06.2019, 20:48) *
А в чём профит, если то же самое можно сделать в движке?

Хотя не, давай не так, пруф можно? O_0
atanda
Цитата(ForserX @ 13.06.2019, 21:23) *
.ltx CLASS_ID

Это ещё что?=)

Цитата(ForserX @ 13.06.2019, 21:23) *
Хотя не, давай не так, пруф можно? O_0

Не совсем понимаю, что доказывать. rolleyes.gif У нас имеется секция - именованный набор параметров, в ней есть поле class с указателем на зарегистрированную связку {серверный объект : клиентский объект}
Потом, при использовании F_create_entity, движок понимает какую связку использовать исходя из пар. class (например, ссылающегося на CLSID_AI_DOG_BLA т.е. на AI_DOG_1)
Т.е. мы можем объявить
Код
#define CLSID_AI_DOG_BLACK            MK_CLSID('A','I','_','D','O','G','_','0')
#define CLSID_AI_DOG_BLA            MK_CLSID('A','I','_','D','O','G','_','1')
#define CLSID_AI_DOG_BL            MK_CLSID('A','I','_','D','O','G','_','2')


ADD(CAI_PseudoDog, CSE_ALifeMonsterBase, CLSID_AI_DOG_BLACK, "dog_black");
ADD(CAI_PseudoDog, CSE_ALifeMonsterBase, CLSID_AI_DOG_BLA, "dog_bla");
ADD(CAI_PseudoDog, CSE_ALifeMonsterBase, CLSID_AI_DOG_BL, "dog_bl");

И движок выберет именно связку { CAI_PseudoDog : CSE_ALifeMonsterBase }.

Естественно не рекомендуется объявлять пары с одинаковыми соответственно clsid & script_clsid, но движок крешится только в дебажной сборке, ибо VERIFY. Из чего можно сделать вывод, что не так уж это и фатально объявлять пары с одинаковыми соответственно clsid & script_clsid. wink.gif

PS: вообще по большей мере мой пост это краткий пересказ статьи Malandrinus'а c АМК 2009 года.
ЗЫЫ: всё что я описал относится к ТЧ, не ковырял ЗП по этому делу.

Поправьте меня тапком, ежели что не так
Modera
Цитата(buffy @ 13.06.2019, 20:48) *
Если так, то какая ошибка?

Код
IC    void CObjectFactory::add    (CObjectItemAbstract *item)
{
    const_iterator        I;

    I                    = std::find_if(clsids().begin(),clsids().end(),CObjectItemPredicateCLSID(item->clsid()));
    if(I != clsids().end())
    {
        string16            temp;
        CLSID2TEXT            (item->clsid(),temp);
        VERIFY2                (0, make_string("clsid is duplicated : %s",temp)); // вот эта если повторишь clsid
    }
    
#ifndef NO_XR_GAME
    I                    = std::find_if(clsids().begin(),clsids().end(),CObjectItemPredicateScript(item->script_clsid()));
    VERIFY                (I == clsids().end()); // а вот эта если повторишь script_clsid
#endif
    
    m_actual            = false;
    m_clsids.push_back    (item);
}


Цитата(buffy @ 13.06.2019, 20:48) *
а скрипты потом, если это необходимо, дополняют таблицу заменяя их

Скрипты ничего не заменяют, а только дополняют. При регистрации класса из скриптов вызывается та же самая функция, которую я привёл выше.

Цитата(buffy @ 13.06.2019, 21:56) *
Из чего можно сделать вывод, что не так уж это и фатально объявлять пары с одинаковыми соответственно clsid & script_clsid.

Ну да, не фатально, только второе объявления использоваться никак не будет, но это мелочи жизни.
atanda
Цитата(Modera @ 13.06.2019, 22:24) *
Скрипты ничего не заменяют, а только дополняют

Да, всё верно. Я как-то размечтался. smile.gif

кстати, а зачем тогда в движке регистрятся неиспользуемые связки?
+
Код
ADD(CAI_Flesh                ,CSE_ALifeMonsterBase            ,CLSID_AI_FLESH                    ,"flesh");
    ADD(CChimera                ,CSE_ALifeMonsterBase            ,CLSID_AI_CHIMERA                ,"chimera");
    ADD(CAI_Dog                    ,CSE_ALifeMonsterBase            ,CLSID_AI_DOG_RED                ,"dog_red");
    ADD(CAI_Stalker                ,CSE_ALifeHumanStalker            ,CLSID_AI_STALKER                ,"stalker");
    ADD(CAI_Bloodsucker            ,CSE_ALifeMonsterBase            ,CLSID_AI_BLOODSUCKER            ,"bloodsucker");
    ADD(CAI_Boar                ,CSE_ALifeMonsterBase            ,CLSID_AI_BOAR                    ,"boar");
    ADD(CAI_PseudoDog            ,CSE_ALifeMonsterBase            ,CLSID_AI_DOG_BLACK                ,"dog_black");
    ADD(CPsyDog                    ,CSE_ALifeMonsterBase            ,CLSID_AI_DOG_PSY                ,"psy_dog");
    ADD(CPsyDogPhantom            ,CSE_ALifePsyDogPhantom            ,CLSID_AI_DOG_PSY_PHANTOM        ,"psy_dog_phantom");
    ADD(CBurer                    ,CSE_ALifeMonsterBase            ,CLSID_AI_BURER                    ,"burer");
    ADD(CPseudoGigant            ,CSE_ALifeMonsterBase            ,CLSID_AI_GIANT                    ,"pseudo_gigant");
    ADD(CController                ,CSE_ALifeMonsterBase            ,CLSID_AI_CONTROLLER            ,"controller");
    ADD(CPoltergeist            ,CSE_ALifeMonsterBase            ,CLSID_AI_POLTERGEIST            ,"poltergeist");
    ADD(CZombie                    ,CSE_ALifeMonsterBase            ,CLSID_AI_ZOMBIE                ,"zombie");
    ADD(CFracture                ,CSE_ALifeMonsterBase            ,CLSID_AI_FRACTURE                ,"fracture");
    ADD(CSnork                    ,CSE_ALifeMonsterBase            ,CLSID_AI_SNORK                    ,"snork");
    ADD(CCat                    ,CSE_ALifeMonsterBase            ,CLSID_AI_CAT                    ,"cat");
    ADD(CTushkano                ,CSE_ALifeMonsterBase            ,CLSID_AI_TUSHKANO                ,"tushkano");

или это тоже остатки до-скриптовой эпохи?
AndreySol
Цитата
это краткий пересказ статьи Malandrinus'а c АМК 2009 года.

Где эту статью там найти ? Ссылочку мона ?

Спасибо, я и забыл уже, что она есть...
NanoBot-AMK
Не давно ковырял свой мод с салютами, пытался пофиксить баг с методом set_const_force, но так полностью его не одолел. Пытался ковырять движок, нашёл все функции с этим связанные, но сам баг так и не нашёл, с виду код простой и верный, но после использования метода set_const_force у объектов к которым это метод был применён ранее, резко обнуляется скорость. В общем, подсмотрел код у ракет, и отказался от использования метода set_const_force.
Код
-- на звёздку действует заданная гравитация и сопротивления воздуха.
    local lvel = vector()
    ph_shell:get_linear_vel(lvel)
    local k = lvel:magnitude()*self.k_tren*dev.f_time_delta
    ph_shell:apply_force(lvel.x*k, lvel.y*k + self.gravi_comp, lvel.z*k)

Сейчас работает как надо, надо не забыть и для ракетниц код переделать.
Да уж, кодинг под XRay это война с багами. blink.gif
Diesel
Кто нибудь знает, что будет, если вырезать в этой функции: void CPHActorCharacter::InitContact(dContact* c,bool &do_collide,u16 material_idx_1,u16 material_idx_2 ),
вот это:

Код
if(b_restrictor&&
do_collide&&
!(b1 ? static_cast<CPHCharacter*>(retrieveGeomUserData(c->geom.g2)->ph_object)->ActorMovable():static_cast<CPHCharacter*>(retrieveGeomUserData(c->geom.g1)->ph_object)->ActorMovable())
)
{
dJointID contact_joint = dJointCreateContactSpecial(0, ContactGroup, c);
Enable();
CPHObject::Island().DActiveIsland()->ConnectJoint(contact_joint);
if(b1)
dJointAttach (contact_joint, dGeomGetBody(c->geom.g1), 0);
else
dJointAttach (contact_joint, 0, dGeomGetBody(c->geom.g2));
do_collide=false;
m_friction_factor*=0.1f;

}


Будет очень полезная вещь. Я это вырезал как баг с вылетом, а получил приятный отзыв от юзера. biggrin.gif
Diesel
Хотел было поиграться с этой консолькой r2_tf_mipbias

В движке:
CMD2(CCC_tf_MipBias,"r2_tf_mipbias", &ps_r2_tf_Mipbias );


А вот этого диапазона, я в глаза не вижу от 0-1:

~ Invalid syntax in call to 'r2_tf_mipbias'
~ Valid arguments: float value in range [0.000,1.000]

Вообще я так понял, что это бездиапазонная консоль, типа 0 или 1. Вкл-выкл.

CCC_tf_MipBias - это от сюда:

Класс
class CCC_tf_MipBias: public CCC_Float
{
public:
void apply () {
if (0==HW.pDevice) return ;

#ifdef USE_DX10
// TODO: DX10: Implement mip bias control
//VERIFY(!"apply not implmemented.");
#else // USE_DX10
for (u32 i=0; i<HW.Caps.raster.dwStages; i++)
CHK_DX(HW.pDevice->SetSamplerState( i, D3DSAMP_MIPMAPLODBIAS, *((LPDWORD) value)));
#endif // USE_DX10
}

CCC_tf_MipBias(LPCSTR N, float* v) : CCC_Float(N, v, -0.5f, +0.5f) { };
virtual void Execute(LPCSTR args)
{
CCC_Float::Execute (args);
apply ();
}
virtual void Status (TStatus& S)
{
CCC_Float::Status (S);
apply ();
}
};



А там CCC_tf_MipBias(LPCSTR N, float* v) : CCC_Float(N, v, -0.5f, +0.5f) { };

Нифига не понял?

Вот это понятно:
float ps_r2_tf_Mipbias = 0.0f ;

Зачем тут диапазон? И что это тогда за прибамбах?
ForserX
Дизель, увелич диапазон, как минимум. Да и для р3 надо её имплементить
cjayho
QUOTE (Дизель @ 22.06.2019, 00:11) *
Хотел было поиграться с этой консолькой r2_tf_mipbias

Зачем тут диапазон? И что это тогда за прибамбах?


Почитайте что такое мипмамппинг.
Объясню на пальцах - есть геометрия, на нее натянута текстура. Если ее отдалять от камеры, то размеры текстуры в экранном пространстве будут уменьшаться. Ресэмплинг (растяжка или сжатие на лету) таких отдаленных текстур - дело затратное (особенно это относилось к тем временам когда отрисовкой занималась не видеокарта а процессор, весьма медленный по сравнению с современными), а если оставить как есть, то начнут проявляться артефакты наложения одной пиксельной сетки на другую, так называемый aliasing.
Так вот чтобы не ресэмплить текстуру и не получить алиасинг придумали паковать в текстуру еще несколько ее копий но меньшего разрешения. То есть например основная текстура имеет размер 1024х1024, вторая 512х512, третья 256х256, четвертая 128х128 и так далее. Эти уменьшенные текстуры называются мипмапы. Так вот при удалении текстуры от камеры при достижении определенного порога большая текстура заменяется меньшей, потом еще меньшей и так далее.
А мипбиас это влияние на порог смены мипмапов, при увеличении значения будет даваться приоритет текстурам более низкого разрешения и наоборот. Соответственно -1 и +1 это мипмап в одну и мипмап в другую сторону.
ed_rez
И на производительность сильно влияет, по меньшей мере в Столкире, я про использования схем мипмаппинга. Применял практику создания своих (не автоматизированных) МипМапов, а также их количество. На практике, есть возможность улучшить качество на отдаленных пейзажах.
Цитата(Дизель @ 22.06.2019, 00:11) *
Хотел было поиграться с этой консолькой r2_tf_mipbias

Не нужно, лучше дефолтный вариант. При максимальном значении вылазят страшные артефакты на дальних сценах. При малых, сильное мыло. Серединка и только она, а в остальном играемся не с параметром, а с текстурами.
ForserX
ed_rez, у нас это на производительность как-то не влияло. Емнип
ed_rez
ForserX,
я когда-то цеплялся за каждую единицу ФПС, совсем старенький ноутбук был. Таки познал множество рычагов, как улучшить, но при этом не нагнуть движок или "железо".
Diesel
В чём причина такого вылета?:

лог
[error]exp​ression : vertex || show_restrictions(m_object)
[error]Function : CPatrolPathManager::select_point
[error]File : .\patrol_path_manager.cpp
[error]Line : 155
[error]Description : any vertex in patrol path [agr_stalker_leader_walk] is inaccessible for object [agr_stalker_base_leader]



Что если удалить Ассерт, чем чревато?:

код
R_ASSERT2 (
vertex || show_restrictions(m_object),
make_string(
"any vertex in patrol path [%s] is inaccessible for object [%s]",
*m_path_name,
*m_game_object->cName()
)
);



Не думаю, что лидер Сталкеров на Агропроме, отупеет еще сильнее, чем изначально.
WolfHeart
Цитата(Дизель @ 23.06.2019, 21:23) *
Еще в чём причина такого вылета?:

https://modders.pro/Patrol_path_manager.cpp
Diesel
Что будет если удалить ассерт в движке на указание бага?
Вот это:
лог

FATAL ERROR

[error]exp​ression : error handler is invoked!
[error]Function : handler_base
[error]File : .\xrDebugNew.cpp
[error]Line : 1223
[error]Description : pure virtual function call


И вылет patrol_path_manager.cpp, это не вина разрабов, а вина мододелов:


лог
[error]exp​ression : vertex || show_restrictions(m_object)
[error]Function : CPatrolPathManager::select_point
[error]File : .\patrol_path_manager.cpp
[error]Line : 155
[error]Description : any vertex in patrol path [agr_stalker_leader_walk] is inaccessible for object [agr_stalker_base_leader]
ForserX
Дизель, ты б хоть узнал, что это.
Diesel
ForserX, а это что не связано? Это типа от визуалки баг?
atanda
Это обработчик чистых функций, т.е. где-то в коде вызвана нереализованная функция.(?)

DiaWorld
Привет, формучане. Собрал я движок из исходников rc 1.0007, решил таки его протестировать и словил вылет.
Не подскажете как с таким "чудом" бороться ?
Вылет
[error]exp​ression : fatal error
[error]Function : CInifile::r_string
[error]File : Xr_ini.cpp
[error]Line : 352
[error]Description : <no exp​ression>
[error]Arguments : Can't find variable font_prefix in [string_table]
aka_sektor
Цитата(DiaWorld @ 25.06.2019, 18:55) *
Xr_ini.cpp

Цитата(DiaWorld @ 25.06.2019, 18:55) *
Can't find variable

5 вариант: https://modders.pro/Xr_ini.cpp
DiaWorld
Цитата(aka_sektor @ 25.06.2019, 19:10) *
Цитата(DiaWorld @ 25.06.2019, 18:55) *
Xr_ini.cpp

Цитата(DiaWorld @ 25.06.2019, 18:55) *
Can't find variable

5 вариант: https://modders.pro/Xr_ini.cpp


Спасибо, помогло. Но после этого я ловлю ещё один вылет. Учитывая то, что я лишь скомпил исходники и ничего больше не делал, то мне больше всего интересно, неужели у других не было подобных вылетов ?

вылет
[error]exp​ression : xml_doc.NavigateToNode(path,index)
[error]Function : CUIXmlInit::InitStatic
[error]File : ui\UIXmlInit.cpp
[error]Line : 172
[error]Description : XML node not found
[error]Arguments : message_box_cdkey_in_use:picture
atanda
Мне кажется у тебя ресурсы не от последнего патча.
DiaWorld
Цитата(buffy @ 25.06.2019, 21:13) *
Мне кажется у тебя ресурсы не от последнего патча.


Не, качал весь оригинал с не без известной статьи "редактирование движка x-ray". Лишь пришлось заменить файл "problem_solver.h", т.к там была ошибка с оператором, и всё, изменений больше не было :/
xrModder
DiaWorld, покажи скриншот папки сталкер
DiaWorld
Цитата(xrModder @ 25.06.2019, 21:32) *
DiaWorld, покажи скриншот папки сталкер


http://prntscr.com/o6ky7a
xrModder
Цитата(DiaWorld @ 26.06.2019, 00:41) *
Цитата(xrModder @ 25.06.2019, 21:32) *
DiaWorld, покажи скриншот папки сталкер


http://prntscr.com/o6ky7a

Убери папку gamedata и файл gamedata.dbh и запусти.
DiaWorld
Цитата(xrModder @ 25.06.2019, 21:47) *
Цитата(DiaWorld @ 26.06.2019, 00:41) *
Цитата(xrModder @ 25.06.2019, 21:32) *
DiaWorld, покажи скриншот папки сталкер


http://prntscr.com/o6ky7a

Убери папку gamedata и файл gamedata.dbh и запусти.


Попробовал, всё тоже самое blink.gif
ForserX
Ну, думаю можно это и сюда вкинуть. 127 костей под SDK.

Assembly:
Код
This difference file has been created by IDA

xrECoreB.dll
00000000000C8F18: 40 7F


Source:
Код
//Function: bool CExportSkeleton::PrepareGeometry(u8 influence)
//Block:
    if (m_Source->BoneCount() > 64)
    {
        Msg("! Object cannot handle more than 64 bones.");
        return false;
    }
    
//Edit: Replace 64 to 128
xrModder
Цитата(DiaWorld @ 26.06.2019, 01:00) *
Цитата(xrModder @ 25.06.2019, 21:47) *
Цитата(DiaWorld @ 26.06.2019, 00:41) *
Цитата(xrModder @ 25.06.2019, 21:32) *
DiaWorld, покажи скриншот папки сталкер


http://prntscr.com/o6ky7a

Убери папку gamedata и файл gamedata.dbh и запусти.


Попробовал, всё тоже самое blink.gif

Кинь мне билд
Diesel
Вопрос нормальный:
Почему при включеном браузере Мазила Ф, мой движок впадает в ступор в первом меню? z_crazy.gif
И это давно, помоему это даже и в играх GSC есть.
xrModder
Цитата
SoC 1.0007rc1 SoC и CS

В чём различие в исходниках ТЧ в обеих архивах?
atanda
Цитата(xrModder @ 07.07.2019, 20:50) *
Цитата
SoC 1.0007rc1 SoC и CS

В чём различие в исходниках ТЧ в обеих архивах?

В SoC 1.0007rc1 - версия 1.0007rc1

Во втором, слитые под один тэг версии, примерно за промежуток от 2001 по 2007(кто-то говорил что по билд 2945). Но из совместимого там мало что осталось.

Фактически, т.к. файлы заменялись, собирается(не собирал, но в теме писали что с трудом) версия примерно равная финалочке.
xrModder
buffy, спасибо за информацию.

У кого-нибудь не осталось чистый настроенный v1.0007rc1?
cjayho
QUOTE (Дизель @ 06.07.2019, 20:26) *
Вопрос нормальный:
Почему при включеном браузере Мазила Ф, мой движок впадает в ступор в первом меню? z_crazy.gif
И это давно, помоему это даже и в играх GSC есть.


что мазила что гуглохрум юзают опенгл для рендера, может изза этого?
xrModder
Полезные ссылки

Как правильно собрать релиз-версию?
zibit_93
Цитата(cjayho @ 08.07.2019, 17:04) *
Цитата(Дизель @ 06.07.2019, 20:26) *
Вопрос нормальный:
Почему при включеном браузере Мазила Ф, мой движок впадает в ступор в первом меню? z_crazy.gif
И это давно, помоему это даже и в играх GSC есть.


что мазила что гуглохрум юзают опенгл для рендера, может изза этого?

С хромом-то проблем нет.
AndreySol
Для UI-классов есть какой аналог shedule_Update(u32 dt) классов инвентарных предметов?
У CLevel есть методы для работы с игровым временем. А есть ли где, что-то для реального времени?
AndreySol
В одном из UI-классов, на Update прописал такой вывод в лог:
Msg("Update - GetGameTime() = %u", Level().GetGameTime());
Начинаю НИ, через пару секунд от момента появления в коморе Сидора выхожу из игры. Смотрю лог, а там:
Цитата
Update - GetGameTime() = 507118612
Update - GetGameTime() = 507117462
Update - GetGameTime() = 507117522
Update - GetGameTime() = 507118762
Update - GetGameTime() = 507118852
и т.д. в том же духе...

Из описания GetGameTime: "возвращает время в миллисекундах относительно начала игры". 507118(8451минута\ 140часов)игровых секунд от начала НИ за пару секунд реального времени ??? Я что-то не то делаю ?
atanda
Цитата(AndreySol @ 11.07.2019, 05:42) *
А есть ли где, что-то для реального времени

стандартная библиотека time.h или ctime.h

-------
Любой оконный класс, образованный от CUIWindow имеет метод Update.
cjayho
QUOTE (AndreySol @ 11.07.2019, 13:23) *
В одном из UI-классов, на Update прописал такой вывод в лог:
Msg("Update - GetGameTime() = %u", Level().GetGameTime());
Начинаю НИ, через пару секунд от момента появления в коморе Сидора выхожу из игры. Смотрю лог, а там:
QUOTE
Update - GetGameTime() = 507118612
Update - GetGameTime() = 507117462
Update - GetGameTime() = 507117522
Update - GetGameTime() = 507118762
Update - GetGameTime() = 507118852
и т.д. в том же духе...

Из описания GetGameTime: "возвращает время в миллисекундах относительно начала игры". 507118(8451минута\ 140часов)игровых секунд от начала НИ за пару секунд реального времени ??? Я что-то не то делаю ?


Я бы нечто подобное поставил в тело SetGameTime и посмотрел какое время и когда ставится во время старта игры.
AndreySol
Вроде разобрался. Просто думал, что счетчик игрового времени - обычный инкрементный от начала НИ, а там видимо поразрядное хранение миллисекунд, секунд, минут и т.д.

Насчет ф-ций реального времени нашел у CLevel, унаследованные им от IPureClient:
IC u32 timeServer()
IC u32 timeServer_Async() <- тут миллисекундный таймер
IC u32 timeServer_Delta()
IC void timeServer_UserDelta(s32 d)
IC void timeServer_Correct(u32 sv_time, u32 cl_time);
xrModder
Собрал релизный v1.0007rc1, но вот проблема: звука нет. При запуске с параметром -dsound звук работает, хотя есть какие-то "щелчки" со звуком. Как исправить?
RayTwitty
xrModder, у меня однажды были какие-то проблемы с xrSound, помогло обновление 2010 студии до какого-то сервис-пака. Собирал репо xp-dev от КД (оказалось, что там в инструкции указана точная версия студии).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.