Hikayeler

Reklam vermek için turkmmo@gmail.com

Oyuncuların Bulunduğu Konumu Gösteren Sİstem

  • Konuyu başlatan lTJA
  • Başlangıç tarihi
  • Cevaplar 2
  • Görüntüleme 413
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

lTJA

Level 3
Banlı
TM Üye
Katılım
2 Eyl 2023
Konular
28
Mesajlar
108
Online süresi
6g 82227s
Reaksiyon Skoru
85
Altın Konu
0
Başarım Puanı
59
TM Yaşı
2 Yıl 7 Ay 20 Gün
MmoLira
965
DevLira
15

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

gm_ipinfo komutu ile oyuncu ismi verildiğinde IP adresi ve (istersen) konumu gösterilir.


gm_command.cpp:
// 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));
}

Peki diyeceksin kanka ben komutu yazdığım da nasıl bir şeyle karşılacağım

şöyle birşey ile kardaş.

Oyuncu: ITJA
IP Adresi: 101.101.1.101
Konum Bilgisi (Ham JSON): {"ip":"101.101.1.101","city":"Istanbul","region":"Istanbul","country_name":"Turkey", ... }
 
Son düzenleme:
Paylaşım için teşekkürler :)
 
Kod içeriği çalısmıyor sorunlu. Konu kapatılmıştır çalıştına dair kanıt atılırsa konu tekrar açılır.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst