Esempio n. 1
0
 bool OutdoorPvPBT::Update(uint32 diff)
 {
         OutdoorPvP::Update(diff);
         if(m_FirstLoad == false)
         {
                 if(m_LastWin == ALLIANCE)
                    sLog->outInfo(LOG_FILTER_GENERAL, "|cffEE9A00A[OutdoorPvPBT]: Borean Tundra has started! Last Winner: Alliance(%u)", ALLIANCE);
                 else if(m_LastWin == HORDE)
                    sLog->outInfo(LOG_FILTER_GENERAL, "|cffEE9A00A[OutdoorPvPBT]: Borean Tundra has started! Last Winner: Horde(%u)", HORDE);
                 else if(m_LastWin == 0)
                    sLog->outInfo(LOG_FILTER_GENERAL, "|cffEE9A00A[OutdoorPvPBT]: Borean Tundra has started! Last Winner: Neutral(0)");
                 m_FirstLoad = true;
         }
  
         if(m_ally_gathered <= 50 && limit_A == 0)
         {
            IS_ABLE_TO_SHOW_MESSAGE = true; // We allow the message to pass
            IS_RESOURCE_MESSAGE_A = true; // We allow the message to be shown
            limit_A = 1; // We set this to one to stop the spamming
            PlaySounds(false);
         }
         else if(m_horde_gathered <= 50 && limit_H == 0)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true; // We allow the message to pass
                 IS_RESOURCE_MESSAGE_H = true; // We allow the message to be shown
                 limit_H = 1; // Same as above
                 PlaySounds(true);
         }
         else if(m_ally_gathered <= 0 && limit_A == 1)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true; // We allow the message to pass
                 IS_RESOURCE_MESSAGE_A = true; // We allow the message to be shown
                 limit_A = 2;
                 PlaySounds(false);
         }
         else if(m_horde_gathered <= 0 && limit_H == 1)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true; // We allow the message to pass
                 IS_RESOURCE_MESSAGE_H = true; // We allow the message to be shown
                 limit_H = 2;
                 PlaySounds(true);
         }
         else if(m_ally_gathered <= 300 && limit_resources_message_A == 0)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_A = 1;
                 PlaySounds(false);
         }
         else if(m_horde_gathered <= 300 && limit_resources_message_H == 0)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_H = 1;
                 PlaySounds(true);
         }
         else if(m_ally_gathered <= 200 && limit_resources_message_A == 1)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_A = 2;
                 PlaySounds(false);
         }
         else if(m_horde_gathered <= 200 && limit_resources_message_H == 1)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_H = 2;
                 PlaySounds(true);
         }
         else if(m_ally_gathered <= 100 && limit_resources_message_A == 2)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_A = 3;
                 PlaySounds(false);
         }
         else if(m_horde_gathered <= 100 && limit_resources_message_H == 2)
         {
                 IS_ABLE_TO_SHOW_MESSAGE = true;
                 limit_resources_message_H = 3;
                 PlaySounds(true);
         }
  
         if(IS_ABLE_TO_SHOW_MESSAGE == true) // This will limit the spam
         {
                 SessionMap m_sessions = sWorld->GetAllSessions();
                 for(SessionMap::iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) // We're searching for all the sessions(Players)
                 {
                         if(!itr->second || !itr->second->GetPlayer() || !itr->second->GetPlayer()->IsInWorld() ||
                                 itr->second->GetPlayer()->GetZoneId() != 3537)
                                 continue;
  
                         if(itr->second->GetPlayer()->GetZoneId() == 3537)
                         {
                                 char msg[250];
                                 if(limit_resources_message_A == 1 || limit_resources_message_A == 2 || limit_resources_message_A == 3)
                                 {
                                         snprintf(msg, 250, "|cffEE9A00A[Borean Tundra Defense]: Alliance has %u resources remaining!", m_ally_gathered);
                                         itr->second->GetPlayer()->MonsterTextEmote(msg, itr->second->GetPlayer()->GetGUID());
                                 }
                                 else if(limit_resources_message_H == 1 || limit_resources_message_H == 2 || limit_resources_message_H == 3)
                                 {
                                         snprintf(msg, 250, "|cffEE9A00A[Borean Tundra Defense]: Horde has %u resources remaining!", m_horde_gathered);
                                         itr->second->GetPlayer()->MonsterTextEmote(msg, itr->second->GetPlayer()->GetGUID());
                                 }
  
                                 if(IS_RESOURCE_MESSAGE_A == true)
                                 {
                                         if(limit_A == 1)
                                         {
                                                 snprintf(msg, 250, "|cffEE9A00A[Borean Tundra Defense]: Alliance has %u resources remaining!", m_ally_gathered);
                                                 itr->second->GetPlayer()->MonsterTextEmote(msg, itr->second->GetPlayer()->GetGUID());
                                                 IS_RESOURCE_MESSAGE_A = false; // Reset
                                         }
                                         else if(limit_A == 2)
                                         {
                                                 itr->second->GetPlayer()->MonsterTextEmote("|cffEE9A00A[Borean Tundra Defense]: Alliance has 0 resources! Horde wins!",
                                                 itr->second->GetPlayer()->GetGUID());
                                                 HandleWinMessage("|cffEE9A00AHorde Wins!");
                                                 HandleRewards(itr->second->GetPlayer(), 1500, true, false, false);
                                                 switch(itr->second->GetPlayer()->GetTeam())
                                                 {
                                                    case ALLIANCE:
                                                        HandleBuffs(itr->second->GetPlayer(), true);
                                                    break;
  
                                                    case HORDE:
                                                            HandleBuffs(itr->second->GetPlayer(), false);
                                                    break;
                                                 }
                                                 m_LastWin = HORDE;
                                                 IS_RESOURCE_MESSAGE_A = false; // Reset
                                         }
                                 }
                                 else if(IS_RESOURCE_MESSAGE_H == true)
                                 {
                                         if(limit_H == 1)
                                         {
                                                 snprintf(msg, 250, "|cffEE9A00A[Borean Tundra Defense]: Horde has %u resources remaining!", m_horde_gathered);
                                                 itr->second->GetPlayer()->MonsterTextEmote(msg, itr->second->GetPlayer()->GetGUID());
                                                 IS_RESOURCE_MESSAGE_H = false; // Reset
                                         }
                                         else if(limit_H == 2)
                                         {
                                                 itr->second->GetPlayer()->MonsterTextEmote("|cffEE9A00A[Borean Tundra Defense]: Horde has 0 resources! Alliance wins!",
                                                 itr->second->GetPlayer()->GetGUID());
                                                 HandleWinMessage("Alliance Wins!");
                                                 HandleRewards(itr->second->GetPlayer(), 1500, true, false, false);
                                                 switch(itr->second->GetPlayer()->GetTeam())
                                                 {
                                                    case ALLIANCE:
                                                        HandleBuffs(itr->second->GetPlayer(), false);
                                                    break;
  
                                                    case HORDE:
                                                            HandleBuffs(itr->second->GetPlayer(), true);
                                                    break;
                                                 }
                                                 m_LastWin = ALLIANCE;
                                                 IS_RESOURCE_MESSAGE_H = false; // Reset
                                         }
                                 }
                         }
                         else
                         {
                                 // Don't send anything
                         }
                 }
         }
         IS_ABLE_TO_SHOW_MESSAGE = false; // Reset
         return false;
 }
