魔兽世界私服| 新开魔兽私服文章 | 历史已开私服 | 私服家族联盟 | 私服游戏攻略 | 魔兽相关下载 | 最新版本研究 | 家族发布 | 魔兽经验交流 | 各大魔兽家族排行榜
  当前位置:返回首页>>返回私服文章首页>>技术文章内容
[最新版本研究]关于解决卡马问题的说明
魔兽私服网   发布时间:2008-4-30 16:30:34
在 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())
                {
上一篇魔兽私服文章:上一篇: 给单独种族多增加天赋
下一篇魔兽私服文章:下一篇: 伊利丹代码

Copyright 2008-2009 www.haoztw.Com All Rights Reserved(注:本站只投放九城官方授权魔兽世界私服)
品牌商标、文字、形象及内容归魔兽世界私服版权所有 任何组织或个人未经同意,不得使用和传播 网站备案登记号:渝ICP备02394311号
拒绝盗版魔兽世界私服游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活
*注释:本站所有魔兽私服游戏信息,均来自互联网,与本站无关。请玩家仔细辨认魔兽私服游戏信息的真实性,避免上当受骗!