Loading Süre Kısma

umutcanpolat

Üye
Üye
Mesaj
72
Çö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.
 
Geri
Üst