⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suryundialog.cpp

📁 墨香最新私服
💻 CPP
字号:
// SuryunDialog.cpp: implementation of the CSuryunDialog class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SuryunDialog.h"
#include "./Interface/cIconGridDialog.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "./Interface/cStatic.h"
#include "WindowIDEnum.h"

#include "ObjectManager.h"
#include "AbilityManager.h"
#include "Ability.h"
#include "ChatManager.h"
#include "ItemManager.h"
#include "GameEventManager.h"



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSuryunDialog::CSuryunDialog()
{
	m_pSuryunExpStc = NULL;
	m_type = WT_SURYUNDIALOG;
	m_IconIndexCreator.Init(MAX_ABILITY_NUM_PER_GROUP*eAGK_Max,IG_ABILITYICON_START);
	m_CurPosition = -1;
	m_SelectedAbilityIDX = 0;
}

CSuryunDialog::~CSuryunDialog()
{
	m_IconIndexCreator.Release();
}

void CSuryunDialog::Add(cWindow * window)
{
	if(window->GetType() == WT_PUSHUPBUTTON)
		AddTabBtn(curIdx1++, (cPushupButton * )window);
	else if(window->GetType() == WT_ICONGRIDDIALOG)
	{
		AddTabSheet(curIdx2++, window);
	}
	else 
		cDialog::Add(window);
}

void CSuryunDialog::Linking()
{
	m_pSuryunExpStc = (cStatic*)GetWindowForID(MGI_SURYUN_EXP_STATIC);
	m_pNeedSuryunExpStc = (cStatic*)GetWindowForID(MGI_NEEDSURYUN_EXP_STATIC);
}

void CSuryunDialog::UpdateAbility(int State,BYTE Level,CAbilityInfo* pInfo)
{
	cIconGridDialog * dlg = (cIconGridDialog *)GetTabSheet(pInfo->GetKind());
	CAbilityIcon* pIcon = (CAbilityIcon*)dlg->GetIconForIdx(pInfo->GetPosition());
	if(pIcon == NULL)
	{
		// 眠啊
		pIcon = AddAbility(State, Level, pInfo);
	}
	pIcon->UpdateState(State,Level);
	if(GetSelectAbility() == pInfo->GetIdx())
	{
		if(Level == MAX_ABILITY_LEVEL)
			m_pNeedSuryunExpStc->SetStaticText(CHATMGR->GetChatMsg(179));
		else
		{
			DWORD NeedAbilityExp = pInfo->GetAbilityGradeExp(Level+1);
			if( (int)NeedAbilityExp == -1 )
				m_pNeedSuryunExpStc->SetStaticText(CHATMGR->GetChatMsg(179));
			else
				m_pNeedSuryunExpStc->SetStaticValue(NeedAbilityExp);
		}
		//砒屏盎脚
		SetAbilityToolTip( pIcon );
	}
}

CAbilityIcon* CSuryunDialog::AddAbility(int State, BYTE Level, CAbilityInfo* pInfo)
{
	cIconGridDialog * dlg = (cIconGridDialog *)GetTabSheet(pInfo->GetKind());
		
	CAbilityIcon* pAbil = MakeNewAbility(pInfo, State, Level);

	dlg->AddIcon(pInfo->GetPosition(), (cIcon*)pAbil);
	return pAbil;
}

CAbilityIcon* CSuryunDialog::MakeNewAbility(CAbilityInfo* pInfo,int State,BYTE Level)
{
	CAbilityIcon* pAbilIcon;
	cImage tmpIconImage;
	pAbilIcon = new CAbilityIcon;
	//delete pAbilIcon;
	
	cImage* pImage = NULL;
	pImage = GetIconImage(pInfo->GetInfo()->Ability_IconIndex, &tmpIconImage);
	pAbilIcon->Init(0,0,DEFAULT_ICONSIZE,DEFAULT_ICONSIZE,pImage,
						m_IconIndexCreator.GenerateIndex());
	pAbilIcon->InitAbilityIcon(pInfo);
		
	pAbilIcon->SetIconType(eIconType_Ability);
	pAbilIcon->SetData(pInfo->GetIdx());
	
	WINDOWMGR->AddWindow(pAbilIcon);

	//////////////////////////////////////////////////////////////////////////
	// tooltip 剁快绰 何盒
	SetAbilityToolTip(pAbilIcon);
	//////////////////////////////////////////////////////////////////////////

	return pAbilIcon;
}

