Все посты %s в %S - AMK Team
Перейти к контенту

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


Rolan

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

5 часов назад, dsh сказал:

рестриктор или его наследник с шейпом в виде сферы радиусом 0.1

Чисто по интересу - для чего нужны такие шейпы в игре ?

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


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

@dsh

И, типа, проще движок править, чем поменять размеры шейпов\сменить тип рестриктора ???

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


Ссылка на сообщение
17 часов назад, WOLFDOG сказал:

Возможно ли его как это экспортировать?

Посмотреть, как экспортированы другие UI-классы, и сделать по образу и подобию - не ужели не пришла такая мысля ?

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


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

В ЗП(ЧН ?), при наведении курсора в инвентаре на оружие к примеру, на индикаторах параметров выделяется вторым цветом параметры оружия в слоте. Поделитесь, кому не сложно, фрагментами кода из исходников ЗП(ЧН ?), которые отвечают именно за отрисовку двух цветов в полоске индикатора. А то лень велосипед изобретать.

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


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

В xrGame\clsid_game.h регистрируются сеты типа

#define CLSID_DETECTOR_SIMPLE        MK_CLSID('D','_','S','I','M','D','E','T')

Если требуется проверить принадлежность инвентарного предмета к определенному классу, например к вышеозначенным детекторам, то что нужно получить от объекта и с чем сравнить ?

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


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

@lordmuzer

В разделе редактирования движка, вопрос относится к работе с кодом движка, а не к игровым скриптам.:az1000106:

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


Ссылка на сообщение
В чем может быть причина несоответствия CLSID прописанного в clsid_game.h и реального CLSID инвентарного объекта ?
Добавил новый инвентарный объект, все сделал по образу и подобию уже существующих, но CLSID получаемый в игре через pIItem->object().CLS_ID не соответствует прописанному в clsid_game.h.

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


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

#include "Accumulator.h"
...

ADD(CAccumulator, CSE_ALifeItemAccumulator, CLSID_DEVICE_ACCUMULATOR, "device_accumulator");

ADD(CAccumulator, CSE_ALifeItemAccumulator, TEXT2CLSID("ACCUMUL"), "device_accumulator_s");

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


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

#define CLSID_DEVICE_ACCUMULATOR    MK_CLSID('D','_','A','C','C','U','M',' ')

class            = ACCUMUL

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


Ссылка на сообщение
3 часа назад, lordmuzer сказал:

можно проверить класс еще и в lua - должен быть device_accumulator_s

Проверил - все правильно...

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


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

@Zagolski, Вот к тебе лично вопрос. Почему к тебе - сам понимаешь...

Как подключить к 1.0007rc1 новые рендеры ? Я имею в виду - готовые модули...

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


Ссылка на сообщение
12 часов назад, Zagolski сказал:

Только внедрением через исходники движка.

Так это же понятно, тема то об редактировании движка. В исходниках чего и где прописать ?

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


Ссылка на сообщение
33 минуты назад, Tolyan сказал:

регаться на другом форуме вообще не хочется.

У тебя с этим проблемы ?

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

Вопрос с чего начать?

Начни с этого...

  • Согласен 2

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


Ссылка на сообщение
20 часов назад, Tolyan сказал:

Пока конечно, ни черта не понятно))

Начало для всех одинаковое:

- скачать исходники соответствующей версии движка.

- скачать VS от мелкомягких, установить, запустить.

- портировать проект в выбранную студию. Родная VS, в которой изначально создан движок ТЧ(для других частей не знаю) - Visual Studio 2005. В статье, с указанного выше ресурса, "Сборка движка X-Ray" - читаем как портировать проект на более современную студию(там для 2010 разжевано).

- собираем проект. Если все срослось - радуемся жизни. Если нет - курим скачанные из инета самоучители по работе с VS, задаем вопросы в профильных темах тута и на Stalkerin.

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

Изменено пользователем AndreySol
  • Спасибо 1
  • Согласен 1

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


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

@Minya, Тебе наверное в соседнюю тему "X-Ray extensions", там основное обсуждение ассемблерных врезок в движок...

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


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

Нашел такое в движке:

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

 

LPCSTR CFontManager::GetFontTexName (LPCSTR section)
{
    static char* tex_names[]={"texture800","texture","texture1600"};
    int def_idx        = 1;//default 1024x768
    int idx            = def_idx;

#if 0
    u32 w = Device.dwWidth;

    if(w<=800)        idx = 0;
    else if(w<=1280)idx = 1;
    else             idx = 2;
#else
    u32 h = Device.dwHeight;

    if(h<=600)        idx = 0;
    else if(h<=900)    idx = 1;
    else             idx = 2;
#endif

    while(idx>=0)
    {
        if( pSettings->line_exist(section,tex_names[idx]) )
            return pSettings->r_string(section,tex_names[idx]);
        --idx;
    }
    return pSettings->r_string(section,tex_names[def_idx]);
}

 

