Advertisement
Guest User

Untitled

a guest
Aug 12th, 2022
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.99 KB | None | 0 0
  1.    public int CalcHitChance(IsoGameCharacter character, HandWeapon weapon, HitInfo target) {
  2.       IsoMovingObject movingObject = target.getObject();
  3.       if (movingObject == null) {
  4.          return 0;
  5.       } else {
  6.          if (character.getVehicle() != null) {
  7.             BaseVehicle vehicle = character.getVehicle();
  8.             Vector3f vehicleFwdVector = vehicle.getForwardVector((Vector3f)((BaseVehicle.Vector3fObjectPool)BaseVehicle.TL_vector3f_pool.get()).alloc());
  9.             Vector2 vehicleTLVector2 = (Vector2)((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).alloc();
  10.             vehicleTLVector2.x = vehicleFwdVector.x;
  11.             vehicleTLVector2.y = vehicleFwdVector.z;
  12.             vehicleTLVector2.normalize();
  13.             int seat = vehicle.getSeat(character);
  14.             VehicleScript.Area passengerArea = vehicle.getScript().getAreaById(vehicle.getPassengerArea(seat));
  15.             byte _vehicleVRotation = -90;
  16.             if (passengerArea.x > 0.0F) {
  17.                _vehicleVRotation = 90;
  18.             }
  19.  
  20.             vehicleTLVector2.rotate((float)Math.toRadians((double)_vehicleVRotation));
  21.             vehicleTLVector2.normalize();
  22.             Vector2 vehicleTLVector2Upd = (Vector2)((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).alloc();
  23.             vehicleTLVector2Upd.x = movingObject.x;
  24.             vehicleTLVector2Upd.y = movingObject.y;
  25.             vehicleTLVector2Upd.x -= character.x;
  26.             vehicleTLVector2Upd.y -= character.y;
  27.             vehicleTLVector2Upd.normalize();
  28.             float vehicleDot = vehicleTLVector2Upd.dot(vehicleTLVector2);
  29.             if ((double)vehicleDot > -0.6) {
  30.                return 0;
  31.             }
  32.  
  33.             ((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).release(vehicleTLVector2);
  34.             ((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).release(vehicleTLVector2Upd);
  35.             ((BaseVehicle.Vector3fObjectPool)BaseVehicle.TL_vector3f_pool.get()).release(vehicleFwdVector);
  36.          }
  37.  
  38.          if (System.currentTimeMillis() - character.lastAutomaticShoot > 600L) {
  39.             character.shootInARow = 0;
  40.          }
  41.  
  42.          // basic hit chance with aiming perks
  43.          int hitChance = weapon.getHitChance();
  44.          hitChance = (int)((float)hitChance + weapon.getAimingPerkHitChanceModifier() * (float)character.getPerkLevel(PerkFactory.Perks.Aiming));
  45.          if (hitChance > 95) {
  46.             hitChance = 95;
  47.          }
  48.  
  49.          hitChance -= character.shootInARow * 2;
  50.          float targetDistance = PZMath.sqrt(target.distSq);
  51.          float _hitChanceMod = 1.3F;
  52.          if (movingObject instanceof IsoPlayer) {
  53.             targetDistance = (float)((double)targetDistance * 1.5);
  54.             _hitChanceMod = 1.0F;
  55.          }
  56.  
  57.          hitChance = (int)((float)hitChance + (weapon.getMaxRange() * weapon.getRangeMod(character) - targetDistance) * _hitChanceMod);
  58.          if (weapon.getMinRangeRanged() > 0.0F) {
  59.             if (targetDistance < weapon.getMinRangeRanged()) {
  60.                hitChance -= 50;
  61.             }
  62.          } else if ((double)targetDistance < 1.7 && weapon.isRanged() && !(movingObject instanceof IsoPlayer)) {
  63.             hitChance += 35;
  64.          }
  65.  
  66.          if (weapon.isRanged() && character.getBeenMovingFor() > (float)(weapon.getAimingTime() + character.getPerkLevel(PerkFactory.Perks.Aiming))) {
  67.             hitChance = (int)((float)hitChance - (character.getBeenMovingFor() - (float)(weapon.getAimingTime() + character.getPerkLevel(PerkFactory.Perks.Aiming))));
  68.          }
  69.  
  70.          if (target.getObject() instanceof IsoPlayer) {
  71.             IsoPlayer targetPlayerObject = (IsoPlayer)target.getObject();
  72.             if (targetPlayerObject.isPlayerMoving()) {
  73.                hitChance -= 5;
  74.             }
  75.  
  76.             if (targetPlayerObject.isRunning()) {
  77.                hitChance -= 10;
  78.             }
  79.  
  80.             if (targetPlayerObject.isSprinting()) {
  81.                hitChance -= 15;
  82.             }
  83.          }
  84.  
  85.          if (weapon.isRanged() && character.getVehicle() != null) {
  86.             hitChance = (int)((float)hitChance - Math.abs(character.getVehicle().getCurrentSpeedKmHour()) * 2.0F);
  87.          }
  88.  
  89.          if (character.Traits.Marksman.isSet()) {
  90.             hitChance += 20;
  91.          }
  92.  
  93.          float totalPainValue = 0.0F;
  94.  
  95.          for(int i = BodyPartType.ToIndex(BodyPartType.Hand_L); i <= BodyPartType.ToIndex(BodyPartType.UpperArm_R); ++i) {
  96.             totalPainValue += ((BodyPart)character.getBodyDamage().getBodyParts().get(i)).getPain();
  97.          }
  98.  
  99.          if (totalPainValue > 0.0F) {
  100.             hitChance = (int)((float)hitChance - totalPainValue / 10.0F);
  101.          }
  102.  
  103.          hitChance -= character.getMoodles().getMoodleLevel(MoodleType.Tired) * 5;
  104.          if (hitChance <= 10) {
  105.             hitChance = 10;
  106.          }
  107.  
  108.          if (hitChance > 100 || !weapon.isRanged()) {
  109.             hitChance = 100;
  110.          }
  111.  
  112.          return hitChance;
  113.       }
  114.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement