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); } }
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; } } } }
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); } }
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); }
void CParty::DisableSync() { m_PSyncTarget = NULL; ReloadParty(); }
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; } } } }