Предложения по правкам движка, Ваши предложения |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Предложения по правкам движка, Ваши предложения |
29.09.2014, 19:34
Сообщение
#181
|
|
Опытный Игрок Репутация: 6 Группа: Участник Сообщений: 51 Награды: 2 Регистрация: 03.05.2014 |
Thanks for your reply. I hope you will release your work in near future.
As I'm a level designer, i can only propose ideas to improve SDK and the game. Another life is needed to learn C language and become a programmer. -------------------- |
 
|
|
|
|
01.10.2014, 20:08
Сообщение
#182
|
|
Опытный Игрок Репутация: 6 Группа: Участник Сообщений: 51 Награды: 2 Регистрация: 03.05.2014 |
Please, can you tell me what files compare?
A friend check xrSound but he only see minor differences and nothing about sound_occ. Thk Сообщение отредактировал Borovos - 01.10.2014, 20:09 -------------------- |
 
|
|
22.10.2014, 22:33
Сообщение
#183
|
|
Опытный Игрок Репутация: 6 Группа: Участник Сообщений: 51 Награды: 2 Регистрация: 03.05.2014 |
Hello guys,
Another idea about change in Xray engines (SoC, CS, CoP). This is a small variation of brightness when player go to exterior or go in a building. As adaptation of vision in function of luminosity. To be more clear, something like this but for interior environment and dark spaces: Regards Сообщение отредактировал Borovos - 22.10.2014, 22:34 -------------------- |
 
|
|
23.10.2014, 23:04
Сообщение
#184
|
|
Почти Мастер Репутация: 311 Группа: Участник Сообщений: 1092 Награды: 5 Регистрация: 01.03.2011 |
|
 
|
|
24.10.2014, 00:36
Сообщение
#185
|
|
Опытный Игрок Репутация: 6 Группа: Участник Сообщений: 51 Награды: 2 Регистрация: 03.05.2014 |
This is called "HDR" and surely it presents in stalker. See r2_tonemap. Ok, i didn't know this name. For my part, i'm not really interesting by graphism. As i saw a guy report this point in a french forum, i wanted to report it here. Sorry for mistake and thk for reply -------------------- |
 
|
|
24.10.2014, 14:25
Сообщение
#186
|
|
Почти Мастер Репутация: 1357 Группа: Участник Сообщений: 1155 Награды: 5 Регистрация: 28.05.2010 |
HDR А вот -------------------- Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
--------------- ------------ ---------- -------- ------ ---- -- |
 
|
|
29.11.2014, 18:13
Сообщение
#187
|
|
Новичок Репутация: 10 Группа: Участник Сообщений: 9 Регистрация: 12.11.2014 |
Правки некоторых движковых ошибок ТЧ 1.0007. Правки протестированы и работоспособны.
Можете использовать в своих модах. Исправление "залипания" курсора в игровых меню. Исправление центрирования курсора в главном меню. Исправление не появления курсора в главном меню при запуске игры. Спасибо alpet за информационную помощь. Код. Код 1) UICursor.cpp CUICursor::CUICursor() { bVisible = false; // Исправление центрирования курсора в главном меню при запуске игры vPrevPos.set (512.f,384.f); vPos.set (512.f,384.f); InitInternal (); Device.seqRender.Add (this,2); } 2) UICursor.h public: CUICursor (); virtual ~CUICursor (); virtual void OnRender (); Fvector2 GetCursorPositionDelta(); Fvector2 GetCursorPosition (); void SetUICursorPosition (Fvector2 pos); void UpdateCursorPosition (); bool IsVisible () {return bVisible;} // Исправление "залипания" курсора мыши в игровых меню void Show () {SetUICursorPosition(vPrevPos);bVisible = true;} void Hide () {vPrevPos = GetCursorPosition();bVisible = false;} }; 3) MainMenu.cpp void CMainMenu::Activate (bool bActivate) { if ( !!m_Flags.test(flActive) == bActivate) return; if ( m_Flags.test(flGameSaveScreenshot) ) return; if ( (m_screenshotFrame == Device.dwFrame) || (m_screenshotFrame == Device.dwFrame-1) || (m_screenshotFrame == Device.dwFrame+1)) return; bool b_is_single = IsGameTypeSingle(); if(g_dedicated_server && bActivate) return; if(bActivate) { b_shniaganeed_pp = true; Device.Pause (TRUE, FALSE, TRUE, "mm_activate1"); m_Flags.set (flActive|flNeedChangeCapture,TRUE); // Исправление не появления курсора в главном меню при запуске игры m_Flags.set (flRestoreCursor,GetUICursor()->IsVisible()); { DLL_Pure* dlg = NEW_INSTANCE(TEXT2CLSID("MAIN_MNU")); if(!dlg) { m_Flags.set (flActive|flNeedChangeCapture,FALSE); return; } xr_delete (m_startDialog); m_startDialog = smart_cast<CUIDialogWnd*>(dlg); VERIFY (m_startDialog); } m_Flags.set (flRestoreConsole,Console->bVisible); if(b_is_single) m_Flags.set (flRestorePause,Device.Paused()); Console->Hide (); // Исправление не появления курсора в главном меню при запуске игры //m_Flags.set (flRestoreCursor,GetUICursor()->IsVisible()); if(b_is_single) { m_Flags.set (flRestorePauseStr, bShowPauseString); ... Исправление отображения параметра "отношение" при обыске тел монстров. Исправление заливки иконки красным цветом при обыске тел монстров и людей. Код. Код 1) UICarBodyWnd.cpp void CUICarBodyWnd::InitCarBody(CInventoryOwner* pOur, CInventoryOwner* pOthers) { m_pOurObject = pOur; m_pOthersObject = pOthers; m_pInventoryBox = NULL; u16 our_id = smart_cast<CGameObject*>(m_pOurObject)->ID(); u16 other_id = smart_cast<CGameObject*>(m_pOthersObject)->ID(); m_pUICharacterInfoLeft->InitCharacter (our_id); m_pUIOthersIcon->Show (true); // Исправление отображения параметра "отношение" при обыске тел монстров m_pUICharacterInfoRight->ClearFlags (); CBaseMonster *monster = NULL; if(m_pOthersObject) { monster = smart_cast<CBaseMonster *>(m_pOthersObject); if (monster || m_pOthersObject->use_simplified_visual() ) { m_pUICharacterInfoRight->ClearInfo (); if(monster) { // Исправление отображения параметра "отношение" при обыске тел монстров m_pUICharacterInfoRight->SetMonsterFlag (); shared_str monster_tex_name = pSettings->r_string(monster->cNameSect(),"icon"); m_pUICharacterInfoRight->UIIcon().InitTexture(monster_tex_name.c_str()); m_pUICharacterInfoRight->UIIcon().SetStretchTexture(true); } }else { // Исправление заливки иконки красным цветом при обыске тел монстров и людей m_pUICharacterInfoRight->SetHumanFlag (); m_pUICharacterInfoRight->InitCharacter (other_id); } } m_pUIPropertiesBox->Hide (); EnableAll (); UpdateLists (); .... void CUICarBodyWnd::Hide() { InventoryUtilities::SendInfoToActor ("ui_car_body_hide"); m_pUIOurBagList->ClearAll (true); m_pUIOthersBagList->ClearAll (true); // Исправление отображения параметра "отношение" при обыске тел монстров m_pUICharacterInfoRight->ClearFlags (); inherited::Hide (); if(m_pInventoryBox) m_pInventoryBox->m_in_use = false; } 2) UICharacterInfo.cpp // Исправление отображения параметра "отношение" при обыске тел монстров bool MonsterFlag = false; bool HumanFlag = false; void CUICharacterInfo::Update() { inherited::Update(); if(hasOwner() && (m_bForceUpdate||(Device.dwFrame%100==0)) ){ m_bForceUpdate = false; CSE_ALifeTraderAbstract* T = ch_info_get_from_id (m_ownerID); if (NULL==T){ m_ownerID = u16(-1); return; }else UpdateRelation(); if(m_icons[eUIIcon]){ CSE_ALifeCreatureAbstract* pCreature = smart_cast<CSE_ALifeCreatureAbstract*>(T); // Исправление отображения параметра "отношение" при обыске тел монстров if((pCreature && !pCreature->g_Alive() && MonsterFlag) || (Actor()->ID()==m_ownerID || !hasOwner())) { if(m_icons[eUIRelationCaption]) m_icons[eUIRelationCaption]->Show (false); if(m_icons[eUIRelation]) m_icons[eUIRelation]->Show (false); } // Исправление заливки иконки красным цветом при обыске тел монстров и людей if(pCreature && !pCreature->g_Alive() && !MonsterFlag && !HumanFlag) { m_icons[eUIIcon]->SetColor (color_argb(255,255,160,160)); } } } } В конце UICharacterInfo.cpp (после void CUICharacterInfo::ClearInfo()) дописать: // Исправление отображения параметра "отношение" при обыске тел монстров void CUICharacterInfo::SetMonsterFlag() { MonsterFlag = true; } void CUICharacterInfo::SetHumanFlag() { HumanFlag = true; } void CUICharacterInfo::ClearFlags() { MonsterFlag = false; HumanFlag = false; } 3) UICharacterInfo.h public: CUICharacterInfo(); virtual ~CUICharacterInfo(); void Init (float x, float y, float width, float height, CUIXml* xml_doc); void Init (float x, float y, float width, float height, const char* xml_name); void InitCharacter (u16 id); void ClearInfo (); virtual void Update (); u16 OwnerID () const {return m_ownerID;} CUIStatic& UIIcon () {VERIFY(m_icons[eUIIcon]);return *m_icons[eUIIcon];} CUIStatic& UIName() {VERIFY(m_icons[eUIName]);return *m_icons[eUIName];} const shared_str& IconName () {return m_texture_name;} // Исправление отображения параметра "отношение" при обыске тел монстров void SetMonsterFlag (); void SetHumanFlag (); void ClearFlags (); }; Исправление не отключения света после выключения аномалии. Спасибо K.D. за информационную помощь. Код. Код CustomZone.cpp //загрузить параметры световой вспышки от взрыва m_zone_flags.set(eBlowoutLight, pSettings->r_bool (section, "blowout_light")); if(m_zone_flags.test(eBlowoutLight) ){ sscanf(pSettings->r_string(section,"light_color"), "%f,%f,%f", &m_LightColor.r, &m_LightColor.g, &m_LightColor.b); m_fLightRange = pSettings->r_float(section,"light_range"); m_fLightTime = pSettings->r_float(section,"light_time"); m_fLightTimeLeft = 0.f; // Правильно задать тип переменной m_fLightHeight = pSettings->r_float(section,"light_height"); } void CCustomZone::UpdateBlowoutLight () { if(m_fLightTimeLeft>0.f) { m_fLightTimeLeft -= Device.fTimeDelta; // Исправление не отключения света после выключения аномалии if (m_fDistanceToCurEntity>29.f) { if (m_fLightTime<=1.f) { m_fLightTimeLeft = m_fLightTimeLeft/1.45f; } else { m_fLightTimeLeft = m_fLightTimeLeft/1.15f; } } clamp(m_fLightTimeLeft,0.0f,m_fLightTime); .... Исправление отображения зеленым цветом прочитанных записей в разделе КПК "Дневник". Код. Код 1) UIDiaryWnd2.cpp void CUIDiaryWnd::LoadJournalTab (ARTICLE_DATA::EArticleType _type) { delete_data (m_ArticlesDB); m_UILeftWnd->AttachChild (m_SrcListWnd); m_SrcListWnd->Show (true); m_UIRightWnd->AttachChild (m_DescrView); m_DescrView->Show (true); if(Actor()->encyclopedia_registry->registry().objects_ptr()) { ARTICLE_VECTOR::const_iterator it = Actor()->encyclopedia_registry->registry().objects_ptr()->begin(); for(; it != Actor()->encyclopedia_registry->registry().objects_ptr()->end(); it++) { if (_type == it->article_type) { // Исправление отображения зеленым цветом прочитанных записей в дневнике КПК AddDiaryArticle(it->article_id, it->readed); } } } g_pda_info_state &= !pda_section::journal; } void CUIDiaryWnd::OnSrcListItemClicked (CUIWindow* w,void* p) { CUITreeViewItem* pSelItem = (CUITreeViewItem*)p; m_DescrView->Clear (); if (!pSelItem->IsRoot()) { CUIEncyclopediaArticleWnd* article_info = xr_new<CUIEncyclopediaArticleWnd>(); article_info->Init ("encyclopedia_item.xml","encyclopedia_wnd:objective_item"); article_info->SetArticle (m_ArticlesDB[pSelItem->GetValue()]); m_DescrView->AddWindow (article_info, true); // Исправление отображения зеленым цветом прочитанных записей в дневнике КПК if (!pSelItem->IsArticleReaded()) { if(Actor()->encyclopedia_registry->registry().objects_ptr()) { for(ARTICLE_VECTOR::iterator it = Actor()->encyclopedia_registry->registry().objects().begin(); it != Actor()->encyclopedia_registry->registry().objects().end(); it++) { if (ARTICLE_DATA::eJournalArticle == it->article_type && m_ArticlesDB[pSelItem->GetValue()]->Id() == it->article_id) { it->readed = true; break; } } } } } } В конце UIDiaryWnd2.cpp дописать: // Исправление отображения зеленым цветом прочитанных записей в дневнике КПК void CUIDiaryWnd::AddDiaryArticle(shared_str article_id, bool bReaded) { m_ArticlesDB.resize(m_ArticlesDB.size() + 1); CEncyclopediaArticle*& a = m_ArticlesDB.back(); a = xr_new<CEncyclopediaArticle>(); a->Load(article_id); CreateTreeBranch(a->data()->group, a->data()->name, m_SrcListWnd, m_ArticlesDB.size()-1, m_pTreeRootFont, m_uTreeRootColor, m_pTreeItemFont, m_uTreeItemColor, bReaded); } 2) UIDiaryWnd.h void UnloadNewsTab (); void LoadNewsTab (); void Reload (EDiaryFilter new_filter); // Исправление отображения зеленым цветом прочитанных записей в дневнике КПК void AddDiaryArticle (shared_str, bool bReaded); Исправление работы статика биографии в разделе КПК "Ранги". Правка перенесена из проекта XRay-extensions. Код. Код UICharacterInfo.cpp if (chInfo.Bio().size()) { CUIStatic* pItem = xr_new<CUIStatic>(); pItem->SetWidth (pUIBio->GetDesiredChildWidth()); // Исправление работы статика биографии pItem->SetTextComplexMode (true); pItem->SetText (*(chInfo.Bio())); pItem->AdjustHeightToText (); pUIBio->AddWindow (pItem, true); } Исправление учета статистики убийства сталкеров и мутантов, выполненных квестов. Использован алгоритм из мода Fixed Statistics автора kstn. Код. Код actor_statistic_mgr.cpp void CActorStatisticMgr::AddPoints(const shared_str& key, const shared_str& detail_key, s32 cnt, s32 pts) { SStatSectionData& sect = GetSection (key); SStatDetailBData& d = sect.GetData (detail_key); d.int_count += cnt; // Исправление учета статистики убийства сталкеров и мутантов, выполненных квестов d.int_points = pts; } |
 
|
|
29.11.2014, 22:28
Сообщение
#188
|
|
Грандмастер Репутация: 482 Группа: Участник Сообщений: 1851 Награды: 6 Регистрация: 22.08.2009 |
Наверное это из разряда губу раскатал, но все же предложу...
Возможно ли добавить gloss? Помимо имеющегося spec канала в бамп файле в канале R, если не путаю. |
 
|
|
07.12.2014, 13:03
Сообщение
#189
|
|
Новичок Репутация: 10 Группа: Участник Сообщений: 9 Регистрация: 12.11.2014 |
Правки некоторых движковых ошибок ТЧ 1.0007. Правки протестированы и работоспособны.
Можете использовать в своих модах. Исправление отображения курсора во время проигрывания видеороликов. Исправление центрирования курсора после проигрывания титров. Исправление "залипания" курсора мыши в игровых меню (дополнение). Код. Код 1) UIGameTutorial.h protected: enum { etiNeedPauseOn = (1<<0), etiNeedPauseOff = (1<<1), etiStoredPauseState = (1<<2), etiCanBeStopped = (1<<3), etiGrabInput = (1<<4), etiNeedPauseSound = (1<<5), // Исправление отображения курсора во время проигрывания видеороликов etiStoredCursorState= (1<<6), eti_last = 7, }; 2) UIGameTutorialSimpleItem.cpp void CUISequenceSimpleItem::Load(CUIXml* xml, int idx) { CUISequenceItem::Load (xml,idx); XML_NODE* _stored_root = xml->GetLocalRoot(); xml->SetLocalRoot (xml->NavigateToNode("item",idx)); LPCSTR m_snd_name = xml->Read ("sound",0,"" ); if (m_snd_name&&m_snd_name[0]){ m_sound.create (m_snd_name,st_Effect,sg_Undefined); VERIFY (m_sound._handle()); } m_time_length = xml->ReadFlt ("length_sec",0,0 ); // Исправление центрирования курсора после проигрывания титров m_desired_cursor_pos.x = xml->ReadAttribFlt ("cursor_pos",0,"x",512 ); m_desired_cursor_pos.y = xml->ReadAttribFlt ("cursor_pos",0,"y",384 ); strcpy (m_pda_section, xml->Read("pda_section",0,"") ); ... void CUISequenceSimpleItem::Update () { // Исправление отображения курсора во время проигрывания титров if(GetUICursor()->IsVisible()) { m_flags.set(etiStoredCursorState, TRUE); GetUICursor()->Hide (); } float gt = float(Device.dwTimeContinual)/1000.0f; SubItemVecIt _I = m_subitems.begin(); SubItemVecIt _E = m_subitems.end(); for(;_I!=_E;++_I){ SSubItem& s = *_I; bool bPlaying = (gt>(m_time_start+s.m_start))&&(gt<(m_time_start+s.m_start+s.m_length)); if (true==bPlaying&&(false==s.m_visible)) s.Start (); else if ((false==bPlaying)&&(true==s.m_visible)) s.Stop (); } if (g_pGameLevel){ CUIGameSP* ui_game_sp = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if(ui_game_sp) { if(!m_pda_section || 0 == xr_strlen(m_pda_section) ) if ( ui_game_sp->PdaMenu->IsShown() || ui_game_sp->InventoryMenu->IsShown() || ui_game_sp->TalkMenu->IsShown() || ui_game_sp->UICarBodyMenu->IsShown() || ui_game_sp->UIChangeLevelWnd->IsShown() ) m_UIWindow->Show (false); else m_UIWindow->Show (true); } } // Исправление "залипания" курсора мыши в игровых меню if(m_desired_cursor_pos.x && m_desired_cursor_pos.y) GetUICursor()->SetUICursorPosition(m_desired_cursor_pos); } void CUISequenceSimpleItem::Start() { inherited::Start (); m_flags.set (etiStoredPauseState, Device.Paused()); if(m_flags.test(etiNeedPauseOn) && !m_flags.test(etiStoredPauseState)){ Device.Pause (TRUE, TRUE, FALSE, "simpleitem_start"); bShowPauseString = FALSE; } if(m_flags.test(etiNeedPauseOff) && m_flags.test(etiStoredPauseState)) Device.Pause (FALSE, TRUE, FALSE, "simpleitem_start"); if(m_flags.test(etiNeedPauseSound)) Device.Pause (TRUE, FALSE, TRUE, "simpleitem_start"); // Исправление "залипания" курсора мыши в игровых меню if(m_desired_cursor_pos.x && m_desired_cursor_pos.y) GetUICursor()->SetUICursorPosition(m_desired_cursor_pos); m_time_start = float(Device.dwTimeContinual)/1000.0f; ... bool CUISequenceSimpleItem::Stop (bool bForce) { // Исправление отображения курсора во время проигрывания титров if(m_flags.test(etiStoredCursorState)) GetUICursor()->Show (); if(!m_flags.test(etiCanBeStopped)&&!bForce) return false; ... 3) UIGameTutorialVideoItem.cpp ... #include "../../xr_input.h" #include "../xr_level_controller.h" // Исправление отображения курсора во время проигрывания видеороликов #include "../UICursor.h" ... void CUISequenceVideoItem::Update() { // Исправление отображения курсора во время проигрывания видеороликов if(GetUICursor()->IsVisible()) { m_flags.set(etiStoredCursorState, TRUE); GetUICursor()->Hide (); } // deferred start ... bool CUISequenceVideoItem::Stop (bool bForce) { // Исправление отображения курсора во время проигрывания видеороликов if(m_flags.test(etiStoredCursorState)) GetUICursor()->Show (); if(!m_flags.test(etiCanBeStopped) && !bForce && IsPlaying()) return false; ... Исправление некоторых распространенных движковых вылетов. Для достижения эффекта от движковых правок существует необходимое условие: скрипты и конфиги в ваших модах не должны содержать ошибок, провоцирующих эти вылеты. Правки рассчитаны на исключение редких вылетов, спровоцированных движком. Применение правок не даст желаемого эффекта без тщательной отладки кода в своих модах. Исправлена ошибка с вылетом типа «there is no specified level in the game graph». Исправлена ошибка с вылетом типа «There is no proper graph point neighbour!». Исправлена ошибка с вылетом типа «There is no specified level...in the game graph!». Исправлена ошибка с вылетом типа «xrServer::Process_event_reject...e_parent && e_entity». Исправлена ошибка с вылетом типа «error in stalker with visual...». Код. Код 1) stalker_animation_manager_update.cpp // Исправление вылета типа "! error in stalker with visual" void CStalkerAnimationManager::update () { START_PROFILE("stalker/client_update/animations") try { update_impl (); } catch(...) { Msg ("Error in stalker with visual [%s]",*object().cNameVisual()); global().reset (); head().reset (); torso().reset (); legs().reset (); return; } STOP_PROFILE } 2) game_graph_inline.h // Исправление вылета типа "There is no proper graph point neighbour!" IC float CGameGraph::distance (const _GRAPH_ID tGraphID0, const _GRAPH_ID tGraphID1) const { float mDist = 54.767998f; const_iterator i, e; begin (tGraphID0,i,e); for (; i != e; ++i){ if (value(tGraphID0,i) == tGraphID1){ return (edge_weight(i)); } } Msg ("ERROR: There is no proper graph point neighbour!"); return (mDist); } // Исправление вылета типа "there is no specified level in the game graph:" IC const GameGraph::SLevel &GameGraph::CHeader::level (const _LEVEL_ID &id) const { LEVEL_MAP::const_iterator I = levels().find(id); if(I != levels().end()){ return ((*I).second); } else{ Msg ("ERROR: There is no specified level in the game graph: [%d]",id); return (levels().begin()->second); } } // Исправление вылета типа "! There is no specified level %s in the game graph!" IC const GameGraph::SLevel &GameGraph::CHeader::level (LPCSTR level_name) const { LEVEL_MAP::const_iterator I = levels().begin(); LEVEL_MAP::const_iterator E = levels().end(); for (; I != E; ++I){ if (!xr_strcmp((*I).second.name(),level_name)){ return ((*I).second); } } Msg ("ERROR: There is no specified level [%s] in the game graph!",level_name); return (levels().begin()->second); } 3) xrServer_process_event_reject.cpp (приводится целиком) #include "stdafx.h" #include "xrserver.h" #include "xrserver_objects.h" bool xrServer::Process_event_reject (NET_Packet& P, const ClientID sender, const u32 time, const u16 id_parent, const u16 id_entity, bool send_message) { // Parse message CSE_Abstract* e_parent = game->get_entity_from_eid (id_parent); CSE_Abstract* e_entity = game->get_entity_from_eid (id_entity); #ifdef DEBUG Msg("sv reject. id_parent %s id_entity %s [%d]",ent_name_safe(id_parent).c_str(),ent_name_safe(id_entity).c_str(), Device.dwFrame); #endif // Исправление вылета по "xrServer::Process_event_reject ... e_parent && e_entity" if ( !e_entity ) { Msg ( "ERROR: Entity not found. parent_id = [%d], entity_id = [%d], frame = [%d]. Process_event_reject()", id_parent, id_entity, Device.dwFrame ); return (false); } if ( !e_parent ) { Msg ( "ERROR: Parent not found. parent_id = [%d], entity_id = [%d], frame = [%d]. Process_event_reject()", id_parent, id_entity, Device.dwFrame ); return (false); } xr_vector<u16>& C = e_parent->children; xr_vector<u16>::iterator c = std::find (C.begin(),C.end(),id_entity); if (c == C.end()) { Msg("ERROR: SV: Can't find children [%d] of parent [%d]", id_entity, e_parent); return (false); } if (0xffff == e_entity->ID_Parent) { Msg ("ERROR: Can't detach independant object. entity[%s][%d], parent[%s][%d], section[%s]", e_entity->name_replace(), id_entity, e_parent->name_replace(), id_parent, e_entity->s_name.c_str() ); return (false); } if (e_entity->ID_Parent != id_parent) { Msg("ERROR: e_entity->ID_Parent = [%d], parent = [%d][%s], entity_id = [%d], frame = [%d]", e_entity->ID_Parent, id_parent, e_parent->name_replace(), id_entity, Device.dwFrame); } game->OnDetach(id_parent,id_entity); // Rebuild parentness e_entity->ID_Parent = 0xffff; C.erase (c); // Signal to everyone (including sender) if (send_message) { DWORD MODE = net_flags(TRUE,TRUE, FALSE, TRUE); SendBroadcast (BroadcastCID,P,MODE); } return (true); } |
 
|
|
07.12.2014, 13:21
Сообщение
#190
|
|
Архимагистр Игры Репутация: 364 Группа: Забанен Сообщений: 2765 Награды: 1 Регистрация: 06.06.2008 |
lvg_brest, а ты умеешь с патчами работать
-------------------- Играть в шутеры на консолях - все равно, что заниматься сексом с резиновой женщиной
|
 
|
|
07.12.2014, 15:41
Сообщение
#191
|
|
Почти Мастер Репутация: 311 Группа: Участник Сообщений: 1092 Награды: 5 Регистрация: 01.03.2011 |
Исправлена ошибка с вылетом типа «there is no specified level in the game graph». Исправлена ошибка с вылетом типа «There is no proper graph point neighbour!». Исправлена ошибка с вылетом типа «There is no specified level...in the game graph!». Исправлена ошибка с вылетом типа «xrServer::Process_event_reject...e_parent && e_entity». Исправлена ошибка с вылетом типа «error in stalker with visual...». Не совсем понял, зачем это исправлять? Это не ошибки, это сигнал аварийного прерывания игры. |
 
|
|
07.12.2014, 17:08
Сообщение
#192
|
|
Новичок Репутация: 10 Группа: Участник Сообщений: 9 Регистрация: 12.11.2014 |
Не совсем понял, зачем это исправлять? Это не ошибки, это сигнал аварийного прерывания игры. Не обязательно аварийно прерывать игру во всех случаях. Можно послать в лог сообщение о нештатной ситуации и вернуть значение, которое движок и скрипты нормально отработают. Если посмотреть в исходники ЗП, например, видно что разработчики применяли аналогичные решения, в отличие от ТЧ, наверное пришло с опытом. Вылетать не обязательно, если есть иное решение в виде адекватной отработки нештатной ситуации. Но, повторюсь, это не панацея от ошибок вообще: надо отлаживать свои моды для исключения (минимизации) скриптово/конфиговых причин вылетов. |
 
|
|
07.12.2014, 17:20
Сообщение
#193
|
|
Мастер Игры Репутация: 232 Группа: Друзья GM Сообщений: 1299 Награды: 4 Регистрация: 05.03.2012 |
Исправлена ошибка с вылетом типа «there is no specified level in the game graph». При тестировании 1.0007, было замечено что в некоторых случаях можно просто нажать "продолжить" при этой ошибке. -------------------- |
 
|
|
07.12.2014, 18:23
Сообщение
#194
|
|
Почти Мастер Репутация: 311 Группа: Участник Сообщений: 1092 Награды: 5 Регистрация: 01.03.2011 |
Не обязательно аварийно прерывать игру во всех случаях. Да я не про все говорю, а про эти. «there is no specified level in the game graph» - значит, кто-то заспавнился вне аи-сетки, и ситуация эта сама не решится, возврат левого уровня не поможет. Нужно соответственно модифицировать планировщики для мобов. «xrServer::Process_event_reject...e_parent && e_entity» означает проблемы с преждевременным удалением клиентского объекта. Затычка вылета означает гарантированные глюки и вылеты в дальнейшем, только зачастую без лога. Ничего из этого не будет нормально отработано чем бы то ни было. |
 
|
|
07.12.2014, 18:52
Сообщение
#195
|
|
Почти Игроман Репутация: 113 Группа: Участник Сообщений: 685 Награды: 2 Регистрация: 16.06.2013 |
Да уж, всё равно как лечить переломы ампутацией конечностей
Сообщение отредактировал Капитошка - 07.12.2014, 18:53 -------------------- Прошу насчёт исходников мне больше в личку не писать. У себя я их удалила и где взять не знаю.
|
 
|
|
07.12.2014, 19:22
Сообщение
#196
|
|
Архимагистр Игры Репутация: 364 Группа: Забанен Сообщений: 2765 Награды: 1 Регистрация: 06.06.2008 |
Не совсем понял, зачем это исправлять? Это не ошибки, это сигнал аварийного прерывания игры. Не обязательно аварийно прерывать игру во всех случаях. Можно послать в лог сообщение о нештатной ситуации и вернуть значение, которое движок и скрипты нормально отработают. Логи никто никогда не смотрит, соответственно ошибку никогда не исправят. А вот если игра будет падать - то никуда не отвертишься, придется фиксить -------------------- Играть в шутеры на консолях - все равно, что заниматься сексом с резиновой женщиной
|
 
|
|
13.12.2014, 18:49
Сообщение
#197
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
А можно аналог cam_inert, но вверх\вниз ? Движок такое могет ?
|
 
|
|
23.12.2014, 21:09
Сообщение
#198
|
|
Новичок Репутация: 10 Группа: Участник Сообщений: 9 Регистрация: 12.11.2014 |
Правки некоторых движковых ошибок ТЧ 1.0007. Правки протестированы и работоспособны. Можете использовать в своих модах.
Исправление "залипания" курсора мыши в главном меню после просмотра титров. Предыдущие правки в UIGameTutorialSimpleItem.cpp можно заменить всего одной этой правкой, в таком случае поведение курсора после просмотра титров и туториальных сообщений будет аналогично патчу 1.0006. Код. Код 1) UIGameTutorialSimpleItem.cpp bool CUISequenceSimpleItem::Stop (bool bForce) { if(!m_flags.test(etiCanBeStopped)&&!bForce) return false; m_owner->MainWnd()->DetachChild (m_UIWindow); m_sound.stop (); if(m_flags.test(etiNeedPauseOn) && !m_flags.test(etiStoredPauseState)) Device.Pause (FALSE, TRUE, FALSE, "simpleitem_stop"); if(m_flags.test(etiNeedPauseOff) && m_flags.test(etiStoredPauseState)) Device.Pause (TRUE, TRUE, FALSE, "simpleitem_stop"); if(m_flags.test(etiNeedPauseSound)) Device.Pause (FALSE, FALSE, TRUE, "simpleitem_stop"); // Исправление "залипания" курсора мыши в главном меню после просмотра титров if (!g_pGameLevel){ GetUICursor()->SetUICursorPosition (m_desired_cursor_pos); } if (g_pGameLevel){ CUIGameSP* ui_game_sp = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if( ui_game_sp && ui_game_sp->PdaMenu->IsShown() ) HUD().GetUI()->StartStopMenu (ui_game_sp->PdaMenu, true); } inherited::Stop (); return true; } |
 
|
|
23.12.2014, 22:30
Сообщение
#199
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
lvg_brest, было бы неплохо, если правки выкладывались в виде дифф-файлов.
-------------------- |
 
|
|
14.07.2015, 11:36
Сообщение
#200
|
|
Кандидат Игровых Наук Репутация: 546 Группа: Участник Сообщений: 3016 Награды: 8 Регистрация: 21.04.2010 |
Кто нибудь пилит движок зп?
Идея для исправлений: 1. Поднятие предмета происходит только тогда, когда выводится его иконка. Т.е. наводим курсор на предмет, загорается надпись "Поднять предмет "Х" " но он не подбирается. Тем самым невозможно подобрать некоторые тайники (напр. в подвалах ВНЗ Круг под лежащей решеткой или же напр. под мостом на юпитере, невозможно поднять СВУ.) 2. Не знаю баг или фитча, но предметы поднимаются группами, а не по одному. Наверное лучше бы тоже исправить. Идея для добавлений: 1. В инвентаре в описании оружия выводится только 2 типа (иконки) используемых патронов, даже если оружие использует 3 и больше, из-за этого ПЫС выпилили некоторые типы патронов (напр. 12х70 Дротик, Снайперские 9x39 и т.д.) Стоит либо выпилить полностью, либо добавить все типы используемых. -------------------- |
 
|
|
Текстовая версия | Сейчас: 10.06.2024, 14:21 |