cImage * CSuryunDialog::GetIconImage(WORD Ability2DNum, cImage * pImageGet)
{
	SCRIPTMGR->GetImage( Ability2DNum, pImageGet, PFT_ABILITYPATH );	
	return pImageGet;
}

void CSuryunDialog::SetAbilityToolTip(CAbilityIcon* pIcon)
{
	cImage imgToolTip;
	SCRIPTMGR->GetImage( 63, &imgToolTip, PFT_HARDPATH );

	CAbilityInfo* pInfo = pIcon->GetAbilityInfo();	
	pIcon->SetToolTip( pInfo->GetInfo()->Ability_name, 
		RGBA_MAKE(255, 255, 255, 255), &imgToolTip, TTCLR_ITEM_CANEQUIP );
//	pIcon->AddToolTipLine("");

	char tooltip[64];
	//辆幅(passive...
	if( pInfo->GetUseType() == eAUT_Passive )
	{
		if( pInfo->GetKind() != eAGK_Job )
			pIcon->AddToolTipLine( CHATMGR->GetChatMsg(571), TTTC_ABILITYUSEKIND );
		else
			pIcon->AddToolTipLine( CHATMGR->GetChatMsg(611), TTTC_ABILITYUSEKIND );
	}
	else
	{
		pIcon->AddToolTipLine( CHATMGR->GetChatMsg(572), TTTC_ABILITYUSEKIND );
	}
	
	// 砒屏俊 Ability 汲疙眠啊
	TOOLTIP_TEXT* pTooltipText = ITEMMGR->GetItemToolTipInfo(pInfo->GetInfo()->tooltip_text);
	if( pTooltipText )
	{
		pIcon->AddToolTipLine("");
		while( pTooltipText )
		{
			pIcon->AddToolTipLine( pTooltipText->strToolTip, TTTC_DESCRIPTION );
			pTooltipText = pTooltipText->pNext;
		}
	}

	CAbility* pAbil = HERO->GetAbilityGroup()->GetAbility(pInfo->GetIdx());
	
	WORD AbilLevel = pAbil ? pAbil->GetLevel() : 0;
	pIcon->AddToolTipLine("");
	DWORD NeedAbilityExp = pInfo->GetAbilityGradeExp(AbilLevel+1);
	if( (int)NeedAbilityExp != -1 )
		wsprintf( tooltip, "%s: %d", CHATMGR->GetChatMsg(573), NeedAbilityExp );
	else
		wsprintf( tooltip, "%s", CHATMGR->GetChatMsg(480) );
	pIcon->AddToolTipLine( tooltip, TTTC_ABILITYEXP );
}


