mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-16 18:02:27 +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())
|
||||
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
|
||||
|
||||
|
||||
@ -338,6 +338,13 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte
|
||||
database.SetGroupID(NewMemberName, GetID(), owner->CharacterID(), true);
|
||||
}
|
||||
}
|
||||
|
||||
Group* group = newmember->CastToClient()->GetGroup();
|
||||
if (group) {
|
||||
group->SendHPPacketsTo(newmember);
|
||||
group->SendHPPacketsFrom(newmember);
|
||||
}
|
||||
|
||||
}
|
||||
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
|
||||
void Group::SendHPPacketsTo(Mob *member)
|
||||
{
|
||||
if(member && member->IsClient())
|
||||
{
|
||||
if(member && member->IsClient()) {
|
||||
EQApplicationPacket hpapp;
|
||||
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
||||
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
|
||||
{
|
||||
if(members[i] && members[i] != member)
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) {
|
||||
if(members[i] && members[i] != member) {
|
||||
members[i]->CreateHPPacket(&hpapp);
|
||||
member->CastToClient()->QueuePacket(&hpapp, false);
|
||||
safe_delete_array(hpapp.pBuffer);
|
||||
hpapp.size = 0;
|
||||
if (member->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD)
|
||||
{
|
||||
|
||||
if (member->CastToClient()->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) {
|
||||
outapp.SetOpcode(OP_MobManaUpdate);
|
||||
|
||||
MobManaUpdate_Struct *mmus = (MobManaUpdate_Struct *)outapp.pBuffer;
|
||||
mmus->spawn_id = members[i]->GetID();
|
||||
mmus->mana = members[i]->GetManaPercent();
|
||||
member->CastToClient()->QueuePacket(&outapp, false);
|
||||
|
||||
MobEnduranceUpdate_Struct *meus = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
||||
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
||||
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));
|
||||
ServerRaidGeneralAction_Struct *rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||
rga->rid = GetID();
|
||||
@ -1539,35 +1546,37 @@ void Raid::MemberZoned(Client *c)
|
||||
group_mentor[gid].mentoree = nullptr;
|
||||
}
|
||||
|
||||
void Raid::SendHPPacketsTo(Client *c)
|
||||
void Raid::SendHPPacketsTo(Client *client)
|
||||
{
|
||||
if(!c)
|
||||
if(!client)
|
||||
return;
|
||||
|
||||
uint32 gid = this->GetGroup(c);
|
||||
EQApplicationPacket hpapp;
|
||||
uint32 group_id = this->GetGroup(client);
|
||||
|
||||
EQApplicationPacket hp_packet;
|
||||
EQApplicationPacket outapp(OP_MobManaUpdate, sizeof(MobManaUpdate_Struct));
|
||||
for(int x = 0; x < MAX_RAID_MEMBERS; x++)
|
||||
{
|
||||
if(members[x].member)
|
||||
{
|
||||
if((members[x].member != c) && (members[x].GroupNumber == gid))
|
||||
{
|
||||
members[x].member->CreateHPPacket(&hpapp);
|
||||
c->QueuePacket(&hpapp, false);
|
||||
safe_delete_array(hpapp.pBuffer);
|
||||
hpapp.size = 0;
|
||||
if (c->ClientVersion() >= EQEmu::versions::ClientVersion::SoD)
|
||||
{
|
||||
|
||||
for(int x = 0; x < MAX_RAID_MEMBERS; x++) {
|
||||
if(members[x].member) {
|
||||
if((members[x].member != client) && (members[x].GroupNumber == group_id)) {
|
||||
|
||||
members[x].member->CreateHPPacket(&hp_packet);
|
||||
client->QueuePacket(&hp_packet, false);
|
||||
safe_delete_array(hp_packet.pBuffer);
|
||||
|
||||
hp_packet.size = 0;
|
||||
if (client->ClientVersion() >= EQEmu::versions::ClientVersion::SoD) {
|
||||
|
||||
outapp.SetOpcode(OP_MobManaUpdate);
|
||||
MobManaUpdate_Struct *mmus = (MobManaUpdate_Struct *)outapp.pBuffer;
|
||||
mmus->spawn_id = members[x].member->GetID();
|
||||
mmus->mana = members[x].member->GetManaPercent();
|
||||
c->QueuePacket(&outapp, false);
|
||||
MobManaUpdate_Struct *mana_update = (MobManaUpdate_Struct *)outapp.pBuffer;
|
||||
mana_update->spawn_id = members[x].member->GetID();
|
||||
mana_update->mana = members[x].member->GetManaPercent();
|
||||
client->QueuePacket(&outapp, false);
|
||||
|
||||
outapp.SetOpcode(OP_MobEnduranceUpdate);
|
||||
MobEnduranceUpdate_Struct *meus = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
||||
meus->endurance = members[x].member->GetEndurancePercent();
|
||||
c->QueuePacket(&outapp, false);
|
||||
MobEnduranceUpdate_Struct *endurance_update = (MobEnduranceUpdate_Struct *)outapp.pBuffer;
|
||||
endurance_update->endurance = members[x].member->GetEndurancePercent();
|
||||
client->QueuePacket(&outapp, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user