- Katılım
- 1 May 2016
- Konular
- 64
- Mesajlar
- 327
- Çözüm
- 2
- Online süresi
- 1mo 16d
- Reaksiyon Skoru
- 173
- Altın Konu
- 1
- TM Yaşı
- 10 Yıl 1 Ay 6 Gün
- Başarım Puanı
- 131
- MmoLira
- 6,455
- DevLira
- 21
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!
Merhaba arkadaşlar,
Normal şartlarda mysqldan player ve player_delete tablolarını eşitlediğinizde yani kategorilerini silmesi lazım. Ama yinede karekter silemezsin diyor.
Çünkü src kısmında silme komutlarında tablo ismi yanlış girilmiş. Şimdi onu düzeltiyoruz ve karekterimizi başarılı bir şekilde siliyoruz.
Src/Server/db içerisinde Şu dosyada Arat;
[CODE lang="cpp" title="ClientManagerPlayer.cpp"] char queryStr[QUERY_MAX_LEN];
snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));
if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}[/CODE]
Ve Bu şekilde değiştir.
[CODE lang="cpp" title="ClientManagerPlayer.cpp" highlight="3, 9"] char queryStr[QUERY_MAX_LEN];
snprintf(queryStr, sizeof(queryStr), "INSERT INTO player_deleted%s SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));
if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player_deleted%s", dwPID, GetTablePostfix());
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}[/CODE]
Gördüğünüz gibi çok basit bir şekilde hatayı çözmüş olduk.
Yapılan işlem; player%s_deleted kısmını player_deleted%s şeklinde değiştirmek oldu.
Not: Karekter silinirken, account kısmındaki social_id sütununa bakar. Eğer orası boşsa şu şekilde log atar.
Eğer Config dosyalarınızdaki Karekter silme levelinide düzenlemesseniz
bu şekilde log atar ve karekter silinmez.
Normal şartlarda mysqldan player ve player_delete tablolarını eşitlediğinizde yani kategorilerini silmesi lazım. Ama yinede karekter silemezsin diyor.
Çünkü src kısmında silme komutlarında tablo ismi yanlış girilmiş. Şimdi onu düzeltiyoruz ve karekterimizi başarılı bir şekilde siliyoruz.
Src/Server/db içerisinde Şu dosyada Arat;
[CODE lang="cpp" title="ClientManagerPlayer.cpp"] char queryStr[QUERY_MAX_LEN];
snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));
if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}[/CODE]
Ve Bu şekilde değiştir.
[CODE lang="cpp" title="ClientManagerPlayer.cpp" highlight="3, 9"] char queryStr[QUERY_MAX_LEN];
snprintf(queryStr, sizeof(queryStr), "INSERT INTO player_deleted%s SELECT * FROM player%s WHERE id=%d",
GetTablePostfix(), GetTablePostfix(), pi->player_id);
std::auto_ptr<SQLMsg> pIns(CDBManager::instance().DirectQuery(queryStr));
if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
{
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player_deleted%s", dwPID, GetTablePostfix());
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
peer->EncodeBYTE(pi->account_index);
return;
}[/CODE]
Gördüğünüz gibi çok basit bir şekilde hatayı çözmüş olduk.
Yapılan işlem; player%s_deleted kısmını player_deleted%s şeklinde değiştirmek oldu.
Not: Karekter silinirken, account kısmındaki social_id sütununa bakar. Eğer orası boşsa şu şekilde log atar.
Kod:
Feb 21 19:37:30.91470 :: AUTH_LOGIN id(2) login(admin) social_id() login_key(429782019), client_key(1481696223 648049349 1875834706 2093965782) Feb 21 19:37:30.692346 :: [ 4350] return 0/0/0 async 0/0/0 Feb 21 19:37:31.91442 :: LOGIN_BY_KEY success admin 429782019 192.168.1.4 Feb 21 19:37:31.291670 :: RESULT_LOGIN: login success admin rows: 2 Feb 21 19:37:31.291802 :: Lyrion 961364 273242 hair 0 Feb 21 19:37:31.291879 :: bvnvbn 962849 270371 hair 0 Feb 21 19:37:35.692566 :: [ 4400] return 0/0/0 async 0/0/0 Feb 21 19:37:37.591452 :: PLAYER_DELETE FAILED len(0) Feb 21 19:37:39.991444 :: PLAYER_DELETE FAILED len(0) Feb 21 19:37:40.691465 :: [ 4450] return 0/0/0 async 0/0/0 Feb 21 19:37:42.391411 :: PLAYER_DELETE FAILED len(0) Feb 21 19:37:45.691672 :: [ 4500] return 0/0/0 async 0/0/0 Feb 21 19:37:50.691741 :: [ 4550] return 0/0/0 async 0/0/0 Feb 21 19:37:55.691676 :: [ 4600] return 0/0/0 async 0/0/0 Feb 21 19:38:00.691452 :: [ 4650] return 0/0/0 async 0/0/0 Feb 21 19:38:04.391478 :: PLAYER_DELETE FAILED len(0) Feb 21 19:38:05.691745 :: [ 4700] return 0/0/0 async 0/0/0 Feb 21 19:38:10.692240 :: [ 4750] return 0/0/0 async 0/0/0 Feb 21 19:38:10.791503 :: PLAYER_DELETE FAILED len(0) Feb 21 19:38:15.692134 :: [ 4800] return 0/0/0 async 0/0/0
Eğer Config dosyalarınızdaki Karekter silme levelinide düzenlemesseniz
Kod:
Feb 21 19:44:16.728435 :: PLAYER_DELETE TRY: admin 10002 pid1
Feb 21 19:44:16.827946 :: PLAYER_DELETE FAILED LEVEL 80 >= DELETE LIMIT 70
Feb 21 19:44:17.627553 :: [ 1800] return 0/0/1 async 0/0/0
Feb 21 19:44:22.625891 :: [ 1850] return 0/0/0 async 0/0/0
Feb 21 19:44:27.629179 :: [ 1900] return 0/0/0 async 0/0/0
Feb 21 19:44:32.624934 :: [ 1950] return 0/0/0 async 0/0/0
Feb 21 19:44:37.624862 :: [ 2000] return 0/0/0 async 0/0/0
Feb 21 19:44:42.627589 :: [ 2050] return 0/0/0 async 0/0/0
Feb 21 19:44:47.625254 :: [ 2100] return 0/0/0 async 0/0/0
Feb 21 19:44:52.625453 :: [ 2150] return 0/0/0 async 0/0/0
bu şekilde log atar ve karekter silinmez.
Son düzenleme:
- Katılım
- 25 Eyl 2012
- Konular
- 115
- Mesajlar
- 1,302
- Çözüm
- 7
- Online süresi
- 20d 14h
- Reaksiyon Skoru
- 423
- Altın Konu
- 0
- Başarım Puanı
- 221
- MmoLira
- 2,602
- DevLira
- 24
[C++ ] Karakter Silme Sorunu Fix [Recepin94]
Bildiğiniz üzere 40K gamelerde karakter silinmiyor sizlere fixini anlatacağım Src / db ClientManagerPlayer.cpp Açılır Bu kısmı aratın char queryStr[QUERY_MAX_LEN]; snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d"...
- Katılım
- 1 May 2016
- Konular
- 64
- Mesajlar
- 327
- Çözüm
- 2
- Online süresi
- 1mo 16d
- Reaksiyon Skoru
- 173
- Altın Konu
- 1
- TM Yaşı
- 10 Yıl 1 Ay 6 Gün
- Başarım Puanı
- 131
- MmoLira
- 6,455
- DevLira
- 21
Oradaki kodlar eksik bakabilirsin. Eksik dememin sebebi silinen hesaplar direk gidiyor. Ben silindikten sonra player_delete tabloma kaydedilmesini istiyorum. Sonuçta loglamak önemli dimi.Konu daha önce paylaşılmış ve aynı kodları içeriyor. @XxZeMaHSeRxX @keyloq @Lorenzo![]()
[C++ ] Karakter Silme Sorunu Fix [Recepin94]
Bildiğiniz üzere 40K gamelerde karakter silinmiyor sizlere fixini anlatacağım Src / db ClientManagerPlayer.cpp Açılır Bu kısmı aratın char queryStr[QUERY_MAX_LEN]; snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s_deleted SELECT * FROM player%s WHERE id=%d"...forum.turkmmo.com
Son düzenleme:
- Katılım
- 25 Eyl 2012
- Konular
- 115
- Mesajlar
- 1,302
- Çözüm
- 7
- Online süresi
- 20d 14h
- Reaksiyon Skoru
- 423
- Altın Konu
- 0
- Başarım Puanı
- 221
- MmoLira
- 2,602
- DevLira
- 24
Kodlar aynı dostum.Oradaki kodlar hatalı bakabilirsin.
Hatalı olan yer neresi tam olarak??Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 13
- Görüntüleme
- 1K
- Cevaplar
- 1
- Görüntüleme
- 2K
- Cevaplar
- 29
- Görüntüleme
- 8K
- Cevaplar
- 1
- Görüntüleme
- 1K
- Cevaplar
- 8
- Görüntüleme
- 2K



