Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.95 KB | None | 0 0
  1.     if (client) {
  2.         HeroicOP* ho = nullptr;
  3.         Spell* ho_spell = nullptr;
  4.         int32 ho_target = 0;
  5.  
  6.         MSoloHO.writelock(__FUNCTION__, __LINE__);
  7.         MGroupHO.writelock(__FUNCTION__, __LINE__);
  8.         map<Client*, HeroicOP*>::iterator soloItr = m_soloHO.find(client);
  9.         if (soloItr != m_soloHO.end()) {
  10.             ho = soloItr->second;
  11.             bool match = false;
  12.             LogWrite(SPELL__ERROR, 0, "HO", "target = %u", ho->GetTarget());
  13.             spell->MSpellTargets.readlock(__FUNCTION__, __LINE__);
  14.             for (int8 i = 0; i < spell->targets.size(); i++) {
  15.                 LogWrite(SPELL__ERROR, 0, "HO", "%u", spell->targets.at(i));
  16.                 if (spell->targets.at(i) == ho->GetTarget()) {
  17.                     match = true;
  18.                     LogWrite(SPELL__ERROR, 0, "HO", "match found");
  19.                     break;
  20.                 }
  21.             }
  22.             spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__);
  23.             if (match && ho->UpdateHeroicOP(spell->spell->GetSpellIconHeroicOp())) {
  24.                 ClientPacketFunctions::SendHeroicOPUpdate(client, ho);
  25.                 if (ho->GetComplete() > 0) {
  26.                     ho_spell = master_spell_list.GetSpell(ho->GetWheel()->spell_id, 1);
  27.                     ho_target = ho->GetTarget();
  28.                     if (!ho_spell)
  29.                         LogWrite(SPELL__ERROR, 0, "HO", "Invalid spell for a HO, spell id = %u", ho->GetWheel()->spell_id);
  30.  
  31.                     safe_delete(ho);
  32.                     m_soloHO.erase(client);
  33.                 }
  34.             }
  35.         }
  36.         else if (client->GetPlayer()->GetGroupMemberInfo()) {
  37.             map<int32, HeroicOP*>::iterator groupItr = m_groupHO.find(client->GetPlayer()->GetGroupMemberInfo()->group_id);
  38.             if (groupItr != m_groupHO.end()) {
  39.                 ho = groupItr->second;
  40.                 int32 group_id = client->GetPlayer()->GetGroupMemberInfo()->group_id;
  41.                 spell->MSpellTargets.readlock(__FUNCTION__, __LINE__);
  42.                 if (spell->targets.at(0) == ho->GetTarget() && ho->UpdateHeroicOP(spell->spell->GetSpellIconHeroicOp())) {
  43.                     spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__);
  44.  
  45.                     world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__);
  46.                     deque<GroupMemberInfo*>::iterator itr;
  47.                     deque<GroupMemberInfo*>* members = world.GetGroupManager()->GetGroupMembers(group_id);
  48.                     for (itr = members->begin(); itr != members->end(); itr++) {
  49.                         if ((*itr)->client)
  50.                             ClientPacketFunctions::SendHeroicOPUpdate((*itr)->client, ho);
  51.                     }
  52.                     world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__);
  53.  
  54.                     if (ho->GetComplete() > 0) {
  55.                         ho_spell = master_spell_list.GetSpell(ho->GetWheel()->spell_id, 1);
  56.                         ho_target = ho->GetTarget();
  57.                         if (!ho_spell)
  58.                             LogWrite(SPELL__ERROR, 0, "HO", "Invalid spell for a HO, spell id = %u", ho->GetWheel()->spell_id);
  59.  
  60.                         safe_delete(ho);
  61.                         m_groupHO.erase(group_id);
  62.                     }
  63.                 }
  64.                 else
  65.                     spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__);
  66.             }
  67.         }
  68.         MGroupHO.releasewritelock(__FUNCTION__, __LINE__);
  69.         MSoloHO.releasewritelock(__FUNCTION__, __LINE__);
  70.  
  71.         if (ho_spell && ho_target != 0)
  72.             client->GetCurrentZone()->ProcessSpell(ho_spell, client->GetPlayer(), spell->caster->GetZone()->GetSpawnByID(ho_target));
  73.  
  74.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement