Yardım 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 5
  • Gösterim Gösterim 86
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

asilords

MT Üye
MT Üye
Mesaj
360
Çö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?
 
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
}
 
Geri
Üst