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
