new XP system
This commit is contained in:
@@ -121,6 +121,8 @@ public class Experience {
|
|||||||
190585732, // Level 77
|
190585732, // Level 77
|
||||||
201714185, // Level 78
|
201714185, // Level 78
|
||||||
213319687, // Level 79
|
213319687, // Level 79
|
||||||
|
|
||||||
|
// R8
|
||||||
225415457, // Level 80
|
225415457, // Level 80
|
||||||
238014819 // Level 81
|
238014819 // Level 81
|
||||||
|
|
||||||
@@ -352,13 +354,13 @@ public class Experience {
|
|||||||
if(killer.pvpKills.contains(mob.getObjectUUID()))
|
if(killer.pvpKills.contains(mob.getObjectUUID()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//if(true){
|
if(true){
|
||||||
// if(killer.combatStats == null)
|
if(killer.combatStats == null)
|
||||||
// killer.combatStats = new PlayerCombatStats(killer);
|
killer.combatStats = new PlayerCombatStats(killer);
|
||||||
|
|
||||||
// killer.combatStats.grantExperience(mob,g);
|
killer.combatStats.grantExperience(mob,g);
|
||||||
// return;
|
return;
|
||||||
//}
|
}
|
||||||
|
|
||||||
double grantedExperience = 0.0;
|
double grantedExperience = 0.0;
|
||||||
|
|
||||||
|
|||||||
@@ -976,88 +976,97 @@ public class PlayerCombatStats {
|
|||||||
double grantedXP;
|
double grantedXP;
|
||||||
|
|
||||||
if(group != null){
|
if(group != null){
|
||||||
float leadership = 0.0f;
|
|
||||||
PlayerCharacter leader = group.getGroupLead();
|
|
||||||
if(leader.skills.containsKey("Leadership"))
|
|
||||||
leadership = leader.skills.get("Leadership").getModifiedAmount();
|
|
||||||
|
|
||||||
//Group XP
|
|
||||||
for(PlayerCharacter member : group.members){
|
for(PlayerCharacter member : group.members){
|
||||||
|
//white mob, early exit
|
||||||
|
if(Experience.getConMod(member,killed) <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
//cannot level higher than 75 unless killed is a player character
|
//can only get XP over level 75 for player kills
|
||||||
if(member.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))
|
if(member.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//not in load range, do not grant XP
|
//cannot gain xp while dead
|
||||||
|
if(!member.isAlive())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//out of XP range
|
||||||
if(member.loc.distanceSquared(killed.loc) > MBServerStatics.CHARACTER_LOAD_RANGE * MBServerStatics.CHARACTER_LOAD_RANGE)
|
if(member.loc.distanceSquared(killed.loc) > MBServerStatics.CHARACTER_LOAD_RANGE * MBServerStatics.CHARACTER_LOAD_RANGE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//checking to make sure killed is better than "white"
|
float mod;
|
||||||
double multiplier = Experience.getConMod(member,killed);
|
switch(group.members.size()){
|
||||||
|
default:
|
||||||
|
mod = 1.0f;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
mod = 0.8f;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
mod = 0.73f;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
mod = 0.69f;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
mod = 0.65f;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
mod = 0.58f;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
mod = 0.54f;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
mod = 0.50f;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
mod = 0.47f;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
mod = 0.45f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
double xp = getXP(member) * mod;
|
||||||
|
|
||||||
//stop if killed is not better than "white"
|
member.grantXP((int) xp);
|
||||||
if(multiplier == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//get experience for current level
|
|
||||||
int currentLevel = Experience.LevelToExp[member.level];
|
|
||||||
|
|
||||||
//get experience required for next level
|
|
||||||
int nextLevel = Experience.LevelToExp[member.level + 1];
|
|
||||||
|
|
||||||
//get the required experience to go form current level to next level
|
|
||||||
int required = nextLevel - currentLevel;
|
|
||||||
|
|
||||||
//get group member divisor
|
|
||||||
// float divisor =
|
|
||||||
// switch (group.members.size()) {
|
|
||||||
// case 2 -> 16.0f;
|
|
||||||
/// case 3 -> 18.0f;
|
|
||||||
// case 4 -> 20.0f;
|
|
||||||
// case 5 -> 21.0f;
|
|
||||||
// case 6 -> 23.0f;
|
|
||||||
// case 7 -> 25.0f;
|
|
||||||
// case 8 -> 26.0f;
|
|
||||||
// case 9 -> 28.0f;
|
|
||||||
// case 10 -> 30.0f;
|
|
||||||
// default -> 15.0f;
|
|
||||||
//};
|
|
||||||
|
|
||||||
//apply the X mob kills required rule
|
|
||||||
//grantedXP = required / divisor;
|
|
||||||
|
|
||||||
if(leadership > 0)
|
|
||||||
multiplier += (multiplier * (leadership * 0.01f));
|
|
||||||
|
|
||||||
//member.grantXP((int) Math.floor(grantedXP * multiplier));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
//Solo XP
|
//Solo XP
|
||||||
//cannot level higher than 75 unless killed is a player character
|
|
||||||
|
//white mob, early exit
|
||||||
|
if(Experience.getConMod(this.owner,killed) <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//can only get XP over level 75 for player kills
|
||||||
if(this.owner.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))
|
if(this.owner.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//checking to make sure killed is better than "white"
|
//cannot gain xp while dead
|
||||||
double multiplier = Experience.getConMod(this.owner,killed);
|
if(!this.owner.isAlive())
|
||||||
|
|
||||||
//stop if killed is not better than "white"
|
|
||||||
if(multiplier == 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//get experience for current level
|
this.owner.grantXP(getXP(this.owner));
|
||||||
int currentLevel = Experience.LevelToExp[this.owner.level];
|
|
||||||
|
|
||||||
//get experience required for next level
|
|
||||||
int nextLevel = Experience.LevelToExp[this.owner.level + 1];
|
|
||||||
|
|
||||||
//get the required experience to go form current level to next level
|
|
||||||
int required = nextLevel - currentLevel;
|
|
||||||
|
|
||||||
//apply the 15 mob kills required rule
|
|
||||||
grantedXP = required / 15.0f;
|
|
||||||
|
|
||||||
this.owner.grantXP((int) Math.floor(grantedXP * multiplier));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getXP(PlayerCharacter pc){
|
||||||
|
double xp = 0;
|
||||||
|
float mod = 0.10f;
|
||||||
|
|
||||||
|
if (pc.level >= 26 && pc.level <= 75)
|
||||||
|
{
|
||||||
|
mod = 0.10f - (0.001f * (pc.level - 25));
|
||||||
|
}
|
||||||
|
else if (pc.level > 75)
|
||||||
|
{
|
||||||
|
mod = 0.05f;
|
||||||
|
}
|
||||||
|
|
||||||
|
xp = Experience.LevelToExp[pc.level] * mod;
|
||||||
|
|
||||||
|
return (int) xp;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user