Neler yeni

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod Nesne Market Deposu Düzenlemesi

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
2,825
Tepkime puanı
4,230
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut
Konu Alıntıdır

Herkese merhaba, olayın özeti şu şekildedir;

Oyuncunun nesne market deposuna bir şey gönderirken pozisyon belirlemenize gerek kalmaz, oyuncu nesne marketi açtığınında nesneler dizili olarak gelir. Dizebildiği kadarını dizer. Eğer depoda 2-3 sayfa nesne var ise ilk sayfayı boşaltıp tekrar deposunu açarsa nesneler tekrar sıralanır. Kısa ve yararlı bir eklentidir.

game/char.cpp açılır

includelar arasına eklenir.


C++:
#include "../../libgame/include/grid.h"

Aratılır:
C++:
void CHARACTER::LoadMall(int iItemCount, TPlayerItem * pItems)

#ifdef DÜTDÜT içindeki kodları kendi fonksiyonunuza eklemeniz yeterli.

C++:
void CHARACTER::LoadMall(int iItemCount, TPlayerItem * pItems){
    bool bLoaded = false;
    if (m_pkMall) { bLoaded = true; }
    if (!m_pkMall) { m_pkMall = M2_NEW CSafebox(this, 3 * SAFEBOX_PAGE_SIZE, 0, 0); }
    else { m_pkMall->ChangeSize(3 * SAFEBOX_PAGE_SIZE); }

    m_pkMall->SetWindowMode(MALL);

    TPacketCGSafeboxSize p;
    p.bHeader = HEADER_GC_MALL_OPEN;
    p.bSize = 3 * SAFEBOX_PAGE_SIZE;
    GetDesc()->Packet(&p, sizeof(TPacketCGSafeboxSize));

    if (!bLoaded){
#ifdef DÜTDÜT
        if (IsGM()) { ChatPacket(1, "<GM|MALL> gelenItemSayisi: %d", iItemCount); }
        CGrid iGrid = CGrid(5,9);
#endif
        for (int i = 0; i < iItemCount; ++i, ++pItems){

            if (!m_pkMall->IsValidPosition(pItems->pos)) { continue; }

            LPITEM item = ITEM_MANAGER::instance().CreateItem(pItems->vnum, pItems->count, pItems->id);

            if (!item){
                sys_err("cannot create item vnum %d id %u (name: %s)", pItems->vnum, pItems->id, GetName());
                continue;}
            item->SetSkipSave(true);
            item->SetSockets(pItems->alSockets);
            item->SetAttributes(pItems->aAttr);
#ifdef DÜTDÜT
            // ChatPacket(1,"itemName:%s",item->GetName());
            int iPos=(-1);
            iPos = iGrid.FindBlank(1, item->GetSize());
            if (iPos >= 0) {
                iGrid.Put(iPos, 1, item->GetSize());
                if (!m_pkMall->Add(iPos, item)) { M2_DESTROY_ITEM(item); }
                else { item->SetSkipSave(false); }
            }else{
                M2_DESTROY_ITEM(item);
                //break;
            }
#else
            if (!m_pkMall->Add(pItems->pos, item)){M2_DESTROY_ITEM(item);}
            else{item->SetSkipSave(false);}
#endif
        }
    }
}

Not: GIF'in durdurulma sebebi depo açma arasında 5sn bekleme süresi olmasıdır.

b0a69ff9dd3647907eb0abf09ada8759.gif

 
Premium Forum Banner

Benzer konular

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar