Exemplo n.º 1
0
void CParty::AddMember(CBattleEntity* PEntity)
{
	DSP_DEBUG_BREAK_IF(PEntity == NULL);
	DSP_DEBUG_BREAK_IF(PEntity->PParty != NULL);

	PEntity->PParty = this;
	members.push_back(PEntity);

    if (m_PartyType == PARTY_PCS)
    {
        DSP_DEBUG_BREAK_IF(PEntity->objtype != TYPE_PC);

        CCharEntity* PChar = (CCharEntity*)PEntity;

	    ReloadParty();
	    ReloadTreasurePool(PChar);

	    if (PChar->nameflags.flags == FLAG_INVITE)
	    {
            PChar->nameflags.flags = 0;

            //charutils::SaveCharStats(PChar);

		    PChar->status = STATUS_UPDATE;
		    PChar->pushPacket(new CMenuConfigPacket(PChar));
		    PChar->pushPacket(new CCharUpdatePacket(PChar));
		    PChar->pushPacket(new CCharSyncPacket(PChar));
	    }
	    PChar->PTreasurePool->UpdatePool(PChar);

	    Sql_Query(SqlHandle,"UPDATE accounts_sessions SET partyid = %u WHERE charid = %u", m_PartyID, PChar->id);
    }
}
Exemplo n.º 2
0
void CParty::RemoveMember(CBattleEntity* PEntity)
{
	DSP_DEBUG_BREAK_IF(PEntity == NULL);
	DSP_DEBUG_BREAK_IF(PEntity->PParty != this);

	if (m_PLeader == PEntity)
	{
		RemovePartyLeader(PEntity);
	}
	else
	{
		for (uint32 i = 0; i < members.size(); ++i)
		{
			if (PEntity == members.at(i))
			{
				members.erase(members.begin()+i);

                if (m_PartyType == PARTY_PCS)
                {
                    CCharEntity* PChar = (CCharEntity*)PEntity;

				    if (m_PQuaterMaster == PChar)
				    {
					    SetQuaterMaster(NULL);
				    }
				    if (m_PSyncTarget == PChar)
				    {
					    SetSyncTarget(NULL);
				    }

				    PChar->pushPacket(new CPartyDefinePacket(NULL));
				    PChar->pushPacket(new CPartyMemberUpdatePacket(PChar, 0, PChar->getZone()));
				    PChar->pushPacket(new CCharUpdatePacket(PChar));
				    PChar->pushPacket(new CCharSyncPacket(PChar));
				    PChar->PParty = NULL;

				    ReloadParty();

				    if (PChar->PTreasurePool != NULL &&
					    PChar->PTreasurePool->GetPoolType() != TREASUREPOOL_ZONE)
				    {
					    PChar->PTreasurePool->DelMember(PChar);
					    PChar->PTreasurePool = new CTreasurePool(TREASUREPOOL_SOLO);
					    PChar->PTreasurePool->AddMember(PChar);
                        PChar->PTreasurePool->UpdatePool(PChar);
				    }
				    Sql_Query(SqlHandle,"UPDATE accounts_sessions SET partyid = 0 WHERE charid = %u", PChar->id);
                }
				break;
			}
		}
	}
}
Exemplo n.º 3
0
void CParty::AddMember(CBattleEntity* PEntity)
{
	DSP_DEBUG_BREAK_IF(PEntity == NULL);
	DSP_DEBUG_BREAK_IF(PEntity->PParty != NULL);

	PEntity->PParty = this;
	members.push_back(PEntity);

    if (m_PartyType == PARTY_PCS)
    {
        DSP_DEBUG_BREAK_IF(PEntity->objtype != TYPE_PC);

        CCharEntity* PChar = (CCharEntity*)PEntity;

	    ReloadParty();
	    ReloadTreasurePool(PChar);

	    if (PChar->nameflags.flags & FLAG_INVITE)
	    {
            PChar->nameflags.flags ^= FLAG_INVITE;

            charutils::SaveCharStats(PChar);

		    PChar->status = STATUS_UPDATE;
		    PChar->pushPacket(new CMenuConfigPacket(PChar));
		    PChar->pushPacket(new CCharUpdatePacket(PChar));
		    PChar->pushPacket(new CCharSyncPacket(PChar));
	    }
	    PChar->PTreasurePool->UpdatePool(PChar);

        //Apply level sync if the party is level synced 
        if (m_PSyncTarget != NULL)
        {
            if (PChar->getZone() == m_PSyncTarget->getZone() )
		    {
			    PChar->pushPacket(new CMessageBasicPacket(PChar, PChar, 0, m_PSyncTarget->GetMLevel(), 540));
                PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(
                    EFFECT_LEVEL_SYNC,
                    EFFECT_LEVEL_SYNC,
                    m_PSyncTarget->GetMLevel(),
                    0,
                    0), true);
                PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DEATH);
                PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE, new CCharSyncPacket(PChar));
            }
        }

	    Sql_Query(SqlHandle,"UPDATE accounts_sessions SET partyid = %u WHERE charid = %u", m_PartyID, PChar->id);
    }
}
Exemplo n.º 4
0
void CParty::AssignPartyRole(int8* MemberName, uint8 role)
{
    DSP_DEBUG_BREAK_IF (m_PartyType != PARTY_PCS);

	for (uint32 i = 0; i < members.size(); ++i)
	{
		CCharEntity* PChar = (CCharEntity*)members.at(i);

		if (strcmp(MemberName, PChar->GetName()) == 0)
		{
			switch(role)
			{
				case 0: SetLeader(PChar);		break;
				case 4: SetQuaterMaster(PChar); break;
				case 5: SetQuaterMaster(NULL);	break;
			    case 6: SetSyncTarget(PChar);	break;
			}
            ReloadParty();
		    return;
        }
    }
    ShowError(CL_RED"The character with name <%s> isn't found in party\n" CL_RESET, MemberName);
}
Exemplo n.º 5
0
void CParty::DisableSync()
{
    m_PSyncTarget = NULL;
    ReloadParty();
}
Exemplo n.º 6
0
void CParty::RemoveMember(CBattleEntity* PEntity)
{
	DSP_DEBUG_BREAK_IF(PEntity == NULL);
	DSP_DEBUG_BREAK_IF(PEntity->PParty != this);

	if (m_PLeader == PEntity)
	{
		RemovePartyLeader(PEntity);
	}
	else
	{
		for (uint32 i = 0; i < members.size(); ++i)
		{
			if (PEntity == members.at(i))
			{
				members.erase(members.begin()+i);

                if (m_PartyType == PARTY_PCS)
                {
                    CCharEntity* PChar = (CCharEntity*)PEntity;

				    if (m_PQuaterMaster == PChar)
				    {
					    SetQuaterMaster(NULL);
				    }
				    if (m_PSyncTarget == PChar)
				    {
					    SetSyncTarget(NULL, 553);
                        CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC);
                        if (sync && sync->GetDuration() == 0)
                        {
			                PChar->pushPacket(new CMessageBasicPacket(PChar, PChar, 0, 30, 553));
                            sync->SetStartTime(gettick());
                            sync->SetDuration(30000);
                        }
                        DisableSync();
				    }
                    if (m_PSyncTarget != NULL && m_PSyncTarget != PChar)
                    {
                        if (PChar->status != STATUS_DISAPPEAR &&
                             PChar->getZone() == m_PSyncTarget->getZone() )
		                {
                            CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC);
                            if (sync && sync->GetDuration() == 0)
                            {
			                    PChar->pushPacket(new CMessageBasicPacket(PChar, PChar, 0, 30, 553));
                                sync->SetStartTime(gettick());
                                sync->SetDuration(30000);
                            }
		                }
                    }

				    PChar->pushPacket(new CPartyDefinePacket(NULL));
				    PChar->pushPacket(new CPartyMemberUpdatePacket(PChar, 0, PChar->getZone()));
				    PChar->pushPacket(new CCharUpdatePacket(PChar));
				    PChar->PParty = NULL;

				    ReloadParty();

				    if (PChar->PTreasurePool != NULL &&
					    PChar->PTreasurePool->GetPoolType() != TREASUREPOOL_ZONE)
				    {
					    PChar->PTreasurePool->DelMember(PChar);
					    PChar->PTreasurePool = new CTreasurePool(TREASUREPOOL_SOLO);
					    PChar->PTreasurePool->AddMember(PChar);
                        PChar->PTreasurePool->UpdatePool(PChar);
				    }
				    Sql_Query(SqlHandle,"UPDATE accounts_sessions SET partyid = 0 WHERE charid = %u", PChar->id);
                }
				break;
			}
		}
	}
}