/* Fires when a weapon hits a target. * If sender == NULL, this mean we pseudofired this event from * executeServerCommand(). * IE: what happened is that we had a hit on the server side but by the time it reached here to propogate, * this local Weapons class had disposed of the local copy of the projectile. * However, we still need to propogate the hit. * */ public void eventHit(Explosive sender, Projector target, int damageAmount, //0 if from server or LTS WeaponTypes type) //Used if weapon has been deleted by the time hit event registers on server { if (sender != null) { sender.eventHit -= eventHit; } bool killed = target.damage - damageAmount <= 0; if (killed) { target.indicateDestroyedBy(creator.name, creator.id); } if (!executingServerData && target.isSender()) { writer.Write(sender.id.Replace(creator.id, null)); writer.Write(target.id); writer.Write((byte)type); writer.Flush(); weaponEvents++; } if (!executingServerData && !(sender is LaserCannonSystem)) //we already get new damage value from server. { target.hit(damageAmount, Interaction.Cause.destroyedByWeapon); } if (killed) { if (destroy != null) { destroy(target); } return; } if (strike != null) { strike(type == WeaponTypes.laserCannonSystem); } if (sender == null) { doNullSender(type, target); } }