示例#1
0
  /**
   * @param attacker
   * @param target
   * @return
   */
  public static int calculateSubHandPhysicDamageToTarget(Creature attacker, Creature attacked) {
    CreatureGameStats<?> ags = attacker.getGameStats();

    int min = ags.getCurrentStat(StatEnum.SUB_MIN_DAMAGES);
    int max = ags.getCurrentStat(StatEnum.SUB_MAX_DAMAGES);
    int average = Math.round((min + max) / 2);

    Equipment equipment = ((Player) attacker).getEquipment();

    if (average < 1) {
      average = 1;
      log.warn("Weapon stat MIN_MAX_DAMAGE resulted average zero in sub-hand calculation");
      log.warn(
          "Weapon ID: "
              + String.valueOf(equipment.getSubHandWeapon().getItemTemplate().getTemplateId()));
      log.warn("MIN_DAMAGE = " + String.valueOf(min));
      log.warn("MAX_DAMAGE = " + String.valueOf(max));
    }

    int base = Rnd.get(min, max);

    int damage = base + ags.getStatBonus(StatEnum.SUB_HAND_PHYSICAL_ATTACK);

    if (attacker.isInState(CreatureState.POWERSHARD)) {
      Item subHandPowerShard = equipment.getSubHandPowerShard();
      if (subHandPowerShard != null) {
        damage += subHandPowerShard.getItemTemplate().getWeaponBoost();
        equipment.usePowerShard(subHandPowerShard, 1);
      }
    }
    int dualEffect = ((Player) attacker).getEffectController().getDualEffect();
    if (dualEffect == 0) {
      log.warn(
          "Missing dualeffect for player "
              + ((Player) attacker).getName()
              + " possible hack? or bug?");
      dualEffect = 25;
    }

    if (Rnd.get(0, 100) < 25) damage *= (dualEffect * 0.007f);

    // physical defense
    damage -= Math.round(attacked.getGameStats().getCurrentStat(StatEnum.PHYSICAL_DEFENSE) * 0.10f);

    if (damage <= 0) damage = 1;

    return damage;
  }