Jump to content

[HELP] Season custom


Guest Darky88

Recommended Posts

Actually I think he was talking about arena teams (see the title of the thread) ^^

See in ArenaTeamHandler.cpp :

void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data)
{
   DEBUG_LOG("CMSG_ARENA_TEAM_LEAVE");

   uint32 ArenaTeamId;                                     // arena team id
   recv_data >> ArenaTeamId;

   ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId);
   if(!at)
       return;

   if(_player->GetGUID() == at->GetCaptain() && at->GetMembersSize() > 1)
   {
       // check for correctness
       SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S);
       return;
   }

   // arena team has only one member (=captain)
   if(_player->GetGUID() == at->GetCaptain())
   {
       at->Disband(this);
       delete at;
       return;
   }

   at->DelMember(_player->GetGUID());

   // event
   at->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), "");

   // send you are no longer member of team
   SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, at->GetName(), "", 0);
}

Add something like :

       at->Disband(this);
       delete at;

At the end of the function

Took me 20 seconds to search for it :P

Link to comment
Share on other sites

Thx

I like 2vs2 team or 3vs3 team or 5vs5 team.... if one player leave the arena team, all the players of team loss the team... "disband".

I do that

void ArenaTeam::DelMember(uint64 guid)
{
   for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
   {
       if (itr->guid == guid)
       {
           m_members.erase(itr);
           break;
       }
   }

   if(Player *player = sObjectMgr.GetPlayer(guid))
   {
       player->GetSession()->SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, GetName(), "", 0);
       // delete all info regarding this team
       for(int i = 0; i < ARENA_TEAM_END; ++i)
           player->SetArenaTeamInfoField(GetSlot(), ArenaTeamInfoType(i), 0);
   }

[color="#00AA00"]    CharacterDatabase.PExecute("DELETE FROM arena_team WHERE arenateamid = '%u'", GetId());
   CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u'", GetId());
   CharacterDatabase.PExecute("DELETE FROM arena_team_stats WHERE arenateamid = '%u'", GetId());[/color]
}

But no refresh in-game "obiously", i need help with this...

Sorry for my english ¬¬''

Link to comment
Share on other sites

Well, use the piece of code I gave you :

void ArenaTeam::DelMember(uint64 guid)
{
   for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
   {
       if (itr->guid == guid)
       {
           m_members.erase(itr);
           break;
       }
   }

   if(Player *player = sObjectMgr.GetPlayer(guid))
   {
       player->GetSession()->SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, GetName(), "", 0);
       // delete all info regarding this team
       for(int i = 0; i < ARENA_TEAM_END; ++i)
           player->SetArenaTeamInfoField(GetSlot(), ArenaTeamInfoType(i), 0);
   }
+   Disband(NULL);
}

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use