Esempio n. 2
0
void CGameView::OnTimer(UINT_PTR nIDEvent)
{
	// 심장소리 음악
	if (!gv_min && gv_sec < 10 && !gv_timeDV){	// 분이 0이고 초가 10초 미만일 때 시간제한 음악 켬
		StopSounds (gv_bgDV) ;
		PlaySounds (gv_timeDV) ;
	}

	CClientDC dc (this) ;
	CRect rect ;
	GetClientRect (&rect) ;
	CFont myFont, *pOldFont ;
	CString str;
	
	// Text 설정 Part
	myFont.CreateFont (25, 0, 0, 0, FW_BOLD, true, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, gv_font) ;
	pOldFont =dc.SelectObject (&myFont) ;
	dc.SetBkColor (gv_bgColor) ;		// 글자의 배경은 바탕과 같이 
	dc.SetTextColor (0x00FFFFFF & ~gv_bgColor) ;		// 글자 색을 바탕화면의 반대 색으로

	// 시간에 따른 출력부
	if (!gv_scoreTF) {
		if (gv_min < 10 && gv_min) gv_minStr.Format (_T(" 0%d"), gv_min) ;
		else if (!gv_min) gv_minStr.Format (_T (" 00")) ;
		else gv_minStr.Format (_T (" %d"), gv_min) ;
		
		if (gv_sec < 10 && gv_sec) gv_secStr.Format (_T("0%d"), gv_sec) ;
		else if (!gv_sec) gv_secStr.Format (_T ("00")) ;
		else gv_secStr.Format (_T ("%d"), gv_sec) ;

		if (gv_csec < 10 && gv_csec) gv_csecStr.Format (_T("0%d"), gv_csec) ;
		else if (!gv_csec) gv_csecStr.Format (_T ("00")) ;
		else gv_csecStr.Format (_T ("%d"), gv_csec) ;

		str.Format (_T (" %s : %s : %s "), gv_minStr, gv_secStr, gv_csecStr) ;
		dc.SetTextAlign (TA_RIGHT) ;
		dc.TextOutW (rect.Width () -20, rect.top +45, str) ;

		// 초계산
		if (--gv_csec < 0) {
			if (!gv_min && !gv_sec) OnSuccess () ;
			gv_csec =99 ;
			gv_sec-- ;
			pTimeDlg ->timeCtrl.StepIt () ;		// 초가 줄때마다 실행
		}
		if (gv_sec < 0 && gv_min) {
			gv_sec =59 ;
			gv_min-- ;
		}

		// 카운트 출력
		str.Format (_T (" CLICK COUNT : %u "), gv_cnt) ;
		dc.TextOutW (rect.Width () -20, rect.top +20, str) ;

		// 점수 출력
		dc.SetTextAlign (TA_CENTER) ;
		str.Format (_T (" Score : %u "), gv_point) ;
		dc.TextOutW (rect.Width () /2, rect.top +25, str) ;
	}
	else {
		while (gv_tempMin-- > 0) gv_tempSec +=60 ;		// 분이 남아 있다면 초로 옮김
		// 시간 감소 및 포인트 증가
		if (gv_tempSec > 0) {					// 초가 0보다 클때까지
			gv_point+=3 ; gv_tempSec-- ;			// 점수는 3증가 초는 1증감
			pTimeDlg ->timeCtrl.StepIt () ;
			dc.SetTextAlign (TA_CENTER) ;
			str.Format (_T (" Score :%u "), gv_point) ;	
			dc.TextOutW (rect.Width () /2 , rect.top +25, str) ;
		}
	}
	dc.SelectObject (myFont) ;
	myFont.DeleteObject () ;
	CView::OnTimer(nIDEvent);
}
Esempio n. 3
0
void CGameView::OnDraw(CDC* pDC)
{
	CGameDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	//**** 배경색 *************
	CBrush brush (gv_bgColor);
	CBrush *pOldB =pDC ->SelectObject (&brush) ;
	CRect rect;
	GetClientRect(&rect);
	pDC->Rectangle(rect);
	pDC->SelectObject(pOldB); 
	//***********************

	// 랜덤하지 않으면 랜덤함수 호출
	if(pDoc->gd_bRandom) pDoc->OnRandom();

	int nCount = 0;
go:
	CDC memDC;
	CBitmap* pOldBmp;

	if(isInit){
		// Font 설정 Part
		CFont myFont, *pOldFont ;
		myFont.CreateFont (40, 0, 0, 0, FW_BOLD, true, false, false, 
			DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, 
			DEFAULT_QUALITY, DEFAULT_PITCH, gv_font) ;
		pOldFont =pDC->SelectObject (&myFont) ;

		// Text 설정 Part
		CString str =_T ("HINT") ;
		pDC->SetBkColor (gv_bgColor) ;		// 글자의 배경은 바탕과 같이 
		pDC->SetTextColor (0x00FFFFFF & ~gv_bgColor) ;		// 글자 색을 바탕화면의 반대 색으로
		pDC->SetTextAlign (TA_CENTER) ;		// 가운데 출력
		pDC->TextOutW (rect.Width () /2, rect.top +20, str) ;

		// 보여주는 파트
		pDoc->gd_nBmpFirstID = pDoc->gd_nBmpSecondID = 0 ;		// 비트맵의 이름을 초기화
		pDoc->gd_bMouse = FALSE;

		for(int i=0;i<pDoc->gd_nRow;i++)
			for(int j=0;j<pDoc->gd_nCol;j++)
				pDoc->gd_bShow[i][j] = TRUE;
	}
	memDC.CreateCompatibleDC(pDC);

	for(int n=0;n<pDoc->gd_nRow;n++){
		for(int m=0;m<pDoc->gd_nCol;m++){
			// 이미지 출력 
			int imgStartPtrX = rect.right/(pDoc->gd_nCol+2);
			int imgStartPtrY = rect.bottom/(pDoc->gd_nRow+2);
			/* 이미지 출력 */
			if(pDoc->gd_bShow[n][m]){
				pDoc->gd_bmp[n][m].LoadBitmapW(IDB_BITMAP1+pDoc->gd_nRnd[nCount]);
				pOldBmp = memDC.SelectObject(&pDoc->gd_bmp[n][m]); 
				pDC->StretchBlt(
					imgStartPtrX*(m+1), imgStartPtrY*(n+1),
					imgStartPtrX, imgStartPtrY, 
					&memDC, 0, 0, 
					pDoc->gd_bmCell.cx, pDoc->gd_bmCell.cy, SRCCOPY);
				pDoc->gd_bmp[n][m].DeleteObject();
			}
			/* 커버 출력 */
			if(!pDoc->gd_bShow[n][m]){
				CBitmap bmp;
				bmp.LoadBitmapW(IDB_BITMAP1);	// 커버 출력
				pOldBmp = memDC.SelectObject(&bmp);
				 
				pDC->StretchBlt(
					imgStartPtrX*(m+1), imgStartPtrY*(n+1),
					imgStartPtrX, imgStartPtrY, 
					&memDC, 0, 0, 
					pDoc->gd_bmCell.cx, pDoc->gd_bmCell.cy, SRCCOPY);
				bmp.DeleteObject();
			}
			nCount++;
		}
	}
	memDC.SelectObject(pOldBmp);
	pDoc->ResizeWindow();

	// 게임이 시작된 시점에서의 처리
	if(isInit){
		isInit = FALSE;

		for(int i=0;i<pDoc->gd_nRow;i++)
			for(int j=0;j<pDoc->gd_nCol;j++)
				pDoc->gd_bShow[i][j] = FALSE;

		// 음악 디바이스 열기
		gv_timeDV =OpenSounds (_T ("C:\\image\\심장소리.mp3")) ;	
		gv_successDV =OpenSounds (_T ("C:\\image\\박수갈채.mp3")) ;
		gv_failDV =OpenSounds (_T ("C:\\image\\언더테이커_등장.mp3")) ;	
		gv_bgDV =OpenSounds (_T ("C:\\image\\Terranigma-Light_Side_Field.mp3")) ;

		// 타임바 범위 정의
		gv_timeUpper = gv_min*60 + gv_sec;
		pTimeDlg ->timeCtrl.SetRange32 (0, gv_timeUpper) ;	// 범위
		pTimeDlg ->timeCtrl.SetPos (gv_min*60 +gv_sec) ;		// 초기위치

		PlaySound (L"C:\\image\\즐거운시간되십시오.wav", NULL, SND_SYNC) ;
		
		// Hint time
		int time;
		if(gv_lev == _T("초급")) time = 600;
		else if(gv_lev == _T("중급")) time = 1000;
		else time = 1800;

		pTimeDlg ->ShowWindow (SW_SHOW) ;	// 모달리스 시작
		Sleep(time);
		pDC ->TextOutW (rect.Width () /2, rect.top +20, _T ("             ")) ;
		PlaySounds (gv_bgDV) ;	// 슬립 끝나고 배경음
		SetTimer (true, 1, NULL) ;
		goto go;
	}
}
Esempio n. 4
0
// 성공했을때
void CGameView::OnSuccess(void)
{
	// 랭크 기록 여부
	KillTimer (true) ;	// 메세지 박스를 선택 안해도 시간이 흐르지 않도록
	int res;
	StopSounds (gv_bgDV) ;
	StopSounds (gv_timeDV) ;		// 시간이 지나거나 성공하면 음악을 끔
	
	if(gv_sec != 0){
		PlaySounds (gv_successDV) ;
		gv_scoreTF =!gv_scoreTF ;		// 스코어 타이머 가동
		gv_tempMin =gv_min ; gv_tempSec =gv_sec ;

		SetTimer (true, 40, NULL) ;	// 점수에 남은 시간에 대한 포인트를 더한다.
		res =AfxMessageBox (_T ("축하드립니다! 랭크를 기록 하시겠습니까?"), MB_YESNO) ;
		
		// 기록 할 때
		if (res == IDYES) {
			CRankNameDlg dlgName ;
			dlgName.DoModal () ;

			CRankDlg *mem =new CRankDlg (dlgName.name, gv_minStr, gv_secStr, gv_csecStr, gv_cnt, gv_lev, gv_rank, gv_point) ;
			mem ->DoModal () ;
		}
	}
	else{
		PlaySounds (gv_failDV) ;
		res =AfxMessageBox (_T ("안타깝네요. 다시 하시겠습니까?"), MB_YESNO) ;
		gv_TF =true ;		// 재시작을 다시 묻지 않기 위해
		StopSounds (gv_failDV) ;		// 대화상자를 닫으면 음악을 끄게한다.
	}
	// 재시작 여부
	if(gv_TF == false){		// 게임 끝내면 gv_TF는 원래 값으로 되돌아옴
		KillTimer (true) ;		
		gv_scoreTF =!gv_scoreTF ;		// 스코어 타이머 해제
		StopSounds (gv_successDV) ;		// 대화상자가 뜨기전 음악을 끈다.
		res = AfxMessageBox(_T("다시 시작하시겠습니까?"), MB_YESNO);
	}

	if(res == IDYES){
		gv_cnt = gv_point = gv_min = 0 ;
		gv_csec =100 ;
		CGameDoc* pDoc = GetDocument();
		gv_sec = pDoc->gd_time;
		pDoc->gd_bRandom = TRUE; // 랜덤하게 그림의 ID변경

		for(int n=0;n<pDoc->gd_nRow;n++)
			for(int m=0;m<pDoc->gd_nCol;m++)
				pDoc->gd_bShow[n][m] = FALSE;
		
		// 아무 그림도 선택하지 않은것으로 인식하기 위한 초기화
		pDoc->gd_nBmpFirstID = pDoc->gd_nBmpSecondID = 0 ;
		pDoc->gd_bMouse = FALSE;
		gv_nMatchCount = 0; 
		isInit = TRUE;
		Invalidate();
	}
	else{ // 다시 하지 않으면 종료
		PlaySound (L"C:\\image\\벌써가게흐흥.wav", NULL, SND_SYNC) ;
		PostMessageW(WM_QUIT);
	}
}