mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[12659] Fixed mounts
This commit is contained in:
parent
1997c1e903
commit
a253344a02
9 changed files with 105 additions and 3 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue