romegames 1
romegames
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
NovaLst 1
NovaLst
bikral 1
bikral
ShadowFon 1
ShadowFon
D 1
delimuratt
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

MaviAyGames | Tek Kanala Mob Sabitleme C++

MaviAy44

Emre Kırıcı
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Yönetici
Katılım
16 Tem 2019
Konular
715
Mesajlar
3,551
Çözüm
47
Online süresi
6mo 20d
Reaksiyon Skoru
2,110
Altın Konu
34
Başarım Puanı
309
MmoLira
19,559
DevLira
122
Ticaret - 100%
7   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Örneğin çöle bir boss sabitlerken tek kanal olması için çölü game99 a taşıyorduk. Ben bunu yapmak istemiyordum bu yüzden regen.cpp de birkaç değişiklik yaptım. Başlığa tek kanal yazdım ama istediğiniz kanala ayarlayabiliyorsunuz. Yani mobun sadece ch1 ve ch3 de çıkmasını kolaylıkla ayarlayabiliyorsunuz. Baştan söyleyeyim anlatması kod yazmasından daha zor.


Kullanımı:
Kod:
regen.txt dosyasında ki z kısmını sistem kullanmıyordu bende orayı ch ye çevirdim.
Bu kısmı;
Hiç değiştirmezseniz (0) bütün kanallarda çıkar.
1 yaparsanız sadece ch1
2 yaparsanız sadece ch2
4 yaparsanız sadece ch3
8 yaparsanız sadece ch4
16 yaparsanız sadece ch5
32 yaparsanız sadece ch6
1+2 yani 3 yaparsanız ch1 ve ch2
1+2+4 yani 7 yaparsanız ch1 ve ch2 ve ch3
1+4 yani 5 yaparsanız ch1 ve ch3
2+8 yani 10 yaparsanız ch2 ve ch4
Antiflag hesaplamayla aynı.



Anlatım:
Not: Anlatımda yanlışlık yapmam ihtimaline karşılık regen.cpp ve regen.h dosyasını aşağıya ekliyorum.

Common/ service.h
Kod:
#define ELISIA_REGEN_CHANNEL_SECTION // Bir ve ya birden fazla ch ye mob sabitleme

Game/regen.h​

Kod:
enum
{
    REGEN_TYPE_MOB,
    REGEN_TYPE_GROUP,
    REGEN_TYPE_EXCEPTION,
    REGEN_TYPE_GROUP_GROUP,
    REGEN_TYPE_ANYWHERE,
    REGEN_TYPE_MAX_NUM
};
// ALTINA EKLE

#ifdef ELISIA_REGEN_CHANNEL_SECTION
enum REGEN_CHANNEL
{
    REGEN_CHANNEL_CH1 = (1 << 0), // 1
    REGEN_CHANNEL_CH2 = (1 << 1), // 2
    REGEN_CHANNEL_CH3 = (1 << 2), // 4
    REGEN_CHANNEL_CH4 = (1 << 3), // 8
    REGEN_CHANNEL_CH5 = (1 << 4), // 16
    REGEN_CHANNEL_CH6 = (1 << 5), // 32
};
#endif

// typedef struct regen içerisinde ARAT
    bool    is_aggressive;
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
    DWORD channelFlag;
#endif
// typedef struct regen içerisinde ARAT
        is_aggressive(0),
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
        channelFlag(0),
#endif

Game/regen.cpp
Kod:
// static bool read_line(FILE *fp, LPREGEN regen) İÇİNDE ARAT
str_to_number(regen->z_section, szTmp);
// DEĞİŞTİR
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                str_to_number(regen->z_section, 0);
                str_to_number(regen->channelFlag, szTmp);
#else
                str_to_number(regen->z_section, szTmp);
#endif

// ARAT
static void regen_spawn(LPREGEN regen, bool bOnce)
// KOMPLE DEĞİŞTİR
static void regen_spawn(LPREGEN regen, bool bOnce)
{
    DWORD    num;
    DWORD    i;

    num = (regen->max_count - regen->count);

    if (!num)
        return;

    for (i = 0; i < num; ++i)
    {
        LPCHARACTER ch = NULL;

        if (regen->type == REGEN_TYPE_ANYWHERE)
        {
            ch = CHARACTER_MANAGER::instance().SpawnMobRandomPosition(regen->vnum, regen->lMapIndex);

            if (ch)
                ++regen->count;
        }
        else if (regen->sx == regen->ex && regen->sy == regen->ey)
        {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
            if (regen->channelFlag > 0)
            {
                if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                    || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                    || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                    || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                    || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                    || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                {
                    ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                        regen->lMapIndex,
                        regen->sx,
                        regen->sy,
                        regen->z_section,
                        false,
                        regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);
                    if (ch)
                        ++regen->count;
                }
            }
            else
            {
                ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

                if (ch)
                    ++regen->count;
            }
#else
            ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

            if (ch)
                ++regen->count;
#endif
        }
        else
        {
            if (regen->type == REGEN_TYPE_MOB)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION

                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);
                        if (ch)
                            ++regen->count;
                    }
                }
                else
                {
                    ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);

                    if (ch)
                        ++regen->count;
                }

#else
                ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive );

                if (ch)
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP)
            {

#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP_GROUP)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
        }

        if (ch && !bOnce)
            ch->SetRegen(regen);
    }
}
 
Son düzenleme:
Örneğin çöle bir boss sabitlerken tek kanal olması için çölü game99 a taşıyorduk. Ben bunu yapmak istemiyordum bu yüzden regen.cpp de birkaç değişiklik yaptım. Başlığa tek kanal yazdım ama istediğiniz kanala ayarlayabiliyorsunuz. Yani mobun sadece ch1 ve ch3 de çıkmasını kolaylıkla ayarlayabiliyorsunuz. Baştan söyleyeyim anlatması kod yazmasından daha zor.


Kullanımı:
Kod:
regen.txt dosyasında ki z kısmını sistem kullanmıyordu bende orayı ch ye çevirdim.
Bu kısmı;
Hiç değiştirmezseniz (0) bütün kanallarda çıkar.
1 yaparsanız sadece ch1
2 yaparsanız sadece ch2
4 yaparsanız sadece ch3
8 yaparsanız sadece ch4
16 yaparsanız sadece ch5
32 yaparsanız sadece ch6
1+2 yani 3 yaparsanız ch1 ve ch2
1+2+4 yani 7 yaparsanız ch1 ve ch2 ve ch3
1+4 yani 5 yaparsanız ch1 ve ch3
2+8 yani 10 yaparsanız ch2 ve ch4
Antiflag hesaplamayla aynı.



Anlatım:
Not: Anlatımda yanlışlık yapmam ihtimaline karşılık regen.cpp ve regen.h dosyasını aşağıya ekliyorum.

Common/ service.h
Kod:
#define ELISIA_REGEN_CHANNEL_SECTION // Bir ve ya birden fazla ch ye mob sabitleme

Game/regen.h​

Kod:
enum
{
    REGEN_TYPE_MOB,
    REGEN_TYPE_GROUP,
    REGEN_TYPE_EXCEPTION,
    REGEN_TYPE_GROUP_GROUP,
    REGEN_TYPE_ANYWHERE,
    REGEN_TYPE_MAX_NUM
};
// ALTINA EKLE

#ifdef ELISIA_REGEN_CHANNEL_SECTION
enum REGEN_CHANNEL
{
    REGEN_CHANNEL_CH1 = (1 << 0), // 1
    REGEN_CHANNEL_CH2 = (1 << 1), // 2
    REGEN_CHANNEL_CH3 = (1 << 2), // 4
    REGEN_CHANNEL_CH4 = (1 << 3), // 8
    REGEN_CHANNEL_CH5 = (1 << 4), // 16
    REGEN_CHANNEL_CH6 = (1 << 5), // 32
};
#endif

// typedef struct regen içerisinde ARAT
    bool    is_aggressive;
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
    DWORD channelFlag;
#endif
// typedef struct regen içerisinde ARAT
        is_aggressive(0),
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
        channelFlag(0),
#endif

