Player* attackerPlayer = attacker->getPlayer();
if(!attackerPlayer || attackerPlayer == this)
return 0;
double attackerLevel = (double)attackerPlayer->getLevel(), min = g_config.getDouble(
ConfigManager::EFP_MIN_THRESHOLD), max = g_config.getDouble(ConfigManager::EFP_MAX_THRESHOLD);
if((min > 0 && level < (uint32_t)std::floor(attackerLevel * min)) || (max > 0 &&
level > (uint32_t)std::floor(attackerLevel * max)))
return 0;
/*
Formula
a = attackers level * 0.9
b = victims level
c = victims experience
result = (1 - (a / b)) * 0.05 * c
Not affected by special multipliers(!)
*/
uint32_t a = (uint32_t)std::floor(attackerLevel * 0.9), b = level;
uint64_t c = getExperience();
return (double)std::max((uint64_t)0, (uint64_t)std::floor(getDamageRatio(attacker)
* std::max((double)0, ((double)(1 - (((double)a / b))))) * 0.05 * c)) * rate;
}
if((min > 0 && level < (uint32_t)std::floor(attackerLevel * min)) || (max > 0 &&
level > (uint32_t)std::floor(attackerLevel * max)))
return 0;
(1-(20*0.9/20))*0.05*98800
494
(1-(21*0.9/20))*0.05*98800
271.7
(1-(22*0.9/20))*0.05*98800
49.4
(1-(23*0.9/20))*0.05*98800
-172.9
double Player::getGainedExperience(Creature* attacker) const
{
if(!skillLoss)
return 0;
double rate = g_config.getDouble(ConfigManager::RATE_PVP_EXPERIENCE);
if(rate <= 0)
return 0;
Player* attackerPlayer = attacker->getPlayer();
if(!attackerPlayer || attackerPlayer == this)
return 0;
/*
Formula
c = victims experience
result = 0.05 * c
Not affected by special multipliers(!)
*/
uint64_t c = getExperience();
return (double)std::max((uint64_t)0, (uint64_t)std::floor(getDamageRatio(attacker)
* std::max((double)0, (double)0.05 * c))) * rate;
}
player.cpp: In member function 'virtual double Player::getGainedExperience(Creature*) const':
player.cpp:3337: error: expected ')' before ';' token
cc1plus: warnings being treated as errors
player.cpp:3334: error: unused variable 'a'
player.cpp:3334: error: unused variable 'b'
make[1]: *** [player.o] Error 1
make[1]: Leaving directory `/home/trunk.r3671'
make: *** [all] Error 2
function onKill(cid, target, lastHit)
local rate = 0
if isPlayer(cid) then
if isPlayer(target) then
if (getPlayerLevel(cid) > getPlayerLevel(target)) or (getPlayerLevel(cid) < getPlayerLevel(target)) then
rate = getExperienceForLevel(getPlayerLevel(target))
return doPlayerAddExp(cid, math.min(rate * 5 / 3 ^ 7))
end
else
return true
end
else
return true
end
end
because Xeon failed with getExperienceForLevel(getPlayerLevel(target)) or idkWhy this doesn't seem to work on tfs 0.4?
cc1plus: warnings being treated as errors
player.cpp: In member function 'virtual double Player::getGainedExperience(Creature*) const':
player.cpp:3323: error: unused variable 'attackerLevel'
make[1]: *** [player.o] Error 1
make[1]: Leaving directory `/home/trunk.r3671'
make: *** [all] Error 2
if([B][COLOR="#FF0000"]level < 100 || attackerLevel < 100 || [/COLOR][/B](min > 0 && level < (uint32_t)std::floor(attackerLevel * min)) || (max > 0 &&
level > (uint32_t)std::floor(attackerLevel * max)))
return 0;