魔兽私服 经验交流 发布家族 高手进阶心得 软件下载 魔兽私服技术文章 家族联盟 广告合作

关于解决卡马问题的说明

在 player.cpp 最下面加入

void Player::ChackMountdisplay()
{
        if(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID) == 0)
                return;
        else
        {
                SetUInt32Value( UNIT_FIELD_MOUNTDISPLAYID , 0);
                if(HasFlag(UNIT_FIELD_FLAGS, U_FIELD_FLAG_MOUNT_SIT))
                        RemoveFlag( UNIT_FIELD_FLAGS , U_FIELD_FLAG_MOUNT_SIT );
                if(m_MountSpellId)
                        RemoveAura(m_MountSpellId);
                if(flying_aura)
                        RemoveAura(flying_aura);
                return;
        }
}

其次在 player.h 里面加入

        uint32 SoulStone;
+        void ChackMountdisplay();

这样,就可以在需要检测的地方调用上面的代码

具体是下面的几处

void WorldSession::_HandleAreaTriggerOpcode(uint32 id)
{               
        sLog.outDebug("AreaTrigger: %u", id);

        AreaTrigger * pAreaTrigger = AreaTriggerStorage.LookupEntry(id);

        // Are we REALLY here?
        if(pAreaTrigger)
        {
                LocationVector l(pAreaTrigger->x, pAreaTrigger->y, pAreaTrigger->z);
                if((_player->GetMapId() == pAreaTrigger->Mapid) && _player->CalcDistance(l) > sWorld.GetUpdateDistance())
                        return;
        }

        WorldPacket data(80);

        // Search quest log, find any exploration quests
        sQuestMgr.OnPlayerExploreArea(GetPlayer(),id);

+        if(GetPlayer()->GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID) != 0)
+                GetPlayer()->ChackMountdisplay();


==========================================================================

void Spell::HandleTeleport(uint32 id, Unit* Target)
{
        if(Target->GetTypeId()!=TYPEID_PLAYER)
                return;

+        Player* pTarget = (Player*)Target;
+        if(pTarget->GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID) != 0)
+        {
+                pTarget->ChackMountdisplay();
+                return;
+        }

还有一处就是 NPC 传送加入,因为传送代码都不一样,所以,只是一个提示,我的是下面的这样,可以参考一下

bool Player::NPCTeler(uint32 MapID, const LocationVector & v)
{
        if( !MapID || !IsInWorld() || !isAlive())
                return false;

        if(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID) != 0)
                ChackMountdisplay();

        if(GetPlayerStatus() != TRANSFER_PENDING)
        {
                SaveEntryPoint(MapID);       

                MapInfo * pMapinfo = WorldMapInfoStorage.LookupEntry(MapID);
                if(!pMapinfo)
                        return false;

                if(pMapinfo && !pMapinfo->HasFlag(WMI_INSTANCE_ENA*LED) && !GetSession()->HasGMPermissions())
                {

上一篇魔兽私服文章:上一篇: 给单独种族多增加天赋
下一篇魔兽私服文章:下一篇: 伊利丹代码
魔兽世界私服 魔兽世界下载 wow魔兽私服
五二我的wow魔兽私服网 www.52mysf.com 提供最新开魔兽世界私服发布 版权所有