Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let experienceYields = {
- "Porygon2": 180,
- "Hypno": 169,
- "Meowth": 58,
- "Rowlet": 64,
- "Dartrix": 147,
- // ...
- };
- function gamefreakSqrt(n) {
- let actualSqrt = Math.sqrt(n);
- let lowerBound = Math.floor(actualSqrt);
- if(lowerBound * lowerBound === n) {
- return lowerBound * 4096;
- }
- let bestCoeff = 0;
- let bestDistance = actualSqrt - lowerBound;
- for (let i = 1; i <= 4096; i++) {
- let check = lowerBound + i / 4096;
- let distance = Math.abs(actualSqrt - check);
- if (distance < bestDistance) {
- bestCoeff = i;
- bestDistance = distance;
- }
- }
- return lowerBound * 4096 + bestCoeff;
- }
- function getExperienceForKill(foeName, foeLevel, level, luckyEgg, affection, rotoExp, expShare, tradeExp, evolutionDue, expScaling, gen7, wild) {
- let expYield = experienceYields[foeName];
- if (typeof expYield === "undefined") {
- throw new Error("Unknown Pokémon: " + foeName);
- }
- let log = false;
- if (expScaling) {
- let x = foeLevel + foeLevel + 10;
- let y = foeLevel + level + 10;
- let x2 = x * x;
- let y2 = y * y;
- let z = Math.floor(expYield * foeLevel / 5);
- if (expShare) {
- z = Math.floor(z / 2);
- }
- let exp = Math.floor(((gamefreakSqrt(x) * x2) * z) / ((gamefreakSqrt(y) * y2))) + 1;
- if (log) {
- console.log("Exp: " + exp);
- }
- // console.log(exp);
- if (!gen7 && !wild) {
- exp = Math.floor(exp * 1.5);
- }
- if (tradeExp) {
- exp = Math.floor(exp * 1.5);
- }
- // if (luckyEgg) {
- // exp = Math.floor(exp * 1.5);
- // }
- if (affection) {
- exp = exp * 4915;
- exp = Math.round(exp / 4096)
- }
- if (evolutionDue) {
- exp = exp * 4915;
- exp = Math.round(exp / 4096)
- }
- if (rotoExp) {
- exp = exp * 150;
- exp = Math.floor(exp / 100);
- }
- return Math.floor(exp);
- } else {
- let exp = Math.floor(expYield * foeLevel / 7);
- if (log) {
- console.log("Exp: " + exp);
- }
- if (!gen7 && !wild) {
- exp = Math.floor(exp * 1.5);
- }
- if (tradeExp) {
- exp = Math.floor(exp * 1.5);
- }
- if (affection) {
- exp = exp * 4915;
- exp = Math.round(exp / 4096)
- }
- if (evolutionDue) {
- exp = exp * 4915;
- exp = Math.round(exp / 4096)
- }
- return Math.floor(exp);
- }
- }
Add Comment
Please, Sign In to add comment