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!
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.
[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.
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.
++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;
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
- 288
- Cevaplar
- 6
- Görüntüleme
- 294
- Cevaplar
- 10
- Görüntüleme
- 961
- Cevaplar
- 12
- Görüntüleme
- 1K
