bool ZRuleDuel::OnCommand(MCommand* pCommand) { if (!ZGetGame()) return false; switch (pCommand->GetID()) { case MC_MATCH_DUEL_QUEUEINFO: { pCommand->GetParameter(&QInfo, 0, MPT_BLOB); if (QInfo.m_bIsRoundEnd) { rvector pos = ZGetGame()->m_pMyCharacter->GetPosition(); rvector dir = ZGetGame()->m_pMyCharacter->m_DirectionLower; if ((QInfo.m_uidChampion == ZGetMyUID()) || (QInfo.m_uidChallenger == ZGetMyUID())) { ZMapSpawnData* pSpawnData = ZGetGame()->GetMapDesc()->GetSpawnManager()->GetData( QInfo.m_uidChampion == ZGetMyUID() ? 0 : 1); ZPostRequestSpawn(ZGetMyUID(), pSpawnData->m_Pos, pSpawnData->m_Dir); ZGetGame()->SetSpawnRequested(true); } else { ZCharacter* cha = ZGetCharacterManager()->Find(QInfo.m_uidChampion); if (cha != NULL) cha->Revival(); cha = ZGetCharacterManager()->Find(QInfo.m_uidChallenger); if (cha != NULL) cha->Revival(); ZGetCombatInterface()->SetObserverMode(true); } } if ((QInfo.m_uidChampion != ZGetGame()->m_pMyCharacter->GetUID()) && (QInfo.m_uidChallenger != ZGetGame()->m_pMyCharacter->GetUID()) && !QInfo.m_bIsRoundEnd) ZGetCombatInterface()->SetObserverMode(true); else { for (int i=0; i<QInfo.m_nQueueLength; i++) { ZCharacter* cha = ZGetCharacterManager()->Find(QInfo.m_WaitQueue[i]); if (cha != NULL) { cha->SetVisible(false); cha->ForceDie(); } } } } break; } return false; }
bool ZGameInput::ShowCombatInputChat() { if( ZGetCombatInterface()->IsShowUI() && !ZGetCombatInterface()->IsShowResult() ) { // UI토글이 켜져 있을때만 채팅토글을 처리해준다. ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); if ((pCombatInterface) && (!pCombatInterface->IsChat()) && !ZGetGame()->IsReplay()) { MWidget* pWidget = ZGetGameInterface()->GetIDLResource()->FindWidget("112Confirm"); if (pWidget && pWidget->IsVisible()) return false; pCombatInterface->EnableInputChat(true); } } return true; }
bool ZSurvival::OnReadyToNewSector(MCommand* pCommand) { MUID uidPlayer; pCommand->GetParameter(&uidPlayer, 0, MPT_UID); m_CharactersGone.insert(uidPlayer); ZCharacter *pChar = ZGetCharacterManager()->Find(uidPlayer); // 내가 옵저브 하고 있는 캐릭터가 이동하면 다른 캐릭터로 바꾼다 if(ZGetCombatInterface()->GetObserver()->GetTargetCharacter()==pChar) { ZGetCombatInterface()->GetObserver()->ChangeToNextTarget(); } if (uidPlayer == ZGetGameClient()->GetPlayerUID()) { MoveToNextSector(); } else { // 해당 플레이어 이동 ZCharacter *pChar = ZGetCharacterManager()->Find(uidPlayer); if(pChar && m_CharactersGone.find(ZGetGameClient()->GetPlayerUID())!=m_CharactersGone.end()) { // 내가 이미 이동한 경우 해당플레이어를 보이게 만든다 // pChar->SetVisible(true); // 이번에 이동할 캐릭터의 위치 int nPosIndex = ZGetCharacterManager()->GetCharacterIndex(pChar->GetUID(), false); if (nPosIndex < 0) nPosIndex=0; else if (nPosIndex >= MAX_QUSET_PLAYER_COUNT) nPosIndex = MAX_QUSET_PLAYER_COUNT-1; ZMapSpawnData* pSpawnData = ZGetWorld()->GetDesc()->GetSpawnManager()->GetSoloData(nPosIndex); if(pSpawnData) { pChar->SetPosition(pSpawnData->m_Pos); pChar->SetDirection(pSpawnData->m_Dir); ZGetEffectManager()->AddReBirthEffect(pSpawnData->m_Pos); } else { _ASSERT(0); } } } return true; }
bool ZGameInput::OnEvent(MEvent* pEvent) { int sel = 0; if ((ZGetGameInterface()->GetState() != GUNZ_GAME)) return false; if ( ZGetGameInterface()->GetGame() == NULL ) return false; MWidget* pMenuWidget = ZGetGameInterface()->GetIDLResource()->FindWidget("CombatMenuFrame"); if ((pMenuWidget) && (pMenuWidget->IsVisible())) return false; MWidget* pChatWidget = ZGetGameInterface()->GetIDLResource()->FindWidget("CombatChatInput"); if ((pChatWidget) && (pChatWidget->IsVisible())) return false; MWidget* p112ConfirmWidget = ZGetGameInterface()->GetIDLResource()->FindWidget("112Confirm"); if (p112ConfirmWidget->IsVisible()) return false; #ifndef _PUBLISH if (m_pInstance) { if (m_pInstance->OnDebugEvent(pEvent) == true) return true; } #endif ZMyCharacter* pMyCharacter = ZGetGameInterface()->GetGame()->m_pMyCharacter; if ((!pMyCharacter) || (!pMyCharacter->GetInitialized())) return false; //////////////////////////////////////////////////////////////////////////// switch(pEvent->nMessage){ case MWM_HOTKEY: { int nKey = pEvent->nKey; ZHOTKEY *hk=ZGetConfiguration()->GetHotkey(nKey); //if(ProcessLowLevelCommand(hk->command.c_str())==false) char buffer[256]; strcpy(buffer,hk->command.c_str()); ZApplication::GetGameInterface()->GetChat()->Input(buffer); // ConsoleInputEvent(hk->command.c_str()); }break; case MWM_LBUTTONDOWN: { ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); if ( ZGetCombatInterface()->IsShowResult()) { if ( ((ZGetCombatInterface()->m_nReservedOutTime - timeGetTime()) / 1000) < 13) { if(ZGetGameClient()->IsLadderGame() || ZGetGameClient()->IsDuelTournamentGame()) ZChangeGameState(GUNZ_LOBBY); else ZChangeGameState(GUNZ_STAGE); return true; } } if (pCombatInterface->IsChat()) { pCombatInterface->EnableInputChat(false); } if (pCombatInterface->GetObserver()->IsVisible()) { pCombatInterface->GetObserver()->ChangeToNextTarget(); return true; } /* if ((pMyCharacter) && (pMyCharacter->IsDie())) //// 실서비스에서 스폰안되는 버그유발. 원인불명(_PUBLISH누락) 영구봉쇄. { // 혼자테스트할때 되살아나기 if(g_pGame->m_CharacterManager.size()==1) { #ifndef _PUBLISH ZGetGameInterface()->RespawnMyCharacter(); return true; #endif } }*/ if (ZGetGameInterface()->IsCursorEnable()) return false; } return true; case MWM_RBUTTONDOWN: { if (ZGetGameInterface()->GetCombatInterface()->IsChat()) { ZGetGameInterface()->GetCombatInterface()->EnableInputChat(false); } ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); if (pCombatInterface->GetObserver()->IsVisible()) { pCombatInterface->GetObserver()->NextLookMode(); } } return true; case MWM_MBUTTONDOWN: if (ZGetGameInterface()->GetCombatInterface()->IsChat()) { ZGetGameInterface()->GetCombatInterface()->EnableInputChat(false); } return true; case MWM_ACTIONRELEASED: { switch(pEvent->nKey){ case ZACTION_FORWARD: case ZACTION_BACK: case ZACTION_LEFT: case ZACTION_RIGHT: if (m_pInstance) m_pInstance->m_ActionKeyHistory.push_back(ZACTIONKEYITEM(ZGetGame()->GetTime(),false,pEvent->nKey)); return true; case ZACTION_DEFENCE: { if(ZGetGame()->m_pMyCharacter) ZGetGame()->m_pMyCharacter->m_statusFlags.Ref().m_bGuardKey = false; } return true; } }break; case MWM_ACTIONPRESSED: if ( !ZGetGame()->IsReservedSuicide()) // 자살 예정인 경우 대쉬를 할수없게 막는다 { switch(pEvent->nKey){ case ZACTION_FORWARD: case ZACTION_BACK: case ZACTION_LEFT: case ZACTION_RIGHT: case ZACTION_JUMP: if (m_pInstance) m_pInstance->m_ActionKeyHistory.push_back(ZACTIONKEYITEM(ZGetGame()->GetTime(),true,pEvent->nKey)); return true; case ZACTION_MELEE_WEAPON: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->ChangeWeapon(ZCWT_MELEE); } return true; case ZACTION_PRIMARY_WEAPON: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->ChangeWeapon(ZCWT_PRIMARY); } return true; case ZACTION_SECONDARY_WEAPON: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->ChangeWeapon(ZCWT_SECONDARY); } return true; case ZACTION_ITEM1: case ZACTION_ITEM2: { int nIndex = pEvent->nKey - ZACTION_ITEM1 + ZCWT_CUSTOM1; if ( !ZGetGame()->IsReplay()) { ZGetGameInterface()->ChangeWeapon(ZChangeWeaponType(nIndex)); } } return true; case ZACTION_COMMUNITYITEM1: mlog("Community Item1 Selected!\n"); return true; case ZACTION_COMMUNITYITEM2: mlog("Community Item2 Selected!\n"); return true; case ZACTION_PREV_WEAPON: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->ChangeWeapon(ZCWT_PREV); } return true; case ZACTION_NEXT_WEAPON: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->ChangeWeapon(ZCWT_NEXT); } return true; case ZACTION_RELOAD: { if ( !ZGetGame()->IsReplay()) ZGetGameInterface()->Reload(); } return true; case ZACTION_DEFENCE: { if ( ZGetGame()->m_pMyCharacter && !ZGetGame()->IsReplay()) ZGetGame()->m_pMyCharacter->m_statusFlags.Ref().m_bGuardKey = true; } return true; case ZACTION_TAUNT: // 틸다키 case ZACTION_BOW: case ZACTION_WAVE: case ZACTION_LAUGH: case ZACTION_CRY: case ZACTION_DANCE: { if ( ZGetGame()->IsReplay()) break; if ( MEvent::GetShiftState()) break; if(ZGetGameInterface()->GetCombatInterface()->GetObserverMode()) break; ZC_SPMOTION_TYPE mtype; if(pEvent->nKey == ZACTION_TAUNT) mtype = ZC_SPMOTION_TAUNT; else if(pEvent->nKey == ZACTION_BOW ) mtype = ZC_SPMOTION_BOW; else if(pEvent->nKey == ZACTION_WAVE ) mtype = ZC_SPMOTION_WAVE; else if(pEvent->nKey == ZACTION_LAUGH) mtype = ZC_SPMOTION_LAUGH; else if(pEvent->nKey == ZACTION_CRY ) mtype = ZC_SPMOTION_CRY; else if(pEvent->nKey == ZACTION_DANCE) mtype = ZC_SPMOTION_DANCE; else return true; if(ZGetGame()) ZGetGame()->PostSpMotion( mtype ); // ZPostSpMotion(mtype); } return true; case ZACTION_RECORD: { if ( ZGetGame() && !ZGetGame()->IsReplay()) ZGetGame()->ToggleRecording(); } return true; case ZACTION_MOVING_PICTURE: { // 동영상 캡쳐...2008.10.02 if (ZGetGameInterface()->GetBandiCapturer() != NULL) ZGetGameInterface()->GetBandiCapturer()->ToggleStart(); } return true; case ZACTION_TOGGLE_CHAT: { if(ZGetCombatInterface()->IsShowUI()) { // UI토글이 켜져 있을때만 채팅토글을 처리해준다. if (ZGetGame()) { ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); ZGetSoundEngine()->PlaySound("if_error"); pCombatInterface->ShowChatOutput(!ZGetConfiguration()->GetViewGameChat()); } } } return true; case ZACTION_USE_WEAPON: case ZACTION_USE_WEAPON2: { return true; } case ZACTION_SENSITIVITY_INC: case ZACTION_SENSITIVITY_DEC: { int nPrev = ZGetConfiguration()->GetMouseSensitivityInInt(); float senstivity = Z_MOUSE_SENSITIVITY; if (pEvent->nKey == ZACTION_SENSITIVITY_INC) senstivity += 0.01f; else senstivity -= 0.01f; ZGetConfiguration()->SetMouseSensitivityInFloat(senstivity); int nNew = ZGetConfiguration()->GetMouseSensitivityInInt(); ZGetConfiguration()->ReserveSave(); ZChatOutputMouseSensitivityChanged(nPrev, nNew); return true; } } // switch } break; case MWM_KEYDOWN: { ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); switch (pEvent->nKey) { case VK_F1: case VK_F2: case VK_F3: case VK_F4: case VK_F5: case VK_F6: case VK_F7: case VK_F8: if( pEvent->nKey == VK_F1 ) sel = 0; else if( pEvent->nKey == VK_F2 ) sel = 1; else if( pEvent->nKey == VK_F3 ) sel = 2; else if( pEvent->nKey == VK_F4 ) sel = 3; else if( pEvent->nKey == VK_F5 ) sel = 4; else if( pEvent->nKey == VK_F6 ) sel = 5; else if( pEvent->nKey == VK_F7 ) sel = 6; else if( pEvent->nKey == VK_F8 ) sel = 7; if(ZGetConfiguration()) { char* str = ZGetConfiguration()->GetMacro()->GetString( sel ); if(str) { if(ZApplication::GetGameInterface()) if(ZApplication::GetGameInterface()->GetChat()) ZApplication::GetGameInterface()->GetChat()->Input(str); } } return true; case VK_F9: if (ZIsLaunchDevelop()) { ZApplication::GetGameInterface()->GetScreenDebugger()->SwitchDebugInfo(); } else { // 애들이 어떻게 알고서 쓰길래 막음... -_-; // if (pEvent->bCtrl) // ZApplication::GetGameInterface()->GetScreenDebugger()->SwitchDebugInfo(); } return true; case VK_RETURN: case VK_OEM_2: { if (!ShowCombatInputChat()) return false; } return true; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'Y': case 'N': if (pCombatInterface->GetObserver()->IsVisible()) pCombatInterface->GetObserver()->OnKeyEvent(pEvent->bCtrl, pEvent->nKey); if (ZGetGameClient()->CanVote() || ZGetGameInterface()->GetCombatInterface()->GetVoteInterface()->GetShowTargetList() ) { ZGetGameInterface()->GetCombatInterface()->GetVoteInterface()->VoteInput(pEvent->nKey); } break; case VK_ESCAPE: // 메뉴를 부르거나 kick player를 취소한다 if (ZGetGameInterface()->GetCombatInterface()->GetVoteInterface()->GetShowTargetList()) { ZGetGameInterface()->GetCombatInterface()->GetVoteInterface()->CancelVote(); } else { ZGetGameInterface()->ShowMenu(!ZGetGameInterface()->IsMenuVisible()); ZGetGameInterface()->Show112Dialog(false); } return true; case 'M' : if ( ZGetGame()->IsReplay() && pCombatInterface->GetObserver()->IsVisible()) { if(ZGetGameInterface()->GetCamera()->GetLookMode()==ZCAMERA_FREELOOK) ZGetGameInterface()->GetCamera()->SetLookMode(ZCAMERA_MINIMAP); else ZGetGameInterface()->GetCamera()->SetLookMode(ZCAMERA_FREELOOK); } break; case 'T' : if(ZGetGame()->m_pMyCharacter->GetTeamID()==MMT_SPECTATOR && ZGetGame()->GetMatch()->IsTeamPlay() && pCombatInterface->GetObserver()->IsVisible()) { ZObserver *pObserver = pCombatInterface->GetObserver(); pObserver->SetType(pObserver->GetType()==ZOM_BLUE ? ZOM_RED : ZOM_BLUE); pObserver->ChangeToNextTarget(); } case 'H': if ( ZGetGame()->IsReplay() && pCombatInterface->GetObserver()->IsVisible()) { if ( ZGetGame()->IsShowReplayInfo()) ZGetGame()->ShowReplayInfo( false); else ZGetGame()->ShowReplayInfo( true); } break; case 'J': { #ifdef _CMD_PROFILE if ((pEvent->bCtrl) && (ZIsLaunchDevelop())) { #ifndef _PUBLISH ZGetGameClient()->m_CommandProfiler.Analysis(); #endif } #endif } break; #ifdef _DEBUG case 'K': { rvector pos = ZGetGame()->m_pMyCharacter->GetPosition(); pos.x+=1; ZGetGame()->m_pMyCharacter->SetPosition(pos); } break; case 'L': { rvector pos = ZGetGame()->m_pMyCharacter->GetPosition(); pos.x-=1; ZGetGame()->m_pMyCharacter->SetPosition(pos); } break; //case 'J': // { // ZGetGame()->m_pMyCharacter->GetPosition().z = ZGetGame()->m_pMyCharacter->GetPosition().z+1; // } // break; //case 'M': // { // ZGetGame()->m_pMyCharacter->GetPosition().z = ZGetGame()->m_pMyCharacter->GetPosition().z-1; // } // break; case 'U': { rvector pos = ZGetGame()->m_pMyCharacter->GetPosition(); pos.x = -3809; pos.y = -1330; pos.z = 100; ZGetGame()->m_pMyCharacter->SetPosition(pos); //ZGetGame()->m_pMyCharacter->GetPosition().x = -3809; //ZGetGame()->m_pMyCharacter->GetPosition().y = -1337.5; //ZGetGame()->m_pMyCharacter->GetPosition().z = 461; } break; #endif } } break; case MWM_CHAR: { ZMatch* pMatch = ZGetGame()->GetMatch(); if (pMatch->IsTeamPlay()) { switch(pEvent->nKey) { case '\'': case '\"': { ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); pCombatInterface->EnableInputChat(true, true); } return true; }; } // for deutsch, spanish keyboard if (pEvent->nKey == '/') { if (!ShowCombatInputChat()) return false; } } break; case MWM_SYSKEYDOWN: { // alt+a ~ z(65~90) if(pEvent->nKey==90){ // Alt+'Z' // 모든 UI 감추기... by kammir 20081020 ZGetCombatInterface()->SetIsShowUI(!ZGetCombatInterface()->IsShowUI()); if (ZGetGame()) { ZCombatInterface* pCombatInterface = ZGetGameInterface()->GetCombatInterface(); ZGetSoundEngine()->PlaySound("if_error"); pCombatInterface->ShowChatOutput(ZGetCombatInterface()->IsShowUI()); } } } break; case MWM_MOUSEWHEEL: { if ( ZGetGame()->IsReplay()) break; int nDelta = pEvent->nDelta; if ( (ZGetMyInfo()->IsAdminGrade() && ZGetCombatInterface()->GetObserver()->IsVisible()) || (ZGetGameInterface()->GetScreenDebugger()->IsVisible()) || (!ZGetGameInterface()->m_bViewUI)) { ZCamera* pCamera = ZGetGameInterface()->GetCamera(); pCamera->m_fDist+=-(float)nDelta; pCamera->m_fDist=max(CAMERA_DIST_MIN,pCamera->m_fDist); pCamera->m_fDist=min(CAMERA_DIST_MAX,pCamera->m_fDist); break; } // if (nDelta > 0) ZGetGameInterface()->ChangeWeapon(ZCWT_PREV); // else if (nDelta < 0) ZGetGameInterface()->ChangeWeapon(ZCWT_NEXT); }break; case MWM_MOUSEMOVE: { if(ZGetGameInterface()->IsCursorEnable()==false) { return true; } } break; } // switch (message) return false; }
void ZObserver::OnDraw(MDrawContext* pDC) { if ( g_pGame->IsReplay() && !g_pGame->IsShowReplayInfo()) return; if ( m_pTargetCharacter == NULL) return; if ( ZGetCamera()->GetLookMode() == ZCAMERA_MINIMAP) return; if ( ZGetMyInfo()->IsAdminGrade()) { MFont *pFont=MFontManager::Get("FONTb11b"); if ( pFont == NULL) _ASSERT(0); pDC->SetFont(pFont); MCOLOR backgroundcolor; if ( m_pTargetCharacter->GetTeamID() == MMT_RED) backgroundcolor = MCOLOR(100,0,0, 150); else if ( m_pTargetCharacter->GetTeamID() == MMT_BLUE) backgroundcolor = MCOLOR(0,0,100, 150); else backgroundcolor = MCOLOR(0,0,0, 150); pDC->SetColor(backgroundcolor); pDC->FillRectangle( MGetWorkspaceWidth() / 2 - 170, MGetWorkspaceHeight() * (650.0f/800.0f) - 7, 340, 30); backgroundcolor = MCOLOR( 255,255,255, 255); pDC->SetColor( backgroundcolor); char szName[128]; sprintf_safe( szName, "%s (HP:%d, AP:%d)", m_pTargetCharacter->GetUserName(), m_pTargetCharacter->GetHP(), m_pTargetCharacter->GetAP()); TextRelative(pDC, 0.5f, 650.0f/800.0f, szName, true); } else if ( ZApplication::GetGame()->GetMatch()->GetMatchType() == MMATCH_GAMETYPE_DUEL) { char charName[3][100]; charName[0][0] = charName[1][0] = charName[2][0] = 0; float fMaxHP[ 2]={ 0.0f, 0.0f}, fMaxAP[ 2]={ 0.0f, 0.0f}; int nHP[ 2]={ 0, 0}, nAP[ 2]={ 0, 0}; bool bExistNextChallenger = false; bool bIsChampOserved = false; bool bIsChlngOserved = false; ZRuleDuel* pDuel = (ZRuleDuel*)ZGetGameInterface()->GetGame()->GetMatch()->GetRule(); for (ZCharacterManager::iterator itor = ZGetCharacterManager()->begin(); itor != ZGetCharacterManager()->end(); ++itor) { ZCharacter* pCharacter = (*itor).second; // Champion if (pCharacter->GetUID() == pDuel->QInfo.m_uidChampion) { strcpy_safe(charName[0], pCharacter->GetUserName()); fMaxHP[ 0] = pCharacter->GetProperty()->fMaxHP; fMaxAP[ 0] = pCharacter->GetProperty()->fMaxAP; if ( pCharacter->IsDie()) { nHP[ 0] = 0; nAP[ 0] = 0; } else { nHP[ 0] = pCharacter->GetHP(); nAP[ 0] = pCharacter->GetAP(); } if ( m_pTargetCharacter) { if ( pCharacter->GetUID() == m_pTargetCharacter->GetUID()) bIsChampOserved = true; } } // Challenger else if (pCharacter->GetUID() == pDuel->QInfo.m_uidChallenger) { strcpy_safe(charName[1], pCharacter->GetUserName()); fMaxHP[ 1] = pCharacter->GetProperty()->fMaxHP; fMaxAP[ 1] = pCharacter->GetProperty()->fMaxAP; if ( pCharacter->IsDie()) { nHP[ 1] = 0; nAP[ 1] = 0; } else { nHP[ 1] = pCharacter->GetHP(); nAP[ 1] = pCharacter->GetAP(); } if ( m_pTargetCharacter) { if ( pCharacter->GetUID() == m_pTargetCharacter->GetUID()) bIsChlngOserved = true; } } // Waiting else if (pCharacter->GetUID() == pDuel->QInfo.m_WaitQueue[0]) { strcpy_safe(charName[2], pCharacter->GetUserName()); bExistNextChallenger = true; } } float fRx = (float)MGetWorkspaceWidth() / 800.0f; float fRy = (float)MGetWorkspaceHeight() / 600.0f; int nWidth; float fPosy; float fLength; float fHeight; // HP fPosy = 10.0f*fRy; fLength = 163.0f*fRx; fHeight = 23.0f*fRy; pDC->SetColor( 255, 0, 0, 210); nWidth = (int)( (float)nHP[0] / fMaxHP[0] * fLength); pDC->FillRectangle( (193.0f+163.0f)*fRx-nWidth, fPosy, nWidth, fHeight); nWidth = (int)( (float)nHP[1] / fMaxHP[1] * fLength); pDC->FillRectangle( 444.0f*fRx, fPosy, nWidth, fHeight); // AP pDC->SetColor( 0, 50, 0, 170); pDC->FillRectangle( 218.0f*fRx, 37.0f*fRy, 150.0f*fRx, 5.0f*fRy); pDC->FillRectangle( 432.0f*fRx, 37.0f*fRy, 150.0f*fRx, 5.0f*fRy); pDC->SetColor( 0, 255, 0, 100); nWidth = (int)( (float)nAP[0] / fMaxAP[0] * 150.0f * fRx); pDC->FillRectangle( (218.0f+150.0f)*fRx-nWidth, 37.0f*fRy, nWidth, 5.0f*fRy); nWidth = (int)( (float)nAP[1] / fMaxAP[1] * 150.0f * fRx); pDC->FillRectangle( 432.0f*fRx, 37.0f*fRy, nWidth, 5.0f*fRy); // °ÔÀÌÁö ÇÁ·¹ÀÓ Ãâ·Â MBitmap* pBitmap = MBitmapManager::Get( "duel_score.tga"); if ( pBitmap) { pDC->SetBitmap( pBitmap); pDC->Draw( 167.0f*fRx, 0, 466.0f*fRx, 49.0f*fRx); } // À̸§ Ãâ·Â MFont *pFont = MFontManager::Get("FONTa10_O2Wht"); if ( pFont == NULL) _ASSERT(0); pDC->SetFont( pFont); int nTime = GetGlobalTimeMS() % 200; if ( bIsChampOserved && (nTime < 100)) pDC->SetColor(MCOLOR(0xFFFFFF00)); else pDC->SetColor(MCOLOR(0xFFA0A0A0)); TextRelative(pDC, 0.34f, 0.026f, charName[0], true); if ( bIsChlngOserved && (nTime < 100)) pDC->SetColor(MCOLOR(0xFFFFFF00)); else pDC->SetColor(MCOLOR(0xFFA0A0A0)); TextRelative(pDC, 0.66f, 0.026f, charName[1], true); if ( bExistNextChallenger) { MBitmap* pBitmap = MBitmapManager::Get( "icon_play.tga"); if ( pBitmap) { pDC->SetBitmap( pBitmap); int nIcon = 20.0f*fRx; pDC->Draw( 646.0f*fRx, 0, nIcon, nIcon); pDC->Draw( 640.0f*fRx, 0, nIcon, nIcon); } pDC->SetColor( MCOLOR(0xFF808080)); TextRelative( pDC, 0.83f, 0.01f, charName[ 2], false); } ZGetCombatInterface()->DrawVictory( pDC, 162, 20, pDuel->QInfo.m_nVictory); } else if ( ZApplication::GetGame()->GetMatch()->GetMatchType() != MMATCH_GAMETYPE_DUEL) { char szName[128]; sprintf_safe(szName, "%s (HP:%d, AP:%d)", m_pTargetCharacter->GetUserName(), m_pTargetCharacter->GetHP(), m_pTargetCharacter->GetAP()); if ( m_pTargetCharacter->IsAdmin()) pDC->SetColor(MCOLOR(ZCOLOR_ADMIN_NAME)); else pDC->SetColor(MCOLOR(0xFFFFFFFF)); MFont *pFont = MFontManager::Get( "FONTb11b"); if ( pFont == NULL) _ASSERT(0); pDC->SetFont( pFont); if ( ZApplication::GetGame()->GetMatch()->GetMatchType() == MMATCH_GAMETYPE_DEATHMATCH_TEAM2) TextRelative( pDC, 0.5f, 75.0f/800.0f, szName, true); else TextRelative( pDC, 0.5f, 50.0f/800.0f, szName, true); } // Ä«¸Þ¶ó Ç¥½Ã if ( !ZGetMyInfo()->IsAdminGrade()) { ZCamera *pCamera = ZGetGameInterface()->GetCamera(); const char *szModes[] = { "normal", "user", "free", "minimap" }; // TextRelative(pDC, 0.9f, 50.0f/800.0f, szModes[pCamera->GetLookMode()], true); char szFileName[ 50]; sprintf_safe( szFileName, "camera_%s.tga", szModes[pCamera->GetLookMode()]); pDC->SetBitmap( MBitmapManager::Get( szFileName)); float fGain = (float)MGetWorkspaceWidth() / 800.0f; pDC->Draw( (int)(720.0f * fGain), (int)(7.0f * fGain), (int)(64.0f * fGain), (int)(64.0f * fGain)); } // Admin ¿ÉÁ®¹öÀÏ °æ¿ì¿¡ ³²Àº Àοø¼ö Ç¥½Ã if ( ZGetMyInfo()->IsAdminGrade()) { // Àοø¼ö ±¸Çϱâ int nNumOfTotal=0, nNumOfRedTeam=0, nNumOfBlueTeam=0; ZCharacterManager::iterator itor; ZCharacter* pCharacter; for (itor = ZGetCharacterManager()->begin(); itor != ZGetCharacterManager()->end(); ++itor) { pCharacter = (*itor).second; if ( pCharacter->GetTeamID() == MMT_SPECTATOR) // ¿ÉÀú¹ö´Â –A´Ù continue; if(pCharacter->IsAdminHide()) continue; if ( (pCharacter->GetTeamID()==4) && ( !pCharacter->IsDie())) nNumOfTotal++; else if ( (pCharacter->GetTeamID()==MMT_RED) && ( !pCharacter->IsDie())) nNumOfRedTeam++; else if ( (pCharacter->GetTeamID()==MMT_BLUE) && ( !pCharacter->IsDie())) nNumOfBlueTeam++; } // ÆÀ À̹ÌÁö Ç¥½Ã float sizex = MGetWorkspaceWidth() / 800.f; float sizey = MGetWorkspaceHeight() / 600.f; char szText[128]; // ¹è°æ Ç¥½Ã MCOLOR backgroundcolor; if (ZApplication::GetGame()->GetMatch()->IsTeamPlay()) { backgroundcolor = MCOLOR(100,0,0, 150); pDC->SetColor(backgroundcolor); pDC->FillRectangle( 700 * sizex, 37 * sizey, 85 * sizex, 22 * sizey); backgroundcolor = MCOLOR(0,0,100, 150); pDC->SetColor(backgroundcolor); pDC->FillRectangle( 700 * sizex, 62 * sizey, 85 * sizex, 22 * sizey); // Àοø¼ö Ç¥½Ã backgroundcolor = MCOLOR(255,180,180, 255); pDC->SetColor(backgroundcolor); sprintf_safe( szText, "%s:%d", ZMsg( MSG_WORD_REDTEAM), nNumOfRedTeam); TextRelative( pDC, 0.92f, 40.0f/600.0f, szText, true); backgroundcolor = MCOLOR(180,180,255, 255); pDC->SetColor(backgroundcolor); sprintf_safe( szText, "%s:%d", ZMsg( MSG_WORD_BLUETEAM), nNumOfBlueTeam); TextRelative( pDC, 0.92f, 65.0f/600.0f, szText, true); } } CheckDeadTarget(); }