-TuRKuaZ- 1
-TuRKuaZ-
farkmt2official 1
farkmt2official
Sevdamsın 1
Sevdamsın
mavzermete 1
mavzermete
xranzei 1
xranzei
Best Studio 1
Best Studio
Hikaye Ekle

MaviAyGames | Tek Kanala Mob Sabitleme C++

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!

Ö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
 
Ö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