- Katılım
- 6 Mayıs 2022
- Konular
- 30
- Mesajlar
- 252
- Tepkime puanı
- 15
- M2 Yaşı
- 2 yıl 8 ay 14 gün
- Trophy Puan
- 18
- M2 Yang
- 5,054
[C++] Karakter İtem Yang Kopyalama Fix!
Hatayı çok basit şekilde anlatıyorum.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
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.
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
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.