mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-16 22:12:25 +00:00
Fix HP/Mana/Endurance updates for group/raids when entering-leaving zone and when initially being added to group/raid
This commit is contained in:
parent
c6c6d00bad
commit
122e71f4a3
@ -583,8 +583,17 @@ void Client::CompleteConnect()
|
|||||||
|
|
||||||
if (raid->IsLocked())
|
if (raid->IsLocked())
|
||||||
raid->SendRaidLockTo(this);
|
raid->SendRaidLockTo(this);
|
||||||
|
|
||||||
|
raid->SendHPPacketsTo(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
Group *group_update = nullptr;
|
||||||
|
group_update = this->GetGroup();
|
||||||
|
if (group_update)
|
||||||
|
group_update->SendHPPacketsTo(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//bulk raid send in here eventually
|
//bulk raid send in here eventually
|
||||||
|
|
||||||
|
|||||||
@ -338,6 +338,13 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte
|
|||||||
database.SetGroupID(NewMemberName, GetID(), owner->CharacterID(), true);
|
database.SetGroupID(NewMemberName, GetID(), owner->CharacterID(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Group* group = newmember->CastToClient()->GetGroup();
|
||||||
|
if (group) {
|
||||||
|
group->SendHPPacketsTo(newmember);
|
||||||
|
group->SendHPPacketsFrom(newmember);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -389,26 +396,25 @@ void Group::QueuePacket(const EQApplicationPacket *app, bool ack_req)
|
|||||||
// first joins a group, but otherwise there shouldn't be a need to call it
|
// first joins a group, but otherwise there shouldn't be a need to call it
|
||||||
void Group::SendHPPacketsTo(Mob *member)
|
void Group::SendHPPacketsTo(Mob *member)
|
||||||
{
|
{
|
||||||
if(member && member->IsClient())
|
if(member && member->IsClient()) {
|
||||||
{
|
|
||||||
EQApplicationPacket hpapp;
|
EQApplicationPacket hpapp;
|
||||||
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
||||||
|
|
||||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
|
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) {
|
||||||
{
|
if(members[i] && members[i] != member) {
|
||||||
if(members[i] && members[i] != member)
|
|
||||||
{
|
|
||||||
members[i]->CreateHPPacket(&hpapp);
|
members[i]->CreateHPPacket(&hpapp);
|
||||||
member->CastToClient()->QueuePacket(&hpapp, false);
|
member->CastToClient()->QueuePacket(&hpapp, false);
|
||||||
safe_delete_array(hpapp.pBuffer);
|
safe_delete_array(hpapp.pBuffer);
|
||||||
hpapp.size = 0;
|
hpapp.size = 0;
|
||||||
if (member->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD)
|
|
||||||
{
|
if (member->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) {
|
||||||
outapp.SetOpcode(OP_MobManaUpdate);
|
outapp.SetOpcode(OP_MobManaUpdate);
|
||||||
|
|
||||||
MobManaUpdate_Struct *mmus = (MobManaUpdate_Struct *)outapp.pBuffer;
|
MobManaUpdate_Struct *mmus = (MobManaUpdate_Struct *)outapp.pBuffer;
|
||||||
mmus->spawn_id = members[i]->GetID();
|
mmus->spawn_id = members[i]->GetID();
|
||||||
mmus->mana = members[i]->GetManaPercent();
|
mmus->mana = members[i]->GetManaPercent();
|
||||||
member->CastToClient()->QueuePacket(&outapp, false);
|
member->CastToClient()->QueuePacket(&outapp, false);
|
||||||
|
|
||||||
MobEnduranceUpdate_Struct *meus = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
MobEnduranceUpdate_Struct *meus = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
||||||
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
||||||
meus->endurance = members[i]->GetEndurancePercent();
|
meus->endurance = members[i]->GetEndurancePercent();
|
||||||
|
|||||||
@ -145,6 +145,13 @@ void Raid::AddMember(Client *c, uint32 group, bool rleader, bool groupleader, bo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Group *group_update = nullptr;
|
||||||
|
group_update = c->GetGroup();
|
||||||
|
if (group_update) {
|
||||||
|
group_update->SendHPPacketsTo(c);
|
||||||
|
group_update->SendHPPacketsFrom(c);
|
||||||
|
}
|
||||||
|
|
||||||
auto pack = new ServerPacket(ServerOP_RaidAdd, sizeof(ServerRaidGeneralAction_Struct));
|
auto pack = new ServerPacket(ServerOP_RaidAdd, sizeof(ServerRaidGeneralAction_Struct));
|
||||||
ServerRaidGeneralAction_Struct *rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
ServerRaidGeneralAction_Struct *rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
rga->rid = GetID();
|
rga->rid = GetID();
|
||||||
@ -1539,35 +1546,37 @@ void Raid::MemberZoned(Client *c)
|
|||||||
group_mentor[gid].mentoree = nullptr;
|
group_mentor[gid].mentoree = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Raid::SendHPPacketsTo(Client *c)
|
void Raid::SendHPPacketsTo(Client *client)
|
||||||
{
|
{
|
||||||
if(!c)
|
if(!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 gid = this->GetGroup(c);
|
uint32 group_id = this->GetGroup(client);
|
||||||
EQApplicationPacket hpapp;
|
|
||||||
|
EQApplicationPacket hp_packet;
|
||||||
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
||||||
for(int x = 0; x < MAX_RAID_MEMBERS; x++)
|
|
||||||
{
|
for(int x = 0; x < MAX_RAID_MEMBERS; x++) {
|
||||||
if(members[x].member)
|
if(members[x].member) {
|
||||||
{
|
if((members[x].member != client) && (members[x].GroupNumber == group_id)) {
|
||||||
if((members[x].member != c) && (members[x].GroupNumber == gid))
|
|
||||||
{
|
members[x].member->CreateHPPacket(&hp_packet);
|
||||||
members[x].member->CreateHPPacket(&hpapp);
|
client->QueuePacket(&hp_packet, false);
|
||||||
c->QueuePacket(&hpapp, false);
|
safe_delete_array(hp_packet.pBuffer);
|
||||||
safe_delete_array(hpapp.pBuffer);
|
|
||||||
hpapp.size = 0;
|
hp_packet.size = 0;
|
||||||
if (c->ClientVersion() >= EQEmu::versions::ClientVersion::SoD)
|
if (client->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) {
|
||||||
{
|
|
||||||
outapp.SetOpcode(OP_MobManaUpdate);
|
outapp.SetOpcode(OP_MobManaUpdate);
|
||||||
MobManaUpdate_Struct *mmus = (MobManaUpdate_Struct *)outapp.pBuffer;
|
MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer;
|
||||||
mmus->spawn_id = members[x].member->GetID();
|
mana_update->spawn_id = members[x].member->GetID();
|
||||||
mmus->mana = members[x].member->GetManaPercent();
|
mana_update->mana = members[x].member->GetManaPercent();
|
||||||
c->QueuePacket(&outapp, false);
|
client->QueuePacket(&outapp, false);
|
||||||
|
|
||||||
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
||||||
MobEnduranceUpdate_Struct *meus = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
MobEnduranceUpdate_Struct *endurance_update = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
||||||
meus->endurance = members[x].member->GetEndurancePercent();
|
endurance_update->endurance = members[x].member->GetEndurancePercent();
|
||||||
c->QueuePacket(&outapp, false);
|
client->QueuePacket(&outapp, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user