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 112
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Tengrist

Yasaklanmış Üye
Cezalı
Yardımsever Üye
Mesaj
1.388
Çözümler
43
Beğeni
1.241
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