Çözüldü Unpack-Pack Etmeden Geliştirme Hk.

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.

Kiremitci

Çaylak Üye
Üye
Mesaj
11
Beğeni
16
Puan
10
Ticaret Puanı
0
Merhabalar,

Yeni yeni geliştirme yapmaya ve kendimce bir şeyler geliştirmeye çalışıyorum. Şimdi envanteri 2 sekmeden 4 sekmeye çıkarmaya çalışıyorum (evet forumda halihazırda olduğunu gördüm, kendim bakmadan geliştirmeye çalışıyorum). Haliyle adım adım gidiyorum ama her seferinde pack-unpack yapmak can sıkıcı bir hal aldı. Bunun kolay bir yolu var mıdır?

Saygılarımla,
Kiremitci
 
Çözüm
C++:
Genişlet Daralt Kopyala
CEterPackManager::Instance().SetSearchMode

// arat

CEterPackManager::Instance().SetSearchMode(true)

// bu şekilde değiştirin

CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str());

// yorum satırına alın

// Index dosyasından root, locale, uiscript yazılarını kaldırın * işaretlerine dikkat edin.

// Aşağıdaki kodu da bu şekilde değiştirin

bool CEterPackManager::isExist(const char* c_szFileName)
{
    if (m_iSearchMode == SEARCH_PACK_FIRST)
    {
        if (isExistInPack(c_szFileName))
            return true;

        return _access(c_szFileName, 0) == 0 ? true : false;
    }

    if (_access(c_szFileName, 0) == 0)
        return true;

    return isExistInPack(c_szFileName);
}


Pack Değişiklikleri:
Genişlet Daralt Kopyala
root...
D kısmına ymir work diye dosya oluştur diyorlar ama ben ymir work içerisinde rootu klasör haline getirdiğimde çekmiyor bilen var mı sorun nedir?
 
D kısmına ymir work diye dosya oluştur diyorlar ama ben ymir work içerisinde rootu klasör haline getirdiğimde çekmiyor bilen var mı sorun nedir?

root klasöründekiler "d:/ymir work" üzerinden değil ana dizin üzerinden çalıştığı için o şekilde kullanamazsınız, system.py üzerinden open ve
__hybrid_import fonksiyonlarında düzenlemeler yapıp gelen çağrıları diskdeki açık root klasörüne yönlendirmeniz gerekiyor
 
root klasöründekiler "d:/ymir work" üzerinden değil ana dizin üzerinden çalıştığı için o şekilde kullanamazsınız, system.py üzerinden open ve
__hybrid_import fonksiyonlarında düzenlemeler yapıp gelen çağrıları diskdeki açık root klasörüne yönlendirmeniz gerekiyor
dahada detaylandırırmısınız acaba bu durumdada yine client aç kapa yapmak şart değilmi?
 
dahada detaylandırırmısınız acaba bu durumdada yine client aç kapa yapmak şart değilmi?

yaptığınız şeye bağlı, bahsettiğim kısım sadece paketleme işlemlerini atlamak içindi, bunun yanı sıra bir hot reload sistemi oluşturabilirsiniz, dosyalarda değişiklik olduğunda kapatıp açmadan güncelleyebilmenizi sağlar ancak direkt olarak bir iki satırlık bir iş değil çünkü güncelleyeceğiniz şeylerin aktif referansı varken değiştirmeye kalktığınızda crash alırsınız ancak dışarıdan çağırılan oyuna entegre edilmemiş tek dosya scriptlerde sorun yaşamazsınız
 
yaptığınız şeye bağlı, bahsettiğim kısım sadece paketleme işlemlerini atlamak içindi, bunun yanı sıra bir hot reload sistemi oluşturabilirsiniz, dosyalarda değişiklik olduğunda kapatıp açmadan güncelleyebilmenizi sağlar ancak direkt olarak bir iki satırlık bir iş değil çünkü güncelleyeceğiniz şeylerin aktif referansı varken değiştirmeye kalktığınızda crash alırsınız ancak dışarıdan çağırılan oyuna entegre edilmemiş tek dosya scriptlerde sorun yaşamazsınız
Bu bahsettiğiniz yapılar için Forum’da link var mı acaba
Direkt klasörden packleri okuma
Ve hot reload
 
Bu bahsettiğiniz yapılar için Forum’da link var mı acaba
Direkt klasörden packleri okuma
Ve hot reload
ufak bir kaç örnek bırakayım varsa eksiklerini ai ile tamamlayabilirsiniz

5Hediil.png

z0TcdYr.png


 
C++:
Genişlet Daralt Kopyala
CEterPackManager::Instance().SetSearchMode

// arat

CEterPackManager::Instance().SetSearchMode(true)

// bu şekilde değiştirin

CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str());

// yorum satırına alın

// Index dosyasından root, locale, uiscript yazılarını kaldırın * işaretlerine dikkat edin.

// Aşağıdaki kodu da bu şekilde değiştirin

bool CEterPackManager::isExist(const char* c_szFileName)
{
    if (m_iSearchMode == SEARCH_PACK_FIRST)
    {
        if (isExistInPack(c_szFileName))
            return true;

        return _access(c_szFileName, 0) == 0 ? true : false;
    }

    if (_access(c_szFileName, 0) == 0)
        return true;

    return isExistInPack(c_szFileName);
}


Pack Değişiklikleri:
Genişlet Daralt Kopyala
root, uiscript klasörlerini pack/ dizininden çıkarıp direkt olarak clientin olduğu bölüme atın
uiscript/uiscript gibi bir şekilde olmasın uiscript/xx.py direkt gözükebilecek şekilde ayarlayın.
locale packını da locale/locale yerine locale/xx şeklinde okunacak halde client dizinine atın.
diğer packlar unpack edilmiş şekilde pack/ klasöründe yer alsınlar.
 
Çözüm
Geri
Üst