Çözüldü Exp alımı slot ve karekter leveli farkı kod bloğu düzenlemesi

  • Konuyu açan Konuyu açan asilords
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 6
  • Gösterim Gösterim 102
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

asilords

MT Üye
MT Üye
Mesaj
361
Çözümler
13
Beğeni
94
Puan
729
Ticaret Puanı
0
ENABLE_NEWEXP_CALCULATION adı altında düzenleme yapılmış eğer slotun seviyesi karekterin seviyesinden 15 az ise level başına exp alımını git gide azaltıyor yani 15 seviye üstü karekter 1 level slotu keserse exp alamıyor kodu aşağıda

1:
Genişlet Daralt Kopyala
#define NEW_GET_LVDELTA(me, victim) aiPercentByDeltaLev[MINMAX(0, (victim + 15) - me, MAX_EXP_DELTA_OF_LEV - 1)]

2:
Genişlet Daralt Kopyala
    rate_t lvFactor = static_cast<rate_t>(NEW_GET_LVDELTA(to->GetLevel(), from->GetLevel())) / 100.0L;


Ben bunu şöyle değiştirmek istiyorum. Eğer slotun leveli karekterin levelinden 15 büyükse exp verimi 15 seviye arasında git gide azalsın
yani karekter seviyesi 15 ise slot 30 ise exp vermesin, karekter 16 ise slot 30 ise exp az versin karekterin leveli slotun levelinie yaklaştıkça exp alımı artırsın zaten kodda o işi yapmakta ama tam istediğimi yapamadım .kodlamadan anlayan yardım edebilir mi?
 
Çözüm
C++:
Genişlet Daralt Kopyala
#define NEW_GET_LVDELTA(me, victim) aiPercentByDeltaLev[MINMAX(0, (victim + 15) - me, MAX_EXP_DELTA_OF_LEV - 1)] 
typedef long double rate_t; 

static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp) 
{ 
    if (test_server && iExp < 0) 
    { 
        to->ChatPacket(CHAT_TYPE_INFO, "exp(%d) overflow", iExp); 
        return; 
    } 
    
    int levelDiff = to->GetLevel() - from->GetLevel();
    if (levelDiff > 15) 
    { 
        to->ChatPacket(CHAT_TYPE_WARNING, "Bu seviyede bu slottan exp kazanamazsın."); 
        return; 
    } 
    
    rate_t lvFactor = static_cast<rate_t>(NEW_GET_LVDELTA(to->GetLevel(), from->GetLevel())) / 100.0L; 
    iExp *= lvFactor; 
    
    // ... kalan kodu kendine göre buradan devam ettir
}
C++:
Genişlet Daralt Kopyala
   char_battle.cpp
   static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
   içinde;
   iExp = AdjustExpByLevel(to, iExp);
   altına;
 
   int iLevel = to->GetLevel();
   int expDivisor = 1;

    if (iLevel >= 75) expDivisor = 999;
    if (iLevel == 74) expDivisor = 50;
    if (iLevel >= 71) expDivisor = 40;
    if (iLevel >= 65) expDivisor = 30;
    if (iLevel >= 60) expDivisor = 20;
    if (iLevel >= 50) expDivisor = 15;
    if (iLevel >= 40) expDivisor = 10;
    if (iLevel >= 30) expDivisor = 6;
    if (iLevel >= 25) expDivisor = 5;
    if (iLevel >= 15) expDivisor = 2;

    iExp /= outExp;
örnek: 30-39 arasıysa gelen exp 6'ya böler gibi yapabilirsiniz
 
C++:
Genişlet Daralt Kopyala
   char_battle.cpp
   static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp)
   içinde;
   iExp = AdjustExpByLevel(to, iExp);
   altına;
 
   int iLevel = to->GetLevel();
   int expDivisor = 1;

    if (iLevel >= 75) expDivisor = 999;
    if (iLevel == 74) expDivisor = 50;
    if (iLevel >= 71) expDivisor = 40;
    if (iLevel >= 65) expDivisor = 30;
    if (iLevel >= 60) expDivisor = 20;
    if (iLevel >= 50) expDivisor = 15;
    if (iLevel >= 40) expDivisor = 10;
    if (iLevel >= 30) expDivisor = 6;
    if (iLevel >= 25) expDivisor = 5;
    if (iLevel >= 15) expDivisor = 2;

    iExp /= outExp;
örnek: 30-39 arasıysa gelen exp 6'ya böler gibi yapabilirsiniz
Demek istediğim o değildi sağolun yinede benim verdiğim kod ta kücük düzenleme gerekli sadece.
1 level çarları örümcek zindanına ve ya vadi vs götürüp orda anında level kasmanın önüne geçmek amacım. Royale2 de yapmışlar bunu her harita kendi levelinde oyuncularla dolu 15 level üstü slotlardan exp alamıyorlar
 
C++:
Genişlet Daralt Kopyala
#define NEW_GET_LVDELTA(me, victim) aiPercentByDeltaLev[MINMAX(0, (victim + 15) - me, MAX_EXP_DELTA_OF_LEV - 1)] 
typedef long double rate_t; 

static void GiveExp(LPCHARACTER from, LPCHARACTER to, int iExp) 
{ 
    if (test_server && iExp < 0) 
    { 
        to->ChatPacket(CHAT_TYPE_INFO, "exp(%d) overflow", iExp); 
        return; 
    } 
    
    int levelDiff = to->GetLevel() - from->GetLevel();
    if (levelDiff > 15) 
    { 
        to->ChatPacket(CHAT_TYPE_WARNING, "Bu seviyede bu slottan exp kazanamazsın."); 
        return; 
    } 
    
    rate_t lvFactor = static_cast<rate_t>(NEW_GET_LVDELTA(to->GetLevel(), from->GetLevel())) / 100.0L; 
    iExp *= lvFactor; 
    
    // ... kalan kodu kendine göre buradan devam ettir
}
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst