noisiv 1
noisiv
Manwe Work 1
Manwe Work
mavzermete 1
mavzermete
darkbey42 1
darkbey42
xranzei 1
xranzei
Bvural41 1
Bvural41
PrimeAC 1
PrimeAC
Payidar2 1
Payidar2
Fethi Polat 1
Fethi Polat
Wizard' 1
Wizard'
shrpnl 1
shrpnl
Queinn 1
Queinn
Hikaye Ekle

[C++] Karakter İtem Yang Kopyalama Fix!

  • Konuyu başlatan Konuyu başlatan BeviS
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 50
  • Görüntüleme Görüntüleme 12K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Kullanıcı adı ile nasıl yapılıyor bir video filan iletseniz server sahipleri bu işin önüne geçebilirler
 
Hatayı çok basit şekilde anlatıyorum.
Burası oyuna giriş yaparken yapılan kontrollerden birisi ve hesabın oyunda olup olmadığını kontrol ediyor.
1676201303983.png

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.
1676201407891.png

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
1676201851022.png

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.
 
Son düzenleme:
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 :D :D 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 :D 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 :D vs vs. bulmam 1 haftamı aldı resmen adamlar bizle daş daş geçtiler :D 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 :D 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;
 
Son düzenleme:

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

Geri
Üst