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.
- <li data-xf-list-type="ul">Metin2'nin tüm üçüncü taraf bileşenlerini her zaman güncel tutun.
- <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,
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız! Giriş yap veya üye ol.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
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
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_->ProcessData((byte*)buffer, (const byte*)buffer, length);
değiştir
Kod:
encoder_->ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);
ve diğerini
Kod:
decoder_->ProcessData((byte*)buffer, (const byte*)buffer, length);
değiştir
Kod:
decoder_->ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);
Cipher.cpp dosyasını açın ve aşağıdaki satırı silin:
Kod:
#include <cryptopp/cryptoppLibLink.h>
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 <= (size_t) 0 || size_result <= (size_digest * (size_t) 2U)) { return NULL; } do { *result_pnt++ = hexchars[(*digest >> 4) & 0xf]; *result_pnt++ = hexchars[*digest & 0xf]; digest++; size_digest--; } while (size_digest > (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(&ctx); SHA1Update(&ctx, (unsigned char*)password, strlen(password)); SHA1Final(h0, &ctx); SHA1Init(&ctx); SHA1Update(&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 < strlen(password)) { pnt_[i++] = 0U; } #endif SHA1Final(h1, &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="
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
" class="link link--external" target="_blank" rel="nofollow ugc noopener" data-proxy-href="/proxy.php?link=https%3A%2F%2Fwww.dosyaupload.com%2FgqWv&hash=27f7ed1eacf46dda8fe3cf0d11b7b5d1">
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
</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() > 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') -> %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() > 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() > 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() > 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') -> %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() > 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() > 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 > 1) { #endif
değiştir
Kod:
// log_level이 1 이상일 경우에는 테스트일 경우가 많으니 stdout에도 출력한다. if (log_level_bits > 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 <atlenc.h> #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 <atlenc.h> #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, &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 <hash_map> #else #include <map> #endif
değiştir
Kod:
#include <boost/unordered_map.hpp>
bunu da değiştirin:
Kod:
#if _MSC_VER typedef stdext::hash_map<std::string, size_t> NAME2INDEX_MAP; typedef stdext::hash_map<size_t, std::string> INDEX2NAME_MAP; #else typedef std::map<std::string, size_t> NAME2INDEX_MAP; typedef std::map<size_t, std::string> INDEX2NAME_MAP; #endif
değiştir
Kod:
typedef boost::unordered_map<std::string, size_t> NAME2INDEX_MAP; typedef boost::unordered_map<size_t, std::string> 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 <IL/il.h>
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:
<ClCompile Include = "war_map.cpp" />
ekle
Kod:
<ClCompile Include = "sha1.c" /> <ClCompile Include = "sha1.h" />
Eğiticinin eski bir sürümünü kullandıysanız, lütfen şu satırı kaldırın:
Kod:
<VcpkgUserTriplet> x86-windows-static </VcpkgUserTriplet>
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"
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_->ProcessData((byte*)buffer, (const byte*)buffer, length);
burdan
Kod:
encoder_->ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);
buraya
Kod:
decoder_->ProcessData((byte*)buffer, (const byte*)buffer, length);
ve burdan
Kod:
decoder_->ProcessData((CryptoPP::byte*)buffer, (const CryptoPP::byte*)buffer, length);
Eterbase / lzo.cpp dosyasını açın ve şu satırı silin:
Kod:
#include <lzo-2.03 / lzoLibLink . h >
"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 <lzo / lzo1x . h >
UserInterface / MarkImage.h dosyasını açın ve bundan önce:
Kod:
#include <IL / il . h >
bunu ekle:
Kod:
#define IL_STATIC_LIB 1
UserInterface.cpp'yi açın ve aşağıdaki satırı silin:
Kod:
#include <cryptopp / cryptoppLibLink . h >
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 <cryptopp / cryptoppLibLink . h >
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 <jpeglib.h>
sonra bu satırı kaldırın:
Kod:
#include <libjpeg-6b / jpegLibLink . h >
"libjpeg-6b" değişebilir.
GrpDetector.h içinde #include <d3dx8.h> 'den sonra bunu ekleyin
Kod:
#include <string>
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 <python2.7/Python.h> #include <python2.7/node.h> #include <python2.7/grammar.h> #include <python2.7/token.h> #include <python2.7/parsetok.h> #include <python2.7/errcode.h> #include <python2.7/compile.h> #include <python2.7/eval.h> #include <python2.7/marshal.h> #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 < python2.7 / frameobject . h >
ScriptLib / PythonLauncher.cpp açın ve değiştirin:
Kod:
#include "../../Extern/Python2/frameobject.h"
değiştir
Kod:
#include < python2.7 / frameobject . h >
ScriptLib / PythonMarshal.cpp dosyasını açın ve değiştirin:
Kod:
#include "../../Extern/Python2/longintrepr.h"
değiştir
Kod:
#include < python2.7 / longintrepr . h >
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) && !defined(NANOEND) #ifdef _DEBUG #define NANOBEGIN #define NANOEND #else #include <armadillo/SecuredSections.h> #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 <mss.h>
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.
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:
<VcpkgUserTriplet> x86-windows-static </VcpkgUserTriplet>
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
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
değiştirinBu 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
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:
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
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:
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.
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
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
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
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
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.
