Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Редактирование движка
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
RayTwitty
Цитата(saas @ 04.01.2017, 19:38) *
Вам всё разработчики плохие, а сами даже разобраться с тем что они натворили не можете.

Я больше твоего там разобрал, поэтому имею право такое заявлять.
AndreySol
Ситуация, когда ГГ шманает какой-либо инв. ящик - где это в движке обрабатывается ? Понимаю, что скорее всего, где-то в классах Актера, но вот где ?
Antnigm
Вопрос к знатокам.
Shoker в этом посте поделился правками для HQ геометрии моделей.
Закинул FSkinned.ccp и папку shaders в каталог ...\engine.vc2008\Layers\xrRender, собрал все 4-е рендера, но динамические модели (оружие, нпс) вообще перестают отображаться. Если собирать рендеры с оригинальным FSkinned, то все нормально. (shaders_cache очищал). Собственно, что мною делается не так?
ForserX
Цитата(Antnigm @ 04.01.2017, 21:13) *
Вопрос к знатокам.
Shoker в этом посте поделился правками для HQ геометрии моделей.
Закинул FSkinned.ccp и папку shaders в каталог ...\engine.vc2008\Layers\xrRender, собрал все 4-е рендера, но динамические модели (оружие, нпс) вообще перестают отображаться. Если собирать рендеры с оригинальным FSkinned, то все нормально. (shaders_cache очищал). Собственно, что мною делается не так?


Шейдеры в геймдату игровую.
RayTwitty
Цитата(AndreySol @ 04.01.2017, 19:56) *
Ситуация, когда ГГ шманает какой-либо инв. ящик - где это в движке обрабатывается ? Понимаю, что скорее всего, где-то в классах Актера, но вот где ?

CInventoryBox.
Antnigm
Цитата(Forser @ 04.01.2017, 21:46) *
Шейдеры в геймдату игровую.
Настолько уже завозился с сырцами, что забыл про банальную геймдату. Спасибо! wink.gif
AndreySol
Насчет моей проблемы с неверно работающим новым объектом. Пока перепроверял еще раз все, нашел ошибку в object_factory_register.cpp :
ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, TEXT2CLSID("E_NEW_OBJ"), "new_obj_s");
E_NEW_OBJ - 9 символов, а должно быть 8. Ну, думаю нашел траблу... Переделал все: в движке, в class_registrator.script, в конфиге предмета. Собрал xrGame - и получил облом. Ничего не изменилось - все та-же трабла. Слов нет, одни... кхм.
Правда в процессе поисков мысля нарисовалась - может надо что-то добавить в нет-пакетах ? Ведь все на них построено. Где смотреть по ним, подскажите...

Цитата(RayTwitty @ 04.01.2017, 23:36) *
CInventoryBox.

Точнее спрошу: UI-окно, в котором показывается инв. актера и ящика - это где инициализируется и обрабатываются все действия мышой и клавой ?
Молния в вакууме
Цитата(AndreySol @ 05.01.2017, 00:07) *
UI-окно, в котором показывается инв. актера и ящика - это где инициализируется и обрабатываются все действия мышой и клавой ?

Это UICarBodyWnd.
ForserX
Давно ничего не спрашивал, непривычно как-то. Ну да ладно.

Не разобрался я в хейдерах OPC в составе xrCDB. Собственно вопрос: какая версия используется в xr?
Antnigm
Снова возможно задам глупый вопрос. Тапками прошу не кидаться.
Пытаюсь в ЗП восстановить консольную команду дальности прорисовки травы "r__detail_radius".
Добавил её по аналогии с "r__detail_density" в xrRender_console.cpp:
Код
float        ps_r__Detail_density        = 0.3f;
float        ps_r__Detail_radius        = 100.f;
...
CMD4(CCC_Float,        "r__detail_radius",        &ps_r__Detail_radius,        49.f,    500.f    );
CMD4(CCC_Float,        "r__detail_density",    &ps_r__Detail_density,        .1f,    0.6f    );