Поясните, как работает в этом случае #if 0... ?

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


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

 

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

void CFontManager::Render()
{
    FONTS_VEC_IT it        = m_all_fonts.begin();
    FONTS_VEC_IT it_e    = m_all_fonts.end();
    for (; it != it_e; ++it)
    {
        if (**it)
            (**it)->OnRender();
    }
}

Кто в курсе, для чего собственно это ->OnRender() ?

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


Ссылка на сообщение
24 минуты назад, lordmuzer сказал:

И потом на рендеринге худа каждый объект шрифта выводит все надписи которые им "написали"

Глядя на код, я было то же так подумал, но оказалось иначе. Я у себя решил добавить возможность использовать вновь добавленные шрифты без обязательной прописи их в движке. Получилось довольно элементарно:

xr_3da\xrGame\HUDManager.h

CGameFont*                InitializeCustomFont(LPCSTR section, u32 flags = 0);

xr_3da\xrGame\HUDManager.cpp

CGameFont* CFontManager::InitializeCustomFont(LPCSTR section, u32 flags)
{
    CGameFont* pFontAdd = NULL;
    InitializeFont(pFontAdd, section, flags);

    return pFontAdd;
}

xr_3da\xrGame\ui\UIXmlInit.cpp

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

 

bool CUIXmlInit::InitFont(CUIXml &xml_doc, LPCSTR path, int index, u32 &color, CGameFont *&pFnt)
{
    pFnt = NULL;
    color = GetColor(xml_doc, path, index, 0xff);

    shared_str font_name = xml_doc.ReadAttrib(path, index, "font", NULL);
    if(*font_name == NULL || xr_strlen(*font_name)<1)
    {
//        pFnt = NULL;
        return false;
    }

    if(*font_name)
    {
        if (!xr_strcmp(*font_name, ARIAL10_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontArial10Russian;
        }
        else if (!xr_strcmp(*font_name, ARIAL14_FONT_NAME))//"arial14"
        {
            pFnt = UI()->Font()->pFontArial14;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI19_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti19Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI22_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti22Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI32_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti32Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI50_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti50Russian;
        }
        else if(!xr_strcmp(*font_name, MEDIUM_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontMedium;
        }
        else if(!xr_strcmp(*font_name, SMALL_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontStat;
        }
        else if(!xr_strcmp(*font_name, LETTERICA16_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica16Russian;
        }
        else if(!xr_strcmp(*font_name, LETTERICA18_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica18Russian;
        }
        else if(!xr_strcmp(*font_name, LETTERICA25_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica25;
        }
        else if(!xr_strcmp(*font_name, DI_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontDI;
        }
        else
        {    // 
            pFnt = UI()->Font()->InitializeCustomFont(*font_name);
            if (!pFnt)
            {
                R_ASSERT3(0,"unknown font",*font_name);
                pFnt = NULL;
            }
        }
    }
    return true;
}

 

xr_3da\xrGame\ui\UIWindow_script.cpp

.....

CGameFont* GetFontCustom(LPCSTR section)
{return mngr().InitializeCustomFont(section);}

.....

def("GetFontCustom",            &GetFontCustom),

.....

Теперь просто указываем в xml-теге секцию шрифта из fonts.ltx, или в скриптовом вызове так же. Потестил - вроде все нормально. И как видно по коду, нигде m_all_fonts не задействован. Вот и хотел уточнить, на кой изначально инициализированные шрифты прогонялись через этот вектор и CFontManager::Render() ?

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


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

Надумал сделать не торгуемость для предметов в слотах(для всех). Нашел вроде подходящее место - CInventoryItem::CanTrade(), ну и правочка получилась такая:

bool CInventoryItem::CanTrade() const 
{
    bool res = true;
    if(m_pCurrentInventory)
        res = inventory_owner().AllowItemToTrade(this,m_eItemPlace);

    if (m_pCurrentInventory->InSlot((PIItem)this))
        res = false;

    return (res && m_flags.test(FCanTrade) && !IsQuestItem());
}

Лучше приведения к типу PIItem ничего не придумалось, все вроде нормально работает. Я в этих приведениях\преобразованиях типов не силен, по этому вопрос: так нормально будет, или могут быть проблемы ?

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

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


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

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