Metin2 Server Source 64bit Build

Serveri 64 bite taşımak değil zaten kaynak dosyalarını 64 bit makineden derlemek. Kimse sourceyi 64 bite yükselttiğini falan söylemiyor bazıları bu şekilde anlıyor ama yanlış bir anlaşılma. 64 bit sunucuda derlenmiş libler ile veri tipleri düzenlenmiş ve ekstra değişiklikler ile 64 bit makinada 32 bit sourceyi derleyebilmek özet olarak. Yoksa dediğiniz gibi server 64 client 32 olmaz.
Konu başlığından o şekilde anlaşılıyor, yorumlarda da bahsedilmiş zaten benim yazma sebebim biri 64'e geçirmek isterse başlayabileceği bir ip ucu bırakmak.
 
Client’te kullanılan harici kütüphanelerin 64 versiyonu olsaydı client 64’e yükseltilebilirdi.

@cncn konu başlığı “Metin2 Server Source 64bit Build” olduğu için yanlış anlaşılacak bir şeyin olduğunu düşünmüyorum. Konu hakkında detaylı bilgi verdiğiniz için teşekkür ederim. :giggle:
 
Benim anlamadığım, tek kodla 32 libleri cekebiliriz freebsd sitesinden sonra makefileda 32 bit e göre ayarlayıp derleyebiliriz kodlarda değişiklik yapmanıza gerek yok diye düşünüyorum. Bir yerlerde hata yapmış olabilirmisiniz?
 
Benim anlamadığım, tek kodla 32 libleri cekebiliriz freebsd sitesinden sonra makefileda 32 bit e göre ayarlayıp derleyebiliriz kodlarda değişiklik yapmanıza gerek yok diye düşünüyorum. Bir yerlerde hata yapmış olabilirmisiniz?
Bu konu 64bit freebsd’de derlemek için. Zaten dosyalar varsayılan halinde 32bit derleniyor.
 
Burayı görüntülemek için şu ranklardan birine sahip olmalısınız: Premium Üye, Geliştirici
Bunlar olmadan faydalanamıyor muyuz yani?
 
Burayı görüntülemek için şu ranklardan birine sahip olmalısınız: Premium Üye, Geliştirici
Bunlar olmadan faydalanamıyor muyuz yani?
Bu içeriğe erişmek için istenilen ranklardan birine sahip olmanız gerekiyor.
 
Bin gespannt ob es geht
Sie können Builds nur mit diesem Leitfaden erhalten. Sie müssen die Datentypen aktualisieren, um das Spiel auszuführen

Zum Beispiel;
input_main.cpp;
C++:
Genişlet Daralt Kopyala
struct RawPacketToCharacterFunc
{
    const void * m_buf;
    int    m_buf_len;

    RawPacketToCharacterFunc(const void * buf, int buf_len) : m_buf(buf), m_buf_len(buf_len)
    {
    }

    void operator () (LPCHARACTER c)
    {
        if (!c->GetDesc())
            return;

        c->GetDesc()->Packet(m_buf, m_buf_len);
    }
};


C++:
Genişlet Daralt Kopyala
struct RawPacketToCharacterFunc
{
    const void * m_buf;
    int32_t    m_buf_len;

    RawPacketToCharacterFunc(const void * buf, int32_t buf_len) : m_buf(buf), m_buf_len(buf_len)
    {
    }

    void operator () (LPCHARACTER c)
    {
        if (!c->GetDesc())
            return;

        c->GetDesc()->Packet(m_buf, m_buf_len);
    }
};
 
Güncelleme;
db açılırken proto dosyalarının okunması sırasında bus error hatası ile karşılaştım.
6401 eklentisini görüntüle

Kod:
Genişlet Daralt Kopyala
[1]  + 2431 bus error (core dumped)  ./db

Hatanın kaynağını tespit etmek için ilk önce gdb ile baktım..
6402 eklentisini görüntüle

Daha sonra db/src/ProtoReader.cpp dosyasını açtım ve kodları analiz etmeye başladım. Ekrana mesajlar yazdırdım vs.
C++:
Genişlet Daralt Kopyala
static string* StringSplit(string strOrigin, string strTok)
{
    /*fprintf(stdout, "string %s tok %s", strOrigin.c_str(), strTok.c_str());
    fprintf(stdout, "cutat %ld - %ld\n", strOrigin.find_first_of(strTok), strOrigin.npos);*/
    unsigned int    cutAt;                            //자르는위치
    int                index     = 0;                    //문자열인덱스
    string* strResult = new string[30];          //결과return 할변수

    //strTok을찾을때까지반복
    while ((cutAt = strOrigin.find_first_of(strTok)) != strOrigin.npos)
    {
       if (cutAt > 0)  //자르는위치가0보다크면(성공시)
       {
           //fprintf(stdout, "sira %d\n", index);
           strResult[index++] = strOrigin.substr(0, cutAt);  //결과배열에추가
       }
       strOrigin = strOrigin.substr(cutAt+1);  //원본은자른부분제외한나머지
    }

İşaretlediğim alanda (15. satır) dizi sınırını aştığı için bu hatayı verdiğini fark ettim. Burayı kısa süreliğine devredışı bıraktım ve while döngüsünün sonsuz döngüye girdiğini fark ettim. Kaynak kodları 64bit ile build ettiğim için strOrigin.find_first_of(strTok) ve strOrigin.npos çıktıları long int türünde olduğunu fark ettim. cutAt değişkeni ise uint türünde olduğu için uyuşmazlık sebebi ile karşılaştırma yapamıyordu. Bu yüzden while döngüsü ve koşullar düzgün çalışmıyordu.

C++:
Genişlet Daralt Kopyala
    unsigned int    cutAt;                            //자르는위치

Yukarıdaki kodu şu şekilde değiştirdim;
C++:
Genişlet Daralt Kopyala
    unsigned long int    cutAt;                            //자르는위치

Ve başarılı bir şekilde proto dosyalarımı okuyup veritabanına aktardı. :)
6403 eklentisini görüntüle

