Extern Olmadan Kaynak Kodu Nasıl Oluşturulur (vcpkg yöntemi)

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 50

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0

Merhaba, bu Metin2 kaynak kodunu vcpkg ile oluşturmak için rastgele ve istenmeyen bir öğreticidir.

Kesinlikle yeni gelenler için tasarlandı, ancak olması gerekenden daha karmaşık hale gelebilir.
Kaynak oluşturma ve Extern'i sıfırdan oluşturma hakkındaki wiki sayfalarını hatırlarsanız, bu temizlenmiş ve güncellenmiş 2020 yöntemidir ™.
Bu eğitim, hem internette sahip olduğum bazı revizyonlarda hem de orijinal sızdırılan revizyonlarda değişiklik yapmaya odaklanıyor.
Vcpkg kullanacağız, ancak bu öğretici, oluşturulacak genel bir kaynak dosyası elde etmek için gerekli olan birkaç düzeltmeyi de içerir.


Giriş

vcpkg, Windows, Linux, Mac (ve FreeBSD) için bir C ++ paket yöneticisidir.
Uygulamalarımızdan herhangi birinin gerektirdiği herhangi bir üçüncü taraf programını oluşturmamıza ve bunları güncel tutmamıza olanak tanır.
Ayrıca, kaynaklarımıza gerekli olabilecek yeni her şeyi kolayca yüklememize olanak tanır.
Metin2'de bu program eski Extern dizininin tamamen yerine geçer.
Eğitim, hem istemci hem de sunucu olmak üzere hem Windows hem de FreeBSD için uyumludur.

Bu yöntem aynı zamanda vcpkg kurulum köküne özel eklemeler veya kitaplıklar eklemeyi de destekler, konu hakkında daha sonra fazlasını açıklayacağım.



Neden bu yöntemi kullanmalısınız?

  • <li data-xf-list-type="ul">Kaynaklarınızı dağıtmanın hızlı ve daha ince bir yolunu istiyorsunuz.
Extern'i hiç dağıtmayacak ve insanların bilgisayarlarına vcpkg yüklemesini gerçekleştirmelerine izin verecek.

  • <li data-xf-list-type="ul">Metin2'nin tüm üçüncü taraf bileşenlerini her zaman güncel tutun.
Daha iyi performans ve güvenlik değişiklikleri elde edebilirsiniz. (En yaygın olarak Python güncellemesi)

  • <li data-xf-list-type="ul">Statik bağlantı elde etmek istiyorsunuz (istemcinizdeki fazladan DLL'yi veya oyunda SO'yu kaldırarak). İstemci kaynağım yalnızca SpeedTreeRT ve Granny2 dll dosyalarını içeriyor (statik Granny 2.9 kullanırsanız ve kaynaklardan SpeedTreeRT derlerseniz bu kaldırılabilir)

Uygulanan değişiklikler:

  • <li data-xf-list-type="ul">Eklemeleri ve kitaplıkları vcpkg kullanacak şekilde değiştirin. <li data-xf-list-type="ul">Vcpkg'da son sürümü kullanmak için çeşitli dosyalar güncellendi. <li data-xf-list-type="ul">Eski NANOBEGIN / NANOEND son SDK ile değiştirir ve Nanomiteler ile hata ayıklama yapıları kullanılarak oluşturulan bazı hataları düzeltir. <li data-xf-list-type="ul">Makefile temizlendi ve statik kitaplık kullanımını etkinleştirdi (artık .so yok) <li data-xf-list-type="ul">Sunucuyu Windows altında kullanıyorsanız karşılaşabileceğiniz bazı hataları veya sorunları düzeltir.

Uyumluluk ve uyumsuzluk

  • <li data-xf-list-type="ul">FreeBSD ile libmariadb'yi çalıştıramadım, bunun nedeni bir FreeBSD 64-bit uygulamasıyla derlemem olabilir, kötü bir şey olması durumunda, https: //pkg.freebsd'yi bırakarak hafifletmenizi öneririm. .org / FreeBSD: (FREEBSD SÜRÜMÜNÜZ): amd64 / latest / All / mariadb-connector-c-3.1.9.txz (vcpkg dizini) \ yüklü \ x86-freebsd içindeki lib dosyalarını içerir. <li data-xf-list-type="ul">64-bit altında 32-bit vcpkg build edemezsiniz, 32-bit yapı makinesi alın. FreeBSD üzerine build etmek için multilib almak mümkün olabilir, ancak vcpkg altında elde edilebilecek herhangi bir yöntemin farkında değilim. <li data-xf-list-type="ul">FreeBSD sanal makinenizde veya VPS'nizde internete ihtiyacınız var, aynı zamanda ilgili bir sürüme güncellenmesi gerekiyor, desteklenen herhangi bir FreeBSD sürümü yeterli, adresinden kontrol edin. <li data-xf-list-type="ul">İstemciyi (veya Sunucuyu) oluşturmak için en azından Windows 7 SP1 kullanmanız gerekir. <li data-xf-list-type="ul">Kaynağınızı oluşturmak için clang kullanmanızı önermiyorum, Crypto ++ ile bazı sorunlar yaşıyorum.


Windows önkoşulları

Visual Studio yükleyicisinde "C ++ masaüstü uygulama geliştirme" (veya benzeri) iş yükünü seçin.


<blockquote data-attributes="" data-quote="" data-source="" class="bbCodeBlock bbCodeBlock--expandable bbCodeBlock--quote js-expandWatch">
Kod:
pkg install gcc makedepend gmake cmake git openssl ninja

Ardından aşağıdaki komutları yazın:

Kod:
cd (folder where we want to store vcpkg) git clone --depth=1 https://github.com/microsoft/vcpkg cd vcpkg ./bootstrap-vcpkg.sh -disableMetrics -useSystemBinaries ./vcpkg install devil cryptopp boost-system boost-container boost-unordered boost-algorithm boost-pool boost-math boost-lexical-cast

Windows kurulumu

