xranzei 1
xranzei
mavzermete 1
mavzermete
Fethi Polat 1
Fethi Polat
Hikaye Ekle

Mini Haritada istediğiniz yere ışınlanın

5.00 yıldız(lar) 1 Değerlendirme Değerlendirenler

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!

iyi ya da kötü demedim sadece bu halinin çalışma şeklini söyledim bu haliyle pek işlevsel olur mu bilemem ama mape tıklayınca oraya gitme fikri çok hoşuma gitti
aynen bende kullanıyorum baya pratik oldu bizler için.
 
Oyuna girişte oyuncuların yerlerini görebilmek için SendNPCPosition fonksiyonunu aşağıdaki gibi değişebilirsiniz. Sadece gmler görebilir, oyuncunun direk x,y koordinatlarını alacak fonksiyonu bulamadığım için aşağıdaki gibi yaptım.

0ac754a656.png


C++:
void SECTREE_MANAGER::SendNPCPosition(LPCHARACTER ch)
{
    LPDESC d = ch->GetDesc();
    if (!d)
        return;

    long lMapIndex = ch->GetMapIndex();

    if (m_mapNPCPosition[lMapIndex].empty())
        return;

    TEMP_BUFFER buf;
    TPacketGCNPCPosition p;
    p.header = HEADER_GC_NPC_POSITION;
    p.count = m_mapNPCPosition[lMapIndex].size();

    TNPCPosition np;

    // TODO m_mapNPCPosition[lMapIndex] ¸¦ º¸³»ÁÖ¼¼¿ä
    itertype(m_mapNPCPosition[lMapIndex]) it;

    for (it = m_mapNPCPosition[lMapIndex].begin(); it != m_mapNPCPosition[lMapIndex].end(); ++it)
    {
        np.bType = it->bType;
        strlcpy(np.name, it->name, sizeof(np.name));
        np.x = it->x;
        np.y = it->y;
        buf.write(&np, sizeof(np));
    }
 
 
    if (ch->IsGM())
    {
        const DESC_MANAGER::DESC_SET & c_ref_set = DESC_MANAGER::instance().GetClientSet();

        for (itertype(c_ref_set) it2 = c_ref_set.begin(); it2 != c_ref_set.end(); ++it2)
        {
            LPCHARACTER pkChar = (*it2)->GetCharacter();
            if (!pkChar)
                continue;
             
            if (pkChar->GetMapIndex() == lMapIndex && pkChar->GetPlayerID() != ch->GetPlayerID())
            {
                PIXEL_POSITION posBase;
                if (!SECTREE_MANAGER::instance().GetMapBasePositionByMapIndex(ch->GetMapIndex(), posBase))
                {
                    continue;
                }
                DWORD mapX = posBase.x;
                DWORD mapY = posBase.y;
                const PIXEL_POSITION & vpos = pkChar->GetXYZ();
                DWORD playerX = vpos.x;
                DWORD playerY = vpos.y;
                DWORD finalX = (playerX- mapX)/100;
                DWORD finalY = (playerY- mapY)/100;
                finalX *= 100;
                finalY *= 100;
                np.bType = 1;
                strlcpy(np.name, pkChar->GetName(), sizeof(np.name));
                np.x = finalX;
                np.y = finalY;
                p.count += 1;
                buf.write(&np, sizeof(np));
            }        
        }
    }
 
    p.size = sizeof(p) + buf.size();

    if (buf.size())
    {
        d->BufferedPacket(&p, sizeof(TPacketGCNPCPosition));
        d->Packet(buf.read_peek(), buf.size());
    }
    else
        d->Packet(&p, sizeof(TPacketGCNPCPosition));
}

Sectree'ye yeni bir açıyoruz (protected olması önemli)

Anahtarımız VID, değerimiz PIXEL_POSITION

C++:
void CInputLogin::Entergame(LPDESC d, const char * data)

Bu fonksiyonun içerisin de Sectree ye ben oyundayım VID bu Pozisyonum bu kaydı giriliyor.

Oyuncu girdiği gibi çıkabilir bunu unutmuyoruz tabi

C++:
void CHARACTER::Disconnect(const char * c_pszReason)

Onuda burdan siliyoruz.

Geriye kalan sadece

C++:
const DESC_MANAGER::DESC_SET & set = DESC_MANAGER::instance().GetClientSet();

ve aktif gm yetkisine sahip cliente (istemci) asenkron bağlantı ile aktarımı sağlanır, çok fazla online var olur mu öyle şey bilgisayar bilimlerinde kullanılmıyor smart pointerları containera alırsanız uçulurduğunda yok olursunuz.
 
Son düzenleme:
Sectree'ye yeni bir açıyoruz (protected olması önemli)

Anahtarımız VID, değerimiz PIXEL_POSITION

C++:
void CInputLogin::Entergame(LPDESC d, const char * data)

Bu fonksiyonun içerisin de Sectree ye ben oyundayım VID bu Pozisyonum bu kaydı giriliyor.

Oyuncu girdiği gibi çıkabilir bunu unutmuyoruz tabi

C++:
void CHARACTER::Disconnect(const char * c_pszReason)

Onuda burdan siliyoruz.

Geriye kalan sadece

C++:
const DESC_MANAGER::DESC_SET & set = DESC_MANAGER::instance().GetClientSet();

ve aktif gm yetkisine sahip cliente (istemci) asenkron bağlantı ile aktarımı sağlanır, çok fazla online var olur mu öyle şey bilgisayar bilimlerinde kullanılmıyor smart pointerları containera alırsanız uçulurduğunda yok olursunuz.

Hatırladığım kadarıyla GetXYZ gibi bir fonksiyon olması lazım zaten hali hazırda direk PIXEL_POSITION structı dönen, VID zaten mevcut. aynı zamanda gm listeside mevcut diye hatırlıyorum yani bu hali ile hazırda mevcut yeniden tanımlamalara gerek yok.

GetClientSet den dönen listeyi direk timer eventine bağlayarak kullanarak x saniyede bir gm clientlerine iletilir.

Bu işi fazlasıyla iyi bir şekilde yapan admin manager isminde bir eklenti olan sourceler paylaşılmıştı zaten rubinum ya da global olması lazım direk ordan çok daha iyi hali hazır olarak da alınabilir.
 
Hatırladığım kadarıyla GetXYZ gibi bir fonksiyon olması lazım zaten hali hazırda direk PIXEL_POSITION structı dönen, VID zaten mevcut. aynı zamanda gm listeside mevcut diye hatırlıyorum yani bu hali ile hazırda mevcut yeniden tanımlamalara gerek yok.

GetClientSet den dönen listeyi direk timer eventine bağlayarak kullanarak x saniyede bir gm clientlerine iletilir.

Bu işi fazlasıyla iyi bir şekilde yapan admin manager isminde bir eklenti olan sourceler paylaşılmıştı zaten rubinum ya da global olması lazım direk ordan çok daha iyi hali hazır olarak da alınabilir.

Genel olarak rubinum files (nedemekse) oradan yürümek istemiştim :)
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst