Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...

PENTAGRAM

Üye
  • İçerik sayısı

    450
  • Katılım

  • Son ziyaret

  • Günün Kazananı

    10
  • Puan

    132 [ Bağış Yap ]

PENTAGRAM last won the day on Ekim 22

PENTAGRAM had the most liked content!

Topluluk Puanı

821 Mükemmel

PENTAGRAM Hakkında

Güncel Profil Ziyaretleri

Güncel ziyaretçiler bloku aktif değil. Diğer kullanıcılar son ziyaretçilerinizi aktif edene kadar göremezler.

  1. PENTAGRAM

    String Trim C++ using STL & Boost Library

    Söylediğin senaryo "copy ellision" olarak geçer, eğer func1 fonksiyon çağrısından sonra str kısmına verdiğin parametreye refer etmiyorsan geçerli. Copy ellision c++17 standardına kadar mandatory bir olay değil. Hatta c++17 standardında dahi bazı caseler dışında mandatory değil. Dolayısıyla derleyicinin optimizasyon ayarlarına ve derleyicinin yazdığın pattern'i ne kadar iyi algılayabildiğine kalıyor olay. Özetle; Overload 1'e gelen her stack değişkeni move edilerek geliyor diye bir kaide yok. Bunun yerine rvalue overloadını yazıp değişkeni explicit move ile almak daha mantıklı, eğer ki istenen buysa. Burada da 2. overloadda referans, alınan parametreye ise bir sıkıntı yok. Builder pattern'ında sıkça kullanılan bir durum. Diğer senaryolarda ise function-local olan variable thread_local veya static olarak declare edilmediyse "reference to temporary" durumuyla karşılaşırsın.
  2. `physical number` dan kastın nedir? donanımlara özgü seri numarası mı?
  3. PENTAGRAM

    Üst versiona civciv eklemek?

    Race değişikliği yok. Civciv olayı sadece player'in sahip olduğu bir flag değerine bakıyor. (bkz. myinfo ve userinfo) Üst versiyonda da hala mevcut bu flag değeri, true olarak gönderdiğiniz vakit karakterin nicki beyazlaşır ve civciv ikonu gözükür. Karakterden beginner(civciv) durumu kaldırılmak istendiğinde de state change paketi atılıyor. O state change paketi ile beraber firecracker efekti de otomatik tetikleniyor (civciv patlaması).
  4. PENTAGRAM

    Private Server Hukuki Yaptırım

    Mevzubahis firma artık Türkiye tabanlı çalıştığı ve burada resmi olarak bir şirketleri olduğu için yaptıkları satışları vergilendirmek durumundalar, aksi taktirde maliye tepelerine biner. Client ücretsiz, fakat atladığın bir nokta var o da EULA, yani son kullanıcı lisans sözleşmesi. Accept deyip geçtiğiniz bu sözleşmede, istemci üzerine herhangi bir tersine mühendislik tekniği uygulamayacağınıza dair sözleşme imzalıyorsunuz bir nevi. Türkiye'de bilişime dair sözleşmelerin tam anlamıyla anlaşılamamasından ötürü gereği yerine getirilemiyor hukuki merciler tarafından. Sunucu kaynak kodları da açık değil bu arada, mgame'ye ait leak edilen 1098 kaynak kodları, malezya ko'dan ve sohu'dan leak edilen server dosyaları ve veritabanı üzerinde mgame hak sahibi olduğundan ötürü bu dosyaları kullanan, reverse engineer edip paylaşan, üzerine anti hile sistemi yazan, hatta bunu pazarlayan (bkz: soacs) aslen hukuki olarak suç içerisinde. İşin özeti, Türkiye'deki bilişim hukukunun yeterince olgunlaşmamış olmasından ötürü herkes bu kadar rahat at koşturabiliyor. Aksi taktirde işler şuan olduğundan daha zor olurdu.
  5. PENTAGRAM

    Kütük savaşı içeri almıyor.

    İçeri almıyordan kastın, lunar gate'den giremiyorsan EVENT tablosunu kontrol et. Alakalı savaş zone'si için teleport eventi tanımlanmamış olabilir.
  6. PENTAGRAM

    Party Drop Sıkıntısı

    CUser::GetLootUser fonksiyonuna mesafe kontrolünü ekleyebilirsin. Düşen kutunun koordinatları _LOOT_BUNDLE içerisine aktarılıyor. struct _LOOT_BUNDLE { uint32 nBundleID; std::vector<_LOOT_ITEM> Items; float x, z, y;// kutunun düştüğü konum time_t tDropTime; }; Fonksiyonun imzası şu şekilde; CUser * CUser::GetLootUser(_LOOT_BUNDLE * pBundle, _LOOT_ITEM * pItem) İlerleyen kısımlarda isInParty ile başlayan kısıma şöyle bir düzeltme yapabilirsin; // If we're dealing with items: // - if we're in a party: // distribute the item to the next player in the party in round-robin fashion, // whilst ensuring that user can actually hold the item. // - if not in a party: // simply ensure that we can hold the item. if (isInParty()) { for(int i = 0; i < 8; i++){ auto pMember = GetItemRoutingUser(pItem->nItemID, pItem->sCount); if(pMember == nullptr || !pMember->isInRange(pBundle->x, pBundle->z, RANGE_50M)) continue; // This ensures the user can hold the item. return pMember; } return nullptr; // herkes uzakta, veya yakında olanların envanterleri dolu. } Yukarıdaki kodu kafadan taslak olarak yazdım, daha optimize bir şekilde yazılabilir. Buradaki GetItemRoutingUser, partideki sıradan çekilen, eşyanın gideceği kullanıcı. Kolay gelsin.
  7. Merhabalar, Sorunun düzelmiş olması gerek. Kontrol eder misin?
  8. PENTAGRAM

    Class hakkinda

    alakasız foruma sorduğun için :banned:
  9. PENTAGRAM

    Class hakkinda

    @ infiltrate, @ cryofsky rica ederim arkadaşlar. merak ettiğiniz daha farklı şeyler varsa, alakalı foruma konu açıp beni etiketlerseniz müsait olduğumda cevaplandırmaya çalışırım. iyi forumlar.
  10. PENTAGRAM

    Class hakkinda

    Farz edelim ki şu şekilde farazi bir class'ımız olsun. class musteri{ public: musteri(std::string isim, std::string soyisim, int yas){ _isim = isim; _soyisim = soyisim; _yas = yas; } private: std::string _isim; std::string _soyisim; int _yas; }; 3 adet private, yani dışarıdan erişilemez değişkene sahip (_isim, _soyisim, _yas). Bu değişkenleri private yapmamızın sebebi, encapsulation, yani kapsülleme'dir. Sınıfın kendi içerisinde kullanacağı, dışarıdan kontrolsüz müdahale edilmesini istemediğimiz değişkenleri bu şekilde private olarak tanımlarız. Fakat biz, bu değişkenlere kısmi olarak erişim sağlamak isteyebiliriz, örneğin dışarıdan okunabilmesini, fakat değiştirilememesini isteyebiliriz. Değişkenimizi public yaparsak, hem okumaya hem yazmaya müsade etmiş oluruz, private yaparsak da dışarıdan okumayı da yazmayı da engellemiş oluruz. Get ve set methodları tam bu noktada devreye giriyor. _isim, _soyisim, _yas değişkenlerine sadece okuma erişimi sağlamak istiyorsak; class musteri{ public: musteri(std::string isim, std::string soyisim, int yas){ _isim = isim; _soyisim = soyisim; _yas = yas; } std::string & getIsim() { return _isim; } std::string & getSoyisim(){ return _soyisim;} int getYas() { return _yas;} private: std::string _isim; std::string _soyisim; int _yas; }; public olarak 3 tane yeni fonksiyon tanımladık. Bu fonksiyonlar, private olan değişkenlerin değerlerini döndürüyor. Bu sayede ben müşteri sınıfından bir obje yarattığımda; int main(void){ musteri ahmet("ahmet", "zurnaoglu", 45); printf("musteri : %s, %s, %d ", ahmet.getIsim().c_str(), ahmet.getSoyisim().c_str(), ahmet.getYas()); // derlenir, fonksiyonlar public. // ekrana musteri : ahmet zurnaoglu 45 yazar. ahmet._isim = "mehmett"; // derlenmez, değişken private. std::string si = ahmet._soyisim; // derlenmez, değişken private. } Aynı mantık ile, set fonksiyonları da, private olan değişkenleri dışarıdan değiştirebilmemize olanak tanıyor, ve ayrıca atanacak olan değerlere göre işlem yapabilmemize de olanak sağlıyor. Örneğin, müşteri'nin yaş değeri minimum 18, maksimum 70 olsun istiyoruz. Başka bir değer atanamasın istiyoruz. Veya, müşteri adı mehmet olamasın istiyoruz. O halde şu şekilde bir set methodu yazabiliriz; class musteri{ public: musteri(std::string isim, std::string soyisim, int yas){ _isim = isim; _soyisim = soyisim; _yas = yas; } bool setIsim(std::string deger){ if(deger.compare("mehmet") == 0) return false; _isim = deger; return true; } bool setYas(int deger) { if(deger < 18 || deger > 70) return false; _yas = deger; return true; } std::string & getIsim() { return _isim; } std::string & getSoyisim(){ return _soyisim;} int getYas() { return _yas;} private: std::string _isim; std::string _soyisim; int _yas; }; Örneklendirecek olursak; int main(void){ musteri ahmet("ahmet", "zurnaoglu", 45); printf("musteri : %s, %s, %d ", ahmet.getIsim().c_str(), ahmet.getSoyisim().c_str(), ahmet.getYas()); // derlenir, fonksiyonlar public. // ekrana musteri : ahmet zurnaoglu 45 yazar. ahmet.setIsim("mehmet"); ahmet.setYas(71); printf("musteri : %s, %s, %d ", ahmet.getIsim().c_str(), ahmet.getSoyisim().c_str(), ahmet.getYas()); // derlenir, fonksiyonlar public. // ekrana musteri : ahmet zurnaoglu 45 yazar. ahmet.setIsim("fevzi"); ahmet.setYas(55); printf("musteri : %s, %s, %d ", ahmet.getIsim().c_str(), ahmet.getSoyisim().c_str(), ahmet.getYas()); // derlenir, fonksiyonlar public. // ekrana musteri : fevzi zurnaoglu 55 yazar. } Son olarak, 'explicit' mevzusuna gelelim. Elimizde şöyle bir sınıf olduğunu varsayalım; class deneme { public: deneme(int n); deneme(const char *p); }; İlk yaratıcı fonksiyon, deneme objesi için n kadar yer ayırmaya yarıyor, 2. yaratıcı fonksiyon ise deneme objesini p değeri ile hazırlıyor. int main(void){ deneme z = 'c'; } Yukarıdaki kod bloğunda amacımız 2. yaratıcı fonksiyonu çağırıp objeye 'c' değerini atamak. Fakat derleyici, girmiş olduğumuz char değerini derleme esnasında int'e implicit olarak cast ederek 1. yaratıcı fonksiyonu çağırır. Böyle durumları engellemek adına, derleyicinin 1. yaratıcı fonksiyonu için cast etmemesini sağlamak için; class deneme { public: explicit deneme(int n); deneme(const char *p); }; 'explicit' etiketini ekliyoruz. Bu sayede derleyiciye : 'bu yaratıcı fonksiyon yalnızca ve yalnızca int alabilir. int'e dönüşebilecek türleri, otomatik olarak dönüştürme.' demiş oluruz. Yukarıdaki örneği tekrarlayacak olursak, bu sefer 2. yaratıcı fonksiyonun çağrıldığını gözlemleyebiliriz. Umarım yardımcı olabilmişimdir, kolay gelsin.
  11. PENTAGRAM

    Server yazilimi geliştirme

    Open source olmamak kaydıyla böyle bir oluşumu desteklerim. Şu anda @ OzkanOzdemir ile beraber hali hazırda yürüttüğümüz bir proje mevcut. Sunucu tarafı bitti sayılır, üzerine çalışılacak çok bir kısmı kaldığını düşünmüyorum. Dosyalar 4 yıllık aktif geliştirme geçmişi olan, stabilitesi ve performansı yüksek dosyalar. Anlatılacak çok şeyi var, planlama aşamasında izah ederim yeri geldiğinde. 2013'ten beri geliştirmesini ben üstleniyorum. Veritabanı motorunu postgresql'e geçirmek gibi planlarım var fakat henüz öncelik sıralamamda alt sıralarda. Amaç günün sonunda cross-platform desteği de sağlamak. Projenin istemci tarafına başlamayı düşünüyoruz, eğer isterseniz istemci üzerinde beraber çalışabiliriz. Projeyi bootstrap etmek adına yazdığım homegrown kütüphaneler ile hızlı bir development sürecine başlayabiliriz. İstemci tarafında gerçekleştirmek istediğim, high-level design'ı kafamda oturmuş bir çok konsept var. Bunları hep beraber tartışıp faz 1 için hedeflerimizi belirleyip işe koyulabiliriz. Şahsi fikrim, .net core veya diğer high-level geliştirme ortamları, real time performans gerektiren bu tür uygulamalarda optimizasyona çok müsait değil. Mesele bir uygulamanın 7-8k bağlantıyı kabul edebilmesi değil. Bu bağlantılardan gelen trafiğin boyutu, sıklığı ve verileri handle eden fonksiyonların kompleksiteleri, harcadıkları cpu cycle'ları önemli. Low level detayları programcıdan soyutlayan .net,java ailesi dillerde native performansı yakalamak çok mümkün değil. İstemci tarafında bu açıdan biraz daha rahat olacağımızı düşünüyorum, "right tool for the job" konsepti ile rahatlıkla ilerleyebiliriz. @ sharkdeed, @ trcod3r Skype adresim imzamda mevcut. Eklerseniz daha detaylı tartışabiliriz.
  12. Oyuncuyu disconnect etmene gerek yok. Premium paketini yeniden göndermen yeterli şu koşulda.
  13. Çince bilmiyorum ne yazık ki, çevirisini yapabilirsen neden olmasın.
×
×
  • Yeni Oluştur...