InfernoShade 1
InfernoShade
Fethi Polat 1
Fethi Polat
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
shrpnl 1
shrpnl
YusufŞimşek14 1
YusufŞimşek14
berzahx 2
berzahx
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Gerçek Zamanlı(Real-Time) Affect

  • Konuyu başlatan Konuyu başlatan canTolip
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 17
  • Görüntüleme Görüntüleme 5K

canTolip

Level over 9000.
Fahri Üye
TM Üye
Katılım
21 Ocak 2017
Konular
38
Mesajlar
632
Çözüm
3
Online süresi
3mo 28d
Reaksiyon Skoru
961
Altın Konu
2
TM Yaşı
9 Yıl 4 Ay 25 Gün
Başarım Puanı
193
MmoLira
10,551
DevLira
39
Ticaret - 100%
1   0   0

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!

Oyuncularınıza gerçek zamanlı affectler verebilmenize yarar. Örneğin bir oyuncunuza 7 günlük tag verdiniz ama oyuncu oyunda yokken de süresinin eksilmesini istiyorsunuz. İşte bu size göre;

Not: Gcc sürümüne bilmem neye ihtiyaç yoktur, herkesin kullanabileceği şekilde düzenlenmiştir.
Not2: İfdef'i kafanıza göre ayarlamayı veya kaldırmayı unutmayın.

game/char_affect.cpp
Aratılır
C++:
int CHARACTER::ProcessAffect()

Üstüne eklenir

Kod:
const DWORD realTimeAffList[] = {
    AFFECT_TAG_YOUTUBE,
    AFFECT_TAG_TWITCH,
    AFFECT_TAG_FACEBOOK,
};


C++:
int CHARACTER::ProcessAffect()
içinde Aratılır:

C++:
if (--pkAff->lDuration <= 0) { bEnd = true; }

Değiştirilir


C++:
        const long timeNow = (long)get_global_time();
        bool isRealTime = false;
        for (uint8_t i = 0; i < _countof(realTimeAffList); i++) {
            if (realTimeAffList[i] == pkAff->dwType) {
                //if (IsGM()) { ChatPacket(1, "<GM|realTimeAffListECT> affIdx:%d var.farkSn:%d", pkAff->dwType, (pkAff->lDuration - suanTime)); }
                if (pkAff->lDuration <= timeNow)
                    bEnd = true;
                isRealTime = true;
                break;
            }
        }
        if (!isRealTime) {
            if (--pkAff->lDuration <= 0) { bEnd = true; }
        }


Gerçek zamanlı çalışmasını istediğiniz AFFECT numarasını gercekZamanliAff arrayına eklemeniz yeterlidir.
Örnek affect eklemesi(get_global_time() + verilecekSaniye);

C++:
AddAffect(AFFECT_BLOCK_CHAT, POINT_NONE, 0, AFF_CHATBAN, get_global_time() + 86400, 0, false); }

Gcc11 ve daha üstü sürümlerde bu eklentiyi kullananlar, gerçek süreli affect sona erdiğinde affect remove kod bloğu yüzünden core alacaktır. 22.06.2023 16:03 tarihiyle kodu düzgün hali ile değiştirdim. Kullanıp problem yaşamış olan var ise kusura bakmasın hiçbir geri dönüş almamıştım. Eğer bu düzenlemeyi kullanan var ise konudaki hali ile değiştirsin lütfen.
 
Son düzenleme:
Oyuncularınıza gerçek zamanlı affectler verebilmenize yarar. Örneğin bir oyuncunuza 7 günlük tag verdiniz ama oyuncu oyunda yokken de süresinin eksilmesini istiyorsunuz. İşte bu size göre;

Not: Gcc sürümüne bilmem neye ihtiyaç yoktur, herkesin kullanabileceği şekilde düzenlenmiştir.
Not2: İfdef'i kafanıza göre ayarlamayı veya kaldırmayı unutmayın.

game/char_affect.cpp
Aratılır
C++:
int CHARACTER::ProcessAffect()

Üstüne eklenir

Kod:
const DWORD realTimeAffList[] = {
    AFFECT_TAG_YOUTUBE,
    AFFECT_TAG_TWITCH,
    AFFECT_TAG_FACEBOOK,
};


C++:
int CHARACTER::ProcessAffect()
içinde Aratılır:

C++:
if (--pkAff->lDuration <= 0) { bEnd = true; }

Değiştirilir


C++:
        const long timeNow = (long)get_global_time();
        bool isRealTime = false;
        for (uint8_t i = 0; i < _countof(realTimeAffList); i++) {
            if (realTimeAffList[i] == pkAff->dwType) {
                //if (IsGM()) { ChatPacket(1, "<GM|realTimeAffListECT> affIdx:%d var.farkSn:%d", pkAff->dwType, (pkAff->lDuration - suanTime)); }
                if (pkAff->lDuration <= timeNow)
                    bEnd = true;
                isRealTime = true;
                break;
            }
        }
        if (!isRealTime) {
            if (--pkAff->lDuration <= 0) { bEnd = true; }
        }


Gerçek zamanlı çalışmasını istediğiniz AFFECT numarasını gercekZamanliAff arrayına eklemeniz yeterlidir.
Örnek affect eklemesi(get_global_time() + verilecekSaniye);

C++:
AddAffect(AFFECT_BLOCK_CHAT, POINT_NONE, 0, AFF_CHATBAN, get_global_time() + 86400, 0, false); }

Gcc11 ve daha üstü sürümlerde bu eklentiyi kullananlar, gerçek süreli affect sona erdiğinde affect remove kod bloğu yüzünden core alacaktır. 22.06.2023 16:03 tarihiyle kodu düzgün hali ile değiştirdim. Kullanıp problem yaşamış olan var ise kusura bakmasın hiçbir geri dönüş almamıştım. Eğer bu düzenlemeyi kullanan var ise konudaki hali ile değiştirsin lütfen.
Paylaşım için teşekkürler.
 
Son düzenleme:
Paylaşım için teşekkürler.
 
teşekkürler
 
Paylaşım için teşekkürler. Güzel düşünülmüş.
 

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

Geri
Üst