- Mesaj
- 234
- Çözümler
- 17
- Beğeni
- 65
- Puan
- 484
- Ticaret Puanı
- 0

✔ Tek tek yaratıkları veya metin taşlarını öldürmeden doğrudan onların düşürmesi gereken eşyaları almanı sağlar.
✔ Gerçek oyun mekanikleriyle çalışır, yani görevler, EXP, yang ve item dropları birebir gerçekçi olur.
✔ İster yaratık, ister metin taşı test et /mob_drop [vnum] [sayı]
Linkleri görebilmek için
giriş yap veya kayıt ol.

commondefines.h veya service.h Ekle:
#define ENABLE_CMD_DROP_ITEM // Komut ile eşya düşürme
char.h:
//Ara :
void Reward(bool bItemDrop);
//Değiştir :
#ifdef ENABLE_CMD_DROP_ITEM
void Reward(bool bItemDrop, LPCHARACTER dropsystem = NULL);
#else
void Reward(bool bItemDrop);
#endif
char_battle.cpp:
// Ara :
void CHARACTER::Reward(bool bItemDrop)
// Değiştir :
#ifdef ENABLE_CMD_DROP_ITEM
void CHARACTER::Reward(bool bItemDrop, LPCHARACTER dropsystem)
#else
void CHARACTER::Reward(bool bItemDrop)
#endif
// Ara :
LPCHARACTER pkAttacker = DistributeExp();
//Değiştir :
#ifdef ENABLE_CMD_DROP_ITEM
LPCHARACTER pkAttacker;
if (dropsystem != NULL)
pkAttacker = dropsystem;
else
pkAttacker = DistributeExp();
#else
LPCHARACTER pkAttacker = DistributeExp();
#endif
cmd.cpp:
// Müsait Bir yere ekle :
#ifdef ENABLE_CMD_DROP_ITEM
ACMD(do_mob_drop);
#endif
// Ara :
{ "\n", NULL, 0, POS_DEAD, GM_IMPLEMENTOR }
// Üstüne Ekle :
#ifdef ENABLE_CMD_DROP_ITEM
{ "mob_drop", do_mob_drop, 0, POS_DEAD, GM_IMPLEMENTOR },
#endif
cmd_general.cpp:
// Müsait Bir yere ekle :
#ifdef ENABLE_CMD_DROP_ITEM
ACMD(do_mob_drop)
{
if (!ch)
return;
char arg1[256], arg2[256];
two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
DWORD mobVnum = 0;
BYTE mobCount = 1, mobLimit = 100;
if (!*arg1)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob_drop <mob_vnum> <count>");
return;
}
str_to_number(mobVnum, arg1);
if (*arg2)
str_to_number(mobCount, arg2);
if (mobVnum <= 0 || mobCount <= 0)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Hata: Geçersiz VNUM veya öldürme sayısı!");
return;
}
if (mobCount > mobLimit)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Hata: Maksimum öldürme sayısı %d'dir.", mobLimit);
return;
}
long mapIndex = ch->GetMapIndex();
sys_log(0, "mob_drop: Spawning MobVNUM: %d at MapIndex: %ld (X: %d, Y: %d)",
mobVnum, mapIndex, ch->GetX(), ch->GetY());
int iKilled = 0;
for (int i = 0; i < mobCount; ++i)
{
LPCHARACTER mob = CHARACTER_MANAGER::instance().SpawnMob(mobVnum, mapIndex,
ch->GetX(), ch->GetY(), ch->GetZ());
if (!mob)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Hata: Mob/metin spawn edilemedi! (Mob VNUM: %d, MapIndex: %ld)", mobVnum, mapIndex);
sys_log(0, "mob_drop ERROR: Could not spawn mobVNUM: %d at MapIndex: %ld", mobVnum, mapIndex);
continue;
}
if (mob->IsStone())
{
sys_log(0, "mob_drop: Destroying Metin Taşı VNUM: %d", mobVnum);
mob->Reward(true, ch);
iKilled++;
}
else if (mob->IsMonster())
{
sys_log(0, "mob_drop: Killing Monster VNUM: %d", mobVnum);
mob->Reward(true, ch);
iKilled++;
}
M2_DESTROY_CHARACTER(mob);
}
ch->ChatPacket(CHAT_TYPE_INFO, "Başarıyla %d adet %d VNUM'lu yaratık/metin taşı öldürüldü!", iKilled, mobVnum);
}
#endif