в xrRender_console.h:
Код
extern ECORE_API    float        ps_r__Detail_density;
extern ECORE_API    float        ps_r__Detail_radius;

В консоли команда появляется, пределы верные, но результат нулевой.
Сдается мне, что затычка в этом месте - DetailManager_Decompress.cpp:
Код
    float        density        = ps_r__Detail_density;
    float        jitter        = density/1.7f;
    u32            d_size        = iCeil    (dm_slot_size/density);
    svector<int,dm_obj_in_slot>        selected;

По аналогии нужно что-то добавить. Вопрос - что?
AndreySol
Сделал список моих действий по добавлению нового объекта в игру, посмотрите, мож ошибку увидите:
тынц
в class_registrator.script
Код
cs_register(object_factory, "CNewObjectTest",  "se_item.se_newobj", ("E_NEWOBJ"), "new_obj_s")
в se_item.script
Код
class "se_newobj" (cse_alife_item_custom_newobj)
function se_newobj:__init(section) super(section)
end
..... далее все как у других классов

в bind_newobj.script
Код
function init(obj)
    local new_binder = newobj_binder(obj)
    obj:bind_object(new_binder)
end

class "newobj_binder" (object_binder)
function newobj_binder:__init(obj) super(obj)
     ......
end
..... далее все как у других классов
в конфиге предмета:
Код
[newobj_base]
GroupControlSection    = spawn_group
discovery_dependency    =
class            = E_NEWOBJ
cform            = skeleton
full_icon_name        = npc_icon_newobj
slot            = 11
script_binding        = bind_newobj.init

additional_inventory_weight    = 0
additional_inventory_weight2 = 0

;----------------------------
[newobj_test1]:newobj_base
.... далее все как обычно
Теперь движок:
файл xrGame\object_factory_register.cpp
Код
# include "NewObjectTest.h"
....
ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, CLSID_E_NEWOBJ, "new_obj");
....
ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, TEXT2CLSID("E_NEWOBJ"), "new_obj_s");
файл xrGame\clsid_game.h
Код
#define CLSID_E_NEWOBJ MK_CLSID('E','Q','_','N','E','W','O','B')
файл xrGame\xrServer_Objects_ALife_Items.h
Код
SERVER_ENTITY_DECLARE_BEGIN( CSE_ALifeItemNewObjectTest, CSE_ALifeItem)
    u32        m_ef_equipment_type;
             CSE_ALifeItemNewObjectTest(LPCSTR caSection);
    virtual        ~ CSE_ALifeItemNewObjectTest();
    virtual u32    ef_equipment_type() const;
    virtual BOOL    Net_Relevant();
SERVER_ENTITY_DECLARE_END
add_to_type_list( CSE_ALifeItemNewObjectTest)
#define script_type_list save_type_list( CSE_ALifeItemNewObjectTest)
файл xrGame\xrServer_Objects_ALife_Items.cpp
Код
CSE_ALifeItemNewObjectTest::CSE_ALifeItemNewObjectTest(LPCSTR caSection) : CSE_ALifeItem(caSection)
{
    m_ef_equipment_type = pSettings->r_u32(caSection, "ef_equipment_type");
}
CSE_ALifeItemNewObjectTest::~CSE_ALifeItemNewObjectTest()
{
}
.... далее все как у других классов
файл xrGame\xrServer_Objects_ALife_Items_script2.cpp
Код
void CSE_ALifeItemNewObjectTest::script_register(lua_State *L)
{
    module(L)[
        luabind_class_item1(
            CSE_ALifeItemNewObjectTest,
            "cse_alife_item_custom_newobj",
            CSE_ALifeItem
            )
    ];
}
далее уже класс CNewObjectTest, но его весь приводить не буду, много там тексту - содран с класса броников, что не нужно убрано, оставлено пока основное.
Для теста добавлял вывод сообщения в лог в конструкторы CSE_ALifeItemNewObjectTest и CNewObjectTest, и соответственно в такие-же классы броников. При создании объекта(спавн в инв. ГГ) - в логе сообщения из классов броников, а из нового класса нет. При этом объект можно выбросить и снова взять, вылетов вроде нет.
abramcumner
Цитата(AndreySol @ 05.01.2017, 13:13) *
Код
[newobj_test1]:newobj_base
.... далее все как обычно

Возможно ошибка скрыта словами "далее все как обычно".
AndreySol
Цитата(abramcumner @ 05.01.2017, 16:15) *
Возможно ошибка скрыта словами "далее все как обычно".
А что в конфиге объекта может так мешать движку ?
Вот остальное из конфига:
тынц
$spawn = "newobj\newobj_test1"
visual = equipments\novice_suit <-- это оставил от броника, новой модели пока нет

ef_equipment_type = 3

cost = 7000
inv_weight = 1.95

inv_name = newobj_test1_name
inv_name_short = newobj_test1_name
description = newobj_test1_desc
inv_grid_x = 12
inv_grid_y = 27
inv_grid_width = 2
inv_grid_height = 2

full_icon_name = npc_icon_newobj_test1

; NO RESISTANCE
burn_protection = 0.15
strike_protection = 0.15
shock_protection = 0.15
wound_protection = 0.15
radiation_protection = 0.15
telepatic_protection = 0.15
chemical_burn_protection = 0.15
explosion_protection = 0.15
fire_wound_protection = 0.15

immunities_sect = sect_newobj_test1_immunities

[sect_newobj_test1_immunities] ;коэффициенты иммунитета самого костюма
burn_immunity = 0.04
strike_immunity = 0.01
shock_immunity = 0.04
wound_immunity = 0.025
radiation_immunity = 0.00
telepatic_immunity = 0.00
chemical_burn_immunity = 0.04
explosion_immunity = 0.04
fire_wound_immunity = 0.015
ForserX
(Сам спросил, сам и отвечу)
Цитата(Forser @ 05.01.2017, 00:23) *
Собственно вопрос: какая версия используется в xr?

Похоже, что модифицированный 1.2
Подобные мелкие модификации кода



И перенесённый куда-то HPoint
apostol1999
Не могу понять, почему после правок на R2, есть тень от травы. А вот на R3/R4, нету, при таких же правок. Даже с ЛА... не канает.
Можете помочь?

Правка от сюда:
Клик
http://www.gameru.net/forum/index.php?s=&showtopic=55777&view=findpost&p=1550855
ForserX
Цитата(apostol1999 @ 05.01.2017, 16:35) *
Правка от сюда:
Засуну для удобства слова Никиты сюда
Так значит:Тень травы в файле DetailManager_VS.cpp после
RCache.stat.r.s_details.add (dwCNT_verts);
}

добавить
// KD: we must not clear vis on r2 since we want details shadows
#if RENDER==R_R2 || RENDER==R_R3 || RENDER==R_R4
if ((ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_SMAP == RImplementation.phase)) // phase smap with shadows
|| (ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase) && (!RImplementation.is_sun())) // phase normal with shadows without sun
|| (!ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase))) // phase normal without shadows
#endif
Далее в r2.cpp, а также в r3.cpp и в r4.cpp добавить функцию
BOOL CRender::is_sun()
{
if (o.sunstatic) return FALSE;
Fcolor sun_color = ((light*)Lights.sun_adapted._get())->color;
return (ps_r2_ls_flags.test(R2FLAG_SUN) && (u_diffuse2s(sun_color.r, sun_color.g, sun_color.B )>EPS));
}
Затем в r2.h, а также в r3.cpp и в r4.cpp добавить идентификатор
BOOL is_sun();
Вроде всё для тень от травы

Самое первое, что заметил:


Нужный тебе метод(hw_Render_dump) не компилируется выше R2 в данном файле

Так что, посмотри в сторону dx10DetailManager_VS.cpp
apostol1999
Цитата(Forser @ 05.01.2017, 20:11) *
Цитата(apostol1999 @ 05.01.2017, 16:35) *
Правка от сюда:
Засуну для удобства слова Никиты сюда
Так значит:Тень травы в файле DetailManager_VS.cpp после
RCache.stat.r.s_details.add (dwCNT_verts);
}

