Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public int CalcHitChance(IsoGameCharacter character, HandWeapon weapon, HitInfo target) {
- IsoMovingObject movingObject = target.getObject();
- if (movingObject == null) {
- return 0;
- } else {
- if (character.getVehicle() != null) {
- BaseVehicle vehicle = character.getVehicle();
- Vector3f vehicleFwdVector = vehicle.getForwardVector((Vector3f)((BaseVehicle.Vector3fObjectPool)BaseVehicle.TL_vector3f_pool.get()).alloc());
- Vector2 vehicleTLVector2 = (Vector2)((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).alloc();
- vehicleTLVector2.x = vehicleFwdVector.x;
- vehicleTLVector2.y = vehicleFwdVector.z;
- vehicleTLVector2.normalize();
- int seat = vehicle.getSeat(character);
- VehicleScript.Area passengerArea = vehicle.getScript().getAreaById(vehicle.getPassengerArea(seat));
- byte _vehicleVRotation = -90;
- if (passengerArea.x > 0.0F) {
- _vehicleVRotation = 90;
- }
- vehicleTLVector2.rotate((float)Math.toRadians((double)_vehicleVRotation));
- vehicleTLVector2.normalize();
- Vector2 vehicleTLVector2Upd = (Vector2)((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).alloc();
- vehicleTLVector2Upd.x = movingObject.x;
- vehicleTLVector2Upd.y = movingObject.y;
- vehicleTLVector2Upd.x -= character.x;
- vehicleTLVector2Upd.y -= character.y;
- vehicleTLVector2Upd.normalize();
- float vehicleDot = vehicleTLVector2Upd.dot(vehicleTLVector2);
- if ((double)vehicleDot > -0.6) {
- return 0;
- }
- ((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).release(vehicleTLVector2);
- ((BaseVehicle.Vector2ObjectPool)BaseVehicle.TL_vector2_pool.get()).release(vehicleTLVector2Upd);
- ((BaseVehicle.Vector3fObjectPool)BaseVehicle.TL_vector3f_pool.get()).release(vehicleFwdVector);
- }
- if (System.currentTimeMillis() - character.lastAutomaticShoot > 600L) {
- character.shootInARow = 0;
- }
- // basic hit chance with aiming perks
- int hitChance = weapon.getHitChance();
- hitChance = (int)((float)hitChance + weapon.getAimingPerkHitChanceModifier() * (float)character.getPerkLevel(PerkFactory.Perks.Aiming));
- if (hitChance > 95) {
- hitChance = 95;
- }
- hitChance -= character.shootInARow * 2;
- float targetDistance = PZMath.sqrt(target.distSq);
- float _hitChanceMod = 1.3F;
- if (movingObject instanceof IsoPlayer) {
- targetDistance = (float)((double)targetDistance * 1.5);
- _hitChanceMod = 1.0F;
- }
- hitChance = (int)((float)hitChance + (weapon.getMaxRange() * weapon.getRangeMod(character) - targetDistance) * _hitChanceMod);
- if (weapon.getMinRangeRanged() > 0.0F) {
- if (targetDistance < weapon.getMinRangeRanged()) {
- hitChance -= 50;
- }
- } else if ((double)targetDistance < 1.7 && weapon.isRanged() && !(movingObject instanceof IsoPlayer)) {
- hitChance += 35;
- }
- if (weapon.isRanged() && character.getBeenMovingFor() > (float)(weapon.getAimingTime() + character.getPerkLevel(PerkFactory.Perks.Aiming))) {
- hitChance = (int)((float)hitChance - (character.getBeenMovingFor() - (float)(weapon.getAimingTime() + character.getPerkLevel(PerkFactory.Perks.Aiming))));
- }
- if (target.getObject() instanceof IsoPlayer) {
- IsoPlayer targetPlayerObject = (IsoPlayer)target.getObject();
- if (targetPlayerObject.isPlayerMoving()) {
- hitChance -= 5;
- }
- if (targetPlayerObject.isRunning()) {
- hitChance -= 10;
- }
- if (targetPlayerObject.isSprinting()) {
- hitChance -= 15;
- }
- }
- if (weapon.isRanged() && character.getVehicle() != null) {
- hitChance = (int)((float)hitChance - Math.abs(character.getVehicle().getCurrentSpeedKmHour()) * 2.0F);
- }
- if (character.Traits.Marksman.isSet()) {
- hitChance += 20;
- }
- float totalPainValue = 0.0F;
- for(int i = BodyPartType.ToIndex(BodyPartType.Hand_L); i <= BodyPartType.ToIndex(BodyPartType.UpperArm_R); ++i) {
- totalPainValue += ((BodyPart)character.getBodyDamage().getBodyParts().get(i)).getPain();
- }
- if (totalPainValue > 0.0F) {
- hitChance = (int)((float)hitChance - totalPainValue / 10.0F);
- }
- hitChance -= character.getMoodles().getMoodleLevel(MoodleType.Tired) * 5;
- if (hitChance <= 10) {
- hitChance = 10;
- }
- if (hitChance > 100 || !weapon.isRanged()) {
- hitChance = 100;
- }
- return hitChance;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement