Kodların arasında sessizce duran Metin2 detayları

Yani doğru yaklaşım bu mudur? Sizden öğrenecek çok şey var hakikatten.
18532 eklentisini görüntüle

Başka bir lüzumsuz hard-coding örneği

C++:
Genişlet Daralt Kopyala
enum EDragonSoulSubType
{
    DS_SLOT1,
    DS_SLOT2,
    DS_SLOT3,
    DS_SLOT4,
    DS_SLOT5,
    DS_SLOT6,
    DS_SLOT_NUM_TYPES = 6,
};
Burada birşey yok enum’a eklediklerin 0’dan başlar(sabit girmediğin sürece) Ama o isim olarak 1 den başlatmış. Yanii

DS_SLOT1 aslında = 0 ‘dır. Ymir bizim babamız ezmeyin bu kadar ahahahaa :)
 


Burada birşey yok enum’a eklediklerin 0’dan başlar(sabit girmediğin sürece) Ama o isim olarak 1 den başlatmış. Yanii

DS_SLOT1 aslında = 0 ‘dır. Ymir bizim babamız ezmeyin bu kadar ahahahaa :)
Sorun o değil. Dinamik olarak zaten o sayıyı alacakken elle 6 yazmışlar. Yeni simya eklemeye çalışsan elinde patlayacak, ara dur ki hata nerede.
 
Sorun o değil. Dinamik olarak zaten o sayıyı alacakken elle 6 yazmışlar. Yeni simya eklemeye çalışsan elinde patlayacak, ara dur ki hata nerede.
Tabii orası öyle zaten ama tahminimce max sayıyı mesela saymak yerine baktığında ha tamam 6 tane var aklında bulundurması için yapmış da olabilir. Bilemiyoruz ki o anda ne düşünerekten yaptı diye ama hangisini düşünerekten yapmışlar ki. 🤣
 
Son düzenleme:
Otomatik item satışı yazarken PickupItem içerisinde bir şey fark ettim. Item in IsOwnership ise item i destroy ediyor, IsOwnership değilse hiç bir şey yapmıyor. Mantığı ne? Ben çözmedim bir türlü yani o itemi oluşturuyorsun ama IsOwnership i değilse ramki bu itemi ne destroy edecek?

18725 eklentisini görüntüle
18722 eklentisini görüntüle
18726 eklentisini görüntüle
İtemin sahibi değilse veya item sahibi kişinin grubunda değilse toplayamaz zaten. Sahibi olmayan itemler zaten IsOwnership fonksiyonundan true olarak sonuç döndüğü için yine o case'a giriyor.
 
İnanılmaz bir oyun, yıllarca dosyalarla uğraşsanız bile hala yeni şeyler (saçmalıklar demeye dilim varmadı) keşfedebiliyorsunuz, ufak bir yolculukla battle.cpp dosyasına bir yolculuk yapalım;

battle.cpp:
Genişlet Daralt Kopyala
float CalcAttackRating (LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    int attacker_dx = pkAttacker->GetPolymorphPoint (POINT_DX);
    int attacker_lv = pkAttacker->GetLevel();

    int victim_dx = pkVictim->GetPolymorphPoint (POINT_DX);
    int victim_lv = pkAttacker->GetLevel();

    iARSrc = MIN (90, (attacker_dx * 4 + attacker_lv * 2) / 6);
    iERSrc = MIN (90, (victim_dx   * 4 + victim_lv   * 2) / 6);

    float fAR = ((float) iARSrc + 210.0f) / 300.0f;   // fAR = 0.7 ~ 1.0
    if (bIgnoreTargetRating)
    {
        return fAR;
    }

    float fER = ((float) (iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;
    return fAR - fER;
}

AttackRating'in hesaplandığı fonksiyonda formülün hesaplanması için 4 tane bilgi lazım hepsi int olarak (neden mesela, bu da farklı bir soru 😅) tanımlanmış, buraya kadar her şey normal, son tanımlamada saldırıya uğrayan tarafın level bilgisini almak gerekiyor ama bilin bakalım kimin leveliyle hesaplama yapılıyor, saldırganın seviyesini kullanıyorsunuz. :ROFLMAO: Zaten doğal olarak mob_proto içerisinde level kısmı 1'den aşağıya ayarlı herhangi bir entity yok, 0 gelmesi riski yüzünden bunu yaptılar desem alakasız ve saçma olacak o yüzden bu şıkkı eledim, aklıma başka bir şeyde gelmedi. Bunu neden bu şekilde bıraktıklarını gerçekten merak ediyorum keşke sorma şansım olsaydı, ayrıca güncel olarak paylaşılan pek çok projeden de kontrol ettim kimsenin dikkatini çekmemiş, bu da enteresan geldi.

Eğer bir sebebi varsa demek ki bunu anlayacak kapasite bende yok çünkü gerçekten durup düşündüm ve bulamadım 😅, eğer yoksa bunca yıl hem kendilerinin hem de dosyaları kullanan bu kadar insanın fark etmemiş olma ihtimali inanılmaz bir olasılık, olması gerektiği gibi düzeltip deneyeceğim bir sıkıntı olursa -ki sanmıyorum- tekrar yorum yaparım.
 
İnanılmaz bir oyun, yıllarca dosyalarla uğraşsanız bile hala yeni şeyler (saçmalıklar demeye dilim varmadı) keşfedebiliyorsunuz, ufak bir yolculukla battle.cpp dosyasına bir yolculuk yapalım;

battle.cpp:
Genişlet Daralt Kopyala
float CalcAttackRating (LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    int attacker_dx = pkAttacker->GetPolymorphPoint (POINT_DX);
    int attacker_lv = pkAttacker->GetLevel();

    int victim_dx = pkVictim->GetPolymorphPoint (POINT_DX);
    int victim_lv = pkAttacker->GetLevel();

    iARSrc = MIN (90, (attacker_dx * 4 + attacker_lv * 2) / 6);
    iERSrc = MIN (90, (victim_dx   * 4 + victim_lv   * 2) / 6);

    float fAR = ((float) iARSrc + 210.0f) / 300.0f;   // fAR = 0.7 ~ 1.0
    if (bIgnoreTargetRating)
    {
        return fAR;
    }

    float fER = ((float) (iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;
    return fAR - fER;
}

AttackRating'in hesaplandığı fonksiyonda formülün hesaplanması için 4 tane bilgi lazım hepsi int olarak (neden mesela, bu da farklı bir soru 😅) tanımlanmış, buraya kadar her şey normal, son tanımlamada saldırıya uğrayan tarafın level bilgisini almak gerekiyor ama bilin bakalım kimin leveliyle hesaplama yapılıyor, saldırganın seviyesini kullanıyorsunuz. :ROFLMAO: Zaten doğal olarak mob_proto içerisinde level kısmı 1'den aşağıya ayarlı herhangi bir entity yok, 0 gelmesi riski yüzünden bunu yaptılar desem alakasız ve saçma olacak o yüzden bu şıkkı eledim, aklıma başka bir şeyde gelmedi. Bunu neden bu şekilde bıraktıklarını gerçekten merak ediyorum keşke sorma şansım olsaydı, ayrıca güncel olarak paylaşılan pek çok projeden de kontrol ettim kimsenin dikkatini çekmemiş, bu da enteresan geldi.

Eğer bir sebebi varsa demek ki bunu anlayacak kapasite bende yok çünkü gerçekten durup düşündüm ve bulamadım 😅, eğer yoksa bunca yıl hem kendilerinin hem de dosyaları kullanan bu kadar insanın fark etmemiş olma ihtimali inanılmaz bir olasılık, olması gerektiği gibi düzeltip deneyeceğim bir sıkıntı olursa -ki sanmıyorum- tekrar yorum yaparım.

 
YMIR'den çok faydalı bir satır içi not alma örneği

C++:
Genişlet Daralt Kopyala
    // SCRIPT_SELECT_ITEM
    HEADER_CG_SCRIPT_SELECT_ITEM   = 114,
    // END_OF_SCRIPT_SELECT_ITEM
 
İnanılmaz bir oyun, yıllarca dosyalarla uğraşsanız bile hala yeni şeyler (saçmalıklar demeye dilim varmadı) keşfedebiliyorsunuz, ufak bir yolculukla battle.cpp dosyasına bir yolculuk yapalım;

battle.cpp:
Genişlet Daralt Kopyala
float CalcAttackRating (LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    int attacker_dx = pkAttacker->GetPolymorphPoint (POINT_DX);
    int attacker_lv = pkAttacker->GetLevel();

    int victim_dx = pkVictim->GetPolymorphPoint (POINT_DX);
    int victim_lv = pkAttacker->GetLevel();

    iARSrc = MIN (90, (attacker_dx * 4 + attacker_lv * 2) / 6);
    iERSrc = MIN (90, (victim_dx   * 4 + victim_lv   * 2) / 6);

    float fAR = ((float) iARSrc + 210.0f) / 300.0f;   // fAR = 0.7 ~ 1.0
    if (bIgnoreTargetRating)
    {
        return fAR;
    }

    float fER = ((float) (iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;
    return fAR - fER;
}

AttackRating'in hesaplandığı fonksiyonda formülün hesaplanması için 4 tane bilgi lazım hepsi int olarak (neden mesela, bu da farklı bir soru 😅) tanımlanmış, buraya kadar her şey normal, son tanımlamada saldırıya uğrayan tarafın level bilgisini almak gerekiyor ama bilin bakalım kimin leveliyle hesaplama yapılıyor, saldırganın seviyesini kullanıyorsunuz. :ROFLMAO: Zaten doğal olarak mob_proto içerisinde level kısmı 1'den aşağıya ayarlı herhangi bir entity yok, 0 gelmesi riski yüzünden bunu yaptılar desem alakasız ve saçma olacak o yüzden bu şıkkı eledim, aklıma başka bir şeyde gelmedi. Bunu neden bu şekilde bıraktıklarını gerçekten merak ediyorum keşke sorma şansım olsaydı, ayrıca güncel olarak paylaşılan pek çok projeden de kontrol ettim kimsenin dikkatini çekmemiş, bu da enteresan geldi.

Eğer bir sebebi varsa demek ki bunu anlayacak kapasite bende yok çünkü gerçekten durup düşündüm ve bulamadım 😅, eğer yoksa bunca yıl hem kendilerinin hem de dosyaları kullanan bu kadar insanın fark etmemiş olma ihtimali inanılmaz bir olasılık, olması gerektiği gibi düzeltip deneyeceğim bir sıkıntı olursa -ki sanmıyorum- tekrar yorum yaparım.
int victim_lv = pkAttacker->GetLevel();
Bence dalgınlıktan böyle yazılmış olabilir. Daha sonra da kimsenin dikkatini çekmemiştir.

int victim_lv = pkVictim->GetLevel();
Bu şekilde değiştirip denediniz mi?
 
Hepinizin yüreğine sağlık ♥️ Yorumlarınızı dikkat ve zevkli bir şekilde okudum.+2000'lerin bir oyunu olan Metin2'nin okadar hata ve yapılmış yanlışlarını bizlere bilgilendirdiğiniz için hepinize teşekkür ediyorum 👏👏👏👏
 
İnanılmaz bir oyun, yıllarca dosyalarla uğraşsanız bile hala yeni şeyler (saçmalıklar demeye dilim varmadı) keşfedebiliyorsunuz, ufak bir yolculukla battle.cpp dosyasına bir yolculuk yapalım;

battle.cpp:
Genişlet Daralt Kopyala
float CalcAttackRating (LPCHARACTER pkAttacker, LPCHARACTER pkVictim, bool bIgnoreTargetRating)
{
    int iARSrc;
    int iERSrc;

    int attacker_dx = pkAttacker->GetPolymorphPoint (POINT_DX);
    int attacker_lv = pkAttacker->GetLevel();

    int victim_dx = pkVictim->GetPolymorphPoint (POINT_DX);
    int victim_lv = pkAttacker->GetLevel();

    iARSrc = MIN (90, (attacker_dx * 4 + attacker_lv * 2) / 6);
    iERSrc = MIN (90, (victim_dx   * 4 + victim_lv   * 2) / 6);

    float fAR = ((float) iARSrc + 210.0f) / 300.0f;   // fAR = 0.7 ~ 1.0
    if (bIgnoreTargetRating)
    {
        return fAR;
    }

    float fER = ((float) (iERSrc * 2 + 5) / (iERSrc + 95)) * 3.0f / 10.0f;
    return fAR - fER;
}

AttackRating'in hesaplandığı fonksiyonda formülün hesaplanması için 4 tane bilgi lazım hepsi int olarak (neden mesela, bu da farklı bir soru 😅) tanımlanmış, buraya kadar her şey normal, son tanımlamada saldırıya uğrayan tarafın level bilgisini almak gerekiyor ama bilin bakalım kimin leveliyle hesaplama yapılıyor, saldırganın seviyesini kullanıyorsunuz. :ROFLMAO: Zaten doğal olarak mob_proto içerisinde level kısmı 1'den aşağıya ayarlı herhangi bir entity yok, 0 gelmesi riski yüzünden bunu yaptılar desem alakasız ve saçma olacak o yüzden bu şıkkı eledim, aklıma başka bir şeyde gelmedi. Bunu neden bu şekilde bıraktıklarını gerçekten merak ediyorum keşke sorma şansım olsaydı, ayrıca güncel olarak paylaşılan pek çok projeden de kontrol ettim kimsenin dikkatini çekmemiş, bu da enteresan geldi.

Eğer bir sebebi varsa demek ki bunu anlayacak kapasite bende yok çünkü gerçekten durup düşündüm ve bulamadım 😅, eğer yoksa bunca yıl hem kendilerinin hem de dosyaları kullanan bu kadar insanın fark etmemiş olma ihtimali inanılmaz bir olasılık, olması gerektiği gibi düzeltip deneyeceğim bir sıkıntı olursa -ki sanmıyorum- tekrar yorum yaparım.
Hocam ben böyle kıyıda köşede kalmış mmorpgleri severim zamanında izlediğim youtube videosunda bir çeşit bonus vardı, saldırgan saldırdığı kimsenin levelını belirli süre boyunca azalta biliyordu levelı eksiye düşen oyuncular eksi levelın yüzdesi kadar fazla hasar yiyorlardı, belki böyle bir şey geçmiştir akıllarından ama geçmemiş olma ihtimali yüzde 99.
 
YMIR'den çok faydalı bir satır içi not alma örneği

C++:
Genişlet Daralt Kopyala
    // SCRIPT_SELECT_ITEM
    HEADER_CG_SCRIPT_SELECT_ITEM   = 114,
    // END_OF_SCRIPT_SELECT_ITEM
her düzenleme için define kullanmayıp böyle yapmışlardır herhalde
 
int victim_lv = pkAttacker->GetLevel();
Bence dalgınlıktan böyle yazılmış olabilir. Daha sonra da kimsenin dikkatini çekmemiştir.

int victim_lv = pkVictim->GetLevel();
Bu şekilde değiştirip denediniz mi?

Denedim, yorumu yazdığım vakitten beri o şekilde kullanıyorum her şey normal, olması gerektiği gibi düzenleyebilir herkes.

Hocam ben böyle kıyıda köşede kalmış mmorpgleri severim zamanında izlediğim youtube videosunda bir çeşit bonus vardı, saldırgan saldırdığı kimsenin levelını belirli süre boyunca azalta biliyordu levelı eksiye düşen oyuncular eksi levelın yüzdesi kadar fazla hasar yiyorlardı, belki böyle bir şey geçmiştir akıllarından ama geçmemiş olma ihtimali yüzde 99.

Yüzde 99 kısmını 100 yapabiliriz bence 😅, yanlış yazılmış fakat hesaplamada çok büyük farklılık yaratmadığı için muhtemelen hiç göze batmadı, hiç fark edilmemiş olması garip.
 
Denedim, yorumu yazdığım vakitten beri o şekilde kullanıyorum her şey normal, olması gerektiği gibi düzenleyebilir herkes.



Yüzde 99 kısmını 100 yapabiliriz bence 😅, yanlış yazılmış fakat hesaplamada çok büyük farklılık yaratmadığı için muhtemelen hiç göze batmadı, hiç fark edilmemiş olması garip.
Faydalı yorumlar, ve düşünceleriniz çok hoş gerçekten okurken bi hayli güldüğüm yerler oluyor. Faydalandığımız kısımlarda tabi, ama şunu unutmamak gerek 2004de işletim sistemleri bile sıkıntılıyken yazılan bir oyun için çok fazlamı eleştiriliyor acaba 😂😂.
Çünkü şuan yazdıklarınız 5 10 yıl sonra geliştiren kalırmı bilmem ama o zaman c++ kütüphaneleri güncellendiğinde kod kullanımları değiştiğinde eski ve mantıksız gelecek.
Misal örneğim doğru olur mu bilemedim ama söyldğim şeyi anlamanız için diyorum.
Mesela auto_ptr olan yapıları güncel dillerde unique_ptr olarak kullanıyoruz, gibi gibi...
 
Faydalı yorumlar, ve düşünceleriniz çok hoş gerçekten okurken bi hayli güldüğüm yerler oluyor. Faydalandığımız kısımlarda tabi, ama şunu unutmamak gerek 2004de işletim sistemleri bile sıkıntılıyken yazılan bir oyun için çok fazlamı eleştiriliyor acaba 😂😂.
Çünkü şuan yazdıklarınız 5 10 yıl sonra geliştiren kalırmı bilmem ama o zaman c++ kütüphaneleri güncellendiğinde kod kullanımları değiştiğinde eski ve mantıksız gelecek.
Misal örneğim doğru olur mu bilemedim ama söyldğim şeyi anlamanız için diyorum.
Mesela auto_ptr olan yapıları güncel dillerde unique_ptr olarak kullanıyoruz, gibi gibi...
Bu yapılan ile anlattığınız şey bambaşka. Dediğin şey değişen şeyler yani yapılan hatanın bununla hiçbir alakası yok. Örneğin; ben basit bir metin2 ile ilgilenen birisiyim ama bu adamlar bu işin A-Z ye kadar herşeyi ile ilgilenmiş kişiler. Mesela eksiye inmeyen ve max alacağı değer 3 olan bir değişkene int tanımlamaları bunun anlattığınızla hiçbir alakası yok. Örneğin;

horse_rider.cpp

int delta = 0;

bu bir kişi loncadaysa +1 artar, eğer hem loncada hemde o loncanın lideriyse +1 daha artar yani 2 olur. 2 den daha öteye gitmeyen bir değişken için int tanımlamak ne kadar mantıklı. Ben daha bu kadar öğrenmemişken evet belki bende int tanımlıyordum çünkü gördüğüm ve mantığım kavradığı kadarıyla yapıyordum ve öğrenme gayretinde değildim. Ama bu adamlar da mı öyle yaptı sence?
 
Bu yapılan ile anlattığınız şey bambaşka. Dediğin şey değişen şeyler yani yapılan hatanın bununla hiçbir alakası yok. Örneğin; ben basit bir metin2 ile ilgilenen birisiyim ama bu adamlar bu işin A-Z ye kadar herşeyi ile ilgilenmiş kişiler. Mesela eksiye inmeyen ve max alacağı değer 3 olan bir değişkene int tanımlamaları bunun anlattığınızla hiçbir alakası yok. Örneğin;

horse_rider.cpp

int delta = 0;

bu bir kişi loncadaysa +1 artar, eğer hem loncada hemde o loncanın lideriyse +1 daha artar yani 2 olur. 2 den daha öteye gitmeyen bir değişken için int tanımlamak ne kadar mantıklı. Ben daha bu kadar öğrenmemişken evet belki bende int tanımlıyordum çünkü gördüğüm ve mantığım kavradığı kadarıyla yapıyordum. Ama bu adamlar da mı öyle yaptı sence?
long long tanımlayalım daha iyi olur veriler baya büyük
 
Bu yapılan ile anlattığınız şey bambaşka. Dediğin şey değişen şeyler yani yapılan hatanın bununla hiçbir alakası yok. Örneğin; ben basit bir metin2 ile ilgilenen birisiyim ama bu adamlar bu işin A-Z ye kadar herşeyi ile ilgilenmiş kişiler. Mesela eksiye inmeyen ve max alacağı değer 3 olan bir değişkene int tanımlamaları bunun anlattığınızla hiçbir alakası yok. Örneğin;

horse_rider.cpp

int delta = 0;

bu bir kişi loncadaysa +1 artar, eğer hem loncada hemde o loncanın lideriyse +1 daha artar yani 2 olur. 2 den daha öteye gitmeyen bir değişken için int tanımlamak ne kadar mantıklı. Ben daha bu kadar öğrenmemişken evet belki bende int tanımlıyordum çünkü gördüğüm ve mantığım kavradığı kadarıyla yapıyordum. Ama bu adamlar da mı öyle yaptı sence?
Anlatmaya çalıştığım şey, o anki durumları bilmiyoruz, senior devlerin yapıp içini juniorlara mı doldurttular yoksa stajyer bulup bütün işi onamı kitledir. Bilmiyoruz. 😂😂 Bu tarz bişeyden bahsetmeye çalıştım. Mesela o zaman bu kadar değişken yoksa sadece tüm sayılar için int vs. Varsa 😅😅 sallıyorum bu arada....
 
Normalde yazarın yaptığı birden fazla hata var, level int tanımlı ve max lonca leveli 20, bu durumda level'in 0'dan az veya 20'den fazla (veya eşit) olmaması gerekir (bu fonksiyonun devreye girmesi için) bunu engellemek için kontrol koymuş ama "yada" operatörü yerine "ve" operatörü kullanmış yani bu kontrol eğer level 0'dan düşükse "ve" level 20'ye eşit veya 20'den yüksekse devreye girecek, yani bunun olma ihtimali yok çünkü level aynı anda hem 0'dan düşük hem de 20'den yüksek olamaz, aslında burada "yada(||)" operatörü kullanması gerekiyordu fakat yanlış yazmış. Ama burada ana problem farklı;

Sadece 20 seviye olabilecek bir veriye int tanımlamış yani 0'ın altında değer alabilir daha sonra bunu engellemek için kontrol koymuş onu da yanlış koymuş, benim eğitim hayatımda öğrendiğim stil mümkün olan en az kodu yazarak verilen işi yapmak üzerineydi o yüzden bu tarz durumlar çok absürt ve yanlış geliyor, bu veri tipi 0'ın altında olamaz değil mi mesela, tamam o zaman buna unsigned bir veri tipi tanımla böylece 0'ın altını kontrol etmene gerek kalmaz, int yerine unsigned short kullan mesela, problem bitti. Metin2'nin dev ekibinin ana olarak C dilinde profesyonel olan insanlardan oluştuğunu düşünüyorum, yazdıkları tüm fonksiyonlarda ezberlerini bozmayıp gerekli gereksiz demeden her şeyi int tanımlayıp geçmişler, bu nelere sebep oldu peki ? 0'ın altında değer almaması gereken fonksiyonlarda int tanımlayıp kontrol de eklemedikleri her yerde problem yaşattı, bir iki örnek; /war -111 açığı, /mob -1 açığı vs.

Bu sebeple siz siz olun yazdığınız sistemlerde de her zaman doğru veri tipini kullanın böylece hem daha az kod yazarsınız hem de hata şansınız azalır, sevgiler.
Şu bahsedilen kodları gördükçe ne düşünerek böyle kod yazdılar, bunları yazanlar hiç mi ileriyi düşünmez ? Onu geçtim bu kodlar yazıldıktan sonra hiç mi kontrol edilmiyor 😂 Cidden enteresan.
 
Faydalı yorumlar, ve düşünceleriniz çok hoş gerçekten okurken bi hayli güldüğüm yerler oluyor. Faydalandığımız kısımlarda tabi, ama şunu unutmamak gerek 2004de işletim sistemleri bile sıkıntılıyken yazılan bir oyun için çok fazlamı eleştiriliyor acaba 😂😂.
Çünkü şuan yazdıklarınız 5 10 yıl sonra geliştiren kalırmı bilmem ama o zaman c++ kütüphaneleri güncellendiğinde kod kullanımları değiştiğinde eski ve mantıksız gelecek.
Misal örneğim doğru olur mu bilemedim ama söyldğim şeyi anlamanız için diyorum.
Mesela auto_ptr olan yapıları güncel dillerde unique_ptr olarak kullanıyoruz, gibi gibi...

Sene ile alakası olmadığını rahatlıkla söyleyebiliriz, aynı yıllarda geliştirilen ve aynı yılda piyasaya çıkan WoW gibi bir şaheser var mesela, kaynak kodları sızdırılmış aynı dönemlere hatta daha eski yıllara ait bir çok oyun var, kodlarını ve yapılarını inceleyin demek istediğimi anlayacaksınız. Durum imkansızlıklarla, eskiden olmayıp da şimdi olan özelliklerle alakalı değil kesinlikle, Ymir iki senior devi hariç oldukça kötü bir ekip ile bu oyunu geliştirmiş, kod güvenliğinden ne kadar uzak olduğunu, ne kadar kötü pratikler kullandıklarını, ne kadar ezbere kaçtıklarını görmek mümkün, tabii bu söylediklerimin hepsi benim görüşüm onu da belirteyim. 😅

Şu bahsedilen kodları gördükçe ne düşünerek böyle kod yazdılar, bunları yazanlar hiç mi ileriyi düşünmez ? Onu geçtim bu kodlar yazıldıktan sonra hiç mi kontrol edilmiyor 😂 Cidden enteresan.

Çok fazla haşır neşir olduktan sonra sorgulamayı bırakıyorsunuz. :ROFLMAO:
 
Geri
Üst