- Mesaj
- 871
- Çözümler
- 46
- Beğeni
- 991
- Puan
- 959
- Ticaret Puanı
- 0
Ö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.
Anlatım:
Not: Anlatımda yanlışlık yapmam ihtimaline karşılık regen.cpp ve regen.h dosyasını aşağıya ekliyorum.
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ı.
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ı.
Örnek bu videoya ben sadece ch2 ye sabitledim.
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/services.h:
#define ELISIA_REGEN_CHANNEL_SECTION // Bir ve ya birden fazla ch ye mob sabitleme
game/regen.h:
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:
// 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);
}
}