void CSuryunDialog::OnActionEvent(LONG lId, void * p, DWORD we)
{
	if(we == WE_LBTNCLICK)
	{
		switch(lId)
		{
		case MGI_SURYUN_PUSHUP1: case MGI_SURYUN_PUSHUP2: 
		case MGI_SURYUN_PUSHUP3: case MGI_SURYUN_PUSHUP4: 
			{
				m_CurPosition = -1;
			}
			break;
		}
		cIconGridDialog* pDlg = (cIconGridDialog*)GetTabSheet(GetCurTabNum());
		m_CurPosition = pDlg->GetCurSelCellPos();
		CAbilityIcon* pIcon = GetAbilityIcon(m_CurPosition);
		if(pIcon == NULL)
		{
			m_pNeedSuryunExpStc->SetStaticText("");
			SetSelectAbilityIDX(0);
			return;
		}
		
		CAbilityInfo* pAbilInfo = pIcon->GetAbilityInfo();
		BYTE AbilityLevel = 0;
		CAbility* pAbility = HERO->GetAbilityGroup()->GetAbility(pAbilInfo->GetIdx());
		if(pAbility)
			AbilityLevel = pAbility->GetLevel();
		if(AbilityLevel == MAX_ABILITY_LEVEL)
		{
			m_pNeedSuryunExpStc->SetStaticText(CHATMGR->GetChatMsg(179));
		}
		else
		{
			DWORD NeedAbilityExp = pAbilInfo->GetAbilityGradeExp(AbilityLevel+1);
			if(NeedAbilityExp == DWORD(-1))
			{
				m_pNeedSuryunExpStc->SetStaticText(CHATMGR->GetChatMsg(179));
				return;
			}
			
			if(pAbilInfo->GetInfo()->Ability_Gradeup_method1 != eAGM_OnOff)
			{
				m_pNeedSuryunExpStc->SetStaticValue(NeedAbilityExp);
			}
			else
			{
				if(AbilityLevel == 0)
					m_pNeedSuryunExpStc->SetStaticValue(NeedAbilityExp);
			}			
		}
		SetSelectAbilityIDX(pAbilInfo->GetIdx());
	}

	if(/*we == WE_RBTNCLICK || */we == WE_LBTNDBLCLICK)
	{
		//cIconGridDialog* pDlg = (cIconGridDialog*)p;		//PPP
		cIconGridDialog* pDlg = (cIconGridDialog*)((cDialog*)p)->GetWindowForID( lId );
		CAbilityIcon* pIcon = (CAbilityIcon*)pDlg->GetIconForIdx(pDlg->GetCurSelCellPos());
		if(pIcon == NULL)
			return;
		CAbility* pAbility = HERO->GetAbilityGroup()->GetAbility(pIcon->GetAbilityInfo()->GetIdx());
		if(pAbility == NULL)
			return;
		pAbility->Use();
		
		// event
		GAMEEVENTMGR->AddEvent( eGameEvent_Ability, pAbility->GetAbilityInfo()->GetInfo()->Ability_index );
	}
}

CAbilityIcon* CSuryunDialog::GetAbilityIcon(POSTYPE pos)
{
	CAbilityIcon* pIcon = NULL;
	cIconGridDialog* pDlg = (cIconGridDialog*)GetTabSheet(GetCurTabNum());
	pIcon = (CAbilityIcon*)pDlg->GetIconForIdx(pos);
	return pIcon;
}

CAbilityIcon* CSuryunDialog::GetAbilityIconAbs(POSTYPE AbsPos)
{
	CAbilityIcon* pIcon = NULL;

	BYTE cbTabNum	= (BYTE)(( AbsPos - TP_ABILITY_START ) / MAX_ABILITY_NUM_PER_GROUP);
	WORD pos		= ( AbsPos - TP_ABILITY_START ) % MAX_ABILITY_NUM_PER_GROUP;

	cIconGridDialog* pDlg = (cIconGridDialog*)GetTabSheet(cbTabNum);
	pIcon = (CAbilityIcon*)pDlg->GetIconForIdx(pos);
	return pIcon;
}


void CSuryunDialog::LearnAbilitySyn()
{	
	if(m_CurPosition == ((POSTYPE)-1))
		return;

	CAbilityIcon* pAbilityIcon = GetAbilityIcon(m_CurPosition);
	if(pAbilityIcon == NULL)
		return;

	if(pAbilityIcon->GetState() == eAIS_NotAvailable)
		return;
	CAbilityInfo* pInfo = pAbilityIcon->GetAbilityInfo();	
	
	if(ABILITYMGR->CanUpgrade(pInfo,HERO->GetAbilityGroup()) == FALSE)
		return;
	
	SetDisable(TRUE);

	MSG_WORD msg;
	msg.Category = MP_CHAR;
	msg.Protocol = MP_CHAR_ABILITY_UPGRADE_SYN;
	msg.dwObjectID = HEROID;
	msg.wData = pInfo->GetIdx();

	NETWORK->Send(&msg, sizeof(msg));
}


void CSuryunDialog::SetAbilityExp(DWORD Exp)
{
	if(m_pSuryunExpStc)
		m_pSuryunExpStc->SetStaticValue(Exp);
}

void CSuryunDialog::SelectTab(BYTE idx)
{
	if( idx >= m_bTabNum ) return;
	
	if(m_bSelTabNum == idx)
		return;
	
	m_pNeedSuryunExpStc->SetStaticText("");
	SetSelectAbilityIDX(0);
	
	cTabDialog::SelectTab(idx);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -