Example #1
0
  /**
   * Begins an experience gain. The amount will be affected by skill modifiers, global rate, perks,
   * and may be shared with the party
   *
   * @param skill Skill being used
   * @param xp Experience amount to process
   */
  public void beginXpGain(SkillType skill, float xp, XPGainReason xpGainReason) {
    Validate.isTrue(xp >= 0.0, "XP gained should be greater than or equal to zero.");

    if (xp <= 0.0) {
      return;
    }

    if (skill.isChildSkill()) {
      Set<SkillType> parentSkills = FamilyTree.getParents(skill);
      float splitXp = xp / parentSkills.size();

      for (SkillType parentSkill : parentSkills) {
        if (parentSkill.getPermissions(player)) {
          beginXpGain(parentSkill, splitXp, xpGainReason);
        }
      }

      return;
    }

    // Return if the experience has been shared
    if (party != null
        && ShareHandler.handleXpShare(
            xp, this, skill, ShareHandler.getSharedXpGainReason(xpGainReason))) {
      return;
    }

    beginUnsharedXpGain(skill, xp, xpGainReason);
  }
Example #2
0
  public static boolean handleVampirismEvent(
      Player killer,
      Player victim,
      HashMap<String, Integer> levelChanged,
      HashMap<String, Float> experienceChanged) {
    McMMOPlayerVampirismEvent eventKiller =
        new McMMOPlayerVampirismEvent(killer, false, levelChanged, experienceChanged);
    McMMOPlayerVampirismEvent eventVictim =
        new McMMOPlayerVampirismEvent(victim, true, levelChanged, experienceChanged);
    mcMMO.p.getServer().getPluginManager().callEvent(eventKiller);
    mcMMO.p.getServer().getPluginManager().callEvent(eventVictim);

    boolean isCancelled = eventKiller.isCancelled() || eventVictim.isCancelled();

    if (!isCancelled) {
      HashMap<String, Integer> levelChangedKiller = eventKiller.getLevelChanged();
      HashMap<String, Float> experienceChangedKiller = eventKiller.getExperienceChanged();

      HashMap<String, Integer> levelChangedVictim = eventVictim.getLevelChanged();
      HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();

      McMMOPlayer killerPlayer = UserManager.getPlayer(killer);
      PlayerProfile victimProfile = UserManager.getPlayer(victim).getProfile();

      for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
        String skillName = skillType.toString();
        int victimSkillLevel = victimProfile.getSkillLevel(skillType);

        killerPlayer.addLevels(skillType, levelChangedKiller.get(skillName));
        killerPlayer.beginUnsharedXpGain(
            skillType, experienceChangedKiller.get(skillName), XPGainReason.VAMPIRISM);

        victimProfile.modifySkill(skillType, victimSkillLevel - levelChangedVictim.get(skillName));
        victimProfile.removeXp(skillType, experienceChangedVictim.get(skillName));

        if (victimProfile.getSkillXpLevel(skillType) < 0) {
          victimProfile.setSkillXpLevel(skillType, 0);
        }

        if (victimProfile.getSkillLevel(skillType) < 0) {
          victimProfile.modifySkill(skillType, 0);
        }
      }
    }

    return !isCancelled;
  }