Çözüldü Belirlenen haritaya o item ile girilmesin

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

nexus2b

MT Üye
MT Üye
Mesaj
164
Çözümler
9
Beğeni
87
Puan
349
Ticaret Puanı
0
arkadaşlar belirdiğim haritada bir itemi engellemek istiyorum bunu nasıl yapabilirim o haritaya ışınlanıldığında itemi üzerinden çıkarıp envantere koymak istiyorum
 
Çözüm
char.h:
C++:
void            ItemCheck();

char_item.cpp:
C++:
void CHARACTER::ItemCheck()
{
    LPITEM item = GetWear(WEAR_ARMOR);
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        UnequipItem(item);
        ChatPacket(CHAT_TYPE_INFO, "Engelli olan esyalar cikarildi.");
        return;
    }
}

char_item.cpp:
C++:
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
{
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        ChatPacket(CHAT_TYPE_INFO, "Bu haritada olmaz dayioglu");
        return false;
    }
 
    [...]
ItemCheck'i de input login içinden çağırırsın. Niye void yaptım bilmiyom aslında bool daha kullanışlı olurdu ama gerisini sen düzenlersin.

GetMapIndex && GetWear
pvp engelleme sistemime ekleyecegim bu şekil birşey yaptım denemeye değermi ve bunu hangi bloga ekleyebilirim equip item e olurmu
Kod:
#ifdef __PVP_RESTRICTION_YUMA__
    if (IS_PVP_MAP(GetMapIndex()))
    {
        LPITEM pkItem = GetWear(WEAR_WEAPON);
        if (pkItem && (
        pkItem->GetVnum() >= 189
        && pkItem->GetVnum() <= 199
        && pkItem->GetVnum() <= 3169
        && pkItem->GetVnum() <= 2179
        && pkItem->GetVnum() <= 1139))
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Harita engel."));
            return false;
        }
    }
#endif
 
Son düzenleme:
input_login.cpp - ::EnterGame
içerisinde LPCHARACTER ch; 'den sonra herhangi bir satıra ekleyebilirsin, oyuncu oyuna girince kontrol edilir.

GetMapIndex, GetWear gibi fonksiyonlar Character sınıfı üyeleri oldukları için ch pointer'ı ile kullanmak zorundasın.
yani ch->GetMapIndex() , ch->GetWear()

Karakterden sökmek için de ch->UnequipItem(LPITEM item)
 
input_login.cpp - ::EnterGame
içerisinde LPCHARACTER ch; 'den sonra herhangi bir satıra ekleyebilirsin, oyuncu oyuna girince kontrol edilir.

GetMapIndex, GetWear gibi fonksiyonlar Character sınıfı üyeleri oldukları için ch pointer'ı ile kullanmak zorundasın.
yani ch->GetMapIndex() , ch->GetWear()

Karakterden sökmek için de ch->UnequipItem(LPITEM item)
yardımın için teşekkürler
 
char.h:
C++:
void            ItemCheck();

char_item.cpp:
C++:
void CHARACTER::ItemCheck()
{
    LPITEM item = GetWear(WEAR_ARMOR);
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        UnequipItem(item);
        ChatPacket(CHAT_TYPE_INFO, "Engelli olan esyalar cikarildi.");
        return;
    }
}

char_item.cpp:
C++:
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
{
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        ChatPacket(CHAT_TYPE_INFO, "Bu haritada olmaz dayioglu");
        return false;
    }
 
    [...]
ItemCheck'i de input login içinden çağırırsın. Niye void yaptım bilmiyom aslında bool daha kullanışlı olurdu ama gerisini sen düzenlersin.

 
Çözüm
char.h:
C++:
void            ItemCheck();

char_item.cpp:
C++:
void CHARACTER::ItemCheck()
{
    LPITEM item = GetWear(ITEM_ARMOR);
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        UnequipItem(item);
        ChatPacket(CHAT_TYPE_INFO, "Engelli olan esyalar cikarildi.");
        return;
    }
}

char_item.cpp:
C++:
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
{
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        ChatPacket(CHAT_TYPE_INFO, "Bu haritada olmaz dayioglu");
        return false;
    }
 
    [...]
ItemCheck'i de input login içinden çağırırsın. Niye void yaptım bilmiyom aslında bool daha kullanışlı olurdu ama gerisini sen düzenlersin.


Her hafta onlarca ucuz kıytırık pvp'lerin açılma 'sebeplerinden' bir tanesi xd
 
char.h:
C++:
void            ItemCheck();

char_item.cpp:
C++:
void CHARACTER::ItemCheck()
{
    LPITEM item = GetWear(ITEM_ARMOR);
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        UnequipItem(item);
        ChatPacket(CHAT_TYPE_INFO, "Engelli olan esyalar cikarildi.");
        return;
    }
}

char_item.cpp:
C++:
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell)
{
    if(GetMapIndex() == 41 && item->GetVnum() == 11299)
    {
        ChatPacket(CHAT_TYPE_INFO, "Bu haritada olmaz dayioglu");
        return false;
    }
 
    [...]
ItemCheck'i de input login içinden çağırırsın. Niye void yaptım bilmiyom aslında bool daha kullanışlı olurdu ama gerisini sen düzenlersin.


çok teşekkürler input loginden çağırmak derken ekstra birşey eklemek gerekiyormu verdiklerinizi ekledim
 
çok teşekkürler input loginden çağırmak derken ekstra birşey eklemek gerekiyormu verdiklerinizi ekledim
input_login.cpp de ::EnterGame fonksiyonunun en altına(içine) ch->ItemCheck(); yapıştır gitsin. Her ışınlanmada kontrol eder.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst