romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Title System

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

kaya4572

ITJA
TC Kimlik Numarası Doğrulanmış Üye
Banlı
TM Üye
Katılım
23 Haz 2010
Konular
62
Mesajlar
330
Online süresi
1mo 1d
Reaksiyon Skoru
208
Altın Konu
0
Başarım Puanı
149
Yaş
28
MmoLira
4,661
DevLira
51
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!

Sunucunuza özel unvan sistemi
GM’ler, seçilen oyuncuların nickinin yanına [TITLE] ekleyebilir.
Örnek: [ŞAMPİYON] Oyuncu1 – tamamen özelleştirilebilir
Unvanlar anında görünür, bekleme yok!
🛡 Komut: /givetitle oyuncu_adi TITLE



char.h → Title Değişkeni Tanımla

[CODE lang="cpp" title="char.h"]private:
std::string m_strCustomTitle; // GM title

public:
void SetCustomTitle(const std::string& title) { m_strCustomTitle = title; }
const std::string& GetCustomTitle() const { return m_strCustomTitle; }
void SendCustomTitle(); // Client'e gönder[/CODE]


2. char.cpp → Title Gönderme Fonksiyonu

[CODE lang="cpp" title="char.cpp"]void CHARACTER::SendCustomTitle()
{
if (GetDesc())
{
TPacketGCTitle p;
p.header = HEADER_GC_CUSTOM_TITLE;
p.dwVID = GetVID();
strlcpy(p.szTitle, m_strCustomTitle.c_str(), sizeof(p.szTitle));
GetDesc()->Packet(&p, sizeof(TPacketGCTitle));
}
}[/CODE]


3. packet.h → Yeni Paket Yapısı

Sunucu (Gamesrc) ve client (Clientsrc) dosyalarına ekle:​


[CODE lang="cpp" title="packet.h"]#define HEADER_GC_CUSTOM_TITLE 240 // Kullanılmayan bir ID seç

typedef struct packet_gctitle
{
BYTE header; // HEADER_GC_CUSTOM_TITLE
DWORD dwVID; // Oyuncu ID
char szTitle[32]; // Title max 31 karakter
} TPacketGCTitle;[/CODE]

char.cpp → karakter girişinde:

[CODE lang="cpp" title="chat.cpp+"]// Giriş işlemleri tamamlandıktan sonra
SendCustomTitle();[/CODE]

5. GM Komutu – Title Verme

[CODE lang="cpp" title="cmd_general.cpp"]ACMD(do_givetitle)
{
char name[256], title[256];
two_arguments(argument, name, sizeof(name), title, sizeof(title));

if (!*name || !*title)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /givetitle <isim> <title>");
return;
}

CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name);
if (!tch)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}

if (strlen(title) > 20)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Title çok uzun! Maksimum 20 karakter.");
return;
}

std::string formattedTitle = "[" + std::string(title) + "]"; // [TITLE]

tch->SetCustomTitle(formattedTitle);
tch->SendCustomTitle();

ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncuya '%s' title verildi.", name, formattedTitle.c_str());
tch->ChatPacket(CHAT_TYPE_INFO, "GM size '%s' title verdi.", formattedTitle.c_str());
}

ACMD(do_removetitle)
{
char name[256];
one_argument(argument, name, sizeof(name));

CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name);
if (!tch)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}

tch->SetCustomTitle("");
tch->SendCustomTitle();

ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncunun title'ı silindi.", name);
tch->ChatPacket(CHAT_TYPE_INFO, "GM title'ınızı kaldırdı.");
}[/CODE]

cmd.cpp

[CODE lang="cpp" title="cmd.cpp"]ACMD(do_givetitle);
ACMD(do_removetitle);


{ "givetitle", do_givetitle, GM_IMPLEMENTOR },
{ "removetitle", do_removetitle, GM_IMPLEMENTOR },[/CODE]



7. Client C++ → Paket Alma

[CODE lang="cpp" title="PythonNetworkStream.cpp"]void CPythonNetworkStream::RecvCustomTitlePacket()
{
TPacketGCTitle p;
if (!Recv(sizeof(p), &p))
return;

CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
CInstanceBase* pInstance = rkChrMgr.GetInstancePtr(p.dwVID);
if (pInstance)
{
pInstance->SetTitle(p.szTitle);
}
}[/CODE]


[CODE lang="cpp" title="PythonNetworkStream.h"]void RecvCustomTitlePacket();
[/CODE]


Paket yönlendirme (packet switch kısmı):​


[CODE title="PythonNetworkStream"]case HEADER_GC_CUSTOM_TITLE:
RecvCustomTitlePacket();
break;[/CODE]

Client Python – Nick Gösterimi

[CODE lang="python" title="interfacemodule.py"]def GetNameString(self):
if self.customTitle:
return "%s %s" % (self.customTitle, self.name)
else:
return self.name[/CODE]


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Reboot atınca title gitmemesi için

SQL Komutu (Navicat, veya diğer terminalde çalıştır):
[CODE lang="sql" title="player"]ALTER TABLE player.player ADD COLUMN custom_title VARCHAR(32) DEFAULT '';
[/CODE]

Sunucu – C++ Kod Değişiklikleri

[CODE lang="cpp" title="char.h"]void LoadCustomTitle(); // DB'den oku
void SaveCustomTitle(); // DB'ye kaydet[/CODE]

char.cpp içine ekle:​


Title kaydet:​


[CODE lang="cpp" title="char.cpp"]void CHARACTER::SaveCustomTitle()
{
char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
"UPDATE player.player SET custom_title='%s' WHERE id=%u",
get_table_safe_string(GetCustomTitle().c_str()).c_str(), GetPlayerID());

CDBManager::instance().ReturnQuery(szQuery, QID_NONE, NULL, NULL);
}[/CODE]

Title yükle:​


Load kısmını, karakter yaratıldığında çağıracağız.
[CODE lang="cpp" title="char.cpp"]void CHARACTER::LoadCustomTitle()
{
char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
"SELECT custom_title FROM player.player WHERE id=%u", GetPlayerID());

std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery));
if (pMsg && pMsg->Get()->uiNumRows > 0)
{
MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
if (row && row[0])
SetCustomTitle(row[0]);
}
}[/CODE]

Karakter Girişinde Title Yükle
[CODE lang="cpp" title="char.cpp veya CHARACTER::Create fonksiyonu içinde:"]char.cpp veya CHARACTER::Create fonksiyonu içinde

LoadCustomTitle(); // Veritabanından oku
SendCustomTitle(); // Client'e gönder[/CODE]

4. GM Komutlarına Kayıt Ekle

[CODE title="cmd_general.cpp"]do_givetitle içinde:
Unvan verildikten sonra kaydet:

tch->SetCustomTitle(formattedTitle);
tch->SendCustomTitle();
tch->SaveCustomTitle(); // Kalıcı kaydet

do_removetitle içinde:
Silindikten sonra veritabanını güncelle:

tch->SetCustomTitle("");
tch->SendCustomTitle();
tch->SaveCustomTitle(); // Kalıcı sil[/CODE]

  • Title veritabanına kaydolur
  • Girişte otomatik yüklenir
  • GM silerse, kalıcı silinir
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Merhaba,

Lütfen çalıştığına dair 24 saat içinde kanıt ekleyiniz.

Ayrıca zaten karakter paketinde char ile ilgili bilgiler gidiyor neden ek paket ekleyerek yaptığınızı anlamış değilim, clientta karakter için eklenmemiş bir attribute güncelleniyor, güncelleyen methodda eklenmemiş.

Teşekkürler,
Sunucunuza özel unvan sistemi
GM’ler, seçilen oyuncuların nickinin yanına [TITLE] ekleyebilir.
Örnek: [ŞAMPİYON] Oyuncu1 – tamamen özelleştirilebilir
Unvanlar anında görünür, bekleme yok!
🛡 Komut: /givetitle oyuncu_adi TITLE
not: reboot atılması durumunda title gider veritabanına entegrwe etmek size kalmış


char.h → Title Değişkeni Tanımla

[CODE lang="cpp" title="char.h"]private:
std::string m_strCustomTitle; // GM title

public:
void SetCustomTitle(const std::string& title) { m_strCustomTitle = title; }
const std::string& GetCustomTitle() const { return m_strCustomTitle; }
void SendCustomTitle(); // Client'e gönder[/CODE]


2. char.cpp → Title Gönderme Fonksiyonu

[CODE lang="cpp" title="char.cpp"]void CHARACTER::SendCustomTitle()
{
if (GetDesc())
{
TPacketGCTitle p;
p.header = HEADER_GC_CUSTOM_TITLE;
p.dwVID = GetVID();
strlcpy(p.szTitle, m_strCustomTitle.c_str(), sizeof(p.szTitle));
GetDesc()->Packet(&p, sizeof(TPacketGCTitle));
}
}[/CODE]


3. packet.h → Yeni Paket Yapısı

Sunucu (Gamesrc) ve client (Clientsrc) dosyalarına ekle:​


[CODE lang="cpp" title="packet.h"]#define HEADER_GC_CUSTOM_TITLE 240 // Kullanılmayan bir ID seç

typedef struct packet_gctitle
{
BYTE header; // HEADER_GC_CUSTOM_TITLE
DWORD dwVID; // Oyuncu ID
char szTitle[32]; // Title max 31 karakter
} TPacketGCTitle;[/CODE]

char.cpp → karakter girişinde:

[CODE lang="cpp" title="chat.cpp+"]// Giriş işlemleri tamamlandıktan sonra
SendCustomTitle();[/CODE]

5. GM Komutu – Title Verme

[CODE lang="cpp" title="cmd_general.cpp"]ACMD(do_givetitle)
{
char name[256], title[256];
two_arguments(argument, name, sizeof(name), title, sizeof(title));

if (!*name || !*title)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /givetitle <isim> <title>");
return;
}

CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name);
if (!tch)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}

if (strlen(title) > 20)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Title çok uzun! Maksimum 20 karakter.");
return;
}

std::string formattedTitle = "[" + std::string(title) + "]"; // [TITLE]

tch->SetCustomTitle(formattedTitle);
tch->SendCustomTitle();

ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncuya '%s' title verildi.", name, formattedTitle.c_str());
tch->ChatPacket(CHAT_TYPE_INFO, "GM size '%s' title verdi.", formattedTitle.c_str());
}

ACMD(do_removetitle)
{
char name[256];
one_argument(argument, name, sizeof(name));

CHARACTER* tch = CHARACTER_MANAGER::instance().FindPC(name);
if (!tch)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}

tch->SetCustomTitle("");
tch->SendCustomTitle();

ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncunun title'ı silindi.", name);
tch->ChatPacket(CHAT_TYPE_INFO, "GM title'ınızı kaldırdı.");
}[/CODE]

cmd.cpp

[CODE lang="cpp" title="cmd.cpp"]ACMD(do_givetitle);
ACMD(do_removetitle);


{ "givetitle", do_givetitle, GM_IMPLEMENTOR },
{ "removetitle", do_removetitle, GM_IMPLEMENTOR },[/CODE]



7. Client C++ → Paket Alma

[CODE lang="cpp" title="PythonNetworkStream.cpp"]void CPythonNetworkStream::RecvCustomTitlePacket()
{
TPacketGCTitle p;
if (!Recv(sizeof(p), &p))
return;

CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
CInstanceBase* pInstance = rkChrMgr.GetInstancePtr(p.dwVID);
if (pInstance)
{
pInstance->SetTitle(p.szTitle);
}
}[/CODE]


[CODE lang="cpp" title="PythonNetworkStream.h"]void RecvCustomTitlePacket();
[/CODE]


Paket yönlendirme (packet switch kısmı):​


[CODE title="PythonNetworkStream"]case HEADER_GC_CUSTOM_TITLE:
RecvCustomTitlePacket();
break;[/CODE]

Client Python – Nick Gösterimi

[CODE lang="python" title="interfacemodule.py"]def GetNameString(self):
if self.customTitle:
return "%s %s" % (self.customTitle, self.name)
else:
return self.name[/CODE]
Eline sağlık my dev.

Fakat bi görüntü lazım bide şu reboot atınca gitmeme olayı
 
Eline sağlık my dev.

Fakat bi görüntü lazım bide şu reboot atınca gitmeme olayı
SQL Komutu (Navicat, veya diğer terminalde çalıştır):
[CODE lang="sql" title="player"]ALTER TABLE player.player ADD COLUMN custom_title VARCHAR(32) DEFAULT '';
[/CODE]

Sunucu – C++ Kod Değişiklikleri

[CODE lang="cpp" title="char.h"]void LoadCustomTitle(); // DB'den oku
void SaveCustomTitle(); // DB'ye kaydet[/CODE]

char.cpp içine ekle:​


Title kaydet:​


[CODE lang="cpp" title="char.cpp"]void CHARACTER::SaveCustomTitle()
{
char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
"UPDATE player.player SET custom_title='%s' WHERE id=%u",
get_table_safe_string(GetCustomTitle().c_str()).c_str(), GetPlayerID());

CDBManager::instance().ReturnQuery(szQuery, QID_NONE, NULL, NULL);
}[/CODE]

Title yükle:​


Load kısmını, karakter yaratıldığında çağıracağız.
[CODE lang="cpp" title="char.cpp"]void CHARACTER::LoadCustomTitle()
{
char szQuery[256];
snprintf(szQuery, sizeof(szQuery),
"SELECT custom_title FROM player.player WHERE id=%u", GetPlayerID());

std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery));
if (pMsg && pMsg->Get()->uiNumRows > 0)
{
MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
if (row && row[0])
SetCustomTitle(row[0]);
}
}[/CODE]

Karakter Girişinde Title Yükle
[CODE lang="cpp" title="char.cpp veya CHARACTER::Create fonksiyonu içinde:"]char.cpp veya CHARACTER::Create fonksiyonu içinde

LoadCustomTitle(); // Veritabanından oku
SendCustomTitle(); // Client'e gönder[/CODE]

4. GM Komutlarına Kayıt Ekle

[CODE title="cmd_general.cpp"]do_givetitle içinde:
Unvan verildikten sonra kaydet:

tch->SetCustomTitle(formattedTitle);
tch->SendCustomTitle();
tch->SaveCustomTitle(); // Kalıcı kaydet

do_removetitle içinde:
Silindikten sonra veritabanını güncelle:

tch->SetCustomTitle("");
tch->SendCustomTitle();
tch->SaveCustomTitle(); // Kalıcı sil[/CODE]


bunlarıda ekle sistemi kurarken playerden çekecek herşeyi zaten umarın filesinin fonksiyonlarıda uygundur ki illaki uygundur
 
Merhaba,

Lütfen çalıştığına dair 24 saat içinde kanıt ekleyiniz.

Ayrıca zaten karakter paketinde char ile ilgili bilgiler gidiyor neden ek paket ekleyerek yaptığınızı anlamış değilim, clientta karakter için eklenmemiş bir attribute güncelleniyor, güncelleyen methodda eklenmemiş.

Teşekkürler,
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

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

Geri
Üst