ikarus v2 ultimate

  • Konuyu açan Konuyu açan afitap92
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 46
  • Gösterim Gösterim 2K
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Mainline'da çalıştırabildim. Henüz testlerini yapmadım.
1728837765767.webp
 
Çok üstün körü olacak şekilde inceledim, kodlar güncel muhtemelen C++20 altı desteklemeyecektir, pazar yeniden konumlandırma, pazar içeriğini fiyatlarını vs. düzenlerken pazarın veya envanterin kilitlenmemesi, auction sistemi aklımda soru işareti bırakan yerler oldu onun dışında çok güzel iş, muhtemelen warez olmuş en iyi offshop sistemi.


Kanıt, bu da videosu daha detaylı izleyebilirsiniz.


Pazarı tekrar konumlandırma ve auction'u es geçebilirim ama düzenleme esnasında kilit olmaması bir offline shop için önemli bir eksiklik bence. Ama küçük birkaç düzenleme ile bu eksiklik giderilebilir tabi.
 
kod yapısı c++20 ve mainline kullanan arkadaşlar için bir kaç eksik bırakacağım

extern olarak ekler kısmındakini indirip include içine atabilirbilirsiniz

common/item_length.h:
Genişlet Daralt Kopyala
// kendi bloğunu buna göre düzenle

enum EItemMisc
{
    ITEM_NAME_MAX_LEN            = 24,
    ITEM_VALUES_MAX_NUM            = 6,
    ITEM_SMALL_DESCR_MAX_LEN    = 256,
    ITEM_LIMIT_MAX_NUM            = 2,
    ITEM_APPLY_MAX_NUM            = 3,
    ITEM_SOCKET_MAX_NUM            = 3,
    ITEM_MAX_COUNT                = 200,

    ITEM_ATTRIBUTE_NORM_NUM        = 5,
    ITEM_ATTRIBUTE_RARE_NUM        = 2,

    ITEM_ATTRIBUTE_NORM_START    = 0,
    ITEM_ATTRIBUTE_NORM_END        = ITEM_ATTRIBUTE_NORM_START + ITEM_ATTRIBUTE_NORM_NUM,

    ITEM_ATTRIBUTE_RARE_START    = ITEM_ATTRIBUTE_NORM_END,
    ITEM_ATTRIBUTE_RARE_END        = ITEM_ATTRIBUTE_RARE_START + ITEM_ATTRIBUTE_RARE_NUM,

    ITEM_ATTRIBUTE_MAX_NUM        = ITEM_ATTRIBUTE_RARE_END, // 7


    ITEM_ATTRIBUTE_MAX_LEVEL    = 5,
    ITEM_AWARD_WHY_MAX_LEN        = 50,

    REFINE_MATERIAL_MAX_NUM        = 5,

    ITEM_ELK_VNUM                = 50026,
};
common/stl.h:
Genişlet Daralt Kopyala
//kontrol edersiniz eksikse eklersiniz

inline std::string FormatNumberWithDots(long long number) {
    std::string result;
    bool isNegative = false;

    // Handle the case for negative numbers
    if (number < 0) {
        isNegative = true;
        number = -number; // Make it positive for processing
    }

    // Convert the number to a string
    std::string numStr = std::to_string(number);

    // Insert dots from the right every three digits
    int count = 0;
    for (int i = numStr.size() - 1; i >= 0; --i) {
        result.push_back(numStr[i]);
        if (++count == 3 && i > 0) {
            result.push_back('.');
            count = 0;
        }
    }

    // Reverse the result string to get the correct order
    std::reverse(result.begin(), result.end());

    // Add the negative sign if necessary
    if (isNegative) {
        result.insert(result.begin(), '-');
    }

    return result;
}

dbsrc/perbase.h
C++:
Genişlet Daralt Kopyala
arat
/*    void        EncodeBYTE(BYTE b);
    void        EncodeWORD(WORD w);
    void        EncodeDWORD(DWORD dw);
    void        Encode(const void* data, DWORD size);
    int        Send();
 
*///altına ekle
    template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
    void Encode(const T& c_pvData) {
        Encode(&c_pvData, sizeof(T));
    }
    template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
    void Encode(const C& v) {
        Encode(v.data(), v.size() * sizeof(typename C::value_type));
    }

game/buffer_manager.h:
Genişlet Daralt Kopyala
#ifndef __INC_METIN_II_GAME_BUFFER_MANAGER_H__
#define __INC_METIN_II_GAME_BUFFER_MANAGER_H__
#include "../../common/stl.h"

class TEMP_BUFFER
{
    public:
        TEMP_BUFFER(int Size = 8192, bool ForceDelete = false );
        ~TEMP_BUFFER();

        const void *     read_peek();

        template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
        void write(const T& c_pvData) {
            write(&c_pvData, sizeof(T));
        }
        template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
        void write(const C& v) {
            write(v.data(), v.size() * sizeof(typename C::value_type));
        }

        void        write(const void * data, int size);
        int        size();
        void    reset();

        LPBUFFER    getptr() { return buf; }

    protected:
        LPBUFFER    buf;
        bool        forceDelete;
};

#endif
// vaffanculo a chi t'e morto martysama


kaptanyosun'a teşekkürler
game/ikarus_shop_manager.cpp:
Genişlet Daralt Kopyala
//ekle

#undef max
#undef min

game/desc.h:
Genişlet Daralt Kopyala
// arat

        void            BufferedPacket (const void* c_pvData, int iSize);
        void            Packet (const void* c_pvData, int iSize);
        void            LargePacket (const void* c_pvData, int iSize);

//üstüne ekle

        template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
        void BufferedPacket(const T& c_pvData) {
            BufferedPacket(&c_pvData, sizeof(T));
        }
        template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
        void BufferedPacket(const C& v) {
            BufferedPacket(v.data(), v.size() * sizeof(typename C::value_type));
        }

        template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
        void Packet(const T& c_pvData) {
            Packet(&c_pvData, sizeof(T));
        }
        template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
        void Packet(const C& v) {
            Packet(v.data(), v.size() * sizeof(typename C::value_type));
        }

        template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
        void LargePacket(const T& c_pvData) {
            LargePacket(&c_pvData, sizeof(T));
        }
        template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
        void LargePacket(const C& v) {
            LargePacket(v.data(), v.size() * sizeof(typename C::value_type));
        }

        template<typename T, std::enable_if_t<utils::IsRawV<T>>* = nullptr>
        void RawPacket(const T& c_pvData) {
            RawPacket(&c_pvData, sizeof(T));
        }
        template<typename C, std::enable_if_t<utils::IsContiguousV<C>>* = nullptr>
        void RawPacket(const C& v) {
            RawPacket(v.data(), v.size() * sizeof(typename C::value_type));
        }

not: martysama 5.8'den alıntıdır
 

Dosya Eklentileri

Son düzenleme:
@Kaptan Yosun

ikarus_shop_manager.cpp
de 522. bloğu nasıl düzenlediniz biraz fikir verebilirmisiniz ?

Adsız.webp


2.webp
 
Pazarı tekrar konumlandırma ve auction'u es geçebilirim ama düzenleme esnasında kilit olmaması bir offline shop için önemli bir eksiklik bence. Ama küçük birkaç düzenleme ile bu eksiklik giderilebilir tabi.
Kesinlikle, normalde pek çok sistem için bunu söylemem ama eğer offline pazar sistemi yapıyorsanız official sunucu da WebZen ne yapmış, ona bakıp aynı kontrolleri eklemek lazım, pazar düzenlenirken kesinlikle hem pazar hem envanter kitlenmeli.

Shop baya güzel gönlümden bir rework geçiyor ama hem çok vakit alır, hem de warez bir iş olduğu için sahibine ayıp olacağı için pek içime sinmedi.
 
Kesinlikle, normalde pek çok sistem için bunu söylemem ama eğer offline pazar sistemi yapıyorsanız official sunucu da WebZen ne yapmış, ona bakıp aynı kontrolleri eklemek lazım, pazar düzenlenirken kesinlikle hem pazar hem envanter kitlenmeli.

Shop baya güzel gönlümden bir rework geçiyor ama hem çok vakit alır, hem de warez bir iş olduğu için sahibine ayıp olacağı için pek içime sinmedi.
mt2dev offline shop elbet bir gün gelecek...
 
Kod:
Genişlet Daralt Kopyala
1    d:/ymir work/npc2/privateshop_1    privateshop_1
2    d:/ymir work/npc2/privateshop_2    privateshop_2
3    d:/ymir work/npc2/privateshop_3    privateshop_3
4    d:/ymir work/npc2/privateshop_4    privateshop_4
5    d:/ymir work/npc2/privateshop_5    privateshop_5
6    d:/ymir work/npc2/privateshop_6    privateshop_6
7    d:/ymir work/npc2/privateshop_7    privateshop_7

bu dosyalar eksik :) elinde olan varmı ?

buldum great saolsun :D
 

Dosya Eklentileri

Son düzenleme:
item arama kısmında itemin ismiyle aradıgım zaman çıkmıyor kontrol edebilicek varmı? eklemiş olanlardan
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst