//------------------------------------------------------------------------------ // Party.cpp // (C) 2005 ckbang //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "Party.h" #include "SolarDialog.h" #include "PartyDialog.h" #include "PartyMemberOptionDialog.h" #include "Hero.h" const int c_iPARTY_MSG_DELAY = 10000; //------------------------------------------------------------------------------ /** */ Party::Party() { this->Init(); this->ClearInfos(); } //------------------------------------------------------------------------------ /** */ Party::~Party() { this->ClearInfos(); } //------------------------------------------------------------------------------ /** */ void Party::Init() { m_dwMasterObjKey = 0; m_dwInviterKey = 0; m_bShowBuffInfo = FALSE; } //------------------------------------------------------------------------------ /** */ void Party::ClearInfos () { m_byDistributionType = 0; m_byMemberNum = 0; m_bVisable = FALSE; m_MemberInfo.clear(); } //------------------------------------------------------------------------------ /** */ InterfaceManager::eDIALOG_ID Party::GetStartPartyDialog() { InterfaceManager::eDIALOG_ID eid; if (this->m_bShowBuffInfo) { eid = InterfaceManager::DIALOG_PARTYBUFF0; } else { eid = InterfaceManager::DIALOG_PARTY0; } return eid; } //------------------------------------------------------------------------------ /** */ void Party::SetMaster(DWORD objKey) { this->m_dwMasterObjKey = objKey; } //------------------------------------------------------------------------------ /** */ BOOL Party::IsMaster() { // FIXME: ck // ¾ÆÁ÷ Hero Á¤º¸°¡ ¾ø´Ù¸é FALSE // PLAYER_ENTER_ACK ÀÌÈÄ·Î ÆÄƼÁ¤º¸¸¦ ¹Þµµ·Ï ¼öÁ¤ÇÏ¿´À¸¹Ç·Î hero¾øÀÌ´Â // À̰÷¿¡ µµ´ÞÇÒ ¼ö ¾ø´Ù. // ´ÜÁö ³ëÆÄ½ÉÀ¸·Î ¼³Á¤. if (!g_pHero) return FALSE; return (g_pHero->GetObjectKey() == this->m_dwMasterObjKey); } //------------------------------------------------------------------------------ /** */ void Party::Notice(TCHAR *pnotice, WzColor Color) { g_InterfaceManager.ShowMessageBox( pnotice, c_iPARTY_MSG_DELAY, &Color ); } //------------------------------------------------------------------------------ /** */ // ProgrammCommon/ResultCode.h ÂüÁ¶ /* char *partyReason[] = { "¼º°ø", "±×·± Ç÷¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "ÆÄƼÀåÀÌ ¾Æ´Õ´Ï´Ù.", "ÆÄƼ¿øÀÌ ¾Æ´Õ´Ï´Ù.", "ÆÄƼ°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "»ó´ë¹æÀÌ ÆÄƼÃÊ´ë ¿äûÀ» °ÅÀýÇÏ¿´½À´Ï´Ù.", "·¹º§Á¶°ÇÀÌ ¸ÂÁö ¾Ê½À´Ï´Ù.", "À߸øµÈ ¹æ »óÅÂÀÔ´Ï´Ù.", "ÆÄƼÀåÀ» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.", "ÀÌ¹Ì ÆÄƼ¿¡ ¼Ò¼ÓµÇ¾î ÀÖ½À´Ï´Ù.", "»ó´ë¹æÀÌ ÆÄƼ¸¦ ¿äûÇÏÁö ¾Ê¾Ò½À´Ï´Ù.", "µ¥ÀÌŸ ŸÀÔÀÌ ¸ÂÁö ¾Ê½À´Ï´Ù.( À¯È¿ÇÏÁö ¾ÊÀº °ªÀÔ´Ï´Ù. )", "¾Ë¼ö ¾ø´Â ¿À·ùÀÔ´Ï´Ù...", }; */ void Party::Reason(ePARTY_RESULT eReason, WzColor Color) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( (eST_PARTY_RESULT_MESSAGE + eReason), szMessage, INTERFACE_STRING_LENGTH ); this->Notice( szMessage, Color ); } //------------------------------------------------------------------------------ /** */ DWORD Party::name2key(char *pname) { vector::iterator pmemIter; for (pmemIter = m_MemberInfo.begin(); pmemIter != m_MemberInfo.end(); ++pmemIter) { PARTY_MEMBER_INFO pmem = (*pmemIter); if (!strcmp(pmem.m_szCharName, pname)) return pmem.m_dwObjKey; } // away confuse ASSERT(0); return 0; } //------------------------------------------------------------------------------ /** */ char * Party::key2name(DWORD key) { vector::iterator pmemIter; for (pmemIter = m_MemberInfo.begin(); pmemIter != m_MemberInfo.end(); ++pmemIter) { PARTY_MEMBER_INFO pmem = (*pmemIter); if (pmem.m_dwObjKey == key) return pmem.m_szCharName; } // away confuse ASSERT(0); return NULL; } //------------------------------------------------------------------------------ /** óÀ½¿¡ Çѹø ¼¼ÆÃ */ void Party::SetInfos(MSG_CG_PARTY_MEMBER_INFO_CMD *pAck) { m_dwMasterObjKey = pAck->m_dwMasterObjKey; // ÆÄƼÀå ¿ÀºêÁ§Æ® Ű m_byDistributionType = pAck->m_byDistributionType; // ¾ÆÀÌÅÛ ºÐ¹è¹æ½Ä m_byMemberNum = pAck->m_byMemberNum; // ÆÄƼ¿ø ¼ö(ÆÄƼÀå Æ÷ÇÔ) for (int i=0; im_MemberInfo[i]); } //------------------------------------------------------------------------------ /** ÆÄƼ¿ø Ãß°¡´Â ±×¶§¸¶´Ù */ void Party::AddInfo(MSG_CG_PARTY_MEMBER_JOIN_BRD *pAck) { m_MemberInfo.push_back(pAck->m_NewMemberInfo); } //------------------------------------------------------------------------------ /** */ void Party::DelInfo(DWORD dwObjKey) { vector::iterator pmemIter; for (pmemIter = m_MemberInfo.begin(); pmemIter != m_MemberInfo.end(); ++pmemIter) { PARTY_MEMBER_INFO pmem = (*pmemIter); if ( pmem.m_dwObjKey == dwObjKey ) { m_MemberInfo.erase(pmemIter); // ÆÄƼ¿¡¼­ Á¦¿ÜµÇ¾úÀ» °æ¿ì º»ÀÎÀº LEAVE ¸Þ½ÃÁö¸¦ º¸³½´Ù. if (g_pHero && g_pHero->GetObjectKey() == dwObjKey) { this->LeaveParty(); } return; } } } //------------------------------------------------------------------------------ /** */ void Party::LeaveParty() { // ¹Ì¸® ÃʱâÈ­ this->Init(); switch (GameFramework::GetCurScene() ) { case SCENE_TYPE_HUNTING: { MSG_CG_ZONE_LEAVEHUNTINGREQ_SYN SendPacket; SendPacket.m_HuntingKey = BattleScene::GetCurRoomKey(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_MISSION: { MSG_CG_ZONE_LEAVEMISSIONREQ_SYN SendPacket; SendPacket.m_MissionKey = BattleScene::GetCurRoomKey(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; case SCENE_TYPE_LOBBY: { MSG_CG_ZONE_LEAVELOBBYREQ_SYN SendPacket; SendPacket.m_LobbyKey = BattleScene::GetCurRoomKey(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket)); } break; } } //------------------------------------------------------------------------------ /** */ PARTY_MEMBER_INFO* Party::GetInfo (DWORD objKey) { vector::iterator pmemIter; for (pmemIter = m_MemberInfo.begin(); pmemIter != m_MemberInfo.end(); ++pmemIter) { PARTY_MEMBER_INFO *pmem = &(*pmemIter); if (pmem->m_dwObjKey == objKey) return pmem; } return NULL; } //------------------------------------------------------------------------------ /** */ void Party::ShowPartyInfoDlgs(BOOL bFlag) { int i = 0; for (i=0; i(g_InterfaceManager.GetDialog( (InterfaceManager::eDIALOG_ID)(InterfaceManager::DIALOG_PARTY0 + i) )); ptDlg->Clear(); ptDlg->ShowWindow(FALSE); PartyDialog * ptbuffDlg = static_cast(g_InterfaceManager.GetDialog( (InterfaceManager::eDIALOG_ID)(InterfaceManager::DIALOG_PARTYBUFF0 + i) )); ptbuffDlg->Clear(); ptbuffDlg->ShowWindow(FALSE); PartyMemberOptionDialog * ptoptDlg = static_cast(g_InterfaceManager.GetDialog( (InterfaceManager::eDIALOG_ID)(InterfaceManager::DIALOG_PARTYOPTION0 + i) )); ptoptDlg->Clear(); ptoptDlg->ShowWindow(FALSE); } list listMemberInfo; vector::iterator pmemIter; for (pmemIter = m_MemberInfo.begin(); pmemIter != m_MemberInfo.end(); ++pmemIter) { PARTY_MEMBER_INFO pmem = (*pmemIter); if (pmem.m_dwObjKey == this->m_dwMasterObjKey) { listMemberInfo.push_front(pmem); } else { listMemberInfo.push_back(pmem); } } // ´Ù½Ã ±¸¼º this->ClearInfos(); list::iterator pmemListIter; i = 0; for (pmemListIter = listMemberInfo.begin(); pmemListIter != listMemberInfo.end(); ++pmemListIter) { PARTY_MEMBER_INFO pmem = (*pmemListIter); m_MemberInfo.push_back(pmem); PartyDialog * ptDlg = static_cast(g_InterfaceManager.GetDialog( (InterfaceManager::eDIALOG_ID)(GetStartPartyDialog() + i) )); ptDlg->SetIdx (i); ptDlg->SetObjKey (pmem.m_dwObjKey); ptDlg->ShowWindow(bFlag); PartyMemberOptionDialog * ptoptDlg = static_cast(g_InterfaceManager.GetDialog( (InterfaceManager::eDIALOG_ID)(InterfaceManager::DIALOG_PARTYOPTION0 + i) )); ptoptDlg->SetIdx (i); ptoptDlg->SetObjKey (pmem.m_dwObjKey); ptoptDlg->ShowWindow(FALSE); i++; } BattleScene::SetMonsterHPMultiplier(i); }