Browse Source

new XP system

lakebane-mobAI
FatBoy-DOTC 5 days ago
parent
commit
f9a7b91868
  1. 14
      src/engine/objects/Experience.java
  2. 127
      src/engine/objects/PlayerCombatStats.java

14
src/engine/objects/Experience.java

@ -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;

127
src/engine/objects/PlayerCombatStats.java

@ -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.loc.distanceSquared(killed.loc) > MBServerStatics.CHARACTER_LOAD_RANGE * MBServerStatics.CHARACTER_LOAD_RANGE) if(!member.isAlive())
continue; continue;
//checking to make sure killed is better than "white" //out of XP range
double multiplier = Experience.getConMod(member,killed); if(member.loc.distanceSquared(killed.loc) > MBServerStatics.CHARACTER_LOAD_RANGE * MBServerStatics.CHARACTER_LOAD_RANGE)
//stop if killed is not better than "white"
if(multiplier == 0)
continue; continue;
//get experience for current level float mod;
int currentLevel = Experience.LevelToExp[member.level]; switch(group.members.size()){
default:
//get experience required for next level mod = 1.0f;
int nextLevel = Experience.LevelToExp[member.level + 1]; break;
case 2:
//get the required experience to go form current level to next level mod = 0.8f;
int required = nextLevel - currentLevel; break;
case 3:
//get group member divisor mod = 0.73f;
// float divisor = break;
// switch (group.members.size()) { case 4:
// case 2 -> 16.0f; mod = 0.69f;
/// case 3 -> 18.0f; break;
// case 4 -> 20.0f; case 5:
// case 5 -> 21.0f; mod = 0.65f;
// case 6 -> 23.0f; break;
// case 7 -> 25.0f; case 6:
// case 8 -> 26.0f; mod = 0.58f;
// case 9 -> 28.0f; break;
// case 10 -> 30.0f; case 7:
// default -> 15.0f; mod = 0.54f;
//}; break;
case 8:
//apply the X mob kills required rule mod = 0.50f;
//grantedXP = required / divisor; break;
case 9:
if(leadership > 0) mod = 0.47f;
multiplier += (multiplier * (leadership * 0.01f)); break;
case 10:
mod = 0.45f;
break;
}
double xp = getXP(member) * mod;
//member.grantXP((int) Math.floor(grantedXP * multiplier)); member.grantXP((int) xp);
} }
}else{ }else{
//Solo XP //Solo XP
//cannot level higher than 75 unless killed is a player character
if(this.owner.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) //white mob, early exit
if(Experience.getConMod(this.owner,killed) <= 0)
return; return;
//checking to make sure killed is better than "white" //can only get XP over level 75 for player kills
double multiplier = Experience.getConMod(this.owner,killed); if(this.owner.level >= 75 && !killed.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))
return;
//stop if killed is not better than "white" //cannot gain xp while dead
if(multiplier == 0) if(!this.owner.isAlive())
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 public static int getXP(PlayerCharacter pc){
int nextLevel = Experience.LevelToExp[this.owner.level + 1]; double xp = 0;
float mod = 0.10f;
//get the required experience to go form current level to next level if (pc.level >= 26 && pc.level <= 75)
int required = nextLevel - currentLevel; {
mod = 0.10f - (0.001f * (pc.level - 25));
}
else if (pc.level > 75)
{
mod = 0.05f;
}
//apply the 15 mob kills required rule xp = Experience.LevelToExp[pc.level] * mod;
grantedXP = required / 15.0f;
this.owner.grantXP((int) Math.floor(grantedXP * multiplier)); return (int) xp;
}
} }
} }

Loading…
Cancel
Save