добавить
// KD: we must not clear vis on r2 since we want details shadows
#if RENDER==R_R2 || RENDER==R_R3 || RENDER==R_R4
if ((ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_SMAP == RImplementation.phase)) // phase smap with shadows
|| (ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase) && (!RImplementation.is_sun())) // phase normal with shadows without sun
|| (!ps_r2_ls_flags.test(R2FLAG_SUN_DETAILS) && (RImplementation.PHASE_NORMAL == RImplementation.phase))) // phase normal without shadows
#endif
Далее в r2.cpp, а также в r3.cpp и в r4.cpp добавить функцию
BOOL CRender::is_sun()
{
if (o.sunstatic) return FALSE;
Fcolor sun_color = ((light*)Lights.sun_adapted._get())->color;
return (ps_r2_ls_flags.test(R2FLAG_SUN) && (u_diffuse2s(sun_color.r, sun_color.g, sun_color.B )>EPS));
}
Затем в r2.h, а также в r3.cpp и в r4.cpp добавить идентификатор
BOOL is_sun();
Вроде всё для тень от травы

Самое первое, что заметил:


Нужный тебе метод(hw_Render_dump) не компилируется выше R2

Так что, посмотри в сторону dx10DetailManager_VS.cpp



А ведь верно, как я мог забыть... Благодарю, уже всё сделал!)
jamakasi
Цитата(saas @ 04.01.2017, 19:38) *
а какое это всё имеет отношение к тому что ООП усложняет понимание программы, как следствие её доработку, создаёт лишний код(геттеры/сеттеры)?

Фишка в том что каждый объект становится безопасным и самодостаточным. К примеру я описал некий класс в котором реализовал все то что необходимо. Если некая переменная в нем должна только читаться но не записываться то я делаю только геттер и тем самым обезопашиваю кого угодно впоследствии от выстрела себе в ногу потому что он по незнанию изменил значение этой переменной. Другой пример с многопоточкой, я оберну все потокозависимое внутри сеттера\геттера и остальные классы даже не будут знать о том что надо думать о потокобезопасности. Такой же бонус от выстела себе в ногу состоит и в кастовании типов, всю магию каста я могу спрятать внутри класса а другие классы даже просто будут получать именно тот тип\результат который им нужен. И кстати простыней кода в ООП в разы меньше когда речь идет о большом софте. Про "понимание" чужого кода вообще молчу, ООП с правильными паттернами порвет любого. В джаве например все очень хорошо с этим. в с\с++ хуже ибо там bBoolean\iCount\sStrroka что собственно дико вымораживает но еще больше вымораживает дичайшее сокращение названий переменных до 2-3 букв и сиди потом гадай что это за какаха и откуда растет.
AndreySol
Кто нить может пояснить работу ф-ции CWeaponMagazined::UnloadMagazine ? Что в ней и как происходит...
Молния в вакууме
AndreySol, ничего сложного там.

Сначала считается какое количество патронов какого типа было в магазине, патроны удаляются из магазина.
Потом, если надо, патроны добавляются в инвентарь. Если в инвентаре есть пачка такого типа, патроны добавляются туда. Если пачки нет или там недостаточно места, спаунится новая.
Vampir35
Уже устал долбиться в стену, не понимая что происходит, прошу помощи smile.gif Занялся я детекторами ЧН/ЗП, примерно представляю как оно там работает, начал "перенос" функционала на ТЧ и завис еще в начале. Удалил все в классе детектора что было, начинаю постепенно делать свое. Пока - примитив. Показать худ и три анимации, собственно idle, draw, holster. Вылетов нет, детектор прекрасно спавнится, но нет худа вообще. Т.е. все сообщения в лог выводятся (накидал в те участки кода, где должны воспроизводится анимации) а самого худа нет. Будто он не рисуется. Думаю, где-то проглядел, что худ надо "нарисовать", но не могу найти где. В классе артефактов ничего подобного не нашел (смотрел его, так как худ самый простой). Очень надеюсь на подсказку чего искать.
CustomDetector.h