Windows altında, aşağıdaki komutları yazın: (Lütfen tüm bu komutları yükseltilmiş / yönetici komut isteminde başlatmanız gerektiğini unutmayın)

Kod:
cd (folder where we want to store vcpkg) git clone --depth=1 https://github.com/microsoft/vcpkg cd vcpkg bootstrap-vcpkg -disableMetrics vcpkg integrate install vcpkg install devil:x86-windows-static cryptopp:x86-windows-static boost-system:x86-windows-static boost-container:x86-windows-static boost-unordered:x86-windows-static boost-algorithm:x86-windows-static lzo:x86-windows-static python2:x86-windows-static

Type6 Snappy sıkıştırmasını kullanırsanız , aşağıdaki komutu da yazın:

Kod:
vpckg install snappy:x86-windows-static

Windows altında bir Sunucu oluşturmak istiyorsanız, aşağıdaki komutu da yazın:

Kod:
vcpkg install libmariadb:x86-windows-static openssl:x86-windows-static boost-pool:x86-windows-static boost-math:x86-windows-static boost-lexical-cast:x86-windows-static

İstemci kaynak dizininizin içinde (Metin2Client.sln olduğu yerde), Extern adında yeni bir klasör oluşturun (bazı bileşenler vcpkg aracılığıyla dağıtılamaz) ve bu klasörün içine çıkartın.


Sunucu: Genel değişiklikler

Kaynakları oluşturmak için OpenSSL güncellemesini takip etmeniz gerekir. Bir sorunla karşılaşırsanız, char_skill derleme düzeltmesini de izlemeniz gerekebilir.

Bu değişiklikler game / src içinde yapılmalıdır.

Cipher.h dosyasını açın ve aşağıdaki satırı değiştirin:

Kod:
encoder_-&gt;ProcessData((byte*)buffer, (const byte*)buffer, length);

değiştir

Kod:
encoder_-&gt;ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);

ve diğerini

Kod:
decoder_-&gt;ProcessData((byte*)buffer, (const byte*)buffer, length);

değiştir

Kod:
decoder_-&gt;ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);

Cipher.cpp dosyasını açın ve aşağıdaki satırı silin:

Kod:
#include &lt;cryptopp/cryptoppLibLink.h&gt;

Utils.cpp dosyasını açın ve varsa bu satırları silin:

Kod:
#ifdef WIN32 extern "C" void my_make_scrambled_password (char * to, const char * password, size_t pass_len); #endif

ve bu satırlara sahipseniz, değiştirin:

Kod:
#ifdef WIN32     my_make_scrambled_password(hash_buf, tmp_pwd, strlen(tmp_pwd)); #else     make_scrambled_password(hash_buf, tmp_pwd); #endif

değiştir

Kod:
make_scrambled_password(hash_buf, tmp_pwd);

Ardından, şu satırlara sahipseniz arayın:

Kod:
#ifndef SHA1_HASH_SIZE #define SHA1_HASH_SIZE 20 #endif

eğer varsa, bunu üstteki 3 satırdan sonra ekleyin:

