mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
[Crash] Fix for crash in Raid::QueuePacket (#3145)
* [Crash] Fix for crash in Raid::QueuePacket * bots can't be a part of BalanceMana * corrected additions * adding additional is_bot gates * updating raid for loops to be range based. * typo * formatting * formatting
This commit is contained in:
parent
2e4071cdcf
commit
7f41547963
@ -2505,8 +2505,10 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
|
|||||||
bool ownerInGroup = false;
|
bool ownerInGroup = false;
|
||||||
if ((give_exp->HasGroup() && give_exp->GetGroup()->IsGroupMember(give_exp->GetUltimateOwner()))
|
if ((give_exp->HasGroup() && give_exp->GetGroup()->IsGroupMember(give_exp->GetUltimateOwner()))
|
||||||
|| (give_exp->IsPet() && (give_exp->GetOwner()->IsClient()
|
|| (give_exp->IsPet() && (give_exp->GetOwner()->IsClient()
|
||||||
|| (give_exp->GetOwner()->HasGroup() && give_exp->GetOwner()->GetGroup()->IsGroupMember(give_exp->GetOwner()->GetUltimateOwner())))))
|
|| (give_exp->GetOwner()->HasGroup() && give_exp->GetOwner()->GetGroup()->IsGroupMember(give_exp->GetOwner()->GetUltimateOwner()))))
|
||||||
|
) {
|
||||||
ownerInGroup = true;
|
ownerInGroup = true;
|
||||||
|
}
|
||||||
|
|
||||||
give_exp = give_exp->GetUltimateOwner();
|
give_exp = give_exp->GetUltimateOwner();
|
||||||
|
|
||||||
@ -2518,20 +2520,23 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
|
|||||||
if (give_exp && give_exp->IsTempPet() && give_exp->IsPetOwnerClient()) {
|
if (give_exp && give_exp->IsTempPet() && give_exp->IsPetOwnerClient()) {
|
||||||
if (give_exp->IsNPC() && give_exp->CastToNPC()->GetSwarmOwner()) {
|
if (give_exp->IsNPC() && give_exp->CastToNPC()->GetSwarmOwner()) {
|
||||||
Mob* temp_owner = entity_list.GetMobID(give_exp->CastToNPC()->GetSwarmOwner());
|
Mob* temp_owner = entity_list.GetMobID(give_exp->CastToNPC()->GetSwarmOwner());
|
||||||
if (temp_owner)
|
if (temp_owner) {
|
||||||
give_exp = temp_owner;
|
give_exp = temp_owner;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int PlayerCount = 0; // QueryServ Player Counting
|
int PlayerCount = 0; // QueryServ Player Counting
|
||||||
|
|
||||||
Client *give_exp_client = nullptr;
|
Client *give_exp_client = nullptr;
|
||||||
if (give_exp && give_exp->IsClient())
|
if (give_exp && give_exp->IsClient()) {
|
||||||
give_exp_client = give_exp->CastToClient();
|
give_exp_client = give_exp->CastToClient();
|
||||||
|
}
|
||||||
|
|
||||||
//do faction hits even if we are a merchant, so long as a player killed us
|
//do faction hits even if we are a merchant, so long as a player killed us
|
||||||
if (!IsCharmed() && give_exp_client && !RuleB(NPC, EnableMeritBasedFaction))
|
if (!IsCharmed() && give_exp_client && !RuleB(NPC, EnableMeritBasedFaction)) {
|
||||||
hate_list.DoFactionHits(GetNPCFactionID(), GetPrimaryFaction(), GetFactionAmount());
|
hate_list.DoFactionHits(GetNPCFactionID(), GetPrimaryFaction(), GetFactionAmount());
|
||||||
|
}
|
||||||
|
|
||||||
bool IsLdonTreasure = (GetClass() == LDON_TREASURE);
|
bool IsLdonTreasure = (GetClass() == LDON_TREASURE);
|
||||||
|
|
||||||
@ -2559,17 +2564,22 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Send the EVENT_KILLED_MERIT event for all raid members */
|
/* Send the EVENT_KILLED_MERIT event for all raid members */
|
||||||
for (int i = 0; i < MAX_RAID_MEMBERS; i++) {
|
for (const auto& m : kr->members) {
|
||||||
if (kr->members[i].member != nullptr && kr->members[i].member->IsClient()) { // If Group Member is Client
|
if (m.is_bot) {
|
||||||
Client *c = kr->members[i].member;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) { // If Group Member is Client
|
||||||
|
Client *c = m.member;
|
||||||
|
|
||||||
c->RecordKilledNPCEvent(this);
|
c->RecordKilledNPCEvent(this);
|
||||||
if (parse->HasQuestSub(GetNPCTypeID(), EVENT_KILLED_MERIT)) {
|
if (parse->HasQuestSub(GetNPCTypeID(), EVENT_KILLED_MERIT)) {
|
||||||
parse->EventNPC(EVENT_KILLED_MERIT, this, c, "killed", 0);
|
parse->EventNPC(EVENT_KILLED_MERIT, this, c, "killed", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RuleB(NPC, EnableMeritBasedFaction))
|
if (RuleB(NPC, EnableMeritBasedFaction)) {
|
||||||
c->SetFactionLevel(c->CharacterID(), GetNPCFactionID(), c->GetBaseClass(), c->GetBaseRace(), c->GetDeity());
|
c->SetFactionLevel(c->CharacterID(), GetNPCFactionID(), c->GetBaseClass(), c->GetBaseRace(), c->GetDeity());
|
||||||
|
}
|
||||||
|
|
||||||
PlayerCount++;
|
PlayerCount++;
|
||||||
}
|
}
|
||||||
@ -2586,9 +2596,13 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
|
|||||||
QS->s1.NPCID = GetNPCTypeID();
|
QS->s1.NPCID = GetNPCTypeID();
|
||||||
QS->s1.ZoneID = GetZoneID();
|
QS->s1.ZoneID = GetZoneID();
|
||||||
QS->s1.Type = 2; // Raid Fight
|
QS->s1.Type = 2; // Raid Fight
|
||||||
for (int i = 0; i < MAX_RAID_MEMBERS; i++) {
|
for (const auto& m : kr->members) {
|
||||||
if (kr->members[i].member != nullptr && kr->members[i].member->IsClient()) { // If Group Member is Client
|
if (m.is_bot) {
|
||||||
Client *c = kr->members[i].member;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) { // If Group Member is Client
|
||||||
|
Client *c = m.member;
|
||||||
QS->Chars[PlayerCount].char_id = c->CharacterID();
|
QS->Chars[PlayerCount].char_id = c->CharacterID();
|
||||||
PlayerCount++;
|
PlayerCount++;
|
||||||
}
|
}
|
||||||
@ -2742,34 +2756,34 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
|
|||||||
Raid* r = entity_list.GetRaidByClient(killer->CastToClient());
|
Raid* r = entity_list.GetRaidByClient(killer->CastToClient());
|
||||||
if (r) {
|
if (r) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++) {
|
for (const auto& m : r->members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
switch (r->GetLootType()) {
|
switch (r->GetLootType()) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
if (r->members[x].member && r->members[x].is_raid_leader) {
|
if (m.member && m.is_raid_leader) {
|
||||||
corpse->AllowPlayerLoot(r->members[x].member, i);
|
corpse->AllowPlayerLoot(m.member, i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (r->members[x].member && r->members[x].is_raid_leader) {
|
if (m.member && (m.is_raid_leader || m.is_group_leader)) {
|
||||||
corpse->AllowPlayerLoot(r->members[x].member, i);
|
corpse->AllowPlayerLoot(m.member, i);
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (r->members[x].member && r->members[x].is_group_leader) {
|
|
||||||
corpse->AllowPlayerLoot(r->members[x].member, i);
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (r->members[x].member && r->members[x].is_looter) {
|
if (m.member && m.is_looter) {
|
||||||
corpse->AllowPlayerLoot(r->members[x].member, i);
|
corpse->AllowPlayerLoot(m.member, i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (r->members[x].member) {
|
if (m.member) {
|
||||||
corpse->AllowPlayerLoot(r->members[x].member, i);
|
corpse->AllowPlayerLoot(m.member, i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
16
zone/bot.cpp
16
zone/bot.cpp
@ -9105,16 +9105,18 @@ std::vector<Mob*> Bot::GetApplySpellList(
|
|||||||
auto* r = GetRaid();
|
auto* r = GetRaid();
|
||||||
auto group_id = r->GetGroup(GetCleanName());
|
auto group_id = r->GetGroup(GetCleanName());
|
||||||
if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) {
|
if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) {
|
||||||
for (auto i = 0; i < MAX_RAID_MEMBERS; i++) {
|
for (const auto& m : r->members) {
|
||||||
auto* m = r->members[i].member;
|
if (m.is_bot) {
|
||||||
if (m && m->IsClient() && (!is_raid_group_only || r->GetGroup(m) == group_id)) {
|
continue;
|
||||||
l.push_back(m);
|
}
|
||||||
|
if (m.member && m.member->IsClient() && (!is_raid_group_only || r->GetGroup(m.member) == group_id)) {
|
||||||
|
l.push_back(m.member);
|
||||||
|
|
||||||
if (allow_pets && m->HasPet()) {
|
if (allow_pets && m.member->HasPet()) {
|
||||||
l.push_back(m->GetPet());
|
l.push_back(m.member->GetPet());
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& sbl = entity_list.GetBotListByCharacterID(m->CharacterID());
|
const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID());
|
||||||
for (const auto& b : sbl) {
|
for (const auto& b : sbl) {
|
||||||
l.push_back(b);
|
l.push_back(b);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -798,24 +798,21 @@ bool Client::SendAllPackets() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::QueuePacket(const EQApplicationPacket* app, bool ack_req, CLIENT_CONN_STATUS required_state, eqFilterType filter) {
|
void Client::QueuePacket(const EQApplicationPacket* app, bool ack_req, CLIENT_CONN_STATUS required_state, eqFilterType filter) {
|
||||||
if(filter!=FilterNone){
|
if (filter != FilterNone && GetFilter(filter) == FilterHide) {
|
||||||
//this is incomplete... no support for FilterShowGroupOnly or FilterShowSelfOnly
|
return;
|
||||||
if(GetFilter(filter) == FilterHide)
|
|
||||||
return; //Client has this filter on, no need to send packet
|
|
||||||
}
|
}
|
||||||
if(client_state != CLIENT_CONNECTED && required_state == CLIENT_CONNECTED){
|
|
||||||
|
if (client_state != CLIENT_CONNECTED && required_state == CLIENT_CONNECTED) {
|
||||||
AddPacket(app, ack_req);
|
AddPacket(app, ack_req);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the program doesnt care about the status or if the status isnt what we requested
|
// if the program doesnt care about the status or if the status isnt what we requested
|
||||||
if (required_state != CLIENT_CONNECTINGALL && client_state != required_state)
|
if (required_state != CLIENT_CONNECTINGALL && client_state != required_state) {
|
||||||
{
|
|
||||||
// todo: save packets for later use
|
// todo: save packets for later use
|
||||||
AddPacket(app, ack_req);
|
AddPacket(app, ack_req);
|
||||||
}
|
}
|
||||||
else if (eqs)
|
else if (eqs) {
|
||||||
{
|
|
||||||
eqs->QueuePacket(app, ack_req);
|
eqs->QueuePacket(app, ack_req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4143,42 +4140,32 @@ void Client::UpdateLFP() {
|
|||||||
|
|
||||||
bool Client::GroupFollow(Client* inviter) {
|
bool Client::GroupFollow(Client* inviter) {
|
||||||
|
|
||||||
if (inviter)
|
if (inviter) {
|
||||||
{
|
|
||||||
isgrouped = true;
|
isgrouped = true;
|
||||||
Raid* raid = entity_list.GetRaidByClient(inviter);
|
Raid* raid = entity_list.GetRaidByClient(inviter);
|
||||||
Raid* iraid = entity_list.GetRaidByClient(this);
|
Raid* iraid = entity_list.GetRaidByClient(this);
|
||||||
|
|
||||||
//inviter has a raid don't do group stuff instead do raid stuff!
|
//inviter has a raid don't do group stuff instead do raid stuff!
|
||||||
if (raid)
|
if (raid) {
|
||||||
{
|
|
||||||
// Suspend the merc while in a raid (maybe a rule could be added for this)
|
// Suspend the merc while in a raid (maybe a rule could be added for this)
|
||||||
if (GetMerc())
|
if (GetMerc()) {
|
||||||
GetMerc()->Suspend();
|
GetMerc()->Suspend();
|
||||||
|
}
|
||||||
|
|
||||||
uint32 groupToUse = 0xFFFFFFFF;
|
uint32 groupToUse = 0xFFFFFFFF;
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++)
|
for (const auto& m : raid->members) {
|
||||||
{
|
if (m.member && m.member == inviter) {
|
||||||
if (raid->members[x].member)
|
groupToUse = m.group_number;
|
||||||
{
|
|
||||||
//this assumes the inviter is in the zone
|
|
||||||
if (raid->members[x].member == inviter){
|
|
||||||
groupToUse = raid->members[x].group_number;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (iraid == raid) {
|
||||||
if (iraid == raid)
|
|
||||||
{
|
|
||||||
//both in same raid
|
//both in same raid
|
||||||
uint32 ngid = raid->GetGroup(inviter->GetName());
|
uint32 ngid = raid->GetGroup(inviter->GetName());
|
||||||
if (raid->GroupCount(ngid) < 6)
|
if (raid->GroupCount(ngid) < 6) {
|
||||||
{
|
|
||||||
raid->MoveMember(GetName(), ngid);
|
raid->MoveMember(GetName(), ngid);
|
||||||
raid->SendGroupDisband(this);
|
raid->SendGroupDisband(this);
|
||||||
//raid->SendRaidGroupAdd(GetName(), ngid);
|
raid->GroupUpdate(ngid);
|
||||||
//raid->SendGroupUpdate(this);
|
|
||||||
raid->GroupUpdate(ngid); //break
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -8866,16 +8853,15 @@ void Client::ProcessAggroMeter()
|
|||||||
if (m_aggrometer.set_pct(AggroMeter::AT_Secondary, has_aggro ? cur_tar->GetHateRatio(this, secondary) : secondary ? 100 : 0))
|
if (m_aggrometer.set_pct(AggroMeter::AT_Secondary, has_aggro ? cur_tar->GetHateRatio(this, secondary) : secondary ? 100 : 0))
|
||||||
add_entry(AggroMeter::AT_Secondary);
|
add_entry(AggroMeter::AT_Secondary);
|
||||||
|
|
||||||
// fuuuuuuuuuuuuuuuuuuuuuuuucckkkkkkkkkkkkkkk raids
|
|
||||||
if (IsRaidGrouped()) {
|
if (IsRaidGrouped()) {
|
||||||
auto raid = GetRaid();
|
auto raid = GetRaid();
|
||||||
if (raid) {
|
if (raid) {
|
||||||
auto gid = raid->GetGroup(this);
|
auto gid = raid->GetGroup(this);
|
||||||
if (gid < 12) {
|
if (gid < MAX_RAID_GROUPS) {
|
||||||
int at_id = AggroMeter::AT_Group1;
|
int at_id = AggroMeter::AT_Group1;
|
||||||
for (int i = 0; i < MAX_RAID_MEMBERS; ++i) {
|
for (const auto& m : raid->members) {
|
||||||
if (raid->members[i].member && raid->members[i].member != this && raid->members[i].group_number == gid) {
|
if (m.member && m.member != this && m.group_number == gid) {
|
||||||
if (m_aggrometer.set_pct(static_cast<AggroMeter::AggroTypes>(at_id), cur_tar->GetHateRatio(cur_tar->GetTarget(), raid->members[i].member)))
|
if (m_aggrometer.set_pct(static_cast<AggroMeter::AggroTypes>(at_id), cur_tar->GetHateRatio(cur_tar->GetTarget(), m.member)))
|
||||||
add_entry(static_cast<AggroMeter::AggroTypes>(at_id));
|
add_entry(static_cast<AggroMeter::AggroTypes>(at_id));
|
||||||
at_id++;
|
at_id++;
|
||||||
if (at_id > AggroMeter::AT_Group5)
|
if (at_id > AggroMeter::AT_Group5)
|
||||||
@ -10956,11 +10942,14 @@ std::vector<Client *> Client::GetPartyMembers()
|
|||||||
std::vector<Client *> clients_to_update = {};
|
std::vector<Client *> clients_to_update = {};
|
||||||
|
|
||||||
// raid
|
// raid
|
||||||
Raid *raid = entity_list.GetRaidByClient(this);
|
if (const auto raid = entity_list.GetRaidByClient(this)) {
|
||||||
if (raid) {
|
for (auto &m : raid->members) {
|
||||||
for (auto &e : raid->members) {
|
if (m.is_bot) {
|
||||||
if (e.member && e.member->IsClient()) {
|
continue;
|
||||||
clients_to_update.push_back(e.member->CastToClient());
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
clients_to_update.push_back(m.member->CastToClient());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11747,17 +11736,16 @@ std::vector<Mob*> Client::GetApplySpellList(
|
|||||||
auto* r = GetRaid();
|
auto* r = GetRaid();
|
||||||
auto group_id = r->GetGroup(this);
|
auto group_id = r->GetGroup(this);
|
||||||
if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) {
|
if (r && EQ::ValueWithin(group_id, 0, (MAX_RAID_GROUPS - 1))) {
|
||||||
for (auto i = 0; i < MAX_RAID_MEMBERS; i++) {
|
for (const auto& m : r->members) {
|
||||||
auto* m = r->members[i].member;
|
if (m.member && m.member->IsClient() && (!is_raid_group_only || r->GetGroup(m.member) == group_id)) {
|
||||||
if (m && m->IsClient() && (!is_raid_group_only || r->GetGroup(m) == group_id)) {
|
l.push_back(m.member);
|
||||||
l.push_back(m);
|
|
||||||
|
|
||||||
if (allow_pets && m->HasPet()) {
|
if (allow_pets && m.member->HasPet()) {
|
||||||
l.push_back(m->GetPet());
|
l.push_back(m.member->GetPet());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allow_bots) {
|
if (allow_bots) {
|
||||||
const auto& sbl = entity_list.GetBotListByCharacterID(m->CharacterID());
|
const auto& sbl = entity_list.GetBotListByCharacterID(m.member->CharacterID());
|
||||||
for (const auto& b : sbl) {
|
for (const auto& b : sbl) {
|
||||||
l.push_back(b);
|
l.push_back(b);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -448,9 +448,13 @@ void QuestManager::ZoneRaid(const char *zone_name) {
|
|||||||
initiator->MoveZone(zone_name);
|
initiator->MoveZone(zone_name);
|
||||||
} else {
|
} else {
|
||||||
auto client_raid = initiator->GetRaid();
|
auto client_raid = initiator->GetRaid();
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
raid_member->MoveZone(zone_name);
|
raid_member->MoveZone(zone_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -611,9 +611,8 @@ void Raid::RaidGroupSay(const char *msg, Client *c, uint8 language, uint8 lang_s
|
|||||||
|
|
||||||
uint32 Raid::GetPlayerIndex(const char *name)
|
uint32 Raid::GetPlayerIndex(const char *name)
|
||||||
{
|
{
|
||||||
for(int x = 0; x < MAX_RAID_MEMBERS; x++)
|
for (int x = 0; x < MAX_RAID_MEMBERS; x++) {
|
||||||
{
|
if (strcmp(name, members[x].member_name) == 0) {
|
||||||
if(strcmp(name, members[x].member_name) == 0) {
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -832,6 +831,10 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, float range, Mob* caster, int3
|
|||||||
manataken /= numMem;
|
manataken /= numMem;
|
||||||
|
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.group_number == gid) {
|
if (m.member && m.group_number == gid) {
|
||||||
distance = DistanceSquared(caster->GetPosition(), m.member->GetPosition());
|
distance = DistanceSquared(caster->GetPosition(), m.member->GetPosition());
|
||||||
|
|
||||||
@ -875,6 +878,10 @@ void Raid::SplitMoney(uint32 gid, uint32 copper, uint32 silver, uint32 gold, uin
|
|||||||
|
|
||||||
uint8 member_count = 0;
|
uint8 member_count = 0;
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.group_number == gid && m.member->IsClient()) {
|
if (m.member && m.group_number == gid && m.member->IsClient()) {
|
||||||
member_count++;
|
member_count++;
|
||||||
}
|
}
|
||||||
@ -914,6 +921,10 @@ void Raid::SplitMoney(uint32 gid, uint32 copper, uint32 silver, uint32 gold, uin
|
|||||||
auto platinum_split = platinum / member_count;
|
auto platinum_split = platinum / member_count;
|
||||||
|
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.group_number == gid && m.member->IsClient()) { // If Group Member is Client
|
if (m.member && m.group_number == gid && m.member->IsClient()) { // If Group Member is Client
|
||||||
m.member->AddMoneyToPP(
|
m.member->AddMoneyToPP(
|
||||||
copper_split,
|
copper_split,
|
||||||
@ -952,6 +963,10 @@ void Raid::SplitMoney(uint32 gid, uint32 copper, uint32 silver, uint32 gold, uin
|
|||||||
void Raid::TeleportGroup(Mob* sender, uint32 zoneID, uint16 instance_id, float x, float y, float z, float heading, uint32 gid)
|
void Raid::TeleportGroup(Mob* sender, uint32 zoneID, uint16 instance_id, float x, float y, float z, float heading, uint32 gid)
|
||||||
{
|
{
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.group_number == gid && m.member->IsClient()) {
|
if (m.member && m.group_number == gid && m.member->IsClient()) {
|
||||||
m.member->MovePC(zoneID, instance_id, x, y, z, heading, 0, ZoneSolicited);
|
m.member->MovePC(zoneID, instance_id, x, y, z, heading, 0, ZoneSolicited);
|
||||||
}
|
}
|
||||||
@ -961,6 +976,10 @@ void Raid::TeleportGroup(Mob* sender, uint32 zoneID, uint16 instance_id, float x
|
|||||||
void Raid::TeleportRaid(Mob* sender, uint32 zoneID, uint16 instance_id, float x, float y, float z, float heading)
|
void Raid::TeleportRaid(Mob* sender, uint32 zoneID, uint16 instance_id, float x, float y, float z, float heading)
|
||||||
{
|
{
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.member->IsClient()) {
|
if (m.member && m.member->IsClient()) {
|
||||||
m.member->MovePC(zoneID, instance_id, x, y, z, heading, 0, ZoneSolicited);
|
m.member->MovePC(zoneID, instance_id, x, y, z, heading, 0, ZoneSolicited);
|
||||||
}
|
}
|
||||||
@ -981,6 +1000,10 @@ void Raid::AddRaidLooter(const char* looter)
|
|||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
|
|
||||||
for (auto& m : members) {
|
for (auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(looter, m.member_name) == 0) {
|
if (strcmp(looter, m.member_name) == 0) {
|
||||||
m.is_looter = true;
|
m.is_looter = true;
|
||||||
break;
|
break;
|
||||||
@ -1002,6 +1025,10 @@ void Raid::RemoveRaidLooter(const char* looter)
|
|||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
|
|
||||||
for (auto& m: members) {
|
for (auto& m: members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(looter, m.member_name) == 0) {
|
if (strcmp(looter, m.member_name) == 0) {
|
||||||
m.is_looter = false;
|
m.is_looter = false;
|
||||||
break;
|
break;
|
||||||
@ -1258,6 +1285,10 @@ void Raid::SendBulkRaid(Client *to)
|
|||||||
void Raid::QueuePacket(const EQApplicationPacket *app, bool ack_req)
|
void Raid::QueuePacket(const EQApplicationPacket *app, bool ack_req)
|
||||||
{
|
{
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.member->IsClient()) {
|
if (m.member && m.member->IsClient()) {
|
||||||
m.member->QueuePacket(app, ack_req);
|
m.member->QueuePacket(app, ack_req);
|
||||||
}
|
}
|
||||||
@ -1332,7 +1363,7 @@ void Raid::SendGroupUpdate(Client *to)
|
|||||||
gu->action = groupActUpdate;
|
gu->action = groupActUpdate;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
uint32 grp = GetGroup(to->GetName());
|
uint32 grp = GetGroup(to->GetName());
|
||||||
if (grp >= MAX_RAID_MEMBERS) {
|
if (grp >= MAX_RAID_GROUPS) {
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1502,6 +1533,10 @@ void Raid::SendRaidMOTD()
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& m: members) {
|
for (const auto& m: members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member) {
|
if (m.member) {
|
||||||
SendRaidMOTD(m.member);
|
SendRaidMOTD(m.member);
|
||||||
}
|
}
|
||||||
@ -1911,6 +1946,10 @@ const char *Raid::GetClientNameByIndex(uint8 index)
|
|||||||
void Raid::RaidMessageString(Mob* sender, uint32 type, uint32 string_id, const char* message,const char* message2,const char* message3,const char* message4,const char* message5,const char* message6,const char* message7,const char* message8,const char* message9, uint32 distance)
|
void Raid::RaidMessageString(Mob* sender, uint32 type, uint32 string_id, const char* message,const char* message2,const char* message3,const char* message4,const char* message5,const char* message6,const char* message7,const char* message8,const char* message9, uint32 distance)
|
||||||
{
|
{
|
||||||
for (const auto& m : members) {
|
for (const auto& m : members) {
|
||||||
|
if (m.is_bot) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (m.member && m.member->IsClient() && m.member != sender) {
|
if (m.member && m.member->IsClient() && m.member != sender) {
|
||||||
m.member->MessageString(type, string_id, message, message2, message3, message4, message5, message6,
|
m.member->MessageString(type, string_id, message, message2, message3, message4, message5, message6,
|
||||||
message7, message8, message9, distance);
|
message7, message8, message9, distance);
|
||||||
|
|||||||
@ -294,12 +294,19 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
case VoiceMacroRaid: {
|
case VoiceMacroRaid: {
|
||||||
Raid *r = entity_list.GetRaidByID(svm->RaidID);
|
Raid *r = entity_list.GetRaidByID(svm->RaidID);
|
||||||
|
|
||||||
if (!r)
|
if (!r) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAX_RAID_MEMBERS; i++)
|
for (const auto& m: r->members) {
|
||||||
if (r->members[i].member)
|
if (m.is_bot) {
|
||||||
r->members[i].member->QueuePacket(outapp);
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member) {
|
||||||
|
m.member->QueuePacket(outapp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1055,7 +1062,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
{
|
{
|
||||||
auto outapp =
|
auto outapp =
|
||||||
new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
||||||
GroupJoin_Struct* outgj = (GroupJoin_Struct*)outapp->pBuffer;
|
auto outgj = (GroupJoin_Struct*)outapp->pBuffer;
|
||||||
strcpy(outgj->membername, Inviter->GetName());
|
strcpy(outgj->membername, Inviter->GetName());
|
||||||
strcpy(outgj->yourname, Inviter->GetName());
|
strcpy(outgj->yourname, Inviter->GetName());
|
||||||
outgj->action = groupActInviteInitial; // 'You have formed the group'.
|
outgj->action = groupActInviteInitial; // 'You have formed the group'.
|
||||||
@ -1095,7 +1102,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
Inviter->CastToClient()->UpdateLFP();
|
Inviter->CastToClient()->UpdateLFP();
|
||||||
|
|
||||||
auto pack2 = new ServerPacket(ServerOP_GroupJoin, sizeof(ServerGroupJoin_Struct));
|
auto pack2 = new ServerPacket(ServerOP_GroupJoin, sizeof(ServerGroupJoin_Struct));
|
||||||
ServerGroupJoin_Struct* gj = (ServerGroupJoin_Struct*)pack2->pBuffer;
|
auto gj = (ServerGroupJoin_Struct*)pack2->pBuffer;
|
||||||
gj->gid = group->GetID();
|
gj->gid = group->GetID();
|
||||||
gj->zoneid = zone->GetZoneID();
|
gj->zoneid = zone->GetZoneID();
|
||||||
gj->instance_id = zone->GetInstanceID();
|
gj->instance_id = zone->GetInstanceID();
|
||||||
@ -1213,7 +1220,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_GroupJoin: {
|
case ServerOP_GroupJoin: {
|
||||||
ServerGroupJoin_Struct* gj = (ServerGroupJoin_Struct*)pack->pBuffer;
|
auto gj = (ServerGroupJoin_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (gj->zoneid == zone->GetZoneID() && gj->instance_id == zone->GetInstanceID())
|
if (gj->zoneid == zone->GetZoneID() && gj->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1259,7 +1266,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidAdd: {
|
case ServerOP_RaidAdd: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1274,7 +1281,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidRemove: {
|
case ServerOP_RaidRemove: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1294,7 +1301,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidDisband: {
|
case ServerOP_RaidDisband: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1309,7 +1316,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidLockFlag: {
|
case ServerOP_RaidLockFlag: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1326,7 +1333,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidChangeGroup: {
|
case ServerOP_RaidChangeGroup: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1354,7 +1361,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_UpdateGroup: {
|
case ServerOP_UpdateGroup: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1367,7 +1374,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidGroupLeader: {
|
case ServerOP_RaidGroupLeader: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1375,7 +1382,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidLeader: {
|
case ServerOP_RaidLeader: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1395,7 +1402,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DetailsChange: {
|
case ServerOP_DetailsChange: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1410,7 +1417,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidGroupDisband: {
|
case ServerOP_RaidGroupDisband: {
|
||||||
ServerRaidGeneralAction_Struct* rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
if (rga->zoneid == zone->GetZoneID() && rga->instance_id == zone->GetInstanceID())
|
||||||
break;
|
break;
|
||||||
@ -1420,7 +1427,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
{
|
{
|
||||||
auto outapp =
|
auto outapp =
|
||||||
new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupUpdate_Struct));
|
new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupUpdate_Struct));
|
||||||
GroupUpdate_Struct* gu = (GroupUpdate_Struct*)outapp->pBuffer;
|
auto gu = (GroupUpdate_Struct*)outapp->pBuffer;
|
||||||
gu->action = groupActDisband;
|
gu->action = groupActDisband;
|
||||||
strn0cpy(gu->leadersname, c->GetName(), 64);
|
strn0cpy(gu->leadersname, c->GetName(), 64);
|
||||||
strn0cpy(gu->yourname, c->GetName(), 64);
|
strn0cpy(gu->yourname, c->GetName(), 64);
|
||||||
@ -1430,27 +1437,26 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidGroupAdd: {
|
case ServerOP_RaidGroupAdd: {
|
||||||
ServerRaidGroupAction_Struct* rga = (ServerRaidGroupAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGroupAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
Raid *r = entity_list.GetRaidByID(rga->rid);
|
Raid *r = entity_list.GetRaidByID(rga->rid);
|
||||||
if (r) {
|
if (r) {
|
||||||
r->LearnMembers();
|
r->LearnMembers();
|
||||||
r->VerifyRaid();
|
r->VerifyRaid();
|
||||||
auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
||||||
GroupJoin_Struct* gj = (GroupJoin_Struct*)outapp->pBuffer;
|
auto gj = (GroupJoin_Struct*)outapp->pBuffer;
|
||||||
strn0cpy(gj->membername, rga->membername, 64);
|
strn0cpy(gj->membername, rga->membername, 64);
|
||||||
gj->action = groupActJoin;
|
gj->action = groupActJoin;
|
||||||
|
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++)
|
for (const auto& m : r->members) {
|
||||||
{
|
if (m.is_bot) {
|
||||||
if (r->members[x].member)
|
continue;
|
||||||
{
|
|
||||||
if (strcmp(r->members[x].member->GetName(), rga->membername) != 0) {
|
|
||||||
if ((rga->gid < 12) && rga->gid == r->members[x].group_number)
|
|
||||||
{
|
|
||||||
strn0cpy(gj->yourname, r->members[x].member->GetName(), 64);
|
|
||||||
r->members[x].member->QueuePacket(outapp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m.member && strcmp(m.member->GetName(), rga->membername) != 0) {
|
||||||
|
if ((rga->gid < MAX_RAID_GROUPS) && rga->gid == m.group_number) {
|
||||||
|
strn0cpy(gj->yourname, m.member->GetName(), 64);
|
||||||
|
m.member->QueuePacket(outapp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1460,27 +1466,26 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidGroupRemove: {
|
case ServerOP_RaidGroupRemove: {
|
||||||
ServerRaidGroupAction_Struct* rga = (ServerRaidGroupAction_Struct*)pack->pBuffer;
|
auto rga = (ServerRaidGroupAction_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
Raid *r = entity_list.GetRaidByID(rga->rid);
|
Raid *r = entity_list.GetRaidByID(rga->rid);
|
||||||
if (r) {
|
if (r) {
|
||||||
r->LearnMembers();
|
r->LearnMembers();
|
||||||
r->VerifyRaid();
|
r->VerifyRaid();
|
||||||
auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
auto outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
|
||||||
GroupJoin_Struct* gj = (GroupJoin_Struct*)outapp->pBuffer;
|
auto gj = (GroupJoin_Struct*)outapp->pBuffer;
|
||||||
strn0cpy(gj->membername, rga->membername, 64);
|
strn0cpy(gj->membername, rga->membername, 64);
|
||||||
gj->action = groupActLeave;
|
gj->action = groupActLeave;
|
||||||
|
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++)
|
for (const auto& m : r->members) {
|
||||||
{
|
if (m.is_bot) {
|
||||||
if (r->members[x].member)
|
continue;
|
||||||
{
|
|
||||||
if (strcmp(r->members[x].member->GetName(), rga->membername) != 0) {
|
|
||||||
if ((rga->gid < 12) && rga->gid == r->members[x].group_number)
|
|
||||||
{
|
|
||||||
strn0cpy(gj->yourname, r->members[x].member->GetName(), 64);
|
|
||||||
r->members[x].member->QueuePacket(outapp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m.member && strcmp(m.member->GetName(), rga->membername) != 0) {
|
||||||
|
if ((rga->gid < MAX_RAID_GROUPS) && rga->gid == m.group_number) {
|
||||||
|
strn0cpy(gj->yourname, m.member->GetName(), 64);
|
||||||
|
m.member->QueuePacket(outapp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1490,21 +1495,19 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidGroupSay: {
|
case ServerOP_RaidGroupSay: {
|
||||||
ServerRaidMessage_Struct* rmsg = (ServerRaidMessage_Struct*)pack->pBuffer;
|
auto rmsg = (ServerRaidMessage_Struct*)pack->pBuffer;
|
||||||
if (zone) {
|
if (zone) {
|
||||||
Raid *r = entity_list.GetRaidByID(rmsg->rid);
|
Raid *r = entity_list.GetRaidByID(rmsg->rid);
|
||||||
if (r)
|
if (r) {
|
||||||
{
|
for (const auto& m :r->members) {
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++)
|
if (m.is_bot) {
|
||||||
{
|
continue;
|
||||||
if (r->members[x].member) {
|
|
||||||
if (strcmp(rmsg->from, r->members[x].member->GetName()) != 0)
|
|
||||||
{
|
|
||||||
if (r->members[x].group_number == rmsg->gid) {
|
|
||||||
if (!r->members[x].is_bot && r->members[x].member->GetFilter(FilterGroupChat) != 0)
|
|
||||||
{
|
|
||||||
r->members[x].member->ChannelMessageSend(rmsg->from, r->members[x].member->GetName(), ChatChannel_Group, rmsg->language, rmsg->lang_skill, rmsg->message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m.member && strcmp(m.member->GetName(), rmsg->from) != 0) {
|
||||||
|
if (m.group_number == rmsg->gid) {
|
||||||
|
if (m.member->GetFilter(FilterGroupChat) != 0) {
|
||||||
|
m.member->ChannelMessageSend(rmsg->from, m.member->GetName(), ChatChannel_Group, rmsg->language, rmsg->lang_skill, rmsg->message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1514,20 +1517,20 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_RaidSay: {
|
case ServerOP_RaidSay: {
|
||||||
ServerRaidMessage_Struct* rmsg = (ServerRaidMessage_Struct*)pack->pBuffer;
|
auto rmsg = (ServerRaidMessage_Struct*)pack->pBuffer;
|
||||||
if (zone)
|
if (zone) {
|
||||||
{
|
|
||||||
Raid *r = entity_list.GetRaidByID(rmsg->rid);
|
Raid *r = entity_list.GetRaidByID(rmsg->rid);
|
||||||
if (r)
|
|
||||||
{
|
if (r) {
|
||||||
for (int x = 0; x < MAX_RAID_MEMBERS; x++)
|
for (const auto& m :r->members) {
|
||||||
{
|
if (m.is_bot) {
|
||||||
if (r->members[x].member) {
|
continue;
|
||||||
if (strcmp(rmsg->from, r->members[x].member->GetName()) != 0)
|
}
|
||||||
{
|
|
||||||
if (!r->members[x].is_bot && r->members[x].member->GetFilter(FilterGroupChat) != 0)
|
if (m.member) {
|
||||||
{
|
if (strcmp(rmsg->from, m.member->GetName()) != 0) {
|
||||||
r->members[x].member->ChannelMessageSend(rmsg->from, r->members[x].member->GetName(), ChatChannel_Raid, rmsg->language, rmsg->lang_skill, rmsg->message);
|
if (!m.is_bot && m.member->GetFilter(FilterGroupChat) != 0) {
|
||||||
|
m.member->ChannelMessageSend(rmsg->from, m.member->GetName(), ChatChannel_Raid, rmsg->language, rmsg->lang_skill, rmsg->message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2144,10 +2147,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
DialogueWindow::Render(raid_member, message);
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
DialogueWindow::Render( m.member->CastToClient(), message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2235,24 +2241,27 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
auto client_raid_member = client_raid->members[member_index].member;
|
if (m.is_bot) {
|
||||||
if (client_raid_member && client_raid_member->IsClient()) {
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
switch (update_subtype) {
|
switch (update_subtype) {
|
||||||
case CZLDoNUpdateSubtype_AddLoss:
|
case CZLDoNUpdateSubtype_AddLoss:
|
||||||
client_raid_member->UpdateLDoNWinLoss(theme_id, false);
|
m.member->UpdateLDoNWinLoss(theme_id, false);
|
||||||
break;
|
break;
|
||||||
case CZLDoNUpdateSubtype_AddPoints:
|
case CZLDoNUpdateSubtype_AddPoints:
|
||||||
client_raid_member->UpdateLDoNPoints(theme_id, points);
|
m.member->UpdateLDoNPoints(theme_id, points);
|
||||||
break;
|
break;
|
||||||
case CZLDoNUpdateSubtype_AddWin:
|
case CZLDoNUpdateSubtype_AddWin:
|
||||||
client_raid_member->UpdateLDoNWinLoss(theme_id, true);
|
m.member->UpdateLDoNWinLoss(theme_id, true);
|
||||||
break;
|
break;
|
||||||
case CZLDoNUpdateSubtype_RemoveLoss:
|
case CZLDoNUpdateSubtype_RemoveLoss:
|
||||||
client_raid_member->UpdateLDoNWinLoss(theme_id, false, true);
|
m.member->UpdateLDoNWinLoss(theme_id, false, true);
|
||||||
break;
|
break;
|
||||||
case CZLDoNUpdateSubtype_RemoveWin:
|
case CZLDoNUpdateSubtype_RemoveWin:
|
||||||
client_raid_member->UpdateLDoNWinLoss(theme_id, true, true);
|
m.member->UpdateLDoNWinLoss(theme_id, true, true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -2365,9 +2374,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
raid_member->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message);
|
raid_member->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2418,9 +2431,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
raid_member->Message(type, message);
|
raid_member->Message(type, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2486,9 +2503,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
switch (update_subtype) {
|
switch (update_subtype) {
|
||||||
case CZMoveUpdateSubtype_MoveZone:
|
case CZMoveUpdateSubtype_MoveZone:
|
||||||
raid_member->MoveZone(zone_short_name);
|
raid_member->MoveZone(zone_short_name);
|
||||||
@ -2567,9 +2588,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
raid_member->SetEntityVariable(variable_name, variable_value);
|
raid_member->SetEntityVariable(variable_name, variable_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2601,7 +2626,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
}
|
}
|
||||||
case ServerOP_CZSignal:
|
case ServerOP_CZSignal:
|
||||||
{
|
{
|
||||||
CZSignal_Struct* CZS = (CZSignal_Struct*) pack->pBuffer;
|
auto CZS = (CZSignal_Struct*) pack->pBuffer;
|
||||||
uint8 update_type = CZS->update_type;
|
uint8 update_type = CZS->update_type;
|
||||||
int update_identifier = CZS->update_identifier;
|
int update_identifier = CZS->update_identifier;
|
||||||
int signal_id = CZS->signal_id;
|
int signal_id = CZS->signal_id;
|
||||||
@ -2624,10 +2649,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
raid_member->Signal(signal_id);
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
m.member->CastToClient()->Signal(signal_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2696,9 +2724,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
switch (update_subtype) {
|
switch (update_subtype) {
|
||||||
case CZSpellUpdateSubtype_Cast:
|
case CZSpellUpdateSubtype_Cast:
|
||||||
raid_member->ApplySpellBuff(spell_id);
|
raid_member->ApplySpellBuff(spell_id);
|
||||||
@ -2825,9 +2857,12 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
} else if (update_type == CZUpdateType_Raid) {
|
} else if (update_type == CZUpdateType_Raid) {
|
||||||
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
auto client_raid = entity_list.GetRaidByID(update_identifier);
|
||||||
if (client_raid) {
|
if (client_raid) {
|
||||||
for (int member_index = 0; member_index < MAX_RAID_MEMBERS; member_index++) {
|
for (const auto& m : client_raid->members) {
|
||||||
if (client_raid->members[member_index].member && client_raid->members[member_index].member->IsClient()) {
|
if (m.is_bot) {
|
||||||
auto raid_member = client_raid->members[member_index].member->CastToClient();
|
continue;
|
||||||
|
}
|
||||||
|
if (m.member && m.member->IsClient()) {
|
||||||
|
auto raid_member = m.member->CastToClient();
|
||||||
switch (update_subtype) {
|
switch (update_subtype) {
|
||||||
case CZTaskUpdateSubtype_ActivityReset:
|
case CZTaskUpdateSubtype_ActivityReset:
|
||||||
raid_member->ResetTaskActivity(task_identifier, task_subidentifier);
|
raid_member->ResetTaskActivity(task_identifier, task_subidentifier);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user