Esse é outro script rejeitado pela BlackOnix.
Foi desenvolvido por Lews e idealizado por Nostradamus e feito na época da Ixidor ainda.
Como fizemos um melhor, iremos dar release nesse antigo.
Foi testado no Forgotten e SVN, mas deve funcionar em outras versões também.
Detalhes:
Data: 11/03/2007Autor: Lews
OBS: Rejeitado da BlackOnix
Vamos ao código:
Creature.cpp
Em:
int64_t Creature::getGainedExperience(Creature* attacker) const
Troque:
return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE));
Por:
#ifdef __IXIDOR_RAND_EXP__ Player* player = attacker->getPlayer(); if(player){ int32_t randomExp = random_range(0, 100); int32_t x = (uint32_t)g_config.getNumber(ConfigManager::DOUBLE_EXP_CHANCE); int32_t y = (uint32_t)g_config.getNumber(ConfigManager::TRIPLE_EXP_CHANCE); int32_t z = (uint32_t)g_config.getNumber(ConfigManager::HALF_EXP_CHANCE); if(randomExp <= x){ g_game.addAnimatedText(attacker->getPosition(), 906, "DoubleExp"); //azul return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) * 2); } else if(randomExp <= x+y){ g_game.addAnimatedText(attacker->getPosition(), 966, "TripleExp"); // 966, laranja return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) * 3); } else if(randomExp <= x+y+z){ g_game.addAnimatedText(attacker->getPosition(), 906, "Half Exp!"); //preto return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) / 2); } else{ //g_game.addAnimatedText(attacker->getPosition(), 906, "NormalExp!"); return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); } } else return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); #else return (int64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); #endif
Configmanager.cpp
Adicione:
#ifdef __IXIDOR_RAND_EXP__ m_confInteger[DOUBLE_EXP_CHANCE] = getGlobalNumber(L, "doubleExpChance", 5); m_confInteger[TRIPLE_EXP_CHANCE] = getGlobalNumber(L, "tripleExpChance", 2); m_confInteger[HALF_EXP_CHANCE] = getGlobalNumber(L, "halfExpChance", 2); #endif
Configmanager.h
#ifdef __IXIDOR_RAND_EXP__ DOUBLE_EXP_CHANCE, TRIPLE_EXP_CHANCE, HALF_EXP_CHANCE, #endif
No linker adicione:
-D__IXIDOR_RAND_EXP__
E por fim, no config.lua:
-- random exp chance (in %) doubleExpChance = 5 tripleExpChance = 2 halfExpChance = 2
Esse código irá randomizar a chance de se pegar o dobro, triplo ou mesmo metade da experiência.