Anlayacağınız üzere 64bit ile build almak kolay ancak serveri çalıştırmak için yapılması gereken çok şey var. Zaten konuyu da benim gibi uğraşmak isteyenler için paylaşmıştım. Bu yüzden linki geliştirici rankına sahip kullanıcıların görmesi şekilde ayarlamıştım. 64bit buildi merak edip nereden başlayacağını bilmeyenler içindi bu konu.
ellerine sağlık aynı şekilde bende kodu şöyle revize ettim

C++:
Genişlet Daralt Kopyala
static string* StringSplit(string strOrigin, string strTok)
{
    unsigned int    cutAt;                            //자르는위치
    int                index     = 0;                    //문자열인덱스
    int                counter = 0;
    string* strResult = new string[30];          //결과return 할변수
    const char *tmp = strOrigin.c_str();
    
    strResult[0].clear();
    while (tmp[index])
    {
        if (tmp[index] == ',')
        {
            strResult[counter] += '\0';
            counter++;
            strResult[counter].clear();
        }

        strResult[counter] += tmp[index];
        index++;
    }
    strResult[counter] += '\0';
    /*
    //strTok을찾을때까지반복
    while ((cutAt = strOrigin.find_first_of(strTok)) != strOrigin.npos)
    {
       if (cutAt > 0)  //자르는위치가0보다크면(성공시)
       {
            strResult[index++] = strOrigin.substr(0, cutAt);  //결과배열에추가
       }
       strOrigin = strOrigin.substr(cutAt+1);  //원본은자른부분제외한나머지
    }

    if(strOrigin.length() > 0)  //원본이아직남았으면
    {
        strResult[index++] = strOrigin.substr(0, cutAt);  //나머지를결과배열에추가
    }

    for( int i=0;i<index;i++)
    {
        strResult[i] = trim(strResult[i]);
    }
    */
    return strResult;  //결과return
}
 
Bence 64 bite geçimek için uğraşmayın.
Martysama yıllardır 64 bite geçirmedi bence bi sebebi varki geçirmedi.
 
Land Of Heroes Clienti 64bit'e güncellemiş.
Evet çekenler olmuş. Paylaşılan N2 fileste de 64 bit. Libleri aldım bile. Beni durduran sadece kütüphanelerdei artık onlarda elimde olduğundan Bende 64 e çekiyorum yavaştan. Biraz uzun sürecek gibi meşakatlı bir iş. Programlama tecrübesi olmayanlar hiç bulaşmasın bile.
 
Evet çekenler olmuş. Paylaşılan N2 fileste de 64 bit. Libleri aldım bile. Beni durduran sadece kütüphanelerdei artık onlarda elimde olduğundan Bende 64 e çekiyorum yavaştan. Biraz uzun sürecek gibi meşakatlı bir iş. Programlama tecrübesi olmayanlar hiç bulaşmasın bile.

Kolay aslında. Ben birkaç yıl önce ilk geçirdiğimde SpeedTree 64 bit olmadığı için ağaçları kullanamıyordum. Daha sonrasında SpeedTree 1.6 sürümünün kaynak kodları elime geçince 64 bit derleyip sıkıntısız kullandım.
 
Uzun ugraslar sonucunda mySQL 8 ve 64bit ile sonunda oyuna giris yapabildim.

Kanit
Linkleri görebilmek için giriş yap veya kayıt ol.

Hocam ben başarılı şekilde freebsd 14.0 amd64 sürümünü kullanarak build aldım oyun açık göründüğü üzere ancak client ile giriş yapamıyorum. Ne yapmam gerekiyor? Ne yaptıysam oyuna girmeyi başaramadım.

1704878656947.webp
 
ama indiremiyorum serverim var freebsd 13.1 64 bit olarak bi türlü yükliyemedim githubtaki hepsini yaptım ama bu doyaya erişimimde yok zaten kuramadım bi türlü
 
Geri
Üst