public virtual Hashtable Fire(NebulaObject targetObject, out WeaponHitInfo hit, int skillID = -1, float damageMult = 1.0f, bool forceShot = false, bool useDamageMultSelfAsDamage = false) { m_NotResettableShotCounter++; MakeMeVisible(); hit = new WeaponHitInfo(); if (CheckWeaponTarget(targetObject)) { Hashtable result = new Hashtable(); result.Add((int)SPC.Source, nebulaObject.Id); result.Add((int)SPC.SourceType, nebulaObject.Type); result.Add((int)SPC.Target, targetObject.Id); result.Add((int)SPC.TargetType, targetObject.Type); result.Add((int)SPC.Workshop, cachedCharacter.workshop); result.Add((int)SPC.Skill, skillID); //InputDamage inputDamage = new InputDamage(nebulaObject, GetDamage()) if (forceShot) { InputDamage inputDamage = new InputDamage(nebulaObject, GetDamage(false)); CompleteForceShot(targetObject, ref hit, damageMult, useDamageMultSelfAsDamage, inputDamage); inputDamage.SetHitInfo(hit); } else { CheckWeaponBlocked(hit); if (hit.interrupted) { UnblockSingleShot(); WeaponDamage dmg = GetDamage(false); dmg.ClearAllDamages(); InputDamage inputDamage = new InputDamage(nebulaObject, dmg); inputDamage.SetHitInfo(hit); } else { WeaponDamage damage = null; if (IsCritical(ref hit)) { damage = GetDamage(true); } else { damage = GetDamage(false); } InputDamage inputDamage = new InputDamage(nebulaObject, damage); CheckWeaponDistance(targetObject, hit); if (hit.interrupted) { damage.ClearAllDamages(); } else { CheckWeaponHit(targetObject, hit); if (hit.interrupted) { damage.ClearAllDamages(); } else { if (nebulaObject.IsPlayer()) { nebulaObject.SendMessage(ComponentMessages.OnCriticalHit); } shotCounter++; ApplyDamage(ref hit, targetObject.Damagable(), damageMult, useDamageMultSelfAsDamage, inputDamage); } } inputDamage.SetHitInfo(hit); } } foreach (DictionaryEntry entry in hit.GetInfo()) { result[(int)entry.Key] = entry.Value; } CheckPlayerAgro(targetObject); SendFireMessage(hit); //log.InfoFormat("final hit state: {0}", hit.state); return(result); } return(new Hashtable()); }
//public void SetDamage(WeaponDamage dmg) { // m_Damage = dmg; //} public void ClearAllDamages() { m_Damage.ClearAllDamages(); }