Yardım bir mapteki herkesin pk mode'unu serbest yapma

  • Konuyu açan Konuyu açan Tengrist
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 6
  • Gösterim Gösterim 411
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Tengrist

MT Üye
MT Üye
Mesaj
802
Çözümler
28
Beğeni
577
Puan
809
Ticaret Puanı
0
arkadaşlar bir mape ışınlanınca tüm herkesin birbiriyle savaş modunda olmasını istiyorum, map index'i belirledikten sonra pk mode değişim fonksiyon kodunu çağırmam gerekiyor fakat bunu nasıl yapabilirim, bir de bu serbest açınca adam kesince derece puanı kaybettiği kısım srcde nerede bulunuyordu
 
paylaşılan bi pubg sistemi vardı hatırlarsın. yani battle royal diye paylaşılmıştı heralde. onu bulursan bence yapabilirsin. derece kısmını bende bilemedim.
 
char_battle.cpp nin içinde "pkKiller->UpdateAlignment(-20000);" diye arat, tam emin değilim ama muhtemelen o dur. Sen yinede oradaki -20000 değerini değiştirip bir dene.
 
Aklıma ilk gelen yöntemle bir if bloğu yazdım, deneme şansım olmadı ama çalışacağını umuyorum, saygılar.

pvp.cpp

C++:
Genişlet Daralt Kopyala
// Ara;

bool CPVPManager::CanAttack (LPCHARACTER pkChr, LPCHARACTER pkVictim)
    
// Kod bloğunun içinde ara;
    
    if (pkChr->GetEmpire() != pkVictim->GetEmpire())
    {
        return true;
    }

// Altina ekle;

    // Istenilen mapte herkesin birbirine saldirabilmesi icin bu yeterli olur diye dusunuyorum, fakat victim Zalim vs. olursa itemi dusebilir, ona kontrol koymak lazim.
    long AttackerMapIndex = pkChr->GetMapIndex();
    long VictimMapIndex   = pkVictim->GetMapIndex();
    if (AttackerMapIndex && VictimMapIndex == 41) // 41 = Map Index
    {
        return true;
    }
 
Aklıma ilk gelen yöntemle bir if bloğu yazdım, deneme şansım olmadı ama çalışacağını umuyorum, saygılar.

pvp.cpp

C++:
Genişlet Daralt Kopyala
// Ara;

bool CPVPManager::CanAttack (LPCHARACTER pkChr, LPCHARACTER pkVictim)
    
// Kod bloğunun içinde ara;
    
    if (pkChr->GetEmpire() != pkVictim->GetEmpire())
    {
        return true;
    }

// Altina ekle;

    // Istenilen mapte herkesin birbirine saldirabilmesi icin bu yeterli olur diye dusunuyorum, fakat victim Zalim vs. olursa itemi dusebilir, ona kontrol koymak lazim.
    long AttackerMapIndex = pkChr->GetMapIndex();
    long VictimMapIndex   = pkVictim->GetMapIndex();
    if (AttackerMapIndex && VictimMapIndex == 41) // 41 = Map Index
    {
        return true;
    }
Öncelikle yardımlar için teşekkürler arkadaşlar , hocam yazdığınız koddaki map indexinde derece kaybetmeyi @TheAdmin33'ün verdiği kısımda kapatmayı düşünüyorum
 
Öncelikle yardımlar için teşekkürler arkadaşlar , hocam yazdığınız koddaki map indexinde derece kaybetmeyi @TheAdmin33'ün verdiği kısımda kapatmayı düşünüyorum

O zaman o durum için de bir şeyler yazalım;

char_battle.cpp


C++:
Genişlet Daralt Kopyala
// Kod bloğunu bul;

                    if (number (1, 100) < iNoPenaltyProb)
                    {
                        pkKiller->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("용신의 보호로 아이템이 떨어지지 않았습니다."));
                    }
                    else
                    {
                        if (pkKiller->GetParty())
                        {
                            FPartyAlignmentCompute f (-20000, pkKiller->GetX(), pkKiller->GetY());
                            pkKiller->GetParty()->ForEachOnlineMember (f);
                            if (f.m_iCount == 0)
                            {
                                pkKiller->UpdateAlignment (-20000);
                            }
                            else
                            {
                                sys_log (0, "ALIGNMENT PARTY count %d amount %d", f.m_iCount, f.m_iAmount);
                                f.m_iStep = 1;
                                pkKiller->GetParty()->ForEachOnlineMember (f);
                            }
                        }
                        else
                        {
                            pkKiller->UpdateAlignment (-20000);
                        }
                    }


// Degistir;

                    long MapIndex = pkKiller->GetMapIndex();
                    if (MapIndex != 41) // 41 = Map Index
                    {
                        if (number (1, 100) < iNoPenaltyProb)
                        {
                            pkKiller->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("용신의 보호로 아이템이 떨어지지 않았습니다."));
                        }
                        else
                        {
                            if (pkKiller->GetParty())
                            {
                                FPartyAlignmentCompute f (-20000, pkKiller->GetX(), pkKiller->GetY());
                                pkKiller->GetParty()->ForEachOnlineMember (f);
                                if (f.m_iCount == 0)
                                {
                                    pkKiller->UpdateAlignment (-20000);
                                }
                                else
                                {
                                    sys_log (0, "ALIGNMENT PARTY count %d amount %d", f.m_iCount, f.m_iAmount);
                                    f.m_iStep = 1;
                                    pkKiller->GetParty()->ForEachOnlineMember (f);
                                }
                            }
                            else
                            {
                                pkKiller->UpdateAlignment (-20000);
                            }
                        }
                    }

Bunu ve üstte verdiğim kodu ekleyerek deneyebilirsin, bir sıkıntı olursa yazarsan farklı bir çözüm üretiriz, saygılar.
 
O zaman o durum için de bir şeyler yazalım;

char_battle.cpp


C++:
Genişlet Daralt Kopyala
// Kod bloğunu bul;

                    if (number (1, 100) < iNoPenaltyProb)
                    {
                        pkKiller->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("용신의 보호로 아이템이 떨어지지 않았습니다."));
                    }
                    else
                    {
                        if (pkKiller->GetParty())
                        {
                            FPartyAlignmentCompute f (-20000, pkKiller->GetX(), pkKiller->GetY());
                            pkKiller->GetParty()->ForEachOnlineMember (f);
                            if (f.m_iCount == 0)
                            {
                                pkKiller->UpdateAlignment (-20000);
                            }
                            else
                            {
                                sys_log (0, "ALIGNMENT PARTY count %d amount %d", f.m_iCount, f.m_iAmount);
                                f.m_iStep = 1;
                                pkKiller->GetParty()->ForEachOnlineMember (f);
                            }
                        }
                        else
                        {
                            pkKiller->UpdateAlignment (-20000);
                        }
                    }


// Degistir;

                    long MapIndex = pkKiller->GetMapIndex();
                    if (MapIndex != 41) // 41 = Map Index
                    {
                        if (number (1, 100) < iNoPenaltyProb)
                        {
                            pkKiller->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("용신의 보호로 아이템이 떨어지지 않았습니다."));
                        }
                        else
                        {
                            if (pkKiller->GetParty())
                            {
                                FPartyAlignmentCompute f (-20000, pkKiller->GetX(), pkKiller->GetY());
                                pkKiller->GetParty()->ForEachOnlineMember (f);
                                if (f.m_iCount == 0)
                                {
                                    pkKiller->UpdateAlignment (-20000);
                                }
                                else
                                {
                                    sys_log (0, "ALIGNMENT PARTY count %d amount %d", f.m_iCount, f.m_iAmount);
                                    f.m_iStep = 1;
                                    pkKiller->GetParty()->ForEachOnlineMember (f);
                                }
                            }
                            else
                            {
                                pkKiller->UpdateAlignment (-20000);
                            }
                        }
                    }

Bunu ve üstte verdiğim kodu ekleyerek deneyebilirsin, bir sıkıntı olursa yazarsan farklı bir çözüm üretiriz, saygılar.
yarın akşam gelince deneyeceğim hocam ikisini de teşekkürler
 
Geri
Üst