Hello, I followed this guide: http://otland.net/f35/no-exp-same-ip-when-killing-another-player-pvp-enforced-hardcore-74764/
Here is what I changed (other parts that you need to change are working, so I dont post them). When I kill myself with mc I still get exp, why doesnt it work?
[cpp]uint64_t Player::getGainedExperience(Creature* attacker, bool useMultiplier /*= true*/) const
{
if(g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED){
Player* attackerPlayer = attacker->getPlayer();
if(attackerPlayer->getIP() == getIP() && !g_config.getNumber(ConfigManager::GAIN_EXP_FROM_SAME_IP))
return 0;
else
if(attackerPlayer && attackerPlayer != this && skillLoss){
/*Formula
a = attackers level * 0.9
b = victims level
c = victims experience
y = (1 - (a / b)) * 0.05 * c
*/
uint32_t a = (int32_t)std::floor(attackerPlayer->getLevel() * 0.9);
uint32_t b = getLevel();
uint64_t c = getExperience();
uint64_t result = std::max((uint64_t)0, (uint64_t)std::floor(getDamageRatio(attacker) * std::max((double)0, ((double)(1 - (((double)a / b))))) * 0.05 * c ) );
double res = (double)result;
if(useMultiplier)
return result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE);
else
return uint64_t((result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)) * double(attackerPlayer->exp_multiplier));
}
}
return 0;
}[/cpp]
Here is what I changed (other parts that you need to change are working, so I dont post them). When I kill myself with mc I still get exp, why doesnt it work?
[cpp]uint64_t Player::getGainedExperience(Creature* attacker, bool useMultiplier /*= true*/) const
{
if(g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED){
Player* attackerPlayer = attacker->getPlayer();
if(attackerPlayer->getIP() == getIP() && !g_config.getNumber(ConfigManager::GAIN_EXP_FROM_SAME_IP))
return 0;
else
if(attackerPlayer && attackerPlayer != this && skillLoss){
/*Formula
a = attackers level * 0.9
b = victims level
c = victims experience
y = (1 - (a / b)) * 0.05 * c
*/
uint32_t a = (int32_t)std::floor(attackerPlayer->getLevel() * 0.9);
uint32_t b = getLevel();
uint64_t c = getExperience();
uint64_t result = std::max((uint64_t)0, (uint64_t)std::floor(getDamageRatio(attacker) * std::max((double)0, ((double)(1 - (((double)a / b))))) * 0.05 * c ) );
double res = (double)result;
if(useMultiplier)
return result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE);
else
return uint64_t((result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)) * double(attackerPlayer->exp_multiplier));
}
}
return 0;
}[/cpp]