Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » [SoC] Модострой: вопросница
[SoC] Модострой: вопросница
Российская Федерация  Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 832
Награды: 13
Регистрация: 11.06.2015

[SoC] Модострой: вопросница

Тема посвящена моддингу на платформе Тень Чернобыля.

Соседние темы: Чистое Небо / Зов Припяти.


  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском по разделу, ответ на него, вероятно, уже есть.

  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке справочнике. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.

  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).

  • Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
  •   Злобная реклама
    Воскресенье, 31.12.2017, 13:17
    Статус:
    Сообщений: 666
    Регистрация: 11.06.2015
    Российская Федерация  denis2000
    Вторник, 09.01.2018, 18:34 | Сообщение # 46
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 3206
    Награды: 10
    Регистрация: 19.07.2013

    BeeRsek, Проблема не в этом.
    Российская Федерация  BeeRsek
    Вторник, 09.01.2018, 18:54 | Сообщение # 47
    Тайна Зоны: История Стрелка
    Статус:
    Опытный:
    Сообщений: 1285
    Награды: 6
    Регистрация: 24.01.2011

    снизил настройки компиляции - пошло дальше, но после просчета лайтмапов,на стадии Converting to OGFs выдало такое:

    FATAL ERROR

    [error]Expression : assertion failed
    [error]Function : OGF::Optimize
    [error]File : I:\xray-svn\xrLC\OGF_Face.cpp
    [error]Line : 153
    [error]Description : x_faces.size() == faces.size()
    Российская Федерация  xr_Sanya
    Вторник, 09.01.2018, 21:07 | Сообщение # 48
    Статус:
    Бывалый:
    Сообщений: 751
    Награды: 1
    Регистрация: 19.08.2015

    BeeRsek, Проверьте модели, какая то модель не может конвертироваться в OGF из за того что компилятор не может разбить полигоны на более мелкие, еще такая ошибка возможна если криво декомпилированную локацию заного пытаются скомпилить
    Сообщение отредактировал xr_Sanya - Вторник, 09.01.2018, 21:21
    Российская Федерация  Graff46
    Среда, 10.01.2018, 22:46 | Сообщение # 49
    Новое Время
    Статус:
    Бывалый:
    Сообщений: 680
    Награды: 4
    Регистрация: 02.05.2013

    Где есть описание класса LVL_CHNG? В lua_help его нет.
    Коста Рика  Jargon
    Среда, 10.01.2018, 23:35 | Сообщение # 50
    Статус:
    Бывалый:
    Сообщений: 1068
    Награды: 3
    Регистрация: 24.06.2012

    Цитата Graff46 ()
    Где есть описание класса LVL_CHNG? В lua_help его нет.

    #define CLSID_LEVEL_CHANGER MK_CLSID('L','V','L','C','H','N','G','R')
    //Server and Client classes
    Код

    ////////////////////////////////////////////////////////////////////////////
    //    Module   : xrServer_Objects_ALife.cpp
    //    Created  : 19.09.2002
    //  Modified  : 04.06.2003
    //    Author  : Oles Shyshkovtsov, Alexander Maksimchuk, Victor Reutskiy and Dmitriy Iassenev
    //    Description : Server objects for ALife simulator
    ////////////////////////////////////////////////////////////////////////////
    // CSE_ALifeLevelChanger
    ////////////////////////////////////////////////////////////////////////////
    CSE_ALifeLevelChanger::CSE_ALifeLevelChanger(LPCSTR caSection) : CSE_ALifeSpaceRestrictor(caSection)
    {
        m_tNextGraphID    = GameGraph::_GRAPH_ID(-1);
        m_dwNextNodeID    = u32(-1);
        m_tNextPosition.set   (0.f,0.f,0.f);
        m_tAngles.set    (0.f,0.f,0.f);
    #ifdef XRSE_FACTORY_EXPORTS
        fp_data.inc     ();
    #endif
        m_bSilentMode    = FALSE;
    }

    CSE_ALifeLevelChanger::~CSE_ALifeLevelChanger()
    {
    #ifdef XRSE_FACTORY_EXPORTS
        fp_data.dec     ();
    #endif
    }

    void CSE_ALifeLevelChanger::STATE_Read  (NET_Packet    &tNetPacket, u16 size)
    {
        inherited::STATE_Read  (tNetPacket,size);
        if (m_wVersion < 34) {
      tNetPacket.r_u32  ();
      tNetPacket.r_u32  ();
        }
        else {
      tNetPacket.r   (&m_tNextGraphID,sizeof(m_tNextGraphID));
      tNetPacket.r_u32  (m_dwNextNodeID);
      tNetPacket.r_float  (m_tNextPosition.x);
      tNetPacket.r_float  (m_tNextPosition.y);
      tNetPacket.r_float  (m_tNextPosition.z);
      if (m_wVersion <= 53)
       m_tAngles.set  (0.f,tNetPacket.r_float(),0.f);
      else
       tNetPacket.r_vec3    (m_tAngles);
        }
        tNetPacket.r_stringZ  (m_caLevelToChange);
        tNetPacket.r_stringZ  (m_caLevelPointToChange);

        if (m_wVersion > 116)
      m_bSilentMode   = !!tNetPacket.r_u8();

    }

    void CSE_ALifeLevelChanger::STATE_Write    (NET_Packet    &tNetPacket)
    {
        inherited::STATE_Write  (tNetPacket);
        tNetPacket.w    (&m_tNextGraphID,sizeof(m_tNextGraphID));
        tNetPacket.w_u32   (m_dwNextNodeID);
        tNetPacket.w_float   (m_tNextPosition.x);
        tNetPacket.w_float   (m_tNextPosition.y);
        tNetPacket.w_float   (m_tNextPosition.z);
        tNetPacket.w_vec3   (m_tAngles);
        tNetPacket.w_stringZ  (m_caLevelToChange);
        tNetPacket.w_stringZ  (m_caLevelPointToChange);
        tNetPacket.w_u8    (m_bSilentMode?1:0);
    }

    void CSE_ALifeLevelChanger::UPDATE_Read    (NET_Packet    &tNetPacket)
    {
        inherited::UPDATE_Read  (tNetPacket);
    }

    void CSE_ALifeLevelChanger::UPDATE_Write    (NET_Packet    &tNetPacket)
    {
        inherited::UPDATE_Write  (tNetPacket);
    }

    void CSE_ALifeLevelChanger::FillProps  (LPCSTR pref, PropItemVec& items)
    {
        inherited::FillProps  (pref,items);
        
    #ifdef XRSE_FACTORY_EXPORTS
        PHelper().CreateRList  (items,PrepareKey(pref,*s_name,"Level to change"),  &m_caLevelToChange,  &*fp_data.level_ids.begin(), fp_data.level_ids.size());
    #endif
        PHelper().CreateRText  (items,PrepareKey(pref,*s_name,"Level point to change"),    &m_caLevelPointToChange);

        PHelper().CreateBOOL  (items,PrepareKey(pref,*s_name,"Silent mode"),    &m_bSilentMode);
    }
    ////////////////////////////////////////////////////////////////////////////
    //    Module   : level_changer.cpp
    //    Created  : 10.07.2003
    //  Modified  : 10.07.2003
    //    Author  : Dmitriy Iassenev
    //    Description : Level change object
    ////////////////////////////////////////////////////////////////////////////

    #include "stdafx.h"
    #include "level_changer.h"
    #include "hit.h"
    #include "actor.h"
    #include "xrserver_objects_alife.h"
    #include "level.h"
    #include "ai_object_location.h"
    #include "ai_space.h"
    #include "level_graph.h"
    #include "game_level_cross_table.h"
    #include "HudManager.h"
    #include "UIGameSP.h"
    #include "../xr_collide_form.h"

    xr_vector<CLevelChanger*>    g_lchangers;

    CLevelChanger::~CLevelChanger    ()
    {
    }

    void CLevelChanger::Center  (Fvector& C) const
    {
        XFORM().transform_tiny  (C,CFORM()->getSphere().P);
    }

    float CLevelChanger::Radius  () const
    {
        return CFORM()->getRadius    ();
    }

    void CLevelChanger::net_Destroy    ()
    {
        inherited ::net_Destroy    ();
        xr_vector<CLevelChanger*>::iterator it = std::find(g_lchangers.begin(), g_lchangers.end(), this);
        if(it != g_lchangers.end())
      g_lchangers.erase(it);
    }

    BOOL CLevelChanger::net_Spawn    (CSE_Abstract* DC)
    {
        m_entrance_time    = 0;
        CCF_Shape *l_pShape   = xr_new<CCF_Shape>(this);
        collidable.model   = l_pShape;
        
        CSE_Abstract    *l_tpAbstract = (CSE_Abstract*)(DC);
        CSE_ALifeLevelChanger  *l_tpALifeLevelChanger = smart_cast<CSE_ALifeLevelChanger*>(l_tpAbstract);
        R_ASSERT     (l_tpALifeLevelChanger);

        m_game_vertex_id   = l_tpALifeLevelChanger->m_tNextGraphID;
        m_level_vertex_id   = l_tpALifeLevelChanger->m_dwNextNodeID;
        m_position     = l_tpALifeLevelChanger->m_tNextPosition;
        m_angles     = l_tpALifeLevelChanger->m_tAngles;

        m_bSilentMode    = !!l_tpALifeLevelChanger->m_bSilentMode;
        if (ai().get_level_graph()) {
      //. this information should be computed in xrAI
      ai_location().level_vertex    (ai().level_graph().vertex(u32(-1),Position()));
      ai_location().game_vertex    (ai().cross_table().vertex(ai_location().level_vertex_id()).game_vertex_id());
        }

        feel_touch.clear   ();
        
        for (u32 i=0; i < l_tpALifeLevelChanger->shapes.size(); ++i) {
      CSE_Shape::shape_def    &S = l_tpALifeLevelChanger->shapes[i];
      switch (S.type) {
       case 0 : {
        l_pShape->add_sphere(S.data.sphere);
        break;
       }
       case 1 : {
        l_pShape->add_box(S.data.box);
        break;
       }
      }
        }

        BOOL      bOk = inherited::net_Spawn(DC);
        if (bOk) {
      l_pShape->ComputeBounds    ();
      Fvector     P;
      XFORM().transform_tiny    (P,CFORM()->getSphere().P);
      setEnabled    (TRUE);
        }
        g_lchangers.push_back  (this);
        return      (bOk);
    }

    void CLevelChanger::shedule_Update(u32 dt)
    {
        inherited::shedule_Update    (dt);

        const Fsphere    &s = CFORM()->getSphere();
        Fvector      P;
        XFORM().transform_tiny  (P,s.P);
        feel_touch_update   (P,s.R);

        update_actor_invitation  ();
    }
    #include "patrol_path.h"
    #include "patrol_path_storage.h"
    void CLevelChanger::feel_touch_new    (CObject *tpObject)
    {
        CActor*   l_tpActor = smart_cast<CActor*>(tpObject);
        VERIFY   (l_tpActor);
        if (!l_tpActor->g_Alive())
      return;

        if (m_bSilentMode) {
      NET_Packet    p;
      p.w_begin    (M_CHANGE_LEVEL);
      p.w   (&m_game_vertex_id,sizeof(m_game_vertex_id));
      p.w   (&m_level_vertex_id,sizeof(m_level_vertex_id));
      p.w_vec3    (m_position);
      p.w_vec3    (m_angles);
      Level().Send(p,net_flags(TRUE));
      return;
        }
        Fvector   p,r;
        bool   b = get_reject_pos(p,r);
        CUIGameSP  *pGameSP = smart_cast<CUIGameSP*>(CurrentGameUI());
        if (pGameSP)
            pGameSP->ChangeLevel    (m_game_vertex_id, m_level_vertex_id, m_position, m_angles, p, r, b);

        m_entrance_time    = Device.fTimeGlobal;
    }

    bool CLevelChanger::get_reject_pos(Fvector& p, Fvector& r)
    {
      p.set(0,0,0);
      r.set(0,0,0);
    //--  db.actor:set_actor_position(patrol("t_way"):point(0))
    //--  local dir = patrol("t_look"):point(0):sub(patrol("t_way"):point(0))
    //--  db.actor:set_actor_direction(-dir:getH())

      if(m_ini_file && m_ini_file->section_exist("pt_move_if_reject"))
      {
       LPCSTR p_name = m_ini_file->r_string("pt_move_if_reject", "path");
       const CPatrolPath*  patrol_path = ai().patrol_paths().path(p_name);
       VERIFY     (patrol_path);
       
       const CPatrolPoint*  pt;
       pt      = &patrol_path->vertex(0)->data();
       p      = pt->position();

       Fvector tmp;
       pt      = &patrol_path->vertex(1)->data();
       tmp.sub     (pt->position(),p);
       tmp.getHP    (r.y,r.x);
       return true;
      }
      return false;
    }

    BOOL CLevelChanger::feel_touch_contact    (CObject *object)
    {
        BOOL bRes    = (((CCF_Shape*)CFORM())->Contact(object));
        bRes  = bRes && smart_cast<CActor*>(object) && smart_cast<CActor*>(object)->g_Alive();
        return  bRes;
    }

    void CLevelChanger::update_actor_invitation()
    {
        if(m_bSilentMode)      return;
        xr_vector<CObject*>::iterator it  = feel_touch.begin();
        xr_vector<CObject*>::iterator it_e  = feel_touch.end();

        for(;it!=it_e;++it){
      CActor*   l_tpActor = smart_cast<CActor*>(*it);
      VERIFY   (l_tpActor);
      
      if(!l_tpActor->g_Alive())
       continue;

      if(m_entrance_time+5.0f < Device.fTimeGlobal){
       CUIGameSP* pGameSP = smart_cast<CUIGameSP*>(CurrentGameUI());
       Fvector p,r;
       bool b = get_reject_pos(p,r);
       
       if(pGameSP)
        pGameSP->ChangeLevel(m_game_vertex_id,m_level_vertex_id,m_position,m_angles,p,r,b);

       m_entrance_time  = Device.fTimeGlobal;
      }
        }
    }
    ////////////////////////////////////////////////////////////////////////////
    //    Module   : level_changer.h
    //    Created  : 10.07.2003
    //  Modified  : 10.07.2003
    //    Author  : Dmitriy Iassenev
    //    Description : Level change object
    ////////////////////////////////////////////////////////////////////////////

    #pragma once

    #include "GameObject.h"
    #include "../feel_touch.h"
    #include "game_graph_space.h"

    class CLevelChanger : public CGameObject, public Feel::Touch {
    private:
        typedef    CGameObject    inherited;

    private:
        GameGraph::_GRAPH_ID    m_game_vertex_id;
        u32      m_level_vertex_id;
        Fvector     m_position;
        Fvector     m_angles;
        float     m_entrance_time;

        void     update_actor_invitation    ();
        bool     m_bSilentMode;
        bool     get_reject_pos(Fvector& p, Fvector& r);

    public:
        virtual    ~CLevelChanger  ();
        virtual BOOL  net_Spawn   (CSE_Abstract* DC);
        virtual void  net_Destroy   ();
        virtual void  Center    (Fvector& C) const;
        virtual float  Radius    () const;
        virtual void  shedule_Update  (u32 dt);
        virtual void  feel_touch_new  (CObject* O);
        virtual BOOL  feel_touch_contact    (CObject* O);

        virtual bool  IsVisibleForZones() { return false;}
    };

    Сообщение отредактировал Jargon - Среда, 10.01.2018, 23:36
    Российская Федерация  Echostefun
    Четверг, 11.01.2018, 17:02 | Сообщение # 51
    Статус:
    Зевака:
    Сообщений: 8
    Награды: 0
    Регистрация: 28.12.2017

    Кто нибудь правил в окне диалога баг? Когда у ГГ фразы в окне диалога количество оver 9000 символов текст уходит за пределы окна.
    Российская Федерация  denis2000
    Четверг, 11.01.2018, 19:13 | Сообщение # 52
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 3206
    Награды: 10
    Регистрация: 19.07.2013

    Echostefun, Если имеете ввиду нет авто переноса, то включите его в этом элементе окна.
    Казахстан  riper
    Четверг, 11.01.2018, 19:14 | Сообщение # 53
    Статус:
    Бывалый:
    Сообщений: 607
    Награды: 6
    Регистрация: 11.08.2013

    как правильно должен выглядеть файл sguad_descr_(имя локации ).ltx
    получаю вот такой вылет хотя вроде все делаю по уроку

    FATAL ERROR

    [error]Expression : I
    [error]Function : CInifile::Load
    [error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
    [error]Line : 256
    [error]Description : Can't find include file:
    [error]Arguments : squad_descr_escape.ltx
    Сообщение отредактировал riper - Четверг, 11.01.2018, 19:57
    Российская Федерация  atanda
    Четверг, 11.01.2018, 20:04 | Сообщение # 54
    Статус:
    Неопытный:
    Сообщений: 544
    Награды: 3
    Регистрация: 12.07.2017

    riper, вылет не в правильности настройки файла, а в том, что макрос(знаю, что в лтх он так не называется просто привык) не находит файл который включён.
    Решение:
    - Проверить название файла и то, что ты включаешь и исправить ошибку.

    Добавлено (11.01.2018, 20:04)
    ---------------------------------------------
    denis2000, я думаю он просто обращается к строке напрямую, а не через идентификатор в строковой таблице. 10

    Казахстан  riper
    Четверг, 11.01.2018, 20:24 | Сообщение # 55
    Статус:
    Бывалый:
    Сообщений: 607
    Награды: 6
    Регистрация: 11.08.2013

    buffy,
    Цитата buffy ()
    Проверить название файла и то, что ты включаешь и исправить ошибку.

    ка кого именно файла я что вообще запутался .
    может имя смарта большое

    ;Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции.

    [esc_smart_terrain_stalker_sguad]:online_offline_group
    faction = stalker
    npc = sim_default_stalker_1, sim_default_stalker_2
    target_smart = esc_smart_terrain;spawn_point = esc_smart_terrain_ spawn_point
    story_id = esc_smart_terrain_stalker_sguad
    Сообщение отредактировал riper - Четверг, 11.01.2018, 20:25
    Российская Федерация  Khyzyr
    Четверг, 11.01.2018, 20:40 | Сообщение # 56
    Статус:
    Новичок:
    Сообщений: 338
    Награды: 1
    Регистрация: 19.06.2017

    riper, В чем ты мог запутаться? Вылет говорит о том, что у тебя нет файла squad_descr_escape.ltx

    Добавлено (11.01.2018, 20:40)
    ---------------------------------------------
    Проверяй папку configs/misc

    Российская Федерация  makdm
    Четверг, 11.01.2018, 21:05 | Сообщение # 57
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1404
    Награды: 13
    Регистрация: 22.11.2012

    riper, тебе уже всё объяснили.
    Открываешь файл squad_descr.ltx
    В него пишешь:
    #include "squad_descr_escape.ltx"
    Только всё это работает для ЗП, а не для ТЧ.
    Сообщение отредактировал makdm - Четверг, 11.01.2018, 21:07
    Российская Федерация  sine
    Пятница, 12.01.2018, 00:39 | Сообщение # 58
    Последний день
    Статус:
    Новичок:
    Сообщений: 295
    Награды: 1
    Регистрация: 14.09.2010

    Ребят, в ЗП НПС научили открывать двери, изучив файлы ЗП, у меня почти получилось перенести эту фичу в ТЧ, но упираюсь в некоторые функции, ссылки на которые есть только в lua_help.script. Есть ли у кого скрипт, который позволяет НПС открыть дверь?
    Сообщение отредактировал sine - Пятница, 12.01.2018, 00:39
    Российская Федерация  denis2000
    Пятница, 12.01.2018, 11:01 | Сообщение # 59
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 3206
    Награды: 10
    Регистрация: 19.07.2013

    sine, А чего конкретно и в каком месте не хватает?
    Российская Федерация  sine
    Пятница, 12.01.2018, 15:07 | Сообщение # 60
    Последний день
    Статус:
    Новичок:
    Сообщений: 295
    Награды: 1
    Регистрация: 14.09.2010

    denis2000, да уже не суть важно. Я так понял, что таких функции вообще нет в тч.
    Я тут ковыряю LWO, нашел где реализовано это, но не могу ни как заставить работать у себя. Что этому делу вообще нужно для работы?
    Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » [SoC] Модострой: вопросница
    Поиск: