Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Отвергнутые (http://mangos.ytdb.ru/forumdisplay.php?f=59)
-   -   [tmp fix] пропажа каналов при телепортах (http://mangos.ytdb.ru/showthread.php?t=848)

Chipleo 26.04.2010 21:34

[tmp fix] пропажа каналов при телепортах
 
Код:

@@ -75,11 +75,11 @@ void Channel::Join(uint64 p, const char *pass)
        MakeWrongPassword(&data);
        SendToOne(&data, p);
        return;
    }
 
-    Player *plr = sObjectMgr.GetPlayer(p);
+    Player *plr = HashMapHolder<Player>::Find(p);
 
    if(plr)
    {
        if(HasFlag(CHANNEL_FLAG_LFG) &&
            sWorld.getConfig(CONFIG_BOOL_RESTRICTED_LFG_CHANNEL) && plr->GetSession()->GetSecurity() == SEC_PLAYER &&
@@ -108,11 +108,12 @@ void Channel::Join(uint64 p, const char *pass)
    pinfo.player = p;
    pinfo.flags = 0;
    players[p] = pinfo;
 
    MakeYouJoined(&data);
-    SendToOne(&data, p);
+    if (plr)
+                plr->GetSession()->SendPacket(&data);
    JoinNotify(p);
 
    // if no owner first logged will become
    if(!IsConstant() && !m_ownerGUID)

когда игрок заходит в инст, он пропадает из каналов General,... такое же случается при гм командах дальних телепортов. Происходит изза того что на время перемещения игрок не в мире, поетому часть кода не работает.

Chipleo 27.04.2010 13:55

Код:

----------------------------- src/game/Player.cpp -----------------------------
index 8a53809..8ebf515 100644
@@ -1946,6 +1946,17 @@ void Player::ProcessDelayedOperations()
        CastSpell(this, 26013, true);              // Deserter
    }
 
+    if(m_DelayedOperations & DELAYED_UPDATE_ZONE)
+    {
+        UpdateLocalChannels(m_zoneUpdateId);
+
+                // group update
+                if(GetGroup())
+                        SetGroupUpdateFlag(GROUP_UPDATE_FLAG_ZONE);
+
+                UpdateZoneDependentAuras(m_zoneUpdateId);
+    }
+
    //we have executed ALL delayed ops, so clear the flag
    m_DelayedOperations = 0;
 }
@@ -6422,6 +6441,12 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
        DestroyZoneLimitedItem( true, newZone );
 
    // recent client version not send leave/join channel packets for built-in local channels
+        if(!IsInWorld())
+        {
+        ScheduleDelayedOperation(DELAYED_UPDATE_ZONE);
+                return;
+        }
+
    UpdateLocalChannels( newZone );
 
    // group update

------------------------------ src/game/Player.h ------------------------------
index d84e931..d003853 100644
@@ -740,6 +740,7 @@ enum PlayerDelayedOperations
    DELAYED_SAVE_PLAYER = 1,
    DELAYED_RESURRECT_PLAYER = 2,
    DELAYED_SPELL_CAST_DESERTER = 4,
+        DELAYED_UPDATE_ZONE = 8,
    DELAYED_END
 };

другой, более правильный способ исправления бага. Вместе с тем, замечен еще баг, который все еще не исправлен - если игрок в пати телепортируется в инст, а пати вне инста - пати видит статус игрока - оффлайн.

SeT 28.04.2010 21:28

Такой баг кажется есть и в мастер ветке.

Vladimir 19.12.2010 14:53

Должно было быть поправлено после переноса обновления каналов в SendInitialPacketsAfterAddToMap


Текущее время: 07:23. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS