- Katılım
- 31 Ocak 2020
- Konular
- 74
- Mesajlar
- 1,428
- Online süresi
- 3mo 28d
- Reaksiyon Skoru
- 717
- Altın Konu
- 1
- Başarım Puanı
- 196
- MmoLira
- 981
- DevLira
- 12
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!
Hatayı çok basit şekilde anlatıyorum.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
Ekli dosyayı görüntüle 90937
Normalde bu sorgunun ne ile olmasını beklersiniz? İpucu: Hesap ile ilgili unique veriler 'id' ve 'name'dir.
Evet cevaba gelelim bu sorgu 'name' ile yapılmaktadır. login değişkeni hesap adını içermektedir.
Ekli dosyayı görüntüle 90938
Yani sonuç olarak oyunda olan bir hesabın kullanıcı adı değiştirildiğinde ikinci defa aynı hesaba girilmektedir.
Çözüme gelecek olursak
1.Çözüm: 'name' değeri unique olduğu ve bu değer üzerinden kontroller gerçekleştiği için bu değeri değiştirmek gibi bir hata yapmamanız.
2.Çözüm: Bu çözümde asıl olması gerekeni yazıyorum. Bu kontroller 'id' üzerinden gerçekleşmeliydi. 'name' yerine 'id' kullanırsanız bu problem yaşanmaz.
Bunun için;
FindByLoginName
ConnectAccount
DisconnectAccount
Ekli dosyayı görüntüle 90939
bu yazdığım fonksiyonlarda 'std::string& login' yerine 'DWORD id' yazıp DisconnectAccount(login) ve ConnectAccount(login) olan yerleri id olarak değiştirmeniz gerek.
Son olarak bu mapin DWORD tutması için
typedef std::unordered_map<std::string, LPDESC> DESC_LOGINNAME_MAP;
yerine
typedef std::unordered_map<DWORD, LPDESC> DESC_LOGINNAME_MAP;
yazın.
Oyuncudan gelen mesaj ile hesap ismi değiştirmezseniz bu kadar düzenlemeye zahmet etmek zorunda olmazsınız.
Çözüm#1 : Asla aktif oyunda kullanıcı adı değiştirmeyiniz.
Çözüm#2: https://forum.turkmmo.com/konu/3852532-c-karakter-item-yang-kopyalama-fix/post-21317303
Bu konunu buraya açılma sebebi sunucu sahiplerinin çoğunlugu buraya girmektedir.
Bugün aktif oyunumuzda başımıza gelen ufak bir olayı sizlere anlatmak istiyorum tüm oyun sahipleri bunu bilmeli çünkü piyasada
3 ,5 tane kendini bilmez adamın oyun sahiplerini tehtid etmesi sinir bozucu

