private void ApplyDamage(Part hitPart, RaycastHit hit, float multiplier, float penetrationfactor) { if (OnlyVisual) { return; } //hitting a vessel Part //No struts, they cause weird bugs :) -BahamutoD if (hitPart == null) { return; } if (hitPart.partInfo.name.Contains("Strut")) { return; } if (BDArmorySettings.BULLET_HITS) { BulletHitFX.CreateBulletHit(hitPart, hit.point, hit, hit.normal, hasRichocheted, caliber, penetrationfactor); } if (explosive) { hitPart.AddBallisticDamage(bulletMass - tntMass, caliber, multiplier, penetrationfactor, bulletDmgMult, impactVelocity); } else { hitPart.AddBallisticDamage(bulletMass, caliber, multiplier, penetrationfactor, bulletDmgMult, impactVelocity); } }
public static void ApplyDamage(Part hitPart, RaycastHit hit, float multiplier, float penetrationfactor, float caliber, float projmass, float impactVelocity, float DmgMult, double distanceTraveled, bool explosive, bool hasRichocheted, Vessel sourceVessel, string name) { //hitting a vessel Part //No struts, they cause weird bugs :) -BahamutoD if (hitPart == null) { return; } if (hitPart.partInfo.name.Contains("Strut")) { return; } // Add decals if (BDArmorySettings.BULLET_HITS) { BulletHitFX.CreateBulletHit(hitPart, hit.point, hit, hit.normal, hasRichocheted, caliber, penetrationfactor); } // Apply damage float damage; damage = hitPart.AddBallisticDamage(projmass, caliber, multiplier, penetrationfactor, DmgMult, impactVelocity); if (BDArmorySettings.BATTLEDAMAGE) { BattleDamageHandler.CheckDamageFX(hitPart, caliber, penetrationfactor, explosive, sourceVessel.GetName(), hit); } // Debug.Log("DEBUG Ballistic damage to " + hitPart + ": " + damage + ", calibre: " + caliber + ", multiplier: " + multiplier + ", pen: " + penetrationfactor); // Update scoring structures ApplyScore(hitPart, sourceVessel, distanceTraveled, damage, name); }
private void ApplyDamage(Part hitPart, RaycastHit hit, float multiplier, float penetrationfactor) { //hitting a vessel Part //No struts, they cause weird bugs :) -BahamutoD if (hitPart == null) { return; } if (hitPart.partInfo.name.Contains("Strut")) { return; } // Add decals if (BDArmorySettings.BULLET_HITS) { BulletHitFX.CreateBulletHit(hitPart, hit.point, hit, hit.normal, hasRichocheted, caliber, penetrationfactor); } // Apply damage float damage; //if (explosive) //{ // damage = hitPart.AddBallisticDamage(bulletMass - tntMass, caliber, multiplier, penetrationfactor, bulletDmgMult, impactVelocity, hit, sourceVessel.GetName()); //} //why? The mass of HE filler isn't going to have disapeared before the bullet hits something, and if it has, it means there isn't a bullet left to hit things //else //{ damage = hitPart.AddBallisticDamage(bulletMass, caliber, multiplier, penetrationfactor, bulletDmgMult, impactVelocity); //} if (BDArmorySettings.BATTLEDAMAGE) { Misc.BattleDamageHandler.CheckDamageFX(hitPart, caliber, penetrationfactor, explosive, sourceVessel.GetName(), hit); } // Debug.Log("DEBUG Ballistic damage to " + hitPart + ": " + damage + ", calibre: " + caliber + ", multiplier: " + multiplier + ", pen: " + penetrationfactor); // Update scoring structures var aName = this.sourceVessel.GetName(); var tName = hitPart.vessel.GetName(); if (aName != null && tName != null && aName != tName && BDACompetitionMode.Instance.Scores.ContainsKey(aName) && BDACompetitionMode.Instance.Scores.ContainsKey(tName)) { //Debug.Log("[BDArmory]: Weapon from " + aName + " damaged " + tName); if (BDArmorySettings.REMOTE_LOGGING_ENABLED) { BDAScoreService.Instance.TrackHit(aName, tName, bullet.name, distanceTraveled); BDAScoreService.Instance.TrackDamage(aName, tName, damage); } // update scoring structure on attacker { var aData = BDACompetitionMode.Instance.Scores[aName]; aData.Score += 1; // keep track of who shot who for point keeping // competition logic for 'Pinata' mode - this means a pilot can't be named 'Pinata' if (hitPart.vessel.GetName() == "Pinata") { aData.PinataHits++; } } // update scoring structure on the defender. { var tData = BDACompetitionMode.Instance.Scores[tName]; tData.lastPersonWhoHitMe = aName; tData.lastHitTime = Planetarium.GetUniversalTime(); tData.everyoneWhoHitMe.Add(aName); // Track hits if (tData.hitCounts.ContainsKey(aName)) { ++tData.hitCounts[aName]; } else { tData.hitCounts.Add(aName, 1); } // Track damage if (tData.damageFromBullets.ContainsKey(aName)) { tData.damageFromBullets[aName] += damage; } else { tData.damageFromBullets.Add(aName, damage); } } } }