Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
// gm_command.cpp — Metin2 sunucu koduna ekle
#inc[HASH=2388]#include[/HASH]ar.h"
#inc[HASH=2388]#include[/HASH]sc.h"
#inc[HASH=2388]#include[/HASH]mmand.h"
#inc[HASH=2388]#include[/HASH]ring>
#inc[HASH=2388]#include[/HASH]rl/curl.h> // libcurl kullanacağız
// CURL cevabını tutmak için yardımcı fonksiyon
static size_t CurlWrite_CallbackFunc_StdString(void* contents, size_t size, size_t nmemb, std::string* s)
{
size_t newLength = size * nmemb;
try {
s->append((char*)contents, newLength);
}
catch(std::bad_alloc &e) {
// handle memory problem
return 0;
}
return newLength;
}
// IP den konum çeken basit fonksiyon (ipapi.co kullanıldı)
std::string GetGeoLocation(const std::string& ip)
{
CURL* curl = curl_easy_init();
std::string readBuffer;
if(curl) {
std::string url = "https://ipapi.co/" + ip + "/json/";
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlWrite_CallbackFunc_StdString);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5L);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if(res == CURLE_OK) {
// Json parse yapabilirsin ama basitçe dönen ham stringi döndürelim
return readBuffer;
}
}
return "{}"; // Boş sonuç
}
void GM_IPInfo(LPCHARACTER ch, const char* argument)
{
if (!ch->IsGM()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Bu komut sadece GM'lere açıktır.");
return;
}
if (!argument || strlen(argument) < 2) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /ipinfo <oyuncu_adı>");
return;
}
LPCHARACTER target_char = CHARACTER_MANAGER::instance().FindPC(argument);
if (!target_char) {
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}
const char* ip = target_char->GetDesc()->GetHostName();
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu: %s", target_char->GetName());
ch->ChatPacket(CHAT_TYPE_INFO, "IP Adresi: %s", ip);
std::string geo_info = GetGeoLocation(ip);
ch->ChatPacket(CHAT_TYPE_INFO, "Konum Bilgisi (Ham JSON): %s", geo_info.c_str());
}
// Komut sistemine ekleme (örnek, tam sunucu koduna göre değişir)
ACMD(do_gm_ipinfo)
{
GM_IPInfo(ch, argument);
}
// Komut kayıt fonksiyonunda aşağıyı ekle
void RegisterGMCommands()
{
// Diğer komutlar...
command_info.insert(std::make_pair("ipinfo", do_gm_ipinfo));
}
