[DEV]AB 1
[DEV]AB
R 1
Roksam
mavzermete 1
mavzermete
Vahsi Uzman 1
Vahsi Uzman
Bodyguardd 1
Bodyguardd
Agresifizm 1
Agresifizm
Hikaye Ekle
Kaynak ikonu

[C++] Mob Drop Komut ile eşya düşürme / Simüle Etme 2025-06-05

indirmek için izniniz yok
📌 Sistemin Çalışma Mantığı

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ı]


GIF Link

201467b0513edda0f3b211fe1bc4d51b.gif


Ekten indirebilirisiniz.
Yada :
[CODE lang="cpp" title="Anlatim.cpp"]
*** Commondefines.h veya service.h *** Ekle:

#define ENABLE_CMD_DROP_ITEM #define //#defineile eşya düşürme

*** char.h *** :
//Ara :
void Reward(bool bItemDrop);

//Değiştir :

#ifdef ENABLE_CMD_DROP_ITEM
void #ifdefeward(bool bItemDrop, LPCHARACTER dropsystem #ifdefeward(bool void Reward(bool bItem#else;
#endif

**************************

*** char_battle#endif** :
// Ara :
void CHARACTER::Reward(bool bItemDrop)


// Değiştir :
#ifdef ENABLE_CMD_DROP_ITEM
void CHARACTER::Reward(bo#ifdefemDrop, LPCHARACTER dropsystem)
#else
void CHARACTER::Reward(bool bItemDrop)
#endif

#elsea :
LPCHARACTER pkAttacker = DistributeE#endif
/#elseatir :
#ifdef ENABLE_CMD_DROP_ITEM
LPCHARACTER pkAttacker;#ifdeff (dropsystem != NULL)
pkAttacker = dropsystem;
else
pkAttacker = DistributeExp();
#else
LPCHARACTER pkAttacker = DistributeExp();
#en#else
**************************

*** cmd.cpp *** :
#endifait Bir yere ekle :
#ifdef ENABLE_CMD_DROP_ITEM
A#endifaitb_drop);
#endif

#ifdeff:
{ "\n", NULL, 0, #endiff POS_DEAD, GM_IMPLEMENTOR }

// Üstüne Ekle#endifdef ENABLE_CMD_DROP_ITEM
{ "mob_drop", #ifdeffdrop, 0, POS_DEAD, GM_IMPLEMENTOR },
#endif


**************************

*** cmd_general.cpp #endiff/ Müsait Bir yere ekle :
#ifdef ENABLE_CMD_DROP_ITEM
ACMD(do_mob_drop)
{
if (!c#ifdeff 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[/CODE]#endif#endif
Yazar
DonuminikToretto
Kaynak İndirilme
4
Görüntüleme
68
İlk yayınlama
Son Güncelleme

Ratings

0.00 yıldız(lar) 0 rating
Geri
Üst