Files
Leviathan/Client/Game/game/Interface/SUILazyTooltip.cpp
T
2026-06-01 12:46:52 +02:00

249 lines
6.0 KiB
C++

#include "stdafx.h"
#include "SUILazyTooltip.h"
#include "SUIDisplayInfo.h"
#include "SkillBase.h"
#include "SkillBaseFile.h"
/// 2010.12.17 - prodongi
#include "Skill\\SUISkillWnd.h" /// 2010.12.02 - prodongi
#include "Skill\\SUISkillTreeFundWnd.h" /// 2010.12.02 - prodongi
#include "SStringDB.h"
#include "SSkillDB.h"
using namespace rp;
//
// KLazySkillTooltip
//
KLazySkillTooltip::KLazySkillTooltip(
SUIDisplayInfo& helper
, int skillId
, int skillLv
, bool showDetail )
: KLazyTip()
, m_Helper ( helper )
, m_SkillID ( skillId )
, m_SkillLv ( skillLv )
, m_ShowDetail ( showDetail )
{
}
void KLazySkillTooltip::createTip( std::string& tip )
{
tip = m_Helper.GetSkillTooltipText( m_SkillID, m_SkillLv, m_ShowDetail, false );
}
//
// KLazyCreatureSkillFundTooltip
//
KLazyCreatureSkillFundTooltip::KLazyCreatureSkillFundTooltip(
SUIDisplayInfo& helper
, const SkillTreeEx* skillTree
, bool isPrecedentSkillSatisfied
, bool isActive
, int skillId
, int skillLv
, bool showDetail )
: KLazyTip()
, m_Helper ( helper )
, m_SkillTree ( skillTree )
, m_IsPrecedentSkillSatisfied( isPrecedentSkillSatisfied )
, m_IsActive ( isActive )
, m_SkillID ( skillId )
, m_SkillLv ( skillLv )
, m_ShowDetail ( showDetail )
{
}
void KLazyCreatureSkillFundTooltip::createTip( std::string& tip )
{
tip = m_Helper.GetSkillTooltipText( m_SkillID, m_SkillLv, m_ShowDetail, true, true );
if( !m_IsPrecedentSkillSatisfied )
{
if( m_IsActive )
{
// 엑티브 스킬과 패시브 스킬의 툴팁에 끝부분의 여백이 다르다... -_-;
tip += "<BR>";
}
tip += m_Helper.GetSkillTreeToolTipText( m_SkillTree, true );
}
}
//
// KLazyCreatureSkillTooltip
//
KLazyCreatureSkillTooltip::KLazyCreatureSkillTooltip(
SUIDisplayInfo& helper
, int skillId
, int skillLv
, bool showDetail )
: KLazyTip()
, m_Helper ( helper )
, m_SkillID ( skillId )
, m_SkillLv ( skillLv )
, m_ShowDetail ( showDetail )
{
}
void KLazyCreatureSkillTooltip::createTip( std::string& tip )
{
tip = m_Helper.GetSkillTooltipText( m_SkillID, m_SkillLv, m_ShowDetail, false, true );
}
//
// KLazyItemTooltip
//
/// 2011.03.28 - prodongi
KLazyItemTooltip::KLazyItemTooltip(
SUIDisplayInfo& helper
, SInventorySlot* invenSlot
, bool showDetail
, AR_HANDLE hCreature
, bool isRClick )
: KLazyTip()
, m_Helper ( helper )
, m_InvenSlot ( invenSlot )
, m_ShowDetail ( showDetail )
, m_hCreature ( hCreature )
, m_isRClick ( isRClick )
{
}
void KLazyItemTooltip::createTip( std::string& tip )
{
tip = m_Helper.GetItemTooltipText( m_InvenSlot, m_ShowDetail, m_hCreature, m_isRClick ); /// 2011.03.28 - prodongi
}
//
// KLazySkillTreeFundTooltip
//
KLazySkillTreeFundTooltip::KLazySkillTreeFundTooltip(
SUIDisplayInfo& helper
, const SkillBaseEx& skillInfo
, const _SkillSlotInfo& skillSlotInfo
, int jobIndex
/// 2011.03.09 - prodongi
, __int64 jobPoint, int tp, int characterLevel )
: KLazyTip()
, m_Helper ( helper )
, m_SkillInfo ( skillInfo )
, m_SkillSlotInfo ( skillSlotInfo )
, m_JobIndex ( jobIndex )
, m_JobPoint ( jobPoint )
{
/// 2011.03.09 - prodongi
m_tp = tp;
m_characterLevel = characterLevel;
}
void KLazySkillTreeFundTooltip::createTip( std::string& tip )
{
if( m_SkillSlotInfo.nCrrLv >= m_SkillSlotInfo.nMaxLv[m_JobIndex] )
{
tip = CStringUtil::StringFormat("<size:10><#00FF84>%s<br>", S(7048));
}
else
{
/// 2011.03.10 - prodongi
int NeedJp = m_SkillInfo.GetNeedJopPoint( m_SkillSlotInfo.nCrrLv + 1 );
bool isTrait = (NeedJp < 0) ? true : false;
int NeedTP = isTrait ? abs(NeedJp) : 0;
if( m_SkillSlotInfo.nEnoughJLv )
{//"잡레벨 #@job_level@#에 배울 수 있습니다."
tip += "<size:10><#EE0000>";
tip += S(7045);
CStringUtil::ReplacePhrase( tip, "#@job_level@#", CStringUtil::StringFormat("%d",m_SkillSlotInfo.nEnoughJLv).c_str() );
tip += "<br>";
}
if (isTrait)
{
if (m_tp < NeedTP)
{
tip += "<size:10><#EE0000>";
tip += S(8032);
CStringUtil::ReplacePhrase( tip, "#@spe_point@#", CStringUtil::StringFormat("%d",NeedTP).c_str() );
tip += "<br>";
}
}
else
{
if( m_JobPoint < NeedJp )
{//"잡포인트 #@job_point@#가 필요합니다."
tip += "<size:10><#EE0000>";
tip += S(7046);
CStringUtil::ReplacePhrase( tip, "#@job_point@#", CStringUtil::StringFormat("%d",NeedJp).c_str() );
tip += "<br>";
}
}
if( m_SkillSlotInfo.nNeedSkillID )
{
SkillBaseEx* s_need_data = GetSkillDB().GetSkillData( m_SkillSlotInfo.nNeedSkillID );
if( s_need_data )
{//"#@skill_name@# #@skill_level@#이 필요합니다."
tip += "<size:10><#EE0000>";
std::string strSkillName = GetStringDB().GetString(s_need_data->GetNameID());
tip += SR(7047, "#@skill_name@#", strSkillName.c_str(), "#@skill_level@#", CStringUtil::StringFormat("%d",m_SkillSlotInfo.nNeedSkillLv).c_str());
tip += "<br>";
}
}
if( tip.empty() )
{
tip += "<size:10><#00FFFC>";
if (isTrait)
{
tip += S(8032);
CStringUtil::ReplacePhrase( tip, "#@spe_point@#", CStringUtil::StringFormat("%d",NeedTP).c_str() );
}
else
{
tip += S(7046);
CStringUtil::ReplacePhrase( tip, "#@job_point@#", CStringUtil::StringFormat("%d",NeedJp).c_str() );
}
tip += "<br>";
}
/// 2011.04.05 레벨 - prodongi
setCharacterLevel(tip);
}
if( !tip.empty() ) tip += "<size:5><br>";
int nLv = 0;
bool bShowNext = true;
if( m_SkillSlotInfo.nCrrLv == 0 )
{
nLv = m_SkillSlotInfo.nCrrLv + 1;
bShowNext = false;
}
else if( m_SkillSlotInfo.nCrrLv < m_SkillSlotInfo.nMaxLv[ m_JobIndex ] )
{
nLv = m_SkillSlotInfo.nCrrLv;
bShowNext = true;
}
else
{
nLv = m_SkillSlotInfo.nCrrLv;
bShowNext = false;
}
tip += m_Helper.GetSkillTooltipText( m_SkillInfo.GetID(), nLv, true, bShowNext );
}
/// 2011.04.05 레벨 - prodongi
void KLazySkillTreeFundTooltip::setCharacterLevel(std::string &tip)
{
if (0 == m_SkillSlotInfo.lv)
return ;
tip += "<size:10>";
if (m_characterLevel >= m_SkillSlotInfo.lv) tip += "<#00FFFC>";
else tip += "<#EE0000>";
tip += CStringUtil::StringFormat("%s : %d", S(8109), m_SkillSlotInfo.lv);
tip += "<br>";
}