Postado Outubro 28, 2022 2 anos Olá guys, estou em desenvolvimento um global 8.6 na versão TFS 1.3 do Nekiro, estou passando por uma pequena dor de cabeça, em fazer o ajuste da quantidade de EXP que perde ao mrorer... No meu config.lua tem o deathLosePercent = -1 veio por padrão essa configuração mas está perdendo muita EXP ao morrer, eu alterei pra -2 e ele não perde nada, se eu altero pra maior que 1, ele perde muito mais. Gostaria de um suporte de onde eu posso fazer essa mudança pra controlar a quantidade de exp perdida.
Postado Outubro 29, 2022 2 anos A lógica do calculo é essa .. https://github.com/nekiro/TFS-1.5-Downgrades/blob/8.60/src/player.cpp#L3839-L3865 STYLLER OT 2022
Postado Outubro 29, 2022 2 anos Autor Obrigado eu acabei encontrando ontem essa fórmula também e fiz uns ajustes também. Aproveitando o gancho, pode me informar aonde eu configuro a % de perda ? Essa fórmula ela é baseada na experiencia do jogador, então quanto maior o level mais % ele vai perder, queria conseguir por com que fosse "fixa" a porcentagem, colocar um math.random entre 33~37% sempre... Deixei essa função do getLostPercent dessa forma Spoiler double Player::getLostPercent() const { int32_t blessingCount = std::bitset<5>(blessings).count(); int32_t deathLosePercent = g_config.getNumber(ConfigManager::DEATH_LOSE_PERCENT); double lossPercent = 10; double percentReduction = 0; double lossPercentFinal; if ( blessingCount == 7 ) { lossPercentFinal = uniform_random(23, 27); } else if ( blessingCount == 6) { lossPercentFinal = uniform_random(28, 32); } else if ( blessingCount == 5) { lossPercentFinal = uniform_random(33, 37); } //if (isPromoted()) { // percentReduction += lossPercentFinal - ; //} //percentReduction += blessingCount * 8; return deathLosePercent * lossPercentFinal; } Para que já me retorne um valor exato da porcentagem que vai perder, diferenciei pra cada tipo de bless, também ( espero que esteja certo ) Sei que dessa forma ele não vai funcionar, por que ainda ta baseado na experiencia do jogador e essa função apenas retornando um valor. Então encontrei na função Death, esse chamado da função getLostPercent Spoiler double deathLossPercent = getLostPercent(); //Level loss uint64_t expLoss = static_cast<uint64_t>(experience * deathLossPercent); g_events->eventPlayerOnLoseExperience(this, expLoss); if (expLoss != 0) { uint32_t oldLevel = level; if (vocation->getId() == VOCATION_NONE || level > 7) { experience -= expLoss; } while (level > 1 && experience < Player::getExpForLevel(level)) { --level; healthMax = std::max<int32_t>(0, healthMax - vocation->getHPGain()); manaMax = std::max<int32_t>(0, manaMax - vocation->getManaGain()); capacity = std::max<int32_t>(0, capacity - vocation->getCapGain()); } if (oldLevel != level) { std::ostringstream ss; ss << "You were downgraded from Level " << oldLevel << " to Level " << level << '.'; sendTextMessage(MESSAGE_EVENT_ADVANCE, ss.str()); } uint64_t currLevelExp = Player::getExpForLevel(level); uint64_t nextLevelExp = Player::getExpForLevel(level + 1); if (nextLevelExp > currLevelExp) { levelPercent = Player::getPercentLevel(experience - currLevelExp, nextLevelExp - currLevelExp); } else { levelPercent = 0; } } Acredito que devo ter que fazer a fórmula pra calcular a porcentagem da experiencia pra perder e chegar na faixa de 30% que quero né, a fórmula consigo fazer, só não sei exatamente aonde mexer para isso. Editado Outubro 29, 2022 2 anos por Faelzdanil (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.