Loading Süre Kısma

umutcanpolat

Üye
Üye
Mesaj
73
Çözümler
2
Beğeni
32
Puan
704
Ticaret Puanı
0
X Forumunda Konusunu acıp ban yedigim sistem

İlk girişte süreyi kısmaz lakin oyuna tamamen giriş yaptıgınız taktirde 1 saniyeye kadar düşer loading süresi
Kısaca

  • İlk giriş: karakter seç → loading ekranı → map load (__LoadMap / Warp) da aynı loader’ı kullanır
  • Oyun içi ışınlanma: harita değişince yine aynı terrain/area loader çalışır
Yani ikisinde de yapay Sleep gecikmesi kalktı.

Fark: İlk girişte ek olarak ırk/efekt/ses/NPC yüklemesi var; o yüzden ilk açılış yine ışınlanmadan biraz uzun sürebilir. En büyük kazanım genelde harita değişimli ışınlanmalarda görülür.




Kod:
Genişlet Daralt Kopyala
1) EterLib/ResourceManager.cpp
Bul:

int g_iLoadingDelayTime = 20;
Değiştir:

int g_iLoadingDelayTime = 1;
Etki: Config yoksa varsayılan yapay loading gecikmesi 20 ms → 1 ms.

2) client/metin2.cfg
Bul:


PRE_LOADING_DELAY_TIME        20
Değiştir:

PRE_LOADING_DELAY_TIME        1
Etki: Oyuncunun cfg’sinden okunan delay. Eski 20, harita yüklerken onlarca kez birikip loading’i şişiriyordu.

3) GameLib/AreaLoaderThread.cpp — ProcessArea sonu
Bul:

    m_AreaCompleteMutex.Lock();
    m_pAreaCompleteDeque.push_back(pArea);
    m_AreaCompleteMutex.Unlock();
    Sleep(g_iLoadingDelayTime);
}
Değiştir:

    m_AreaCompleteMutex.Lock();
    m_pAreaCompleteDeque.push_back(pArea);
    m_AreaCompleteMutex.Unlock();
}
Etki: Her area parçası sonrası gereksiz Sleep kalkar.

4) GameLib/AreaLoaderThread.cpp — ProcessTerrain
Bul: Terrain yüklerken aradaki tüm şunlar:

Sleep(g_iLoadingDelayTime);
(Su, height, attr, tile, shadow, minimap, calculate vb. her adımdan sonra — yaklaşık 10 adet)

Değiştir: Bu ara Sleep satırlarını komple sil. Dosya yükleme çağrıları arka arkaya kalsın:

pTerrain->LoadWaterMap(szWaterMapName);
pTerrain->LoadHeightMap(szRawHeightFieldname);
pTerrain->LoadAttrMap(szAttrMapName);
pTerrain->RAW_LoadTileMap(szSplatName, true);
pTerrain->LoadShadowTexture(szShadowTexName);
pTerrain->LoadShadowMap(szShadowMapName);
pTerrain->LoadMiniMapTexture(szMiniMapTexName);
pTerrain->SetName(c_rstrAreaName.c_str());
pTerrain->CalculateTerrainPatch();
pTerrain->SetReady();
// ... complete deque push ...
// sonda da Sleep olmasın
Etki: En büyük kazanç burası. Bir tile için ~10×20 ms = 200 ms; büyük map’te 5–10 tile → birkaç saniye yapay bekleme gider.

5) EterLib/FileLoaderThread.cpp
Bul:

    m_CompleteMutex.Lock();
    m_pCompleteDeque.push_back(pData);
    m_CompleteMutex.Unlock();
    Sleep(g_iLoadingDelayTime);
}
Değiştir:

    m_CompleteMutex.Lock();
    m_pCompleteDeque.push_back(pData);
    m_CompleteMutex.Unlock();
}
Etki: Her dosya sonrası yapay beklemeyi kaldırır.

Özet etki
Önce    Sonra
Tile başına ~200 ms + dosya başına Sleep
Anlık yükleme (gerçek I/O kadar)
Warp / ilk giriş şişiyor
Daha kısa loading
Özellikle harita değişimli ışınlanma yavaş
Belirgin hızlanma
Notlar

c_Reference_Decrease_Wait_Time = 30000 → 10 yapma; loading kısaltmaz, memory thrash riski var.
//break; ResourceManager’da çoğu pack’te zaten yorumlu.
Client rebuild + cfg güncellemesi gerekir.
HDD/çok ağır pack’te loading yine biraz sürebilir; o gerçek yükleme, yapay Sleep değil.
 
Paylaşım için teşekkürler.

Etki: En büyük kazanç burası. Bir tile için ~10×20 ms = 200 ms; büyük map’te 5–10 tile → birkaç saniye yapay bekleme gider.
Emin olmamakla birlikte; en büyük kazanç değil, tek kazanç burası olabilir.
Çünkü 5.adıma kadar verdiğin işlemlerin neredeyse tamamı AreaLoaderThread.h/cpp->TEMP_CAreaLoaderThread sınıfına ait işlemler.. ve yanlış hatırlamıyorsam bu sınıf (ve içerisinde barındırılan fonksiyonların vb. tamamı) projede aktif olarak kullanılmıyor. Tamamen ölü kod. (g_iLoadingDelayTime dahil.)

Dolayısıyla projeye etki eden tek kısım 5.adım ve sonrası olacaktır. TEMP_CAreaLoaderThread sınıfını uzun zaman önce sildiğim için "kesin" konuşmuş olmayayım ama .h ve .cpp içindeki bu sınıfı ve fonksiyonları komple silerek kontrol sağlayabilirsiniz. Hata vermeden derlenirse çöptür.
 
Paylaşım için teşekkürler.


Emin olmamakla birlikte; en büyük kazanç değil, tek kazanç burası olabilir.
Çünkü 5.adıma kadar verdiğin işlemlerin neredeyse tamamı AreaLoaderThread.h/cpp->TEMP_CAreaLoaderThread sınıfına ait işlemler.. ve yanlış hatırlamıyorsam bu sınıf (ve içerisinde barındırılan fonksiyonların vb. tamamı) projede aktif olarak kullanılmıyor. Tamamen ölü kod. (g_iLoadingDelayTime dahil.)

Dolayısıyla projeye etki eden tek kısım 5.adım ve sonrası olacaktır. TEMP_CAreaLoaderThread sınıfını uzun zaman önce sildiğim için "kesin" konuşmuş olmayayım ama .h ve .cpp içindeki bu sınıfı ve fonksiyonları komple silerek kontrol sağlayabilirsiniz. Hata vermeden derlenirse çöptür.
Bilgi için teşekkürler efenim
 
sen niye ban yedin onu anlamadım ben başkası tartıştı sana mı patladı
 
Geri
Üst