> For the complete documentation index, see [llms.txt](https://qpapel.papelship.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qpapel.papelship.com/documentation/tr-documentation/fonksiyonlar/sunucu-tabanli-degiskenler.md).

# Sunucu Tabanlı Değişkenler

12 haneli erişim kimliği (access ID) kullanarak sunucudan güvenli bir dize (string) değeri alır.

{% hint style="info" %}
Sunucu stringleri herkese açık (lisans gerekmez) veya korumalı (lisans doğrulaması gerekir) olabilir. SDK tarafından dinamik olarak tahsis edilmiş tamponlar halinde döndürülürler.
{% endhint %}

## İmza (Signature)

```cpp
char* FetchString(QPCTX c, 
                  const char* stringId, 
                  const char* licenseKey);
```

## Parametreler

| Parametre    | Tür           | Açıklama                                                                          | Zorunlu |
| ------------ | ------------- | --------------------------------------------------------------------------------- | ------- |
| `c`          | `QPCTX`       | İstemci bağlam (context) işaretçisi                                               | Evet    |
| `stringId`   | `const char*` | Sunucu stringinin 12 haneli erişim tanımlayıcısı                                  | Evet    |
| `licenseKey` | `const char*` | Korumalı stringler için lisans anahtarı (herkese açık olanlar için boş dize `""`) | Evet    |

## Dönüş Değeri

**Tür:** `char*`

| Değer                | Açıklama                                                  |
| -------------------- | --------------------------------------------------------- |
| `Null olmayan char*` | Sunucudan alınan dinamik dize değeri                      |
| `nullptr`            | Erişim reddedildi, ağ hatası veya geçersiz erişim kimliği |

{% hint style="warning" %}
Döndürülen `char*` tamponu SDK tarafından dinamik olarak tahsis edilmiştir. Uygulamanızdaki bellek sızıntılarını önlemek için, işiniz bittiğinde `qpapel::FreeString(value)` çağrısıyla bu belleği **mutlaka** serbest bırakmanız gerekir.
{% endhint %}

## Temel Kullanım

### Herkese Açık String (Lisans Anahtarı Gerekmez)

```cpp
#include <iostream>
#include "qPapelLib.h"

void PrintWelcomeMessage(QPCTX ctx) {
    // Herkese açık bir string getir (lisans anahtarı parametresi boş "")
    char* welcome = qpapel::FetchString(ctx, "123456789012", "");
    
    if (welcome != nullptr) {
        std::cout << "[Sunucu Stringi]: " << welcome << std::endl;
        
        // Belleği serbest bırakın!
        qpapel::FreeString(welcome);
    } else {
        std::cerr << "Hoş geldiniz mesajı alınamadı." << std::endl;
    }
}
```

### Korumalı String (Lisans Anahtarı Gerekli)

```cpp
#include <iostream>
#include "qPapelLib.h"

void FetchPremiumConfig(QPCTX ctx, const std::string& licenseKey) {
    // Korumalı bir string getir (lisans anahtarı parametresi gereklidir)
    char* configStr = qpapel::FetchString(ctx, "987654321098", licenseKey.c_str());
    
    if (configStr != nullptr) {
        std::cout << "Premium Yapılandırma Değeri: " << configStr << std::endl;
        
        // Belleği serbest bırakın!
        qpapel::FreeString(configStr);
    } else {
        char* err = qpapel::GetLastStatus(ctx);
        std::cerr << "Erişim reddedildi veya başarısız: " << (err ? err : "Bilinmeyen Hata") << std::endl;
        if (err) qpapel::FreeString(err);
    }
}
```

## Kullanım Senaryoları

### Sunucu Kontrollü Özellik Bayrağı (Feature Flag)

```cpp
bool IsBetaEnabled(QPCTX ctx, const std::string& licenseKey) {
    char* betaFlag = qpapel::FetchString(ctx, "beta_flag_id", licenseKey.c_str());
    bool enabled = false;
    
    if (betaFlag != nullptr) {
        if (std::string(betaFlag) == "true") {
            enabled = true;
        }
        qpapel::FreeString(betaFlag);
    }
    return enabled;
}
```

### Sunucu Taraflı Ofsetler (Hacking / Bütünlük)

```cpp
uintptr_t GetGameOffset(QPCTX ctx, const std::string& licenseKey) {
    char* offsetStr = qpapel::FetchString(ctx, "offset_access_id", licenseKey.c_str());
    uintptr_t offset = 0;
    
    if (offsetStr != nullptr) {
        // Örnek döndürülen dize: "0x1A2B3C"
        offset = std::stoull(offsetStr, nullptr, 16);
        qpapel::FreeString(offsetStr);
    }
    return offset;
}
```

## Erişim Kontrolü

| Yapılandırma                             | Erişim                                     | Kullanım Alanı                                                                    |
| ---------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------- |
| **Anahtar Kontrolünü Zorla: Devre Dışı** | Herkese açık (lisans anahtarı gerektirmez) | Hoş geldiniz mesajları, sürüm kontrolleri, genel duyurular                        |
| **Anahtar Kontrolünü Zorla: Etkin**      | Yalnızca lisanslı kullanıcılar             | Gizli API anahtarları, premium ofsetler, kimlik doğrulama sunucu yapılandırmaları |
