[12659] Fixed mounts

This commit is contained in:
sanctum32 2013-08-05 18:37:27 +03:00 committed by Antz
parent 1997c1e903
commit a253344a02
9 changed files with 105 additions and 3 deletions

View file

@ -8186,6 +8186,67 @@ void Unit::Unmount(bool from_aura)
}
}
MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const
{
if (!mountType)
return NULL;
MountTypeEntry const* mountTypeEntry = sMountTypeStore.LookupEntry(mountType);
if (!mountTypeEntry)
return NULL;
uint32 zoneId, areaId;
GetZoneAndAreaId(zoneId, areaId);
uint32 ridingSkill = 5000;
if (GetTypeId() == TYPEID_PLAYER)
{
Player* plr = (Player*)(this);
ridingSkill = plr->GetSkillValue(SKILL_RIDING);
}
for (uint32 i = MAX_MOUNT_CAPABILITIES; i > 0; --i)
{
MountCapabilityEntry const* mountCapability = sMountCapabilityStore.LookupEntry(mountTypeEntry->MountCapability[i - 1]);
if (!mountCapability)
continue;
if (ridingSkill < mountCapability->RequiredRidingSkill)
continue;
if (m_movementInfo.HasMovementFlag2(MOVEFLAG2_FULLSPEEDPITCHING))
{
if (!(mountCapability->Flags & MOUNT_FLAG_CAN_PITCH))
continue;
}
else if (m_movementInfo.HasMovementFlag(MOVEFLAG_SWIMMING))
{
if (!(mountCapability->Flags & MOUNT_FLAG_CAN_SWIM))
continue;
}
else if (!(mountCapability->Flags & 0x1)) // unknown flags, checked in 4.2.2 14545 client
{
if (!(mountCapability->Flags & 0x2))
continue;
}
if (mountCapability->RequiredMap != -1 && int32(GetMapId()) != mountCapability->RequiredMap)
continue;
if (mountCapability->RequiredArea && (mountCapability->RequiredArea != zoneId && mountCapability->RequiredArea != areaId))
continue;
if (mountCapability->RequiredAura && !HasAura(mountCapability->RequiredAura))
continue;
if (mountCapability->RequiredSpell && (GetTypeId() != TYPEID_PLAYER || !(Player*)(this)->HasSpell(mountCapability->RequiredSpell)))
continue;
return mountCapability;
}
return NULL;
}
void Unit::SetInCombatWith(Unit* enemy)
{
Unit* eOwner = enemy->GetCharmerOrOwnerOrSelf();