Aktif oyuncuya sahip bir oyunda asla kullanıcıadı account.id değiştirilmez!
Bunu yaptığınız zaman hesaplarda yang item vs tüm kopyalama vs işlemleri yapabilirler.
Başıma gelen olay şu şekildedir;
Saat 13:00'da xx oyunumuza ticket ile ulaşıp kullanıcı adı değiştirmek için yalvaran bir oyuncu mevcutmuş.
Sunucu sahibi (Yatırımcı) başından sağmak için kullanıcı adını değiştirip bu arkadaşı göndermiş.
Saat 14:50'de bunu kullanarak oyunda sadece 1 hesapta yüksek oranda yang buglanmış tabi durum anlık olarak bana bildirildi.
İncelemelerim sonucunda bu olayın kullanıcı adına bağlı bir konu olduğunu anladık. Aktif olarak oyuncunun piyasaya yang sokmasını engelleyip sadece 15 dakika içerisinde tüm hesaplarını engelledik ve oyunu temiz tutmayı başardık siz bizim kadar şanslı olamayabilirsiniz. Herkes önlemini alsın bu arkadaşlara yem olmasın. Yang üreten kişi bize akşam ulaştı ve 5.000₺ para istedi (Steam cüzdan kodu) bizde ona vereceğimiz parayı ahbap'a bağışlayacağımızı ilettik arkadaş ilginç şekilde kabul etti ve ahbap'a bağışladık. Zaten oyundan gelen gelirin büyük bir kısmını bağışlayacağımızı planlamıştık
şimdi o arkadaş elinde 2 tane video ile dolaşıp dursun. Bu saatten sonra kimsenin emeğine yatırımına parasına göz dikmesin.Herkese iyi forumlar.
Bug kanıtı;
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Hatayı çok basit şekilde anlatıyorum.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
Öğeyi görmek için üye olmalısınız.
Normalde bu sorgunun ne ile olmasını beklersiniz? İpucu: Hesap ile ilgili unique veriler 'id' ve 'name'dir.
Evet cevaba gelelim bu sorgu 'name' ile yapılmaktadır. login değişkeni hesap adını içermektedir.
Öğeyi görmek için üye olmalısınız.
Yani sonuç olarak oyunda olan bir hesabın kullanıcı adı değiştirildiğinde ikinci defa aynı hesaba girilmektedir.
Çözüme gelecek olursak
1.Çözüm: 'name' değeri unique olduğu ve bu değer üzerinden kontroller gerçekleştiği için bu değeri değiştirmek gibi bir hata yapmamanız.
2.Çözüm: Bu çözümde asıl olması gerekeni yazıyorum. Bu kontroller 'id' üzerinden gerçekleşmeliydi. 'name' yerine 'id' kullanırsanız bu problem yaşanmaz.
Bunun için;
FindByLoginName
ConnectAccount
DisconnectAccount
Öğeyi görmek için üye olmalısınız.
bu yazdığım fonksiyonlarda 'std::string& login' yerine 'DWORD id' yazıp DisconnectAccount(login) ve ConnectAccount(login) olan yerleri id olarak değiştirmeniz gerek.
Son olarak bu mapin DWORD tutması için
typedef std::unordered_map<std::string, LPDESC> DESC_LOGINNAME_MAP;
yerine
typedef std::unordered_map<DWORD, LPDESC> DESC_LOGINNAME_MAP;
yazın.
Oyuncudan gelen mesaj ile hesap ismi değiştirmezseniz bu kadar düzenlemeye zahmet etmek zorunda olmazsınız.
sol elle sağ kulağı kaşımanın bir anlamı yok
UNIQUE INDEX `login`(`login`) USING BTREE,
Bu olay başıma 2019 yılında gelmişti, bir grup oyuncu destek ekibindeki arkadaşları kandırıp kullanıcı adlarını değiştirmişlerdi, sonrasında bir çok item kopyalama yaptılar ve tehdit ettiler, ekibimdekilere bugu söyleyeceklerini belirttiler dost gibi yaklaştılar ve ekip arkadaşlarımda inandı ben de öyle. Daha bug yapmayacaklarını söyleyip sürekli bize kanka şunla küstüm hesabıma girmemesi gerekiyor hesabın kullanıcı adı şifresi maili telefonu gibi bilgileri şu şekilde değiştirir misin diyip sürekli kullandılar![]()
fakat hala anlamamıştık halbuki ellerimizle bug yaptırıyorlardı neyse sonunda 1 haftalık incelemem sonucunda loglar olsun mesajlaşmalar olsun farkettim ki sürekli ekibe kullanıcı ismi değiştirtiyorlar test serverde aktif karakterimin kullanıcı adını değiştirdim ve aynı chden oyuna girdim wtf oldum
sonra farklı bir chden girdim ver yansın her yaptığın işlem resmen kopyalamaya sebebiyet veriyordu ticarete item atıyordum diğer karaktere veriyordum ch1 deki charda hala item duruyorudu
vs vs. bulmam 1 haftamı aldı resmen adamlar bizle daş daş geçtiler
böylede bir olaydı şimdi görünce anılarım depreşti çok stresli günlerdi @__dracaryS__ hatırlıyon mu knk bugu bulduktan sonra anlatmıştım
zaman çabuk geçiyor.
Trigger ile login alanının değiştirilmesini engelleyebilirsiniz bu şekilde ne admin panelinden nede db üzerinden değiştiremezler.
SQL:DELIMITER $$ CREATE TRIGGER trigger_account_login BEFORE UPDATE ON account FOR EACH ROW BEGIN IF NEW.login <> OLD.login THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'login değiştirilemez!'; END IF; END $$ DELIMITER;
Şehir dışındayım eve geçtiğimde fixini konuya ekleyeceğim
Loginin benzersiz olması ile ilgili bir problem değil bu. Hesap oyundayken loginin değiştirilmesi ile ilgili bir problem. Login alanı zaten değiştirilmiyor. Sadece oyun sahibi manuel olarak böyle bir müdahale gerçekleştirebilir. Aynı oyun sahibi manuel olarak herhangi bir hesaba ep,gold,level de verebilir.Bu login alanını benzersiz olması için kullanılıyor zaten çoğu alt yapıda bu şekilde mevzuda oyunun destek ekibini yada yönetimden birilerini kandırarak admin panelden yada doğrudan db üzerinden değiştirtmeleri önüne geçmek zor en temizi login alanının değiştirilmesinin engellenmesi yada tunganın dediği gibi login yerine id baktırmak olabilir.
Ben trigger ile login alınanının değiştirilmesini engellendim.
DELIMITER $$
CREATE TRIGGER trigger_account_login BEFORE UPDATE ON account FOR EACH ROW
BEGIN
IF NEW.login <> OLD.login THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'login değiştirilemez!';
END IF;
END $$
DELIMITER;
burada PID var mı diye kontrol ediyor. Konudaki olayla alakası olmamayı geçtim sorgunun olduğu yer de login değil karakter seçme.ID kontrolü yeterli olur derseniz şunu uygulayabilirsiniz
void CInputLogin::CharacterSelect(LPDESC d, const char* data)
Altına ekle
if (!c_r.players[pinfo->index].dwID)
{
d->SetPhase(PHASE_CLOSE);
return;
}
- Katılım
- 19 Ocak 2023
- Konular
- 51
- Mesajlar
- 455
- Çözüm
- 2
- Online süresi
- 1mo 27d
- Reaksiyon Skoru
- 646
- Altın Konu
- 0
- Başarım Puanı
- 136
- MmoLira
- 4,715
- DevLira
- 66
Bilgilendirme için teşekkürler. Nasıl birşey yapıyormuş ki Kullanıcı Adı değiştikden sonra ?
- Katılım
- 19 Şub 2019
- Konular
- 173
- Mesajlar
- 2,134
- Çözüm
- 26
- Online süresi
- 10mo 21d
- Reaksiyon Skoru
- 1,932
- Altın Konu
- 4
- Başarım Puanı
- 273
- MmoLira
- 4,264
- DevLira
- 97
Aynı çara 2 kere girebiliyorsun çok uzun süredir kullandıkları bir yöntem, depo ve ticaret aracılığıyla kopyalama yapıyorlar.Bilgilendirme için teşekkürler. Nasıl birşey yapıyormuş ki Kullanıcı Adı değiştikden sonra ?
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 9
- Görüntüleme
- 1K
- Cevaplar
- 20
- Görüntüleme
- 2K
- Cevaplar
- 2
- Görüntüleme
- 302
- Cevaplar
- 33
- Görüntüleme
- 2K





