Случайная подборка модов
Равновесие 2.0
3.6
DMX MOD 1.3.5
3.7
Sky anomaly
4.0
Большая Зона
3.4
«В аду… Псы»
3.6
Смерти Вопреки 2. Одним днем живу
3.4
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
[SoC] Модострой: вопросница
Российская Федерация  Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

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

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

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


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

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

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

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

    BeeRsek, Проблема не в этом.
      Злобная реклама
    Вторник, 09.01.2018, 18:34
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  BeeRsek
    Вторник, 09.01.2018, 18:54 | Сообщение # 47
    Тайна Зоны: История Стрелка
    Статус:
    Опытный:
    Сообщений: 1308
    Награды: 7
    Регистрация: 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()
      Злобная реклама
    Вторник, 09.01.2018, 18:54
    Статус:
    Сообщений: 666
    Регистрация: 24.01.2011
    Российская Федерация  xr_Sanya
    Вторник, 09.01.2018, 21:07 | Сообщение # 48
    Статус:
    Бывалый:
    Сообщений: 876
    Награды: 4
    Регистрация: 19.08.2015

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

    Где есть описание класса LVL_CHNG? В lua_help его нет.
      Злобная реклама
    Среда, 10.01.2018, 22:46
    Статус:
    Сообщений: 666
    Регистрация: 02.05.2013
    Коста Рика  Jargon
    Среда, 10.01.2018, 23:35 | Сообщение # 50
    X-Ray Multiplayer Extension
    Статус:
    Бывалый:
    Сообщений: 1078
    Награды: 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
      Злобная реклама
    Среда, 10.01.2018, 23:35
    Статус:
    Сообщений: 666
    Регистрация: 24.06.2012
    Российская Федерация  Echostefun
    Четверг, 11.01.2018, 17:02 | Сообщение # 51
    Статус:
    Зевака:
    Сообщений: 8
    Награды: 0
    Регистрация: 28.12.2017

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

    Echostefun, Если имеете ввиду нет авто переноса, то включите его в этом элементе окна.
      Злобная реклама
    Четверг, 11.01.2018, 19:13
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Казахстан  riper
    Четверг, 11.01.2018, 19:14 | Сообщение # 53
    Статус:
    Бывалый:
    Сообщений: 612
    Награды: 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
      Злобная реклама
    Четверг, 11.01.2018, 19:14
    Статус:
    Сообщений: 666
    Регистрация: 11.08.2013
    Российская Федерация  atanda
    Четверг, 11.01.2018, 20:04 | Сообщение # 54
    Статус:
    Бывалый:
    Сообщений: 672
    Награды: 7
    Регистрация: 12.07.2017

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

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

      Злобная реклама
    Четверг, 11.01.2018, 20:04
    Статус:
    Сообщений: 666
    Регистрация: 12.07.2017
    Казахстан  riper
    Четверг, 11.01.2018, 20:24 | Сообщение # 55
    Статус:
    Бывалый:
    Сообщений: 612
    Награды: 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
      Злобная реклама
    Четверг, 11.01.2018, 20:24
    Статус:
    Сообщений: 666
    Регистрация: 11.08.2013
    Российская Федерация  Khyzyr
    Четверг, 11.01.2018, 20:40 | Сообщение # 56
    Статус:
    Неопытный:
    Сообщений: 452
    Награды: 5
    Регистрация: 19.06.2017

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

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

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

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

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

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

    denis2000, да уже не суть важно. Я так понял, что таких функции вообще нет в тч.
    Я тут ковыряю LWO, нашел где реализовано это, но не могу ни как заставить работать у себя. Что этому делу вообще нужно для работы?
      Злобная реклама
    Пятница, 12.01.2018, 15:07
    Статус:
    Сообщений: 666
    Регистрация: 14.09.2010
    Поиск: