package client;
import constants.GameConstants;
import server.Randomizer;
public class InnerAbillity {
private static InnerAbillity instance = null;
public static InnerAbillity getInstance() {
if (instance == null) {
instance = new InnerAbillity();
}
return instance;
}
public InnerSkillValueHolder renewSkill(int rank, int circulator, boolean locked) {
return renewSkill(rank, circulator, false, locked);
}
public InnerSkillValueHolder renewSkill(int rank, int circulator, boolean ultimateCirculatorPos, boolean locked) {
if (ultimateCirculatorPos && circulator == 2701000) {
int randomSkill = GameConstants.getInnerSkillbyRank(3)[(int) Math.floor(Math.random() * GameConstants.getInnerSkillbyRank(rank).length)];
int random = Randomizer.nextInt(100);
int skillLevel;
if (random < 38) {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 2, SkillFactory.getSkill(randomSkill).getMaxLevel());
} else if (random < 70) {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 3, SkillFactory.getSkill(randomSkill).getMaxLevel() / 2);
} else {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 4, SkillFactory.getSkill(randomSkill).getMaxLevel() / 3);
}
return new InnerSkillValueHolder(randomSkill, (byte) skillLevel, (byte) SkillFactory.getSkill(randomSkill).getMaxLevel(), (byte) 3, locked);
}
int circulatorRate = 0;
if (circulator == -1) {
circulatorRate = 10;
} else {
int circulatorRank = getCirculatorRank(circulator);
if (circulatorRank == 0) {
circulatorRate = 10;
} else if (circulatorRank == 1) {
circulatorRate = 20;
} else if (circulatorRank == 2) {
circulatorRate = 30;
} else if (circulatorRank == 3) {
circulatorRate = 35;
} else if (circulatorRank == 4) {
circulatorRate = 40;
} else if (circulatorRank == 5) {
circulatorRate = 45;
} else if (circulatorRank == 6) {
circulatorRate = 50;
} else if (circulatorRank == 7) {
circulatorRate = 55;
} else if (circulatorRank == 8) {
circulatorRate = 60;
} else if (circulatorRank == 9) {
circulatorRate = 65;
} else if (circulatorRank == 10) {
circulatorRate = 70;
}
}
if (Randomizer.isSuccess(3 + circulatorRate)) {
rank = 1;
} else if (Randomizer.isSuccess(2 + circulatorRate / 2)) {
rank = 2;
} else if (Randomizer.isSuccess(1 + circulatorRate / 4)) {
rank = 3;
} else {
rank = 0;
}
int randomSkill = GameConstants.getInnerSkillbyRank(rank)[(int) Math.floor(Math.random() * GameConstants.getInnerSkillbyRank(rank).length)];
int random = Randomizer.nextInt(100);
int skillLevel;
if (random < 3 + circulatorRate / 2) {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 2, SkillFactory.getSkill(randomSkill).getMaxLevel());
} else if (random < circulatorRate) {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 3, SkillFactory.getSkill(randomSkill).getMaxLevel() / 2);
} else {
skillLevel = Randomizer.rand(SkillFactory.getSkill(randomSkill).getMaxLevel() / 4, SkillFactory.getSkill(randomSkill).getMaxLevel() / 3);
}
return new InnerSkillValueHolder(randomSkill, (byte) skillLevel, (byte) SkillFactory.getSkill(randomSkill).getMaxLevel(), (byte) rank, locked);
}
public int getCirculatorRank(int circulator) {
return ((circulator % 1000) / 100) + 1;
}
}