Код
#pragma once

#include "hud_item_object.h"

class CCustomDetector :        public CHudItemObject {
private:
    typedef            CHudItemObject    inherited;
public:
                    CCustomDetector        ();
    virtual            ~CCustomDetector    ();

    virtual void                    Load                            (LPCSTR section);
    
    virtual BOOL                    net_Spawn                        (CSE_Abstract* DC);
    virtual void                    net_Destroy                        ();

    virtual void                    OnH_A_Chield                    ();
    virtual void                    OnH_B_Independent                (bool just_before_destroy);
    
    virtual void                    UpdateCL                        ();
    virtual void                    shedule_Update                    (u32 dt);    

    virtual void                    Hide                ();
    virtual void                    Show                ();
    //инициализация если вещь в активном слоте или спрятана на OnH_B_Chield
    virtual void            OnActiveItem();
    virtual void            OnHiddenItem();
    virtual void                    renderable_Render();
    virtual void                    OnStateSwitch        (u32 S);
    virtual void                    OnAnimationEnd        (u32 state);

    virtual    void                    UpdateXForm            ();

        enum EDETHudStates {
        eIdle        = 0,
        eShowing,
        eHiding,
        eHidden,
    };

protected:
    
    MotionSVec                        m_anim_idle;
    MotionSVec                        m_anim_show;
    MotionSVec                        m_anim_hide;
};



CustomDetector.cpp

Код
#include "stdafx.h"
#include "customdetector.h"
#include "hudmanager.h"
#include "inventory.h"

CCustomDetector::CCustomDetector()
{
    SetSlot (DETECTOR_SLOT);
}

CCustomDetector::~CCustomDetector()
{

}

void CCustomDetector::Load(LPCSTR section)
{
    inherited::Load            (section);
    
    R_ASSERT            (m_pHUD);
    animGet                (m_anim_idle,                    pSettings->r_string(*hud_sect,"anim_idle"));
    animGet                (m_anim_hide,                    pSettings->r_string(*hud_sect,"anim_hide"));
    animGet                (m_anim_show,                    pSettings->r_string(*hud_sect,"anim_show"));
}

BOOL CCustomDetector::net_Spawn(CSE_Abstract* DC)
{
    BOOL result = inherited::net_Spawn(DC);
    SetState                    (eHidden);
    return result;    
}

void CCustomDetector::net_Destroy()
{
    inherited::net_Destroy        ();
}

void CCustomDetector::OnH_A_Chield()
{
    inherited::OnH_A_Chield        ();
}

void CCustomDetector::OnH_B_Independent(bool just_before_destroy)
{
    inherited::OnH_B_Independent(just_before_destroy);

    if (m_pHUD)
        m_pHUD->Hide();
}

void CCustomDetector::OnActiveItem()
{
    inherited::OnActiveItem();
    //если мы занружаемся и оружие было в руках
    SetState(eIdle);
    SetNextState(eIdle);
    if (m_pHUD) m_pHUD->Show();
}

void CCustomDetector::OnHiddenItem()
{
    inherited::OnHiddenItem();
    if (m_pHUD)    m_pHUD->Hide();
    SetState(eHidden);
    SetNextState(eHidden);
}

void CCustomDetector::UpdateCL()
{
    inherited::UpdateCL            ();
}

void CCustomDetector::shedule_Update        (u32 dt)
{
    inherited::shedule_Update        (dt);
}

#include "inventoryOwner.h"
#include "Entity_alive.h"