Kod:
extern "C" {     #include "sha1.h" } char *hexify(char * const result, const unsigned char *digest,          const size_t size_result, size_t size_digest) {     static const char * const hexchars = "0123456789ABCDEF";     char *result_pnt = result;     if (size_digest &lt;= (size_t) 0 ||         size_result &lt;= (size_digest * (size_t) 2U)) {         return NULL;     }     do {         *result_pnt++ = hexchars[(*digest &gt;&gt; 4) &amp; 0xf];         *result_pnt++ = hexchars[*digest &amp; 0xf];         digest++;         size_digest--;     } while (size_digest &gt; (size_t) 0U);     *result_pnt = 0;     return result; } // Implementation from commit 2db6b50c7b7c638104bd9639994f0574e8f4813c in Pure-ftp source. void make_scrambled_password(char scrambled_password[42], const char password[255]) {     SHA1_CTX      ctx;     unsigned char h0[20], h1[20];     SHA1Init(&amp;ctx);     SHA1Update(&amp;ctx, (unsigned char*)password, strlen(password));     SHA1Final(h0, &amp;ctx);     SHA1Init(&amp;ctx);     SHA1Update(&amp;ctx, h0, sizeof h0); #ifdef HAVE_EXPLICIT_BZERO     explicit_bzero(h0, strlen(password)); #else     volatile unsigned char *pnt_ = (volatile unsigned char *) h0;     size_t                     i = (size_t) 0U;     while (i &lt; strlen(password)) {         pnt_[i++] = 0U;     } #endif     SHA1Final(h1, &amp;ctx);     *scrambled_password = '*';     hexify(scrambled_password + 1U, h1,             42, sizeof h1); }

Aşağıdaki dosyayı (sha1.c ve sha1.h) indirin ve bunları game / src klasörüne ekleyin.

<a href=" " class="link link--external" target="_blank" rel="nofollow ugc noopener" data-proxy-href="/proxy.php?link=https%3A%2F%2Fwww.dosyaupload.com%2FgqWv&amp;hash=27f7ed1eacf46dda8fe3cf0d11b7b5d1"> </a>
İnput_auth.cpp dosyasını açın ve bu satırlara sahipseniz, bunları şu satırlardan değiştirin:

Kod:
#ifdef __WIN32__         DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT PASSWORD('%s'),password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'", szLogin); #else         // @fixme138 1. PASSWORD('%s') -&gt; %s 2. szPasswd wrapped inside mysql_hash_password(%s).c_str()         DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT '%s',password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'",                 mysql_hash_password(szPasswd).c_str(), szLogin); #endif

değiştir

Kod:
DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT '%s',password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'",                 mysql_hash_password(szPasswd).c_str(), szLogin);


Bu dosyanın içinde, varsa şu satırları değiştirin:

Kod:
#ifdef __WIN32__         DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT PASSWORD('%s'),password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'", szLogin); #else         // @fixme138 1. PASSWORD('%s') -&gt; %s 2. szPasswd wrapped inside mysql_hash_password(%s).c_str()         DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT '%s',password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'",                 mysql_hash_password(szPasswd).c_str(), szLogin); #endif

değiştir

Kod:
DBManager::instance().ReturnQuery(QID_AUTH_LOGIN, dwKey, p,                 "SELECT '%s',password,securitycode,social_id,id,status,availDt - NOW() &gt; 0,"                 "UNIX_TIMESTAMP(silver_expire),"                 "UNIX_TIMESTAMP(gold_expire),"                 "UNIX_TIMESTAMP(safebox_expire),"                 "UNIX_TIMESTAMP(autoloot_expire),"                 "UNIX_TIMESTAMP(fish_mind_expire),"                 "UNIX_TIMESTAMP(marriage_fast_expire),"                 "UNIX_TIMESTAMP(money_drop_rate_expire),"                 "UNIX_TIMESTAMP(create_time)"                 " FROM account WHERE login='%s'",                 mysql_hash_password(szPasswd).c_str(), szLogin);


Libsql / AsyncSQL.cpp dosyasını açın ve değiştirin:

Kod:
fprintf(stdout, "AsyncSQL: connected to %s (reconnect %d)\n", m_stHost.c_str(), m_hDB.reconnect);[

değiştir

Kod:
fprintf(stdout, "AsyncSQL: connected to %s\n", m_stHost.c_str());

Libthecore / src / log.c dosyasını açın ve değiştirin:

Kod:
#ifndef __WIN32__     // log_level이 1 이상일 경우에는 테스트일 경우가 많으니 stdout에도 출력한다.     if (log_level_bits &gt; 1)     { #endif

değiştir

Kod:
// log_level이 1 이상일 경우에는 테스트일 경우가 많으니 stdout에도 출력한다.     if (log_level_bits &gt; 1)     {

bu satırı da değiştirin, son değişiklikten sonra birkaç satır bulacaksınız:

Kod:
#ifndef __WIN32__     } #endif

değiştir

Kod:
}

Libthecore / include / stdafx.h dosyasını açın ve silin

Kod:
//struct timespec {     time_t  tv_sec;         /* seconds */     long    tv_nsec;        /* and nanoseconds */ };

ayrıca şu satırı da silin:

Kod:
#define strtof(str, endptr) (float)strtod(str, endptr)

Libserverkey'iniz varsa, libserverkey / RSACrypto.cpp'yi açın ve şu satırları silin:

Kod:
#ifdef _WIN32 #include &lt;atlenc.h&gt; #endif

ayrıca libserverkey / RSACrypto.h dosyasını açın ve şu satırları silin:

Kod:
#ifdef _WIN32 // needed only for using openssl #pragma comment(lib, "libeay32") #endif

Libserverkey / CheckServerKey.h dosyasını açın ve değiştirin

Kod:
#ifdef _WIN32 #include &lt;atlenc.h&gt; #else #include "base64_ssl.h" #endif

değiştir

Kod:
#include "base64_ssl.h"

Ayrıca bu dosyanın içinde şunu değiştirin:

Kod:
#ifdef _WIN32     if (FALSE == Base64Decode(key.c_str(), key.size(), buf, &amp;buflen))     {         errorString = "base64 decode failed";         return false;     } #else     if (false == unbase64_ssl((unsigned char *)key.c_str(), key.size(), buf, buflen))     {         errorString = "base64 decode failed";         return false;     }     buflen = strlen((const char *)buf); #endif

değiştir

Kod:
if (false == unbase64_ssl((unsigned char *)key.c_str(), key.size(), buf, buflen))     {         errorString = "base64 decode failed";         return false;     }     buflen = strlen((const char *)buf);

Db / src / CsvReader.h dosyasını açın ve değiştirin:

Kod:
#if _MSC_VER     #include &lt;hash_map&gt; #else     #include &lt;map&gt; #endif

değiştir

Kod:
#include &lt;boost/unordered_map.hpp&gt;

bunu da değiştirin:

Kod:
#if _MSC_VER     typedef stdext::hash_map&lt;std::string, size_t&gt; NAME2INDEX_MAP;     typedef stdext::hash_map&lt;size_t, std::string&gt; INDEX2NAME_MAP; #else     typedef std::map&lt;std::string, size_t&gt; NAME2INDEX_MAP;     typedef std::map&lt;size_t, std::string&gt; INDEX2NAME_MAP; #endif

değiştir

Kod:
typedef boost::unordered_map&lt;std::string, size_t&gt; NAME2INDEX_MAP;     typedef boost::unordered_map&lt;size_t, std::string&gt; INDEX2NAME_MAP;

Db / src / Main.cpp dosyasını açın ve şu satırları silin :

Kod:
#ifdef __FreeBSD__     _malloc_options = "A"; #endif

cancelliamo anche queste righe:

Kod:
#ifdef __FreeBSD__ extern const char * _malloc_options; #endif

Game / src / MarkImage.h dosyasını açın ve bundan önce:

Kod:
#include &lt;IL/il.h&gt;

bunu ekleyin:

Kod:
#define IL_STATIC_LIB 1

Sunucu: Yalnızca FreeBSD değişiklikleri

"CC = (something)" in "CC = g++" i değiştirmeliyiz
Bu dosyaları bir metin düzenleyiciyle açıp değiştirmeliyiz, işte dosyaların listesi:

- libthecore/src/Makefile

- libsql/Makefile

- libpoly/Makefile

- libgame/src/Makefile

- libserverkey/Makefile

- db/src/Makefile

- game/src/Makefile

- game/src/quest/Makefile (Burada CPP değil CC denir)

Ayrıca değiştirmek zorundayız

"CC = gccX" (burada X bir sayıdır) "liblua / config" (veya liblua / 5.0 / config) içindeki "CC = gcc" içinde


libsql / Makefile'ı açın ve aşağıdaki satırları silin:

Kod:
IFLAGS = -I/usr/local/include/ #sometimes necessary included IFLAGS = -I/usr/local/include/mysql

veya bunlara sahipseniz aşağıdaki satırlar:

Kod:
IFLAGS = -I../libmysql/5.x-5.1.35 IFLAGS = -I../libmysql/7.x-5.1.35

"LIBS =" öncesine şunu ekleyin:

Kod:
VCPKG_DIR=(Your vcpkg directory) IFLAGS = -I$(VCPKG_DIR)/installed/x86-freebsd/include

Bu dosyaların içinde "-m32" olup olmadığını kontrol edin, aksi takdirde bunu "LIBS =" öncesine ekleyin

Kod:
CFLAGS + = -m32

Bu kontrol ve ekleme işlemi aşağıdaki dosyalar için yapılmalıdır:

- libthecore / src / Makefile
- libsql / Makefile
- libpoly / Makefile
- libserverkey / Makefile
- libgame / src / Makefile


game / src / quest / Makefile dosyasını açın ve siz "-m32" yok bunu "all: qc cc" nin önüne ekleyin:

Kod:
CFLAGS + = -m32

"ENABLE_STATIC = 0" yoksa, bunu "all: qc cc" nin önüne ekleyin

Kod:
CPP += -static

Eğer "ENABLE_STATIC = 0"


varsa , 0'ı 1'de değiştirin. FreeBSD x64 altındaysanız, bunu "all: qc cc" den önce eklemeniz gerekir.


LIBDIR + = -L / usr / local / lib32 / gccX [/ CODE] x86 Freebsd için bu

Kod:
LIBDIR += -L/usr/local/lib/gccX


Replace X with the gcc major version, you can verify that by typing "gcc --version" in the console.[/CODE]

Bunun gibi bir şey elde edebilirsiniz:

gcc (FreeBSD Ports Collection) 9.3.0

Benim durumumda numara 9'dur.

"Db / src / Makefile" dosyasını açın ve varsa bu satırları silin:

Kod:
ifeq ($ (BSD_VERSION), 7) INCDIR + = -I ../../ libmysql / 7.x-5.1.35 LIBDIR + = -L ../../ libmysql / 7.x-5.1.35 else INCDIR + = -I ../../ libmysql / 5.x-5.1.35 LIBDIR + = -L ../../ libmysql / 5.x-5.1.35 endif

varsa bu satırları da silin:

Kod:
# boost INCDIR += -I../../boost

ve ayrıca şu satırları da silin:

Kod:
# Boost INCDIR += -I../../../Extern/include/boost # MySQL INCDIR += -I/usr/local/include/mysql LIBS += /usr/local/lib/mysql/libmysqlclient.a /usr/lib/libz.a

ve ayrıca bu satır:

Kod:
INCDIR += -I/usr/local/include

ve bunlar:

Kod:
# Project Libraries INCDIR += -I../../../Extern/include LIBDIR += -I../../../Extern/lib

ayrıca şu kelimeyi de silin:

Kod:
-lmysqlclient

ve bu da:

Kod:
-Wl,-rpath=/usr/local/lib/gccX

(X'in olduğu herhangi bir sayı olabilir)

"-m32" yoksa, "SRCS = (some text)" ve "CPPFILE = (some text)" den önce ekleyin:

Kod:
CFLAGS += -m32

Bunu "SRCS = (some text)" ve "CPPFILE = (some text)" den önce ekleyin

Kod:
VCPKG_ROOT (your vcpkg directory) LIBS += -lmariadbclient -lssl -lcrypto -lz INCDIR += -I$(VCPKG_ROOT)/installed/x86-freebsd/include LIBDIR += -L$(VCPKG_ROOT)/installed/x86-freebsd/lib

FreeBSD x64 altında, bunu daha önce eklediğiniz LIBDIR + = kodundan sonra eklemeniz gerekir:

Kod:
LIBDIR + = -L / usr / local / lib32 / gccX

FreeBSD x86 altında bu:

Kod:
LIBDIR + = -L / usr / local / lib / gccX

X'i gcc ana sürüm kodunuzla değiştirin, bunu "gcc - sürüm" den alabilirsiniz.

"ENABLE_STATIC = 0" yoksa, bunu daha önce eklediğimiz kodun önüne ekleyin (LIBDIR + = ve INCDR + =)

Kod:
CFLAGS += -static

"ENABLE_STATIC = 0" varsa, 0'ı 1 olarak değiştirin.

Game / src / Makefile'ı açın ve aşağıdaki satırları silin (hepsine sahip olmamanız önemli değil)

Kod:
# boost INCDIR += -I../../../Extern/include/boost # DevIL INCDIR += -I../../libdevil LIBDIR += -L../../libdevil LIBS += -lIL -lpng -ltiff -lmng -llcms -ljpeg # MySQL ifeq ($(BSD_VERSION), 7) INCDIR += -I../../libmysql/7.x-5.1.35 LIBDIR += -L../../libmysql/7.x-5.1.35 else INCDIR += -I../../libmysql/5.x-5.1.35 LIBDIR += -L../../libmysql/5.x-5.1.35 endif LIBS += -lmysqlclient -lz # Miscellaneous external libraries INCDIR += -I../../../Extern/include LIBDIR += -L../../../Extern/lib LIBS += -lcryptopp -lgtest # HackShield INCDIR += -I../../libhackshield/include LIBDIR += -L../../libhackshield/lib LIBS += -lanticpxsvr # XTrap INCDIR += -I../../libxtrap/include

ve

Kod:
# Boost INCDIR += -I../../../Extern/include/boost # DevIL INCDIR += -I../../../Extern/include/IL LIBS += ../../../Extern/lib/libIL.a\         ../../../Extern/lib/libjasper.a\         ../../../Extern/lib/libpng.a\         ../../../Extern/lib/libtiff.a\         ../../../Extern/lib/libjbig.a\         ../../../Extern/lib/libmng.a\         /usr/lib/liblzma.a\         ../../../Extern/lib/liblcms.a\         ../../../Extern/lib/libjpeg.a # MySQL INCDIR += -I/usr/local/include/mysql LIBS += /usr/local/lib/mysql/libmysqlclient.a /usr/lib/libz.a # CryptoPP LIBS += ../../../Extern/lib/libcryptopp.a

ve

Kod:
# OpenSSL INCDIR += -I/usr/include LIBS += -lssl -lcrypto # LIBS += /usr/lib/libssl.a

ve

Kod:
# Project Libraries INCDIR += -I../../../Extern/include INCDIR += -I/usr/local/include LIBDIR += -L/usr/local/lib

"CFILE = minilzo.c" öncesine şunu ekleyin:

Kod:
VCPKG_ROOT= (your vcpkg directory) INCDIR += -I$(VCPKG_ROOT)/installed/x86-freebsd/include LIBDIR += -L$(VCPKG_ROOT)/m2pkg/installed/x86-freebsd/lib LIBS += -lmariadbclient -lcryptopp -lIL -lpng -ljpeg -lssl -lcrypto

FreeBSD x64 altında, bunu daha önce eklediğiniz LIBDIR + = kodundan sonra eklemeniz gerekir:

Kod:
LIBDIR += -L/usr/local/lib32/gccX

FreeBSD x86 altında bu:

Kod:
LIBDIR += -L/usr/local/lib/gccX

X'i gcc ana sürüm kodunuzla değiştirin, bunu "gcc - sürüm" den alabilirsiniz.

"ENABLE_STATIC = 0" yoksa, bunu daha önce eklediğimiz kodun önüne ekleyin (LIBDIR + = ve INCDR + =)

Kod:
CFLAGS += -static

ENABLE_STATIC = 0" varsa, 0'ı 1 olarak değiştirin.

Kod:
CFILE = minilzo.c

değiştir

Kod:
CFILE = minilzo.c sha1.c

"İtem_manager_read_tables.cpp" den sonra "sha1.c" eklemeniz yoksa, bazı kaynaklarda CFILE olmayabilir:

Kod:
item_manager_read_tables.cpp sha1.c

Sunucu: Windows için Değişiklikler

m2server.sln veya Metin2Server.sln'yi açın ve sorarsanız araç zincirini güncelleyin, herhangi bir "ServerkeyGenerator" hatasını göz ardı edin.

Game.2008.vcxproj dosyasını bir metin düzenleyiciyle açın ve bundan sonra ekleyin:

Kod:
&lt;ClCompile Include = "war_map.cpp" /&gt;

ekle

Kod:
&lt;ClCompile Include = "sha1.c" /&gt; &lt;ClCompile Include = "sha1.h" /&gt;

Eğiticinin eski bir sürümünü kullandıysanız, lütfen şu satırı kaldırın:

Kod:
&lt;VcpkgUserTriplet&gt; x86-windows-static &lt;/VcpkgUserTriplet&gt;

Bu satırı tüm vcxproj dosyalarından kaldırmanız gerekir.



Çözümü VisualStudio ile açın, TÜM projeleri seçin, ardından seçime sağ tıklayın ve Özellikler'e tıklayın.

Özelliklerin içinde, sol "vcpkg" üzerine tıklayın ve aşağıdakileri seçtiğinizden emin olun:

"Statik kitaplıklar: Evet"

"Otomatik bağlantı: Evet"

aXyDdJX.png



Client değişiklikleri


EterBase / cipher.h dosyasını açın ve aşağıdaki satırları değiştirin:

Cipher.h dosyasını açın ve aşağıdaki satırı değiştirin:

Kod:
encoder_-&gt;ProcessData((byte*)buffer, (const byte*)buffer, length);

burdan

Kod:
encoder_-&gt;ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);

buraya

Kod:
decoder_-&gt;ProcessData((byte*)buffer, (const byte*)buffer, length);

ve burdan

Kod:
decoder_-&gt;ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);

Eterbase / lzo.cpp dosyasını açın ve şu satırı silin:

Kod:
#include &lt;lzo-2.03 / lzoLibLink . h &gt;

"lzo-2.03" değişiklik gösterebilir, lzoLibLink eklemesini silmek önemlidir.

EterBase / lzo.h dosyasını açın ve lzo1x.h ile #include öğesinin şu şekilde olup olmadığını kontrol edin:

Kod:
#include &lt;lzo / lzo1x . h &gt;

UserInterface / MarkImage.h dosyasını açın ve bundan önce:

Kod:
#include &lt;IL / il . h &gt;

bunu ekle:

Kod:
#define IL_STATIC_LIB 1



UserInterface.cpp'yi açın ve aşağıdaki satırı silin:

Kod:
#include &lt;cryptopp / cryptoppLibLink . h &gt;

UserInterface.cpp içinde bunu değiştirin:

Kod:
static const char * sc_apszPythonLibraryFilenames[*] = {     "UserDict.pyc",     "future.pyc",     "copy_reg.pyc",     "linecache.pyc",     "ntpath.pyc",     "os.pyc",     "site.pyc",     "stat.pyc",     "string.pyc",     "traceback.pyc",     "types.pyc",     "\n", };

değiştir

Kod:
static const char * sc_apszPythonLibraryFilenames[*] = { #if PY_MINOR_VERSION == 7     "abc.pyc",     "bisect.pyc",     "codecs.pyc",     "collections.pyc",     "copy.pyc",     "copy_reg.pyc",     "fnmatch.pyc",     "functools.pyc",     "genericpath.pyc",     "heapq.pyc",     "keyword.pyc",     "linecache.pyc",     "locale.pyc",     "ntpath.pyc",     "os.pyc",     "pyexpat.pyd",     "random.pyc",     "re.pyc",     "shutil.pyc",     "site.pyc",     "sre_compile.pyc",     "sre_constants.pyc",     "sre_parse.pyc",     "stat.pyc",     "string.pyc",     "sysconfig.pyc",     "traceback.pyc",     "types.pyc",     "UserDict.pyc",     "warnings.pyc",     "weakref.pyc",     "_abcoll.pyc",     "_weakrefset.pyc",     "__future__.pyc",     "encodings\\aliases.pyc",     "encodings\\ascii.pyc",     "encodings\\cp1250.pyc",     "encodings\\cp1251.pyc",     "encodings\\cp1252.pyc",     "encodings\\cp949.pyc",     "encodings\\utf_8.pyc",     "encodings\\__init__.pyc",     "xml\\__init__.pyc",     "xml\\dom\\domreg.pyc",     "xml\\dom\\expatbuilder.pyc",     "xml\\dom\\minicompat.pyc",     "xml\\dom\\minidom.pyc",     "xml\\dom\\NodeFilter.pyc",     "xml\\dom\\xmlbuilder.pyc",     "xml\\dom\\__init__.pyc",     "xml\\parsers\\expat.pyc",     "xml\\parsers\\__init__.pyc", #else     "UserDict.pyc",     "__future__.pyc",     "copy_reg.pyc",     "linecache.pyc",     "ntpath.pyc",     "os.pyc",     "site.pyc",     "stat.pyc",     "string.pyc",     "traceback.pyc",     "types.pyc", #endif     "\n", };[



Aşağıdaki satırları silin:

Kod:
#if GrannyProductMinorVersion==4 #pragma comment( lib, "granny2.4.0.10.lib" ) #elif GrannyProductMinorVersion==7 #pragma comment( lib, "granny2.7.0.30.lib" ) #elif GrannyProductMinorVersion==8 #pragma comment( lib, "granny2.8.49.0.lib" ) #elif GrannyProductMinorVersion==9 #pragma comment( lib, "granny2.9.12.0.lib" ) #else #error "unknown granny version" #endif

veya bu satır:

Kod:
#pragma comment( lib, "granny2.lib" )

Ayrıca şu satırları da silin:

Kod:
//ifdef _DEBUG //#pragma comment( lib, "python2_d.lib" ) //#else #pragma comment( lib, "python2.lib" ) //#endif #pragma comment( lib, "devil.lib" ) #ifdef _DEBUG #pragma comment( lib, "jpegd.lib" ) #else #pragma comment( lib, "jpeg.lib" ) #endif #pragma comment( lib, "cryptopp-static.lib" ) #pragma comment( lib, "snappy.lib" ) #pragma comment( lib, "lzo2.lib" )

Type6 kullanmıyorsanız hızlı dahil etmeyi silin.

Eğer varsa bu ifdef'i devre dışı bırakın:
#define ENABLE_PYLIB_CHECK


EterPack / EterPack.cpp'yi açın ve şu satırı silin:

Kod:
#include &lt;cryptopp / cryptoppLibLink . h &gt;

UserInterface / GuildMarkUploader.cpp açın ve silin:

Kod:
(ILvoid *)

EterLib / JpegFile.cpp dosyasını açın ve jpeglib.h dahil edilmesinin şu şekilde olduğundan emin olun:

Kod:
#include &lt;jpeglib.h&gt;


sonra bu satırı kaldırın:

Kod:
#include &lt;libjpeg-6b / jpegLibLink . h &gt;

"libjpeg-6b" değişebilir.


GrpDetector.h içinde #include &lt;d3dx8.h&gt; 'den sonra bunu ekleyin

Kod:
#include &lt;string&gt;


ScriptLib \ StdAfx.h içinde değiştirin:

Kod:
#ifdef _DEBUG     #undef _DEBUG     #include "../../Extern/Python2/Python.h"     #define _DEBUG #else     #include "../../Extern/Python2/Python.h" #endif #include "../../Extern/Python2/node.h" #include "../../Extern/Python2/grammar.h" #include "../../Extern/Python2/token.h" #include "../../Extern/Python2/parsetok.h" #include "../../Extern/Python2/errcode.h" #include "../../Extern/Python2/compile.h" #include "../../Extern/Python2/symtable.h" #include "../../Extern/Python2/eval.h" #include "../../Extern/Python2/marshal.h"



Python dahil edilmesi şunlara göre değişebilir:

Kod:
#include &lt;python2.7/Python.h&gt; #include &lt;python2.7/node.h&gt; #include &lt;python2.7/grammar.h&gt; #include &lt;python2.7/token.h&gt; #include &lt;python2.7/parsetok.h&gt; #include &lt;python2.7/errcode.h&gt; #include &lt;python2.7/compile.h&gt; #include &lt;python2.7/eval.h&gt; #include &lt;python2.7/marshal.h&gt; #undef BYTE // Fixed python bitset.h build issue


ScriptLib / PythonLauncher.h içinde değişiklik

Kod:
#include "../../Extern/Python2/frameobject.h"

değiştir

Kod:
#include &lt; python2.7 / frameobject . h &gt;


ScriptLib / PythonLauncher.cpp açın ve değiştirin:

Kod:
#include "../../Extern/Python2/frameobject.h"

değiştir

Kod:
#include &lt; python2.7 / frameobject . h &gt;


ScriptLib / PythonMarshal.cpp dosyasını açın ve değiştirin:

Kod:
#include "../../Extern/Python2/longintrepr.h"

değiştir

Kod:
#include &lt; python2.7 / longintrepr . h &gt;



ScriptLib / PythonUtils.cpp açın ve buna sahip değilsek



Kod:
#define PyLong_AsLong PyLong_AsLongLong #define PyLong_AsUnsignedLong PyLong_AsUnsignedLongLong

bundan sonra ekleyin:

Kod:
#include "PythonUtils.h"


EterBase \ StdAfx.h dosyasını açın ve değiştirin:

Kod:
// Armadillo nanomite protection #ifndef NANOBEGIN     #ifdef __BORLANDC__         #define NANOBEGIN     __emit__ (0xEB,0x03,0xD6,0xD7,0x01)         #define NANOEND       __emit__ (0xEB,0x03,0xD6,0xD7,0x00)     #else         #define NANOBEGIN     __asm _emit 0xEB __asm _emit 0x03 __asm _emit 0xD6 __asm _emit 0xD7 __asm _emit 0x01         #define NANOEND       __asm _emit 0xEB __asm _emit 0x03 __asm _emit 0xD6 __asm _emit 0xD7 __asm _emit 0x00     #endif #endif in: // Armadillo nanomite protection #if !defined(NANOBEGIN) &amp;&amp; !defined(NANOEND)     #ifdef _DEBUG         #define NANOBEGIN         #define NANOEND     #else         #include &lt;armadillo/SecuredSections.h&gt;     #endif #endif


Bu değişikliğin aşağıdaki dosyalara da uygulanması gerekir:

- EterGrnLib / StdAfx.h
- MilesLib / StdAfx.h
- SpeedTreeLib / StdAfx.h


MilesLib / StdAfx.h dosyasını açın ve bu satırı silin:

Kod:
#include &lt;mss.h&gt;


Bağlantılı güncelleme isterse istemci sln dosyasını (Metin2Client.sln veya Metin2Client_VC90.sln gibi) açın, evet'e basın.

Sonra UserInterface özelliklerine gidin, pencerenin üst kısmındaki "Configuration:" öğesini seçin, Debug, Release, Distribute olabilir ve "All configuration" olarak ayarlayın: / SAFESEH olarak / SAFESEH olarak değiştirin: NO.

cdn-vs1-png.png


cdn-vs2-png.png


TÜM projeleri seçin, ardından seçime sağ tıklayın ve Özellikler'e tıklayın.

Özelliklerin içinde, sol "vcpkg" üzerine tıklayın ve aşağıdakileri seçtiğinizden emin olun:

"Statik kitaplıklar: Evet"

"Otomatik bağlantı: Evet"


C / C ++ 'a gidin, General, benzer bir şey için "Ekstra dahil etme dizinleri" bulacaksınız. Metindeki küçük oka basın, ardından değiştirin.

Aşağıdakileri ekleyin:

$ (SolutionDir) Extern \ include.

Ardından UserInterface projesini seçin. Bağlayıcı, Genel'e gidin ve "Ekstra kitaplık dizini" ni bulun. Metindeki küçük oka ve ardından Değiştir'e basın. Aşağıdakileri ekleyin:

$ (SolutionDir) Extern \ lib.


Eğiticinin eski bir sürümünü kullandıysanız, lütfen şu satırı kaldırın:

Kod:
&lt;VcpkgUserTriplet&gt; x86-windows-static &lt;/VcpkgUserTriplet&gt;

Bu satırı tüm .vcxproj dosyalarından kaldırmanız gerekir.


İstemci: İkili dosyaların temizlenmesi ve güncellenmesi

Clinet dizinimizi açın ve bunun haricinde tüm DLL'yi silin (EKLEDİĞİNİZ EKSTRA DLL'LERİ KALDIRMADIĞINIZDAN EMİN OLUN)

- SpeedTreeRT.dll
- granny2.dll
- MSS32.dll

"lib" dizinini silin ve değiştirin
Bu dizin Python 2.7 için çalışır.


Son notlar ve bilgiler

  • <li data-xf-list-type="ul">Granny 2.9 kullanıyorsanız, EterBase / ServiceDefs.h dosyasını açın ve şunu ekleyin:
Kod:
#define __GRANNY_VERSION__ 9

sonra

Kod:
#define _IMPROVED_PACKET_ENCRYPTION_


  • <li data-xf-list-type="ul">Vcpkg klasörü zaten MSL içeriyor (marty kaynakları için gerekli), paylaşım / moduleinfo.txt dosyasını kontrol edin ve yeni bir commit varsa, eklentileri değiştirebilir, ayrıca yeni güncellenmiş paketi yükleyebilir ve öğreticiyi güncelleyebilirim. <li data-xf-list-type="ul">Dağıttığım Python kitaplıkları 2.7.15 için çalışıyor, expat ve bazı kodlama modüllerini içeriyor, eğer vcpkg onları güncelliyorsa, lib güncellemesini kendiniz gerçekleştirin (yeni lib dosyasını herkesin kullanması için de yükleyebilirsiniz) veya bana bildirin bunun hakkında yeni bir güncelleme almaya çalışacağım. <li data-xf-list-type="ul">pyexpat.pyd, Visual Studio 2019 (Araç Zinciri sürüm 16.2) ve Specre azaltma ile benim tarafımdan oluşturuldu <li data-xf-list-type="ul">Ekstra ENABLE_PYLIB_CHECK'i (marty kaynaklarında da bulunur) aşağıdaki nedenlerle devre dışı bıraktım:

  • <li data-xf-list-type="ul">Visual Studio ve Makefile güncellemeleri CMake veya Premake ile geçerli değildir (pff, herhangi biri bunları tek başına kullanıyor mu?) <li data-xf-list-type="ul">Eğitim, tüm kaynaklar için% 100 doğru olmayabilir, mainline_released, piyasaya sürülen bir marty internet ve bazı arkadaşlar kaynakları (İstemci tarafı) ile test ettim. <li data-xf-list-type="ul">FreeBSD şu anda vcpkg üzerinde çalışmıyor, zamanım olduğunda sorunları gidermeye bakacağım. <li data-xf-list-type="ul">Log.c değişiklikleri, Windows'ta 1058340518920543890 günlük mesajlarını kaldırdı. <li data-xf-list-type="ul">Armadillo değişikliği nanomitleri yalnızca son sürüme güncellemekle kalmaz (Armadillo kullanımdan kaldırılırken), aynı zamanda bazı hata ayıklama sorunlarını da giderir, bazen bu asm yönlendirmelerini çağırmak hata ayıklayıcıyı bozabilir, bu nedenle gerekli değilse bunları devre dışı bırakmak daha iyidir (Hata ayıklama derlemeleri ) <li data-xf-list-type="ul">Granny2'nin daha yeni bir sürümüne ihtiyacınız varsa, grann2.h'yi uygun şekilde değiştirin, isterseniz güncellemeyi de paylaşabilirsiniz. <li data-xf-list-type="ul">Öğreticinin bu sürümü, diğer kek it forumunda yayınladığım sürümden daha güncel. Değişiklikler:

- Yeni vcpkg entegrasyonunun kullanımı daha kolay olduğundan, tüm x86-windows-statik özellikleri kaldırıldı.

- vcpkg kök dizinini özelleştirme yeteneği

- vcpkg artık otomatik bağlamayı desteklediği için tüm eski manuel bağlantı kaldırıldı


alıntıdır.
Metin2 Lobby olarak Metin2 özel sunucu geliştirme dünyasında ileri düzey C++ tabanlı sistemlerle çalışırken, bazı bağımlılıkların yönetimi oldukça zorlayıcı olabilir. Özellikle extern kütüphaneler olmadan kendi kaynak kodlarınızı oluşturmak, hem güvenliği artırır hem de projelerinizin bağımsızlığını korumanızı sağlar. Bu makalede, vcpkg yöntemini kullanarak extern bağımlılıklar olmadan nasıl kaynak kod oluşturacağınızı detaylıca inceleyeceğiz.

Neden vcpkg?
vcpkg, Microsoft tarafından geliştirilen, açık kaynaklı bir C/C++ bağımlılık yönetimi aracıdır. Metin2 özel sunucularında kullanılan game, auth, db gibi çekirdek sistemlerde kullanılan harici kütüphaneleri kolayca yönetmenizi sağlar. vcpkg sayesinde C++ projelerinize ihtiyaç duyduğunuz tüm kütüphaneleri derleme sürecinde yerleştirebilir ve extern sistemlerden bağımsız olarak çalışabilirsiniz.

vcpkg Kurulumu
İlk adım olarak vcpkg aracını bilgisayarınıza yüklemek olacaktır. Git üzerinden klonlayın. Ardından, komut satırında aşağıdaki komutları çalıştırarak kurulumu tamamlayın:

Kod:
git clone https://github.com/Microsoft/vcpkg.git[BR][/BR]cd vcpkg[BR][/BR]./bootstrap-vcpkg.sh # Linux veya macOS için[BR][/BR].ootstrap-vcpkg.bat # Windows için


Kütüphane Yükleme ve Entegrasyon
vcpkg kurulumundan sonra, Metin2 geliştirme süreçlerinde sıklıkla kullanılan kütüphaneleri yükleyebilirsiniz. Örneğin, boost, openssl, mysql gibi kütüphaneleri şu şekilde yükleyebilirsiniz:

Kod:
vcpkg install boost openssl mysql


Ardından, Visual Studio veya CMake entegrasyonu yaparak bu kütüphaneleri doğrudan projenize dahil edebilirsiniz. vcpkg sayesinde artık bu kütüphaneler extern olarak değil, lokal olarak projenizde yer alacaktır.

Metin2 PVP Sistemleri İçin Uygun Kütüphaneler
Metin2 özel sunucularında PVP sistemleri, C++ ve Python tabanlı scriptlerle desteklenir. Özellikle Py GUI veya UIScript gibi arayüz sistemleri için gerekli olan kütüphaneleri vcpkg ile yönetmek, geliştirme sürecini hızlandırır. Örneğin, python3 veya pybind11 gibi Python entegrasyonları için gerekli olan kütüphaneler doğrudan vcpkg üzerinden yüklenebilir ve proje içine entegre edilebilir.

Kaynak Kod Derleme Süreci
vcpkg ile kütüphaneleri yükledikten sonra, CMake dosyalarınızı güncelleyerek bu kütüphaneleri projenize dahil edin. Metin2 server src veya client src gibi projelerde, CMakeLists.txt dosyasına find_package komutlarını ekleyerek vcpkg tarafından yüklenen kütüphaneleri kullanabilirsiniz. Bu sayede extern kütüphanelere olan bağımlılığı ortadan kaldırabilirsiniz.

Sonuç
vcpkg kullanarak extern olmadan kaynak kod oluşturmak, Metin2 özel sunucu geliştirme sürecinde daha esnek, güvenli ve bağımsız projeler geliştirmenizi sağlar. Metin2 Lobby olarak bu tür gelişmiş teknik yaklaşımlarla, topluluk için en iyi deneyimi sunmayı hedefliyoruz.


Metin2 Lobby As we work with advanced C++ based systems in the world of Metin2 private server development, managing dependencies can often be challenging. Especially creating your own source code without extern libraries increases security and helps maintain independence of your projects. In this article, we will examine in detail how to create source code without extern dependencies using the vcpkg method.

Why vcpkg?
vcpkg is an open-source C/C++ dependency management tool developed by Microsoft. It allows you to easily manage external libraries used in core systems like game, auth, and db within Metin2 private servers. With vcpkg, you can integrate all required libraries into your C++ projects during the build process and work independently from extern systems.

Installing vcpkg
The first step is to install the vcpkg tool on your computer. Clone the via Git. Then execute the following commands in the command line to complete the installation:

Kod:
git clone https://github.com/Microsoft/vcpkg.git[BR][/BR]cd vcpkg[BR][/BR]./bootstrap-vcpkg.sh # For Linux or macOS[BR][/BR].ootstrap-vcpkg.bat # For Windows


Installing Libraries and Integration
After installing vcpkg, you can install libraries commonly used in Metin2 development processes. For example, you can install libraries such as boost, openssl, and mysql as follows:

Kod:
vcpkg install boost openssl mysql


Then, you can directly include these libraries into your project through Visual Studio or CMake integration. Thanks to vcpkg, these libraries will now be located locally in your project instead of as extern.

Suitable Libraries for Metin2 PVP Systems
PVP systems in Metin2 private servers are supported by C++ and Python-based scripts. Managing libraries needed for interface systems like Py GUI or UIScript via vcpkg accelerates the development process. For instance, libraries required for Python integrations such as python3 or pybind11 can be installed directly via vcpkg and integrated into your project.

Source Code Build Process
After installing libraries with vcpkg, update your CMake files and include these libraries in your project using find_package commands in your CMakeLists.txt file for projects like Metin2 server src or client src. This way, you can eliminate dependency on extern libraries.

Conclusion
Creating source code without extern using vcpkg allows for more flexible, secure, and independent projects in the development of Metin2 private servers. As Metin2 Lobby, we aim to provide the best experience for the community through such advanced technical approaches.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt