Yardım Bir Oyuncuyu Belirmi Mapte Öldürdüğünde İtem kazanma ve Ölünce Belirli bir Item envanterde olmadan doğamama

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

Tengrist

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
1.316
Çözümler
41
Beğeni
1.095
Puan
1.309
Ticaret Puanı
0
Arkadaşlar başlık açık bir tane map geliştirdim bu mapte oyuncular birbirlerini kesecekler ve kesen kişi eşya kazanacak fakat yeniden doğumda yeniden doğma parşomeni varsa ancak yeniden doğacak, yoksa mavi1 e geri ışınlanacak, varsa yeniden doğumda 1 adet parşomen envanterinden eksilecek ama Game SRC fonksiyonlarına çok hakim değilim kullanılması gerek doğma, item kazanma ve yeniden doğma kontrolünü nasıl yapabilirim
 
Her oyuncu kendi bayrağına gönderilir. Ben vanilla dosyaları kullandığım için bloğu tamamen değiştirin dedim.
Önceden yaptığınız düzenlemeleri bozmamaya dikkat edin.

char.h:
Genişlet Daralt Kopyala
// include'larin altina musait bi yere ekle
static std::unordered_map<BYTE, BYTE> m_uEmpireMapIndexes = {
    {1, 1}, // shinsoo
    {2, 21}, // chunjo
    {3, 41} // jinno
};

// Bul
};

ESex GET_SEX (LPCHARACTER ch);

// ustune ekle

    public:
        BYTE GetEmpireMapIndex()
        {
            auto it = m_uEmpireMapIndexes.find(GetEmpire());
            if (it != m_uEmpireMapIndexes.end())
                return it->second;

            return 0;
        }
char_battle.cpp:
Genişlet Daralt Kopyala
// ::Dead icerisinde bul
    if (pkKiller &&
            !isAgreedPVP &&
            !isUnderGuildWar &&
            IsPC() &&
            !isDuel)

// ustune ekle
    if (pkKiller->IsPC() && IsPC())
    {
        if (GetMapIndex() == 65)
            pkKiller->AutoGiveItem(19, 1);
    }
cmd_general.cpp:
Genişlet Daralt Kopyala
// ACMD (do_restart) icerisinde ikinci switch (subcmd) blogunu bul.
// komple degistir
    switch (subcmd)
    {
        case SCMD_RESTART_TOWN:
            sys_log (0, "do_restart: restart town");
            PIXEL_POSITION pos;

            if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire (ch->GetMapIndex(), ch->GetEmpire(), pos))
            {
                ch->WarpSet (pos.x, pos.y);
            }
            else
            {
                ch->WarpSet (EMPIRE_START_X (ch->GetEmpire()), EMPIRE_START_Y (ch->GetEmpire()));
            }

            ch->PointChange (POINT_HP, 50 - ch->GetHP());
            ch->DeathPenalty (1);
            break;

        case SCMD_RESTART_HERE:
            sys_log (0, "do_restart: restart here");
            if (ch->CountSpecifyItem(19))
            {
                ch->RemoveSpecifyItem(19, 1);
                ch->RestartAtSamePos();
                //ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY());
                ch->PointChange(POINT_HP, 50 - ch->GetHP());
                ch->DeathPenalty(0);
                ch->ReviveInvisible(5);
                break;
            }
            else
            {
                sys_log(0, "do_restart: restart town");

                BYTE empireMapIdx = ch->GetEmpireMapIndex();

                if (empireMapIdx == 0)
                    empireMapIdx = ch->GetMapIndex();

                PIXEL_POSITION pos;
                if (SECTREE_MANAGER::instance().GetRecallPositionByEmpire(empireMapIdx, ch->GetEmpire(), pos))
                {
                    ch->WarpSet(pos.x, pos.y);
                }

                ch->PointChange(POINT_HP, 50 - ch->GetHP());
                ch->DeathPenalty(1);
                break;
            }
    }
 
Son düzenleme:
Geri
Üst