- Katılım
- 6 Kas 2021
- Mesajlar
- 2,765
- Tepkime puanı
- 4,157
- Puanları
- 113
- Yaş
- 31
- Konum
- Türkiye
- Dc
- fatihbulut
OfflineShop V2 sürümünde tespit edilen pazarların iç içe açılabilmesi sorunu giderilmiştir. Yeni güncelleme ile birlikte pazarlar arasında mesafe kontrolü eklenmiştir ve bu sayede sorun tamamen çözülmüştür.
ikarus_shop_manager.cpp:
gyazo.com
ikarus_shop_manager.cpp:
Kod:
// ARAT VE AŞAĞIDA Kİ İLE DEĞİŞTİR
void CShopManager::CreateShopEntity(SHOP_HANDLE shop)
C++:
#ifndef DISTANCE_APPROX
#define DISTANCE_APPROX(x, y) (abs(x) + abs(y))
#endif
void CShopManager::CreateShopEntity(SHOP_HANDLE shop)
{
auto& spawn = shop->GetSpawn();
// Karakter opsiyonel — sadece bilgi amaçlı
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(shop->GetOwnerPID());
if (auto sectree = SECTREE_MANAGER::Instance().Get(spawn.map, spawn.x, spawn.y))
{
long new_x = spawn.x;
long new_y = spawn.y;
bool conflict = true;
int max_try = 20;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(-150, 150);
while (conflict && max_try > 0)
{
conflict = false;
new_x = spawn.x + dis(gen);
new_y = spawn.y + dis(gen);
auto check_shops = [&](LPENTITY ent)
{
if (ent->IsType(ENTITY_NEWSHOPS))
{
if (DISTANCE_APPROX(ent->GetX() - new_x, ent->GetY() - new_y) < 100)
conflict = true;
}
};
sectree->ForEachAround(check_shops);
--max_try;
}
if (conflict)
{
if (ch)
ch->ChatPacket(CHAT_TYPE_INFO, "Bu konumda çok fazla pazar var. Lütfen farklı bir yerde deneyin.");
return;
}
auto entity = std::make_shared<ShopEntity>();
entity->SetShopName(shop->GetName());
entity->SetMapIndex(spawn.map);
entity->SetXYZ(new_x, new_y, 0);
entity->SetShop(shop);
#ifdef EXTEND_IKASHOP_ULTIMATE
entity->SetShopType(shop->GetDecoration());
#endif
sectree->InsertEntity(entity.get());
entity->UpdateSectree();
shop->SetEntity(entity);
m_entityByVID[entity->GetVID()] = entity;
}
}

Gyazo Screen Video
VIP
Markanı Öne Çıkar 720 x 90
En stratejik pozisyonlarda maksimum görünürlük
TIKLA