Misc Fixes

This commit is contained in:
hondacrx
2017-10-04 12:32:33 -04:00
parent 911e039571
commit e45c13a8dc
8 changed files with 25 additions and 15 deletions
+1
View File
@@ -406,6 +406,7 @@ namespace Framework.Constants
} }
public enum FactionTemplateFlags public enum FactionTemplateFlags
{ {
EnemySpar = 0x20, // guessed, sparring with enemies?
PVP = 0x800, // flagged for PvP PVP = 0x800, // flagged for PvP
ContestedGuard = 0x1000, // faction will attack players that were involved in PvP combats ContestedGuard = 0x1000, // faction will attack players that were involved in PvP combats
HostileByDefault = 0x2000 HostileByDefault = 0x2000
+11 -2
View File
@@ -73,16 +73,25 @@ namespace Game.AI
if (!me.IsWithinMeleeRange(victim)) if (!me.IsWithinMeleeRange(victim))
return; return;
bool sparAttack = me.GetFactionTemplateEntry().ShouldSparAttack() && victim.GetFactionTemplateEntry().ShouldSparAttack();
//Make sure our attack is ready and we aren't currently casting before checking distance //Make sure our attack is ready and we aren't currently casting before checking distance
if (me.isAttackReady()) if (me.isAttackReady())
{ {
me.AttackerStateUpdate(victim); if (sparAttack)
me.FakeAttackerStateUpdate(victim);
else
me.AttackerStateUpdate(victim);
me.resetAttackTimer(); me.resetAttackTimer();
} }
if (me.haveOffhandWeapon() && me.isAttackReady(WeaponAttackType.OffAttack)) if (me.haveOffhandWeapon() && me.isAttackReady(WeaponAttackType.OffAttack))
{ {
me.AttackerStateUpdate(victim, WeaponAttackType.OffAttack); if (sparAttack)
me.FakeAttackerStateUpdate(victim, WeaponAttackType.OffAttack);
else
me.AttackerStateUpdate(victim, WeaponAttackType.OffAttack);
me.resetAttackTimer(WeaponAttackType.OffAttack); me.resetAttackTimer(WeaponAttackType.OffAttack);
} }
} }
+2 -1
View File
@@ -594,6 +594,7 @@ namespace Game.AI
if (!who) if (!who)
who = me; who = me;
TempSummon whoSummon = who.ToTempSummon(); TempSummon whoSummon = who.ToTempSummon();
if (whoSummon) if (whoSummon)
{ {
@@ -602,7 +603,7 @@ namespace Game.AI
return; return;
} }
me.DespawnOrUnsummon(0, TimeSpan.FromSeconds(delayToRespawn)); who.DespawnOrUnsummon(0, TimeSpan.FromSeconds(delayToRespawn));
if (instance != null && who == me) if (instance != null && who == me)
instance.SetBossState(_bossId, EncounterState.Fail); instance.SetBossState(_bossId, EncounterState.Fail);
+1 -6
View File
@@ -1069,12 +1069,7 @@ namespace Game.AI
if (obj.IsTypeId(TypeId.Unit)) if (obj.IsTypeId(TypeId.Unit))
{ {
Creature target = obj.ToCreature(); Creature target = obj.ToCreature();
if (target.IsAlive() && IsSmart(target)) if (target)
{
((SmartAI)target.GetAI()).SetDespawnTime(e.Action.forceDespawn.delay + 1, e.Action.forceDespawn.respawn); // Next tick
((SmartAI)target.GetAI()).StartDespawn();
}
else
target.DespawnOrUnsummon(e.Action.forceDespawn.delay, TimeSpan.FromSeconds(e.Action.forceDespawn.respawn)); target.DespawnOrUnsummon(e.Action.forceDespawn.delay, TimeSpan.FromSeconds(e.Action.forceDespawn.respawn));
} }
else if (obj.IsTypeId(TypeId.GameObject)) else if (obj.IsTypeId(TypeId.GameObject))
+1 -1
View File
@@ -499,7 +499,7 @@ namespace Game.DataStorage
public string GetBroadcastTextValue(BroadcastTextRecord broadcastText, LocaleConstant locale = LocaleConstant.enUS, Gender gender = Gender.Male, bool forceGender = false) public string GetBroadcastTextValue(BroadcastTextRecord broadcastText, LocaleConstant locale = LocaleConstant.enUS, Gender gender = Gender.Male, bool forceGender = false)
{ {
if (gender == Gender.Female && (forceGender || broadcastText.FemaleText.HasString(SharedConst.DefaultLocale))) if ((gender == Gender.Female || gender == Gender.None) && (forceGender || broadcastText.FemaleText.HasString(SharedConst.DefaultLocale)))
{ {
if (broadcastText.FemaleText.HasString(locale)) if (broadcastText.FemaleText.HasString(locale))
return broadcastText.FemaleText[locale]; return broadcastText.FemaleText[locale];
+1
View File
@@ -98,5 +98,6 @@ namespace Game.DataStorage
return EnemyMask == 0 && FriendMask == 0; return EnemyMask == 0 && FriendMask == 0;
} }
public bool IsContestedGuardFaction() { return Flags.HasAnyFlag((ushort)FactionTemplateFlags.ContestedGuard); } public bool IsContestedGuardFaction() { return Flags.HasAnyFlag((ushort)FactionTemplateFlags.ContestedGuard); }
public bool ShouldSparAttack() { return Flags.HasAnyFlag((ushort)FactionTemplateFlags.EnemySpar); }
} }
} }
-5
View File
@@ -2921,11 +2921,6 @@ namespace Game.Entities
|| (target.IsTypeId(TypeId.Player) && target.ToPlayer().IsGameMaster())) || (target.IsTypeId(TypeId.Player) && target.ToPlayer().IsGameMaster()))
return false; return false;
// can't attack own vehicle or passenger
if (m_vehicle != null)
if (IsOnVehicle(target) || m_vehicle.GetBase().IsOnVehicle(target))
return false;
// can't attack invisible (ignore stealth for aoe spells) also if the area being looked at is from a spell use the dynamic object created instead of the casting unit. Ignore stealth if target is player and unit in combat with same player // can't attack invisible (ignore stealth for aoe spells) also if the area being looked at is from a spell use the dynamic object created instead of the casting unit. Ignore stealth if target is player and unit in combat with same player
if ((bySpell == null || !bySpell.HasAttribute(SpellAttr6.CanTargetInvisible)) && (obj ? !obj.CanSeeOrDetect(target, bySpell != null && bySpell.IsAffectingArea(GetMap().GetDifficultyID())) : !CanSeeOrDetect(target, (bySpell != null && bySpell.IsAffectingArea(GetMap().GetDifficultyID())) || (target.IsTypeId(TypeId.Player) && target.HasStealthAura() && target.IsInCombat() && IsInCombatWith(target))))) if ((bySpell == null || !bySpell.HasAttribute(SpellAttr6.CanTargetInvisible)) && (obj ? !obj.CanSeeOrDetect(target, bySpell != null && bySpell.IsAffectingArea(GetMap().GetDifficultyID())) : !CanSeeOrDetect(target, (bySpell != null && bySpell.IsAffectingArea(GetMap().GetDifficultyID())) || (target.IsTypeId(TypeId.Player) && target.HasStealthAura() && target.IsInCombat() && IsInCombatWith(target)))))
return false; return false;
+8
View File
@@ -1063,9 +1063,17 @@ namespace Scripts.Spells.Generic
target.ToCreature().SetReactState(ReactStates.Passive); target.ToCreature().SetReactState(ReactStates.Passive);
} }
void OnRemove(AuraEffect aurEff, AuraEffectHandleModes mode)
{
Unit target = GetTarget();
target.RemoveFlag(ObjectFields.DynamicFlags, UnitDynFlags.Dead);
target.RemoveFlag(UnitFields.Flags2, UnitFlags2.FeignDeath);
}
public override void Register() public override void Register()
{ {
OnEffectApply.Add(new EffectApplyHandler(HandleEffectApply, 0, AuraType.Dummy, AuraEffectHandleModes.Real)); OnEffectApply.Add(new EffectApplyHandler(HandleEffectApply, 0, AuraType.Dummy, AuraEffectHandleModes.Real));
OnEffectRemove.Add(new EffectApplyHandler(OnRemove, 0, AuraType.Dummy, AuraEffectHandleModes.Real));
} }
} }