void CCustomDetector::UpdateXForm()
{
    if (Device.dwFrame!=dwXF_Frame)
    {
        dwXF_Frame            = Device.dwFrame;

        if (0==H_Parent())    return;

        // Get access to entity and its visual
        CEntityAlive*        E        = smart_cast<CEntityAlive*>(H_Parent());
        
        if(!E)                return;

        const CInventoryOwner    *parent = smart_cast<const CInventoryOwner*>(E);
        if (parent && parent->use_simplified_visual())
            return;

        VERIFY                (E);
        CKinematics*        V        = smart_cast<CKinematics*>    (E->Visual());
        VERIFY                (V);

        // Get matrices
        int                    boneL,boneR,boneR2;
        E->g_WeaponBones    (boneL,boneR,boneR2);

        boneL = boneR2;

        V->CalculateBones    ();
        Fmatrix& mL            = V->LL_GetTransform(u16(boneL));
        Fmatrix& mR            = V->LL_GetTransform(u16(boneR));

        // Calculate
        Fmatrix                mRes;
        Fvector                R,D,N;
        D.sub                (mL.c,mR.c);    D.normalize_safe();
        R.crossproduct        (mR.j,D);        R.normalize_safe();
        N.crossproduct        (D,R);            N.normalize_safe();
        mRes.set            (R,N,D,mR.c);
        mRes.mulA_43        (E->XFORM());
//        UpdatePosition        (mRes);
        XFORM().mul            (mRes,offset());
    }
}

void CCustomDetector::Hide()
{
    SwitchState(eHiding);
}

void CCustomDetector::Show()
{
    SwitchState(eShowing);
}

void CCustomDetector::OnStateSwitch(u32 S)
{
    inherited::OnStateSwitch    (S);
    switch(S){
    case eShowing:
        {
             m_pHUD->animPlay(random_anim(m_anim_show),        FALSE, this, S);
             Msg("Достаем детектор");
        }break;
    case eHiding:
        {
             m_pHUD->animPlay(random_anim(m_anim_hide),        FALSE, this, S);
             Msg("Прячем детектор");
        }break;
    case eIdle:
        {
        if (m_anim_idle.size())
             m_pHUD->animPlay(random_anim(m_anim_idle),        FALSE, NULL, eIdle);
             Msg("Держим в руке детектор");
        }break;
    };
}

void CCustomDetector::renderable_Render()
{
    inherited::renderable_Render();
}

void CCustomDetector::OnAnimationEnd(u32 state)
{
    inherited::OnAnimationEnd    (state);
    switch(state)
    {
    case eShowing:
        {
            SwitchState                    (eIdle);
        } break;
    }
}

RayTwitty
Цитата(Vampir35 @ 06.01.2017, 01:11) *
Удалил все в классе детектора что было, начинаю постепенно делать свое.

Я бы для начала сделал дубликат уже 100%-работающего класса, только с другим именем. Взять те же гранаты или худ от артефактов. И после успешного запуска, выпиливать из него лишнее и добавлять свое.
Antnigm
Никто по поводу дальности прорисовки травы подсказать не может? Спрашивал здесь. Если нет, то пойду тогда ковырять исходники LA.
ForserX


Вроде аналогично std::memset, но я не уверен.
RayTwitty
Цитата(Antnigm @ 06.01.2017, 12:43) *
Никто по поводу дальности прорисовки травы подсказать не может?

https://xp-dev.com/sc/change/204486/14
Делай как тут.
mortan
Цитата(Antnigm @ 06.01.2017, 12:43) *
Никто по поводу дальности прорисовки травы подсказать не может? Спрашивал здесь. Если нет, то пойду тогда ковырять исходники LA.

ответ очень простой - скачай сорцы CoC ( они тут) и пройдись поиском по сорцам ( искать DETAIL_RADIUS )
AndreySol
Подскажите, плз, как имея ID объекта получить его инвентарь, как СInventory(или как правильнее будет).
AndreySol
Требуется сохранить\восстановить переменную класса инвентарного предмета. Если я правильно понимаю, это надо делать в net_Export\net_Import ?
Попробовал так:
в net_Export
Код
    BYTE tS = 0;
    if (переменная == true)
        tS = 1;
    P.w_u8(tS);
в net_Import
Код
    BYTE tS = P.r_u8();
    if ( tS == 1)
        переменная = true;
    else
        переменная = false;
Результат - игра виснет на синхронизации. Что не так, как исправить ?
autistic
зачем столько лишнего написал?
Код
P.w_u8(переменная);

Код
переменная = P.r_u8();

не?
AndreySol
Цитата(refuse @ 07.01.2017, 17:16) *
зачем столько лишнего написал?

Если сократить, до предложенного Вами варианта, игра виснуть перестанет ?
autistic
Цитата(AndreySol @ 07.01.2017, 18:32) *
Если сократить, до предложенного Вами варианта, игра виснуть перестанет ?

нет. читай лог, смотри под отладчиком что происходит в момент синхронизации.
Antnigm
Цитата(RayTwitty @ 06.01.2017, 17:47) *

Цитата(mortan @ 06.01.2017, 17:49) *
ответ очень простой - скачай сорцы CoC ( они тут) и пройдись поиском по сорцам ( искать DETAIL_RADIUS )

Спасибо. С дальностью разобрался. z_1.gif (плюсанул за помощь)
Теперь думаю, как пофиксить растянутое в ЗП небо и заставить солнце по конфигам ходить по аналогии с X-ray Extensions...
ForserX
Цитата(Antnigm @ 07.01.2017, 19:46) *
Цитата(RayTwitty @ 06.01.2017, 17:47) *

Цитата(mortan @ 06.01.2017, 17:49) *
ответ очень простой - скачай сорцы CoC ( они тут) и пройдись поиском по сорцам ( искать DETAIL_RADIUS )

Спасибо. С дальностью разобрался. z_1.gif (плюсанул за помощь)
Теперь думаю, как пофиксить растянутое в ЗП небо и заставить солнце по конфигам ходить по аналогии с X-ray Extensions...


По небу в закромах вроде был пост. Там одну структуру надо было заменить на аналогичную из ЧН/ТЧ. ЕМНИП
mortan
AndreySol, а в серверный класс ты дописал переменную? Её тоже нужно там пилить иначе ничего не получится. По солнцу видел только такой фикс (CoC) - Environment.cpp
float AZ = acosf(cosAZ); заменить на float AZ = acosf(cosAZ) + PI;
Емнип на этом форуме тоже всплывала эта информация
AndreySol
Цитата(mortan @ 07.01.2017, 21:15) *
а в серверный класс ты дописал переменную?

Да, уже дописал, все заработало laugh.gif . Пока привыкнешь ко всей цепочке классов...
AndreySol
Бывает иногда такая ситуация, что при открытии инвентаря, оружие не прячется. И затем, при манипуляциях в открытом инвентаре, происходит "самовольная" перезарядка оружия, если оно было разряжено. Если я правильно понимаю, перезарядка происходит по нажатию левой кнопы мыша, что при активном оружии означает выстрел и вызывает перезарядку. Но тогда почему, при последующих, после перезарядки, нажатиях ЛКМ оружие не стреляет ? Или перезарядка происходит по иной причине ? Кто нить пытался разобраться с этим багом на уровне движка(исходников) ?
mortan
Цитата(AndreySol @ 08.01.2017, 21:54) *
Бывает иногда такая ситуация, что при открытии инвентаря, оружие не прячется. И затем, при манипуляциях в открытом инвентаре, происходит "самовольная" перезарядка оружия, если оно было разряжено. Если я правильно понимаю, перезарядка происходит по нажатию левой кнопы мыша, что при активном оружии означает выстрел и вызывает перезарядку. Но тогда почему, при последующих, после перезарядки, нажатиях ЛКМ оружие не стреляет ? Или перезарядка происходит по иной причине ? Кто нить пытался разобраться с этим багом на уровне движка(исходников) ?

это не баг а фича. Зачем оно надо я хз.
AndreySol
Цитата(mortan @ 09.01.2017, 00:05) *
это не баг а фича.

Код
void CUIInventoryWnd::Show()
{
......
......
    pActor->SetWeaponHideState(INV_STATE_INV_WND, true);
......
......
    SendInfoToActor("ui_inventory");
......
}
судя по коду, при открытом окне инвентаря - оружие должно быть спрятано. Значит все таки баг...
Antnigm
Цитата(Forser @ 07.01.2017, 19:48) *
По небу в закромах вроде был пост. Там одну структуру надо было заменить на аналогичную из ЧН/ТЧ. ЕМНИП
Ага. В dxEnvironmentRender.cpp нужно в одном массиве 2-ки заменить на 1-ки. Уже сделал. Вообще не понимаю, зачем так небо "сжали". Чтобы на игрока "давило"? Тогда бы и скайбоксы новые сделали. Но, видимо, было лень...
Цитата(mortan @ 07.01.2017, 20:15) *
По солнцу видел только такой фикс (CoC) - Environment.cpp
float AZ = acosf(cosAZ); заменить на float AZ = acosf(cosAZ) + PI;
Емнип на этом форуме тоже всплывала эта информация
Посмотрю. Спасибо за наводку.
ForserX


Опечатка или можно спокойно привести к такому виду?
RayTwitty
Цитата(Forser @ 09.01.2017, 17:31) *
Опечатка

Не опечатка, просто экономия памяти под переменную.

Цитата(Forser @ 09.01.2017, 17:31) *
можно спокойно привести к такому виду?

Можно.
ForserX
Цитата(RayTwitty @ 09.01.2017, 18:22) *
Не опечатка, просто экономия памяти под переменную.


Не часто вижу экономию памяти, ладно. Спасибо.
RayTwitty
Forser, в 2к17 такого рода экономия уже не актуальна все равно.
ForserX
Цитата(RayTwitty @ 09.01.2017, 18:31) *
Forser, в 2к17 такого рода экономия уже не актуальна все равно.


Как и сам xr. Имхо, конечно же.
RedMagic
Цитата(RayTwitty @ 09.01.2017, 18:22) *
просто экономия памяти под переменную.

Это не то что экономия на спичках, это экономия на спичечных головках biggrin.gif
А вообще больше похоже на обычный копипаст. Или просто для простоты восприятия сделано (второй вариант тоже правильный, но менее читабельный).

Цитата(Forser @ 09.01.2017, 18:34) *
Как и сам xr. Имхо, конечно же.

Не ИМХО, а суровая правда. Тот же UE на голову выше XR.
ForserX
Цитата(STALKER2011x @ 09.01.2017, 18:43) *
Или просто для простоты восприятия сделано (второй вариант тоже правильный, но менее читабельный).

Сделав разбитие на строки в некоторых местах он будет более читабельным, но мне так не удобно.
Antnigm
Цитата(mortan @ 07.01.2017, 20:15) *
По солнцу видел только такой фикс (CoC) - Environment.cpp
float AZ = acosf(cosAZ); заменить на float AZ = acosf(cosAZ) + PI;
Емнип на этом форуме тоже всплывала эта информация

Спасибо! biggrin.gif Солнышко стало как положено ходить с востока на запад.
Press me
Карлан
Возвращаясь к вопросу о 204.

Не, ну я конечно понимаю что у нас в команде одни тупые идиоты во главе со мной - да, только кто-нибудь придумал как переписать # на олдовый вариант без селекта?

Еще, чтоб совсем наверняка, я воткнул лошадиную инъекцию в десять кубиков с pairs, под дебагом разумеется, ну мало-ли smile.gif.

P.S. Только не надо заливать что у вас все круто работает. Докажите тогда, что нет модов где с индексированными массивами работают всегда православно и у солянщиков в один прекрасный момент все не улетит. А я пока в печали sad.gif.

Цитата(Forser @ 09.01.2017, 19:26) *
Не часто вижу экономию памяти, ладно. Спасибо.

Смотри шейред дату biggrin.gif. Даже тогда не понятно нафига кешировали, сейчас и подавно, а это драное кеширование как смирительная рубаха на квестовиках.

Цитата(AndreySol @ 08.01.2017, 22:54) *
Кто нить пытался разобраться с этим багом на уровне движка(исходников) ?

Попробуй пересади но веапон с апдейта на события, моментальное прозрение гарантировано.
Antnigm
Вернул для травы тень на R2-R4, однако она отрисовывается буквально в паре метрах от актора. Какой параметр отвечает за дальность?
RayTwitty
Antnigm, r2_sun_near
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.