BlackFullMoon 1
BlackFullMoon
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Bvural41 1
Bvural41
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

SİSTEM ARIYORUM

  • Konuyu başlatan Konuyu başlatan aybarsx45
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 5
  • Görüntüleme Görüntüleme 387

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!

Kod:
// char.h
class character
{
public:
    // Diğer mevcut özellikler...
    time_t m_abilityTime;  // Yetenek süresi
    bool m_isAbilityActive;  // Yetenek aktif mi?

    // Yetenek süresini başlat
    void StartAbility(int duration);

    // Yetenek süresini uzat
    void ExtendAbility(int extraTime);

    // Yetenek süresini kontrol et
    bool IsAbilityActive() const;

    // Yetenek süresini sıfırla
    void ResetAbility();
};

// char.cpp

void character::StartAbility(int duration)
{
    m_isAbilityActive = true;
    m_abilityTime = time(NULL) + duration;
}

void character::ExtendAbility(int extraTime)
{
    if (m_isAbilityActive)
    {
        m_abilityTime += extraTime;  // Süreyi uzat
        sys_log(0, "Yetenek süresi %d saniye uzatıldı.", extraTime);
    }
    else
    {
        sys_log(0, "Yetenek aktif değil, süre uzatılamaz.");
    }
}

bool character::IsAbilityActive() const
{
    if (m_isAbilityActive && time(NULL) < m_abilityTime)
        return true;
    return false;
}

void character::ResetAbility()
{
    m_isAbilityActive = false;
    m_abilityTime = 0;
    sys_log(0, "Yetenek süresi sıfırlandı.");
}

Kod:
// item.cpp
void item::use(character* ch)
{
    if (ch == NULL)
        return;

    // Eğer item'in süresi varsa, bu süreyi uzatmak için ExtendAbility fonksiyonunu çağır
    if (get_vnum() == ITEM_TIME_EXTENDER)  // ITEM_TIME_EXTENDER, örneğin süre uzatan item'in ID'si
    {
        int extensionTime = 30;  // 30 saniye ekle
        ch->ExtendAbility(extensionTime);
        ch->RemoveItem(this);  // Item'i kullandıktan sonra envanterden çıkar
    }
    else
    {
        // Diğer item kullanım kodları
    }
}

Item kullanımı sonrası, belirli bir süre boyunca yeteneği aktif tutmak için, zamanlayıcı kullanımı gerekecek. Bu, oyun sunucusunun child_loop fonksiyonunda sürekli kontrol edilmesi gereken bir durum olabilir.


Kod:
void child_loop()
{
    // Diğer oyun döngüsü işlemleri...

    // Her oyuncu için yetenek süresi kontrolü
    for (auto& ch : character_list)
    {
        if (ch->IsAbilityActive())
        {
            // Yetenek süresi aktif, devam et
            continue;
        }
        else
        {
            // Yetenek süresi bitmiş, resetle
            ch->ResetAbility();
        }
    }
}



item.h içinde item türünü tanımlayın:
Kod:
#define ITEM_TIME_EXTENDER 1001  // Item türü ID'si


Senin için karaladım birşeyler ufak tefek kendine göre düzenle çalışır
 

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

Geri
Üst