Game/regen.cpp
Kod:
// static bool read_line(FILE *fp, LPREGEN regen) İÇİNDE ARAT
str_to_number(regen->z_section, szTmp);
// DEĞİŞTİR
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                str_to_number(regen->z_section, 0);
                str_to_number(regen->channelFlag, szTmp);
#else
                str_to_number(regen->z_section, szTmp);
#endif

// ARAT
static void regen_spawn(LPREGEN regen, bool bOnce)
// KOMPLE DEĞİŞTİR
static void regen_spawn(LPREGEN regen, bool bOnce)
{
    DWORD    num;
    DWORD    i;

    num = (regen->max_count - regen->count);

    if (!num)
        return;

    for (i = 0; i < num; ++i)
    {
        LPCHARACTER ch = NULL;

        if (regen->type == REGEN_TYPE_ANYWHERE)
        {
            ch = CHARACTER_MANAGER::instance().SpawnMobRandomPosition(regen->vnum, regen->lMapIndex);

            if (ch)
                ++regen->count;
        }
        else if (regen->sx == regen->ex && regen->sy == regen->ey)
        {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
            if (regen->channelFlag > 0)
            {
                if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                    || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                    || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                    || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                    || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                    || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                {
                    ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                        regen->lMapIndex,
                        regen->sx,
                        regen->sy,
                        regen->z_section,
                        false,
                        regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);
                    if (ch)
                        ++regen->count;
                }
            }
            else
            {
                ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

                if (ch)
                    ++regen->count;
            }
#else
            ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

            if (ch)
                ++regen->count;
#endif
        }
        else
        {
            if (regen->type == REGEN_TYPE_MOB)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION

                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);
                        if (ch)
                            ++regen->count;
                    }
                }
                else
                {
                    ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);

                    if (ch)
                        ++regen->count;
                }

#else
                ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive );

                if (ch)
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP)
            {

#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP_GROUP)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
        }

        if (ch && !bOnce)
            ch->SetRegen(regen);
    }
}

Teşekkürler
 
Paylaşım için teşekkürler
 
Herkesin işine yarar bu 👍
 
Örneğin çöle bir boss sabitlerken tek kanal olması için çölü game99 a taşıyorduk. Ben bunu yapmak istemiyordum bu yüzden regen.cpp de birkaç değişiklik yaptım. Başlığa tek kanal yazdım ama istediğiniz kanala ayarlayabiliyorsunuz. Yani mobun sadece ch1 ve ch3 de çıkmasını kolaylıkla ayarlayabiliyorsunuz. Baştan söyleyeyim anlatması kod yazmasından daha zor.


Kullanımı:
Kod:
regen.txt dosyasında ki z kısmını sistem kullanmıyordu bende orayı ch ye çevirdim.
Bu kısmı;
Hiç değiştirmezseniz (0) bütün kanallarda çıkar.
1 yaparsanız sadece ch1
2 yaparsanız sadece ch2
4 yaparsanız sadece ch3
8 yaparsanız sadece ch4
16 yaparsanız sadece ch5
32 yaparsanız sadece ch6
1+2 yani 3 yaparsanız ch1 ve ch2
1+2+4 yani 7 yaparsanız ch1 ve ch2 ve ch3
1+4 yani 5 yaparsanız ch1 ve ch3
2+8 yani 10 yaparsanız ch2 ve ch4
Antiflag hesaplamayla aynı.



Anlatım:
Not: Anlatımda yanlışlık yapmam ihtimaline karşılık regen.cpp ve regen.h dosyasını aşağıya ekliyorum.

Common/ service.h
Kod:
#define ELISIA_REGEN_CHANNEL_SECTION // Bir ve ya birden fazla ch ye mob sabitleme

Game/regen.h​

Kod:
enum
{
    REGEN_TYPE_MOB,
    REGEN_TYPE_GROUP,
    REGEN_TYPE_EXCEPTION,
    REGEN_TYPE_GROUP_GROUP,
    REGEN_TYPE_ANYWHERE,
    REGEN_TYPE_MAX_NUM
};
// ALTINA EKLE

#ifdef ELISIA_REGEN_CHANNEL_SECTION
enum REGEN_CHANNEL
{
    REGEN_CHANNEL_CH1 = (1 << 0), // 1
    REGEN_CHANNEL_CH2 = (1 << 1), // 2
    REGEN_CHANNEL_CH3 = (1 << 2), // 4
    REGEN_CHANNEL_CH4 = (1 << 3), // 8
    REGEN_CHANNEL_CH5 = (1 << 4), // 16
    REGEN_CHANNEL_CH6 = (1 << 5), // 32
};
#endif

// typedef struct regen içerisinde ARAT
    bool    is_aggressive;
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
    DWORD channelFlag;
#endif
// typedef struct regen içerisinde ARAT
        is_aggressive(0),
// ALTINA EKLE
#ifdef ELISIA_REGEN_CHANNEL_SECTION
        channelFlag(0),
#endif

Game/regen.cpp
Kod:
// static bool read_line(FILE *fp, LPREGEN regen) İÇİNDE ARAT
str_to_number(regen->z_section, szTmp);
// DEĞİŞTİR
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                str_to_number(regen->z_section, 0);
                str_to_number(regen->channelFlag, szTmp);
#else
                str_to_number(regen->z_section, szTmp);
#endif

// ARAT
static void regen_spawn(LPREGEN regen, bool bOnce)
// KOMPLE DEĞİŞTİR
static void regen_spawn(LPREGEN regen, bool bOnce)
{
    DWORD    num;
    DWORD    i;

    num = (regen->max_count - regen->count);

    if (!num)
        return;

    for (i = 0; i < num; ++i)
    {
        LPCHARACTER ch = NULL;

        if (regen->type == REGEN_TYPE_ANYWHERE)
        {
            ch = CHARACTER_MANAGER::instance().SpawnMobRandomPosition(regen->vnum, regen->lMapIndex);

            if (ch)
                ++regen->count;
        }
        else if (regen->sx == regen->ex && regen->sy == regen->ey)
        {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
            if (regen->channelFlag > 0)
            {
                if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                    || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                    || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                    || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                    || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                    || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                {
                    ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                        regen->lMapIndex,
                        regen->sx,
                        regen->sy,
                        regen->z_section,
                        false,
                        regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);
                    if (ch)
                        ++regen->count;
                }
            }
            else
            {
                ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

                if (ch)
                    ++regen->count;
            }
#else
            ch = CHARACTER_MANAGER::instance().SpawnMob(regen->vnum,
                    regen->lMapIndex,
                    regen->sx,
                    regen->sy,
                    regen->z_section,
                    false,
                    regen->direction == 0 ? number(0, 7) * 45 : (regen->direction - 1) * 45);

            if (ch)
                ++regen->count;
#endif
        }
        else
        {
            if (regen->type == REGEN_TYPE_MOB)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION

                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);
                        if (ch)
                            ++regen->count;
                    }
                }
                else
                {
                    ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive);

                    if (ch)
                        ++regen->count;
                }

#else
                ch = CHARACTER_MANAGER::Instance().SpawnMobRange(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, true, regen->is_aggressive, regen->is_aggressive );

                if (ch)
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP)
            {

#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
            else if (regen->type == REGEN_TYPE_GROUP_GROUP)
            {
#ifdef ELISIA_REGEN_CHANNEL_SECTION
                if (regen->channelFlag > 0)
                {
                    if ((g_bChannel == 1 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH1))
                        || (g_bChannel == 2 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH2))
                        || (g_bChannel == 3 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH3))
                        || (g_bChannel == 4 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH4))
                        || (g_bChannel == 5 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH5))
                        || (g_bChannel == 6 && IS_SET(regen->channelFlag, REGEN_CHANNEL_CH6)))
                    {
                        if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                            ++regen->count;
                    }
                }
                else
                {
                    if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                        ++regen->count;
                }

#else
                if (CHARACTER_MANAGER::Instance().SpawnGroupGroup(regen->vnum, regen->lMapIndex, regen->sx, regen->sy, regen->ex, regen->ey, bOnce ? NULL : regen, regen->is_aggressive))
                    ++regen->count;
#endif
            }
        }

        if (ch && !bOnce)
            ch->SetRegen(regen);
    }
}

Paylaşım için teşekkürler.
 

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

Geri
Üst