void CWndPartyQuick::OnDraw( C2DRender* p2DRender ) { // 파티 정보 출력 //Static control int nMax = g_Party.m_nSizeofMember; int i; CRect rect; SetActiveMember(nMax); for(i=0; i<nMax; i++) { LPWNDCTRL lpWndCtrl = GetWndCtrl( StaticID[i] ); rect = lpWndCtrl->rect; CMover* pObjMember = prj.GetUserByID( g_Party.m_aMember[i].m_uPlayerId ); CString strMember; if(m_pFocusMember == pObjMember) p2DRender->RenderFillRect( rect, 0x60ffff00 ); // 상태에 따라 색 변경 DWORD dwColor = 0xff000000; u_long nLeadMember = g_Party.m_aMember[i].m_uPlayerId; if( IsValidObj(pObjMember) ) { if( pObjMember->GetHitPoint() == 0 ) dwColor = 0xffff0000; // 죽은놈 else if( ((FLOAT)pObjMember->GetHitPoint()) / ((FLOAT)pObjMember->GetMaxHitPoint()) <.1f ) dwColor = 0xffffff00; // HP 10% 이하인놈 if(g_Party.IsLeader(nLeadMember)) //Leader Color Set { dwColor = 0xff1fb72d; //굵게 해야함... #if __VER >= 10 // __LEGEND if(pObjMember->IsMaster()) strMember.Format( prj.GetText( TID_GAME_QUICK_MARK_MASTER ), pObjMember->GetLevel(), pObjMember->GetName() ); else if(pObjMember->IsHero()) #if __VER >= 15 // __HERO129_VER15 // 15차 히어로 레벨확장 strMember.Format( prj.GetText( TID_GAME_QUICK_MARK_HERO ), pObjMember->GetLevel(), pObjMember->GetName() ); #else // 15차 히어로 레벨확장 strMember.Format( prj.GetText( TID_GAME_QUICK_MARK_HERO_BEFORE ), pObjMember->GetName() ); #endif // 15차 히어로 레벨확장 else strMember.Format( "%d. %s", pObjMember->GetLevel(), pObjMember->GetName() ); #else //__LEGEND strMember.Format( "%d. %s", pObjMember->GetLevel(), pObjMember->GetName() ); #endif //__LEGEND } else { #if __VER >= 10 // __LEGEND if(pObjMember->IsMaster())
// // 극단 듀얼 해제 // void CParty::DoDuelPartyCancel( CParty* pDuelParty ) { #ifndef __CORESERVER int i; CMover *pMember; for( i = 0; i < m_nSizeofMember; i ++ ) // 극단원 모두에게 듀얼 해제를 세팅하고 클라에도 알림. { #ifdef __WORLDSERVER pMember = (CMover *)g_UserMng.GetUserByPlayerID( m_aMember[i].m_uPlayerId ); #else #ifdef __CLIENT pMember = prj.GetUserByID( m_aMember[i].m_uPlayerId ); #endif #endif // worldserver if( IsValidObj( pMember ) ) { #ifdef __WORLDSERVER if( pDuelParty ) ((CUser *)pMember)->AddDuelPartyCancel( pDuelParty ); // 각 멤버들에게 듀얼이 취소되었다고 알림. else ((CUser *)pMember)->AddDuelPartyCancel( NULL ); // 각 멤버들에게 듀얼이 취소되었다고 알림. if( pMember->m_idDuelParty != m_idDuelParty ) Error( "CParty::DoDuelPartyCancel : 파티멤버 %s의 정보이상. %d %d", pMember->GetName(), pMember->m_idDuelParty, m_idDuelParty ); pMember->ClearDuelParty(); #endif // worldserver } } m_idDuelParty = 0; // 파티 해제 #endif // __CORESERVER }
void _update_console( ) { if( GetAsyncKeyState( VK_CONTROL ) & 0x80000 ) { if( g_bKeyTable[ 'T' ] ) { //test mail CMover* pObj = (CMover*)g_WorldMng.Get()->GetObjFocus( ); if( pObj ) { char* lpszTitle = "letter"; CString title; char* lpszText = "난 알아요 이밤이 흐르고 흐르면 모든것이 떠나야만 한다는 이사실을 그 이유를 나는 알수가 알수가 있어욤 taeji boys ye"; for( int i = 0; i < 90; ++i ) { title.Format( "%d 번째 편지", i ); g_DPlay.SendQueryPostMail( 1, 1, (char*)pObj->GetName(), 0,title.GetBuffer(0),lpszText ); } } //g_Console._bTestToggle = !g_Console._bTestToggle; //g_Console.Log( "Toggle func - testing is %d", g_Console._bTestToggle ); //if( !g_WndMng.m_pWndGHBid ) //{ // g_WndMng.m_pWndGHBid = new CWndGuildHouseBid; // g_WndMng.m_pWndGHBid->Initialize( ); //}else // SAFE_DELETE( g_WndMng.m_pWndGHBid ); } else if( g_bKeyTable[ 'Y' ] ) { CMailBox* pMailBox = CMailBox::GetInstance(); int nMax = pMailBox->size(); CMailBox& mailbox = *pMailBox; for( int i = 0; i < nMax; ++i ) { CMail* pMail = mailbox[i]; if( pMail ) { g_DPlay.SendQueryRemoveMail( pMail->m_nMail ); } } } } static DWORD sDelta = 0; static DWORD sOld = timeGetTime( ); // DWORD dwCur = timeGetTime( ); DWORD dwDt = dwCur - sOld; sDelta += dwDt; sOld = dwCur; #ifdef __CON_AUTO_LOGIN _update_auto_login( sDelta ); #endif if( g_Console._bRandomMoving ) RandomMoving( dwDt ); // if( sDelta > 5000 ) // { // ++debugIndex; // // while( 1 ) // { // BOOL bOK = PlayMusic( debugIndex, 1 ); // if( bOK ) // { // g_Console.Log( " Started music : %d ", debugIndex ); // break; // } // // ++debugIndex; // if( debugIndex > 270 ) // { // debugIndex = 0; // break; // } // } // CWndChat* pWndChat = (CWndChat*) g_WndMng.GetApplet( APP_COMMUNICATION_CHAT ); // if( sDelta < 5100 && pWndChat ) // { // int x = rand() % 10000; // int z = rand() % 10000; // CString str; // str.Format( "%s %d %d %d", "/텔레 ", 1, x, z ); // pWndChat->m_wndEdit.AddString( str ); // pWndChat->OnChildNotify( EN_RETURN, WIDC_EDIT, 0 ); // // g_Console.Log( "TELEPORTED to %d, %d", x, z ); // // sDelta = 5100; // // // for( int i = 0; i < 26; ++i ) // // { // // g_bKeyTable[ 0x41 + i ] = rand() %2; // // } // // // // g_bKeyTable[ 0x4d ] = FALSE; //m // // g_bKeyTable[ 0x4c ] = FALSE; // } // // if( sDelta > 6000 ) // { // // CString str; // // str.Format( "%s %s %d %d", "/엔생", "라울프", 500, 0 ); // // pWndChat->m_wndEdit.AddString( str ); // // pWndChat->OnChildNotify( EN_RETURN, WIDC_EDIT, 0 ); // // // // g_Console.Log( "Created monster" ); // sDelta = 0; // // // if( rand() %2 ) // g_WndMng.ClearAllWnd(); // } // // } // // // if( sDelta > 6000 ) // { // ++gnReq; // gConsole()->Log( "===START ACTION===( FAIL %d : %d )", gnFail, gnReq ); // CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD ); // if( pWndWorld ) // pWndWorld->OnKeyUp( 'C', 0, 0 ); // // CWndWorld::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) // sDelta = 0; // } // if( pSfx->m_pSfxObj->Process( ) ) // { // pSfx->m_pSfxObj-> // } }
void CWndPartyCtrl::OnDraw( C2DRender* p2DRender ) { if( NULL == g_pPlayer ) return; CPoint pt( 3, 3 ); // pt.y -= ( m_nFontHeight + 3 ) * m_wndScrollBar.GetScrollPos(); #if __VER < 11 // __CSC_VER11_4 CWndMessenger* pWndMessenger = (CWndMessenger*)GetWndBase( APP_MESSENGER_ ); #endif //__CSC_VER11_4 CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD ); int nMax = g_Party.m_nSizeofMember; // 눈에 보이는 갯수가 페이지라인수 보다 크면 보이는 갯수를 페이지라인수로 조정 if( nMax - m_wndScrollBar.GetScrollPos() > m_wndScrollBar.GetScrollPage() ) nMax = m_wndScrollBar.GetScrollPage() + m_wndScrollBar.GetScrollPos(); if( nMax < m_wndScrollBar.GetScrollPos() ) nMax = 0; TEXTUREVERTEX2* pVertex = new TEXTUREVERTEX2[ 6 * 2 * nMax ]; TEXTUREVERTEX2* pVertices = pVertex; for( int i = m_wndScrollBar.GetScrollPos(); i < nMax; i++ ) { CMover* pObjMember = prj.GetUserByID( g_Party.m_aMember[i].m_uPlayerId ); CString strMember; #if __VER >= 11 // __SYS_PLAYER_DATA PlayerData* pPlayerData = CPlayerDataCenter::GetInstance()->GetPlayerData( g_Party.m_aMember[i].m_uPlayerId ); int nJob = pPlayerData->data.nJob; int nSex = pPlayerData->data.nSex; #else // __SYS_PLAYER_DATA int nJob = g_Party.m_aMember[ i ].m_nJob; int nSex = g_Party.m_aMember[ i ].m_nSex; #endif // __SYS_PLAYER_DATA // 상태에 따라 색 변경 DWORD dwColor = 0xff000000; if( IsValidObj(pObjMember) ) { if( pObjMember->GetHitPoint() == 0 ) dwColor = 0xffff0000; // 죽은놈 else if( ((FLOAT)pObjMember->GetHitPoint()) / ((FLOAT)pObjMember->GetMaxHitPoint()) < 0.1f ) dwColor = 0xffffff00; // HP 10% 이하인 놈 strMember.Format( "%d %s", pObjMember->GetLevel(), pObjMember->GetName() ); } else { dwColor = 0xff878787; // 디폴트는 주위에 없는 놈 if( g_Party.m_aMember[ i ].m_bRemove ) dwColor = 0xff000000; // 서버에 없는 놈 #if __VER >= 11 // __SYS_PLAYER_DATA strMember.Format( "?? %s", pPlayerData->szPlayer ); #else // __SYS_PLAYER_DATA strMember.Format( "?? %s", g_Party.m_aMember[ i ].m_szName ); #endif // __SYS_PLAYER_DATA } if( i == m_nCurSelect ) dwColor = 0xff6060ff; int x = 0, nWidth = m_rectClient.Width() - 10;// - 1; CRect rect( x, pt.y, x + nWidth, pt.y + m_nFontHeight ); rect.SetRect( x + 20, pt.y + 18, x + nWidth - 10, pt.y + 30 ); nWidth = pObjMember ? pObjMember->GetHitPointPercent( rect.Width() ) : 0; CRect rectTemp = rect; rectTemp.right = rectTemp.left + nWidth; if( rect.right < rectTemp.right ) rectTemp.right = rect.right; m_pTheme->RenderGauge( p2DRender, &rect, 0xffffffff, m_pVBGauge, &m_texGauEmptyNormal ); m_pTheme->RenderGauge( p2DRender, &rectTemp, 0x64ff0000, m_pVBGauge, &m_texGauFillNormal ); rect.SetRect( x + 3, pt.y, x + 3 + 32, pt.y + 6 + 32 ); p2DRender->TextOut( x + 20, pt.y + 3, strMember, dwColor ); if( MAX_EXPERT <= nJob ) { #if __VER >= 10 // __LEGEND if( MAX_PROFESSIONAL <= nJob && nJob < MAX_MASTER ) pWndWorld->m_texMsgIcon.MakeVertex( p2DRender, CPoint( 2, pt.y ), ( 70 + nJob - 16 ) + ( 8 * nSex ), &pVertices, 0xffffffff ); else if( MAX_MASTER <= nJob ) pWndWorld->m_texMsgIcon.MakeVertex( p2DRender, CPoint( 2, pt.y ), ( 70 + nJob - 24 ) + ( 8 * nSex ), &pVertices, 0xffffffff ); else #endif //__LEGEND pWndWorld->m_texMsgIcon.MakeVertex( p2DRender, CPoint( 2, pt.y ), ( 70 + nJob - 6 ) + ( 8 * nSex ), &pVertices, 0xffffffff ); } else { pWndWorld->m_texMsgIcon.MakeVertex( p2DRender, CPoint( 2, pt.y ), 12 + nJob + ( 6 * nSex ), &pVertices, 0xffffffff ); } pt.y += m_nFontHeight + 3; } pWndWorld->m_texMsgIcon.Render( m_pApp->m_pd3dDevice, pVertex, ( (int) pVertices - (int) pVertex ) / sizeof( TEXTUREVERTEX2 ) ); safe_delete_array( pVertex ); }
BOOL CAIMonster2::BeginAttack() { CMover *pMover = GetMover(); OBJMSG dwMsg = OBJMSG_NONE; DWORD dwItemID = 0; MoverProp *pProp = pMover->GetProp(); // 추격하여 도착하면 선택되었던 공격방식을 적용시킨다. switch( m_nAttackType ) { case CAT_NORMAL: dwMsg = OBJMSG_ATK1; dwItemID = pProp->dwAtk1; break; case CAT_NORMAL2: dwMsg = OBJMSG_ATK2; dwItemID = pProp->dwAtk1; break; case CAT_QUAKEDOUBLE: dwMsg = OBJMSG_ATK3; dwItemID = pProp->dwAtk3; break; case CAT_QUAKE_ONE: dwMsg = OBJMSG_ATK4; dwItemID = pProp->dwAtk2; break; default: ASSERT(0); } if( dwMsg == OBJMSG_NONE ) return FALSE; if( m_idTarget == NULL_ID ) return FALSE; // LPMODELELEM lpModelElem = prj.m_modelMng.GetModelElem( OT_MOVER, pMover->GetIndex() ); // if( lpModelElem == NULL ) // return FALSE; // if( lpModelElem->m_nMax dwMsg = OBJMSG_ATK1; int nResult = pMover->DoAttackMelee( m_idTarget, dwMsg, dwItemID ); if( nResult ) { CMover *pTarget = prj.GetMover( m_idTarget ); // 이벤트 메세지 // 보스몬스터가 유저에게 말을 한다. switch( m_nAttackType ) { case CAT_QUAKEDOUBLE: { if( pTarget ) { g_UserMng.AddWorldShout( pMover->GetName(), prj.GetText(TID_GAME_BOSS_BIGMUSCLE_MSG_04), pTarget->GetPos(), pTarget->GetWorld() ); } } break; case CAT_QUAKE_ONE: { if( pTarget ) { TCHAR szChar[128] = { 0 }; sprintf( szChar, prj.GetText(TID_GAME_BOSS_BIGMUSCLE_MSG_05), pTarget->GetName() ); g_UserMng.AddWorldShout( pMover->GetName(), szChar, pTarget->GetPos(), pTarget->GetWorld() ); } } break; } return TRUE; } return FALSE; }