- Katılım
- 24 May 2018
- Konular
- 35
- Mesajlar
- 64
- Online süresi
- 16d 13h
- Reaksiyon Skoru
- 89
- Altın Konu
- 0
- TM Yaşı
- 8 Yıl 17 Gün
- Başarım Puanı
- 97
- Yaş
- 34
- MmoLira
- 8,533
- DevLira
- 75
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!
Kod:
ACMD(do_item_new) // Nowa funkcja by: Muchomor
{
char arg1[256], arg2[256], arg3[256];
three_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2), arg3, sizeof(arg3));
if (!*arg1)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Usage: item <item vnum> <item count> <times to spawn>");
return;
}
int iCount = 1;
int iTimes = 1;
if (*arg2)
{
str_to_number(iCount, arg2);
iCount = MINMAX(1, iCount, g_bItemCountLimit);
}
if (*arg3)
{
str_to_number(iTimes, arg3);
iTimes = MAX(1, iTimes);
}
DWORD dwVnum;
std::pair<DWORD, DWORD> vnumRange;
std::vector<std::string> v_range;
std::string sRange(arg1);
boost::split(v_range, sRange, boost::is_any_of("-"));
if (v_range.size() < 2)
{
if (isnhdigit(*arg1))
{
str_to_number(dwVnum, arg1);
if (!ITEM_MANAGER::instance().GetTable_NEW(dwVnum))
{
ch->ChatPacket(CHAT_TYPE_INFO, "#%u item does not exist by that vnum.", dwVnum);
return;
}
else
{
vnumRange = std::make_pair(dwVnum, dwVnum);
}
}
else
{
if (!ITEM_MANAGER::instance().GetVnum(arg1, dwVnum))
{
ch->ChatPacket(CHAT_TYPE_INFO, "#%u item does not exist by that vnum(%s).", dwVnum, arg1);
return;
}
else
{
vnumRange = std::make_pair(dwVnum, dwVnum);
}
}
}
else
{
try
{
vnumRange = std::make_pair(std::stoul(v_range[0], NULL, 10), std::stoul(v_range[1], NULL, 10));
if (vnumRange.first > vnumRange.second)
{
std::swap(vnumRange.first, vnumRange.second);
}
}
catch (...)
{
ch->ChatPacket(CHAT_TYPE_INFO, "Invalid range! To use range feature type following syntax: ID-ID.");
return;
}
}
for (unsigned int i = vnumRange.first; i <= vnumRange.second; i++)
{
for (int j = 0; j < iTimes; j++)
{
LPITEM item = ITEM_MANAGER::instance().CreateItem(i, iCount, 0, true);
if (item)
{
if (item->IsDragonSoul())
{
int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
if (!ch->DragonSoul_IsQualified())
{
ch->ChatPacket(CHAT_TYPE_INFO, "ŔÎşĄŔĚ Č°ĽşČ µÇÁö ľĘŔ˝.");
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
}
else
{
int iEmptyPos = ch->GetEmptyInventory(item->GetSize());
if (iEmptyPos != -1)
{
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
}
else
{
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
}
else
{
ch->ChatPacket(CHAT_TYPE_INFO, "#%u item does not exist by that vnum.", dwVnum);
}
}
}
}
En Çok Reaksiyon Alan Mesajlar
Burada farklı bir yapı yok. Oyunun 10 yıl önce sızdırılan dosyalarındaki yapının aynısı ve korkunç.[CODE lang="cpp" title="kontrol 1"]if (item->IsDragonSoul()) {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
} else {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
}
[/CODE]
[CODE lang="cpp" title="kod 2"]} else {
// ...
if (iEmptyPos != -1) {
// ...
} else {
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
[/CODE]
Burdaki envanter kontrolleri beğendim, paylaşım için teşekkürler kendime yazdığım event sisteminde de benzer bir şeyler kullanacağım. Bilgi için de teşekkürler.
Bu yapıda sürekli olarak kullanılmayan eşyalar yaratılıp bellekten siliniyor ve çıkış yok. Bunun yerine proto'daki size ile eşya yaratmadan boş slot arayabilirsin.
Bunu kullanmak istiyorsan envanter doluysa break at. Yoksa dolu envantere eşya almaya çalışmaya devam eder. GM komutu olduğu için verilmeyen eşyalar dert değil.
Thanks for share.
- Katılım
- 5 Ocak 2020
- Konular
- 151
- Mesajlar
- 893
- Çözüm
- 16
- Online süresi
- 10mo 23d
- Reaksiyon Skoru
- 401
- Altın Konu
- 0
- Başarım Puanı
- 188
- MmoLira
- 10,952
- DevLira
- 84
[CODE lang="cpp" title="kontrol 1"]if (item->IsDragonSoul()) {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
} else {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
}
[/CODE]
[CODE lang="cpp" title="kod 2"]} else {
// ...
if (iEmptyPos != -1) {
// ...
} else {
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
[/CODE]
Burdaki envanter kontrolleri beğendim, paylaşım için teşekkürler kendime yazdığım event sisteminde de benzer bir şeyler kullanacağım. Bilgi için de teşekkürler.
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
} else {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
}
[/CODE]
[CODE lang="cpp" title="kod 2"]} else {
// ...
if (iEmptyPos != -1) {
// ...
} else {
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
[/CODE]
Burdaki envanter kontrolleri beğendim, paylaşım için teşekkürler kendime yazdığım event sisteminde de benzer bir şeyler kullanacağım. Bilgi için de teşekkürler.
- Katılım
- 29 Eyl 2009
- Konular
- 1,298
- Mesajlar
- 18,700
- Çözüm
- 203
- Online süresi
- 7mo 19h
- Reaksiyon Skoru
- 9,275
- Altın Konu
- 377
- Başarım Puanı
- 426
- Yaş
- 32
- MmoLira
- 51,348
- DevLira
- 74
Burada farklı bir yapı yok. Oyunun 10 yıl önce sızdırılan dosyalarındaki yapının aynısı ve korkunç.[CODE lang="cpp" title="kontrol 1"]if (item->IsDragonSoul()) {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
} else {
// ...
if (iEmptyPos != -1) {
item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
LogManager::instance().ItemLog(ch, item, "GM", item->GetName());
} else {
// ...
}
}
[/CODE]
[CODE lang="cpp" title="kod 2"]} else {
// ...
if (iEmptyPos != -1) {
// ...
} else {
M2_DESTROY_ITEM(item);
ch->ChatPacket(CHAT_TYPE_INFO, "Not enough inventory space.");
}
}
[/CODE]
Burdaki envanter kontrolleri beğendim, paylaşım için teşekkürler kendime yazdığım event sisteminde de benzer bir şeyler kullanacağım. Bilgi için de teşekkürler.
Bu yapıda sürekli olarak kullanılmayan eşyalar yaratılıp bellekten siliniyor ve çıkış yok. Bunun yerine proto'daki size ile eşya yaratmadan boş slot arayabilirsin.
Bunu kullanmak istiyorsan envanter doluysa break at. Yoksa dolu envantere eşya almaya çalışmaya devam eder. GM komutu olduğu için verilmeyen eşyalar dert değil.
Thanks for share.
- Katılım
- 13 Haz 2013
- Konular
- 182
- Mesajlar
- 2,499
- Çözüm
- 92
- Online süresi
- 3mo 20d
- Reaksiyon Skoru
- 1,662
- Altın Konu
- 2
- TM Yaşı
- 12 Yıl 12 Ay 3 Gün
- Başarım Puanı
- 284
- Yaş
- 28
- MmoLira
- 8,570
- DevLira
- 84
++Burada farklı bir yapı yok. Oyunun 10 yıl önce sızdırılan dosyalarındaki yapının aynısı ve korkunç.
Bu yapıda sürekli olarak kullanılmayan eşyalar yaratılıp bellekten siliniyor ve çıkış yok. Bunun yerine proto'daki size ile eşya yaratmadan boş slot arayabilirsin.
Bunu kullanmak istiyorsan envanter doluysa break at. Yoksa dolu envantere eşya almaya çalışmaya devam eder. GM komutu olduğu için verilmeyen eşyalar dert değil.
Thanks for share.
Ben de item'i verene kadar oluşturmanın mantıklı olduğunu düşünmüyorum,TItemTable'da kontrol etmeniz için yeterince veri var. Item oluşturulduktan sonra kontrollerde fonksiyon return'lenirse memory leak oluşacak. En son tüm kontrolleri geçtikten sonra item'i create edin ve create'den sonraki tek sorgu
if (!item) olmalı.
C++:
TItemTable* pTable = ITEM_MANAGER::instance().GetTable(dwVnum);
//item size
BYTE bSize = pTable->bSize;
- Katılım
- 5 Ocak 2020
- Konular
- 151
- Mesajlar
- 893
- Çözüm
- 16
- Online süresi
- 10mo 23d
- Reaksiyon Skoru
- 401
- Altın Konu
- 0
- Başarım Puanı
- 188
- MmoLira
- 10,952
- DevLira
- 84
Teşekkür ederim hocam yazılım ve özellikle mt2 içinde yazılımı kendi başıma youtube ve udemyden öğreniyorum dediğinizi dikkate alacağım.Burada farklı bir yapı yok. Oyunun 10 yıl önce sızdırılan dosyalarındaki yapının aynısı ve korkunç.
Bu yapıda sürekli olarak kullanılmayan eşyalar yaratılıp bellekten siliniyor ve çıkış yok. Bunun yerine proto'daki size ile eşya yaratmadan boş slot arayabilirsin.
Bunu kullanmak istiyorsan envanter doluysa break at. Yoksa dolu envantere eşya almaya çalışmaya devam eder. GM komutu olduğu için verilmeyen eşyalar dert değil.
Thanks for share.
Kardom bilgi için teşekkürler++
Ben de item'i verene kadar oluşturmanın mantıklı olduğunu düşünmüyorum,TItemTable'da kontrol etmeniz için yeterince veri var. Item oluşturulduktan sonra kontrollerde fonksiyon return'lenirse memory leak oluşacak. En son tüm kontrolleri geçtikten sonra item'i create edin ve create'den sonraki tek sorgu
if (!item) olmalı.
C++:TItemTable* pTable = ITEM_MANAGER::instance().GetTable(dwVnum); //item size BYTE bSize = pTable->bSize;
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 0
- Görüntüleme
- 275
- Cevaplar
- 6
- Görüntüleme
- 284
- Cevaplar
- 10
- Görüntüleme
- 939
- Cevaplar
- 12
- Görüntüleme
- 1K










