sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
C 1
chengdu
xranzei 1
xranzei
zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Cevaplanmadı C++ dan anlayan dostlar bakabilirmi

  • Konuyu başlatan Konuyu başlatan MAyestrOO
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 164

MAyestrOO

Level 2
Üye
Katılım
16 May 2025
Konular
15
Mesajlar
59
Online süresi
3d 22h
Reaksiyon Skoru
25
Altın Konu
0
TM Yaşı
1 Yıl 21 Gün
Başarım Puanı
38
MmoLira
1,125
DevLira
15
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

simdi söyle birşey deniyorum yapay zekadan yardım alarak karakterle pazar kurup /clientless yaptıgımda karakterin offline geçmesi lazım suanda geçiyor ama tekrar giriş yapamıyorum kod satırıma bakarmısınız neler eksik bitane silkroadda sunucuda vardı aynı sistemi umarım buraya entegree edeceğim :) simdiden ty dostlar


[CODE title="Offline system yazmaya çalısıyorumm XD"]// cmd.cpp dosyasında, do_clientless fonksiyonunun tamamı
ACMD(do_clientless)
{
// Kontrol: Sadece oyuncunun standart pazar dükkanı varsa clientless moduna geçsin.
// Kaynağınızdaki hata veren GetOfflineShop() kontrolü kaldırıldı.
if (!ch->GetShop())
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu komutu kullanmak için aktif bir dükkanınız olmalıdır."));
return;
}

// Yere atılmış eşya kontrolü kaldırıldı (GetGroundItem hatasını gidermek için).
// Güvenlik için, bu kontrolü yapan bir fonksiyonunuz varsa eklemeniz önerilir.

// Karakterin clientless moduna geçişini işaretle (char.h'a eklediğiniz fonksiyon)
ch->SetOfflineMode(true);

// Oyuncuya bilgi mesajı gönder
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Oyun bağlantınız kesiliyor. Karakteriniz oyunda kalacaktır."));

// Bağlantıyı kesme işlemi (DESC::Destroy()'u tetiklemesi için)
LPDESC d = ch->GetDesc();
if (d)
{
// 1. Karakteri kaydet
ch->Save();

// 2. Bağlantıyı kapatma fazına geçir.
// Bu, DESC::Destroy() fonksiyonunu tetikleyecek ve karakteri silme işi orada yönetilecek.
// 'Close()' hatasını gidermek için SetPhase kullanıldı.
d->SetPhase(PHASE_CLOSE);

// Bu noktada d->m_lpCharacter = NULL; işlemi yapılmaz.
// Çünkü bu, DESC::Destroy() fonksiyonunda, IsOfflineMode() kontrolü içinde yapılacaktır.

sys_log(0, "CLIENTLESS_COMMAND: %s Karakteri clientless (ID: %u) moduna geçti.", ch->GetName(), ch->GetPlayerID());
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bağlantı bulunamadığı için komut başarısız oldu."));
}
}

------------------------------------------------------------------------------------------
{ "clientless", do_clientless, 0, POS_DEAD, GM_PLAYER },[/CODE]
 
[CODE title="yapay zekanın sorun olarak teşkil ettiği yer"]void CInputLogin::LoginByKey(LPDESC d, const char * data)
{
TPacketCGLogin2 * pinfo = (TPacketCGLogin2 *) data;

char login[LOGIN_MAX_LEN + 1];
trim_and_lower(pinfo->login, login, sizeof(login));

// is blocked ip?
{
dev_log(LOG_DEB0, "check_blocked_country_start");

if (!is_block_exception(login) && is_blocked_country_ip(d->GetHostName()))
{
sys_log(0, "BLOCK_COUNTRY_IP (%s)", d->GetHostName());
d->SetPhase(PHASE_CLOSE);
return;
}

dev_log(LOG_DEB0, "check_blocked_country_end");
}

if (g_bNoMoreClient)
{
TPacketGCLoginFailure failurePacket;

failurePacket.header = HEADER_GC_LOGIN_FAILURE;
strlcpy(failurePacket.szStatus, "SHUTDOWN", sizeof(failurePacket.szStatus));
d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure));
return;
}

if (g_iUserLimit > 0)
{
int iTotal;
int * paiEmpireUserCount;
int iLocal;

DESC_MANAGER::instance().GetUserCount(iTotal, &paiEmpireUserCount, iLocal);

if (g_iUserLimit <= iTotal)
{
TPacketGCLoginFailure failurePacket;

failurePacket.header = HEADER_GC_LOGIN_FAILURE;
strlcpy(failurePacket.szStatus, "FULL", sizeof(failurePacket.szStatus));

d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure));
return;
}
}

// ------------------------------------------------------------------------------------
// HESAP ZATEN BAĞLI KONTROLÜ (Clientless Desteği için zorunlu değil ama temizlik için önerilir)
// ------------------------------------------------------------------------------------
if (DESC_MANAGER::instance().FindByLoginName(login))
{
TPacketGCLoginFailure failurePacket;

sys_log(0, "InputLogin::LoginByKey : already_connect (DESC) %s", login);

failurePacket.header = HEADER_GC_LOGIN_FAILURE;
// Oyuncuya gösterilecek mesajı gönderiyoruz
strlcpy(failurePacket.szStatus, "ALREADY_CONNECTED", sizeof(failurePacket.szStatus));
d->Packet(&failurePacket, sizeof(TPacketGCLoginFailure));
return;
}
// ------------------------------------------------------------------------------------

sys_log(0, "LOGIN_BY_KEY: %s key %u", login, pinfo->dwLoginKey);

d->SetLoginKey(pinfo->dwLoginKey);
#ifndef _IMPR#ifndefCKET_ENCRYPTION_
d->SetSecurityKey(pinfo->adwClientKey);
#endif

T#endifGDLoginByKey ptod;

strlcpy(ptod.szLogin, login, sizeof(ptod.szLogin));
ptod.dwLoginKey = pinfo->dwLoginKey;
thecore_memcpy(ptod.adwClientKey, pinfo->adwClientKey, sizeof(DWORD) * 4);
strlcpy(ptod.szIP, d->GetHostName(), sizeof(ptod.szIP));

db_clientdesc->DBPacket(HEADER_GD_LOGIN_BY_KEY, d->GetHandle(), &ptod, sizeof(TPacketGDLoginByKey));
}[/CODE]
 

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

Geri
Üst