PDA

Просмотр полной версии : [tmp fix] пропажа каналов при телепортах


Chipleo
26.04.2010, 21:34
@@ -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_CHANNE L) && 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