#include "SunClientPrecompiledHeader.h" #ifdef _NA_008472_20150903_IMPROVED_BALANCE #include "uiCharacterStatusInfo2.h" #include "uiCharacterStatusMan/uiCharacterStatusMan.h" #include "uiCharacterStatus/uiCharacterStatusInfo.h" #include "Hero.h" #ifdef _20220413_NEW_CHARAC_STATUS #include "OptionListParser.h" #endif const DWORD uiCharacterStatusInfo2::kDialog_ID = StrToWzID("0421"); uiCharacterStatusInfo2::uiCharacterStatusInfo2(InterfaceManager* interface_manager) { } uiCharacterStatusInfo2::~uiCharacterStatusInfo2(void) { } void uiCharacterStatusInfo2::Init( CDrawBase* draw_base ) { uiBase::Init(draw_base); #ifndef _20220413_NEW_CHARAC_STATUS RegisterControlPosition(StrToWzID("C000"), kControl_CheckBT_C000); RegisterControlPosition(StrToWzID("C003"), kControl_CheckBT_C003); RegisterControlPosition(StrToWzID("C001"), kControl_CheckBT_C001); RegisterControlPosition(StrToWzID("C002"), kControl_CheckBT_C002); RegisterControlPosition(StrToWzID("C032"), kControl_CheckBT_C032); RegisterControlPosition(StrToWzID("TI09"), kControl_TextImage_TI09); RegisterControlPosition(StrToWzID("TI12"), kControl_TextImage_TI12); RegisterControlPosition(StrToWzID("TI32"), kControl_TextImage_TI32); RegisterControlPosition(StrToWzID("TI13"), kControl_TextImage_TI13); RegisterControlPosition(StrToWzID("TI11"), kControl_TextImage_TI11); RegisterControlPosition(StrToWzID("I003"), kControl_TextImage_I003); RegisterControlPosition(StrToWzID("I004"), kControl_TextImage_I004); RegisterControlPosition(StrToWzID("I005"), kControl_TextImage_I005); RegisterControlPosition(StrToWzID("I001"), kControl_TextImage_I001); RegisterControlPosition(StrToWzID("I002"), kControl_TextImage_I002); #else RegisterControlPosition(StrToWzID("C000"), kControl_CheckBT_C000); RegisterControlPosition(StrToWzID("C004"), kControl_CheckBT_C003); RegisterControlPosition(StrToWzID("C005"), kControl_CheckBT_C001); RegisterControlPosition(StrToWzID("C002"), kControl_CheckBT_C002); RegisterControlPosition(StrToWzID("C003"), kControl_CheckBT_C032); RegisterControlPosition(StrToWzID("V000"), kControl_VScroll_V000); RegisterControlPosition(StrToWzID("S006"), kControl_TextImage_CaptionName_S006); RegisterControlPosition(StrToWzID("S000"), kControl_TextImage_CaptionName_S000); RegisterControlPosition(StrToWzID("S001"), kControl_TextImage_CaptionName_S001); RegisterControlPosition(StrToWzID("S002"), kControl_TextImage_CaptionName_S002); RegisterControlPosition(StrToWzID("S004"), kControl_TextImage_CaptionName_S004); RegisterControlPosition(StrToWzID("S007"), kControl_TextImage_CaptionName_S007); RegisterControlPosition(StrToWzID("S008"), kControl_TextImage_CaptionName_S008); RegisterControlPosition(StrToWzID("S009"), kControl_TextImage_CaptionName_S009); RegisterControlPosition(StrToWzID("S010"), kControl_TextImage_CaptionName_S010); RegisterControlPosition(StrToWzID("S011"), kControl_TextImage_CaptionName_S011); RegisterControlPosition(StrToWzID("S012"), kControl_TextImage_CaptionName_S012); RegisterControlPosition(StrToWzID("S013"), kControl_TextImage_CaptionName_S013); RegisterControlPosition(StrToWzID("S014"), kControl_TextImage_CaptionName_S014); RegisterControlPosition(StrToWzID("S015"), kControl_TextImage_CaptionName_S015); RegisterControlPosition(StrToWzID("S016"), kControl_TextImage_CaptionName_S016); RegisterControlPosition(StrToWzID("S017"), kControl_TextImage_CaptionName_S017); RegisterControlPosition(StrToWzID("S201"), kControl_TextImage_CaptionValue_S201); RegisterControlPosition(StrToWzID("S202"), kControl_TextImage_CaptionValue_S202); RegisterControlPosition(StrToWzID("S203"), kControl_TextImage_CaptionValue_S203); RegisterControlPosition(StrToWzID("S204"), kControl_TextImage_CaptionValue_S204); RegisterControlPosition(StrToWzID("S205"), kControl_TextImage_CaptionValue_S205); RegisterControlPosition(StrToWzID("S206"), kControl_TextImage_CaptionValue_S206); RegisterControlPosition(StrToWzID("S207"), kControl_TextImage_CaptionValue_S207); RegisterControlPosition(StrToWzID("S208"), kControl_TextImage_CaptionValue_S208); RegisterControlPosition(StrToWzID("S209"), kControl_TextImage_CaptionValue_S209); RegisterControlPosition(StrToWzID("S210"), kControl_TextImage_CaptionValue_S210); RegisterControlPosition(StrToWzID("S211"), kControl_TextImage_CaptionValue_S211); RegisterControlPosition(StrToWzID("S212"), kControl_TextImage_CaptionValue_S212); RegisterControlPosition(StrToWzID("S213"), kControl_TextImage_CaptionValue_S213); RegisterControlPosition(StrToWzID("S214"), kControl_TextImage_CaptionValue_S214); RegisterControlPosition(StrToWzID("S215"), kControl_TextImage_CaptionValue_S215); RegisterControlPosition(StrToWzID("S216"), kControl_TextImage_CaptionValue_S216); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); initOptionListVector(); if (scroll_control != NULL) { scroll_control->SetScrollRangeWZ(0, 0); scroll_control->SetScrollPosWZ(0); } #endif } void uiCharacterStatusInfo2::Release() { } void uiCharacterStatusInfo2::OnShowWindow( BOOL is_show ) { if (is_show == TRUE) { RefreshTab(); uiCharacterStatusInfo* character_status_info = GET_CAST_DIALOG(uiCharacterStatusInfo, uiCharacterStatusInfo::kDialog_ID); if (character_status_info) { character_status_info->ShowWindowRefreshSimulation(); } } else { } } void uiCharacterStatusInfo2::MessageProc( SI_MESSAGE* message ) { if (IsLock()) { return; } if (GetMan() == NULL) { return; } switch (message->eResultMsg) { case RT_MSG_LBUTTONCLICK: OnLButtonClick(message); break; //case RT_MSG_LBUTTONDOWN: //OnLButtonDown(message); //break; //case RT_MSG_LBUTTONUP: //OnLButtonUp(message); //break; #ifdef _20220413_NEW_CHARAC_STATUS case RT_MSG_SB_LINETOP: OnVScrollUp(static_cast(GetControlWZ(message->dwCtrlID))); break; case RT_MSG_SB_LINEBOTTOM: OnVScrollDown(static_cast(GetControlWZ(message->dwCtrlID))); break; case RT_MSG_SB_THUMBTRACK: case RT_MSG_SB_THUMBPOSITION: case RT_MSG_SB_ENDSCROLL: OnVScrollThumb(static_cast(GetControlWZ(message->dwCtrlID))); break; #endif default: SolarDialog::MessageProc(message); break; } } #ifdef _20220413_NEW_CHARAC_STATUS bool uiCharacterStatusInfo2::OnVScrollUp(CCtrlVScrollWZ* scroll_control) { bool result = true; if (scroll_control == NULL) { result = false; return result; } int pos = scroll_control->GetScrollPosWZ(); int mmin = 0, mmax = 0; scroll_control->GetScrollRangeWZ(&mmin, &mmax); if(pos > mmin) { --pos; scroll_control->SetScrollPosWZ(pos); } DWORD control_index = GetControlPosition_byID(scroll_control->GetCtrlID()); if (control_index == kControl_VScroll_V000) { set_status_show_begin_index(pos); char message[2048]; sprintf(message,"OnVScrollUp pos: %d\n",pos); OutputDebugStringA(message); } return result; } bool uiCharacterStatusInfo2::OnVScrollDown(CCtrlVScrollWZ* scroll_control) { bool result = true; if (scroll_control == NULL) { result = false; return result; } int pos = scroll_control->GetScrollPosWZ(); int mmin = 0, mmax = 0; scroll_control->GetScrollRangeWZ(&mmin, &mmax); if (pos < mmax) { ++pos; scroll_control->SetScrollPosWZ(pos); } DWORD control_index = GetControlPosition_byID(scroll_control->GetCtrlID()); if (control_index == kControl_VScroll_V000) { set_status_show_begin_index(pos); char message[2048]; sprintf(message,"OnVScrollDown pos: %d\n",pos); OutputDebugStringA(message); } return result; } bool uiCharacterStatusInfo2::OnVScrollThumb(CCtrlVScrollWZ* scroll_control) { bool result = true; if (scroll_control == NULL) { result = false; return result; } int pos2 = scroll_control->GetScrollPosWZ(); int pos = pos2; int mmin = 0, mmax = 0; scroll_control->GetScrollRangeWZ(&mmin, &mmax); pos = max(mmin, pos); pos = min(mmax, pos); if(pos != pos2) { scroll_control->SetScrollPosWZ(pos); return result; } DWORD control_index = GetControlPosition_byID(scroll_control->GetCtrlID()); if (control_index == kControl_VScroll_V000) { char message[2048]; sprintf(message,"OnVScrollThumb pos: %d min:%d max:%d \n",pos,mmin,mmax); OutputDebugStringA(message); set_status_show_begin_index(pos); } return result; } void uiCharacterStatusInfo2::initOptionListVector(){ status_vecotr.clear(); /*uiCharacterStatusInfo* character_status_info = GET_CAST_DIALOG(uiCharacterStatusInfo, uiCharacterStatusInfo::kDialog_ID); */ if (g_pHero == NULL) { return; } PlayerAttributes* player_attributes = g_pHero->GetPlayerAttribute(); //const BASE_PLAYERINFO* player_info = character_status_info->GetSimulation_BASE_PLAYERINFO(); int interfaceStringIndex[] = {274/*技能强化力*/,23191/*技能攻击力增加(%)*/,12901/*技能防御力*/,23142/*技能冷却*/,370/*致命一击几率*/,23188/*受到致命一击的概率*/ ,23189/*致命一击伤害增加*/,23190/*致命一击伤害增加(%)*/,11308/*致命一击 伤害*/,24188/*承受的致命一击伤害(%)*/,23192/*增益效果时间增加*/,23193/*承受的减益时间减少*/,23194/*输出的减益时间增加*/, 11398/*转换输出伤害为护盾值的转换量*/,11399/*转换输出伤害为生命值的转换量*/,11360/*PVP时承受的伤害减少*/,11361/*技能施放时间减少*/,23018/*伤害减少(%)*/,23019/*减少怪物所造成的伤害(%)*/,23020/*减少狂战士所造成的伤害(%)*/ ,23021/*减少龙骑士所造成的伤害(%)*/,23022/*减少圣射手所造成的伤害(%)*/,23023/*减少魔法师所造成的伤害(%)*/,23024/*减少暗影所造成的伤害(%)*/,23025/*减少刺客所造成的伤害(%)*/,23026/*减少海落伊德所造成的伤害(%)*/,23027/*减少魔力刀锋所造成的伤害(%)*/ ,23028/*贯穿(%)*/,11252/*减少对方基本防御力*/,11366/*减少对方所有元素抵抗率*/,23030/*额外伤害(%)*/,23031/*给怪物造成额外伤害(%)*/,11320/*最大伤害发生概率*/,11274/*伤害反弹概率*/ ,11287/*死亡状态复活概率*/,11277/*多重攻击概率*/,11286/*幸运怪额外伤害*/,23041/*攻城目标输出伤害(%)*/,23042/*恢复药水恢复量(%)*/,11317/*恢复药水冷却时间*/,11309/*制作费用*/ ,11310/*防止制作失败时材料消耗*/,11315/*强化费用*/,11316/*防止强化降级(消失)*/,11319/*任务经验*/,23043/*NPC商店修理费用*/,11349/*NPC商店 购买费用*/,11285/*组合成功率*/ ,11275/*获得金币*/,11276/*获得经验值*/}; //输出的减益成功率 for (int i =0;i<50;i++) { if (interfaceStringIndex[i] == 274)/*技能强化力*/ { StatusData data = {0}; data.calc_value = player_attributes->GetSkillAttackPower(); data.base_value = player_attributes->GetBaseSkillAttackPower(); data.dataType = ParameterCaption; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23191)/*技能攻击力增加(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetSkillPercentDamage(); data.base_value = player_attributes->GetBaseSkillPercentDamage(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 12901)/*技能防御力*/ { StatusData data = {0}; data.calc_value = 0; data.base_value = 0; data.dataType = ParameterCaption; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23142)/*技能冷却*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioBonusSkillCoolTime(); data.base_value = player_attributes->GetBaseBonusSkillCoolTime(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 370)/*致命一击几率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetCriticalRatioChange(); data.base_value = player_attributes->GetBaseCriticalRatioChange(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23188)/*受到致命一击的概率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetEnemyCriticalRatioChange(); data.base_value = player_attributes->GetBaseEnemyCriticalRatioChange(); data.dataType = ParameterCaptionWithPercentReverseTextColor; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23189)/*致命一击伤害增加*/ { StatusData data = {0}; data.calc_value = player_attributes->GetCriticalDamageBonus(); data.base_value = player_attributes->GetBaseCriticalDamageBonus(); data.dataType = ParameterCaption; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23190)/*致命一击伤害增加(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioCriticalDamageBonus(); data.base_value = player_attributes->GetBaseCriticalDamageBonus(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11308)/*致命一击 伤害 代码未实现*/ { StatusData data = {0}; data.calc_value = player_attributes->GetItemEnemyCriticalDamageChange() ; data.base_value = player_attributes->GetBaseEnemyCriticalDamageChange(); data.dataType = ParameterCaption2; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 24188)/*承受的致命一击伤害(%) 代码未实现*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioEnemyCriticalDamageChange() ; data.base_value = player_attributes->GetBaseCriticalRatioDecrease(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23192)/*增益效果时间增加*/ { StatusData data = {0}; data.calc_value = player_attributes->GetItemIncreaseSkillDuration() ; data.base_value = player_attributes->GetBaseIncreaseSkillDuration(); data.dataType = ParameterCaptionWithMilisecond; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23193)/*承受的减益时间减少 未实现*/ { StatusData data = {0}; data.calc_value = player_attributes->GetItemDecreaseSkillDuration() ; data.base_value =player_attributes->GetBaseDecreaseSkillDuration(); data.dataType = ParameterCaptionWithMilisecond; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23194)/*输出的减益时间增加 未实现*/ { StatusData data = {0}; data.calc_value = player_attributes->GetDebuffDuration() ; data.base_value =player_attributes->GetBaseDebuffDuration(); data.dataType = ParameterCaptionWithMilisecond; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11398)/*转换输出伤害为护盾值的转换量*/ { StatusData data = {0}; data.calc_value = player_attributes->GetAttackDamageAbsorbSDRatio() ; data.base_value = player_attributes->GetBaseAttackDamageAbsorbSDRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11399)/*转换输出伤害为生命值的转换量*/ { StatusData data = {0}; data.calc_value = player_attributes->GetAttackDamageAbsorbHPRatio() ; data.base_value = player_attributes->GetBaseAttackDamageAbsorbHPRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11360)/*PVP时承受的伤害减少*/ { StatusData data = {0}; data.calc_value = player_attributes->GetDecreasePVPDamage() ; data.base_value = player_attributes->GetBaseDecreasePVPDamage(); data.dataType = ParameterCaption2; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23017)/*PVP时承受的伤害减少 (%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreasePVPDamage() ; data.base_value = player_attributes->GetBaseDecreasePVPDamage(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23018)/*伤害减少(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecDamage() ; data.base_value = player_attributes->GetBaseDecDamage(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23019)/*减少怪物所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageNPC() ; data.base_value = player_attributes->GetBaseDecreaseDamageNPC(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23020)/*减少狂战士所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageBerserker() ; data.base_value = player_attributes->GetBaseDecreaseDamageBerserker(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23021)/*减少龙骑士所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageDragonKnight() ; data.base_value = player_attributes->GetBaseDecreaseDamageDragonKnight(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23022)/*减少圣射手所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageValkyrie() ; data.base_value = player_attributes->GetBaseDecreaseDamageValkyrie(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23023)/*减少魔法师所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageElementalist() ; data.base_value = player_attributes->GetBaseDecreaseDamageElementalist(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23024)/*减少暗影所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageShadow() ; data.base_value = player_attributes->GetBaseDecreaseDamageShadow(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23025)/*减少刺客所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageMystic() ; data.base_value = player_attributes->GetBaseDecreaseDamageMystic(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23026)/*减少海落伊德所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageHellroid() ; data.base_value = player_attributes->GetBaseDecreaseDamageHellroid(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23027)/*减少魔力刀锋所造成的伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDecreaseDamageWitchBlade() ; data.base_value = player_attributes->GetBaseDecreaseDamageWitchBlade(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23028)/*贯穿(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioPassDecDamage() ; data.base_value = player_attributes->GetBasePassDecDamage(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11252)/*减少对方基本防御力*/ { StatusData data = {0}; data.calc_value = player_attributes->GetReducePhysicalTargetDefenseRatio() ; data.base_value = 0; data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11366)/*减少对方所有元素抵抗率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetReduceElementTargetDefenseRatio((eATTACK_TYPE)eATTR_DEL_MAGICAL_ALL_DAMAGE) ; data.base_value = 0; data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23030)/*额外伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioAddDamage() ; data.base_value = player_attributes->GetBaseAddDamage(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23031)/*给怪物造成额外伤害(%) 未实现*/ { StatusData data = {0}; data.calc_value = 0 ; data.base_value = 0; data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11320)/*最大伤害发生概率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetMaxDamageRatio() ; data.base_value = player_attributes->GetBaseMaxDamageRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11274)/*伤害反弹概率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetReflectDamageRatio() ; data.base_value = player_attributes->GetBaseReflectDamageRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11287)/*死亡状态复活概率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetResurrectionRatio() ; data.base_value = player_attributes->GetBaseResurrectionRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11277)/*多重攻击概率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetAreaAttackRatio() ; data.base_value = player_attributes->GetBaseAreaAttackRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11286)/*幸运怪额外伤害*/ { StatusData data = {0}; data.calc_value = player_attributes->GetLuckMonIncDamage() ; data.base_value = player_attributes->GetBaseLuckMonIncDamage(); data.dataType = ParameterCaption2; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23041)/*攻城目标输出伤害(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioDominationMapobjectDamageRatio() ; data.base_value = player_attributes->GetBaseDominationMapobjectDamageRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23042)/*恢复药水恢复量(%)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRatioRecoverPotionRecoveryRatio() ; data.base_value = player_attributes->GetBaseRecoverPotionRecoveryRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11317)/*恢复药水恢复量*/ { StatusData data = {0}; data.calc_value = player_attributes->GetRecoverPotionCooltimeRatio() ; data.base_value = player_attributes->GetBaseRecoverPotionCooltimeRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11309)/*制作费用*/ { StatusData data = {0}; data.calc_value = player_attributes->GetCraftCostRatio() ; data.base_value = player_attributes->GetBaseCraftCostRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11310)/*防止制作失败时材料消耗*/ { StatusData data = {0}; data.calc_value = player_attributes->GetCraftPreventExtinctionMaterialRatio() ; data.base_value = player_attributes->GetBaseCraftPreventExtinctionMaterialRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11315)/*强化费用*/ { StatusData data = {0}; data.calc_value = player_attributes->GetEnchantCostRatio() ; data.base_value = player_attributes->GetBaseEnchantCostRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11316)/*防止强化降级(消失)*/ { StatusData data = {0}; data.calc_value = player_attributes->GetEnchantPreventDestroyNDowngradeItemRatio() ; data.base_value = player_attributes->GetBaseEnchantPreventDestroyNDowngradeItemRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11319)/*任务经验*/ { StatusData data = {0}; data.calc_value = player_attributes->GetQuestRewardExpRatio() ; data.base_value = player_attributes->GetBaseQuestRewardExpRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 23043)/*NPC商店修理费用*/ { StatusData data = {0}; data.calc_value = player_attributes->GetShopRepairHeimRatio(); data.base_value = player_attributes->GetBaseShopRepairHeimRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11349)/*NPC商店 购买费用*/ { StatusData data = {0}; data.calc_value = player_attributes->GetShopBuyHeimRatio(); data.base_value = player_attributes->GetBaseShopBuyHeimRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11285)/*组合成功率*/ { StatusData data = {0}; data.calc_value = player_attributes->GetCompositeIncRatio(); data.base_value = player_attributes->GetBaseCompositeIncRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11275)/*获得金币*/ { StatusData data = {0}; data.calc_value = player_attributes->GetBonusMoneyRatio(); data.base_value = player_attributes->GetBaseBonusMoneyRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } if (interfaceStringIndex[i] == 11276)/*获得经验值*/ { StatusData data = {0}; data.calc_value = player_attributes->GetBonusExpRatio(); data.base_value = player_attributes->GetBaseBonusExpRatio(); data.dataType = ParameterCaptionWithPercent; g_InterfaceManager.GetInterfaceString(interfaceStringIndex[i], data.name, INTERFACE_STRING_LENGTH); status_vecotr.push_back(data); } } } void uiCharacterStatusInfo2::UpdateStautsOption() { if (status_show_begin_index() >= (int)status_vecotr.size()) { return; } //! 胶懦疙 StatusVector::iterator begin = status_vecotr.begin() + status_show_begin_index(); StatusVector::iterator end = status_vecotr.end(); int index = 0; for ( ; begin != end; ++begin) { static_cast(GetControlWZ_byPosition(kControl_TextImage_CaptionName_S006 + index))->SetTextWZ(begin->name); if (begin->dataType == ParameterCaption) { SetParameterCaption((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value); } if (begin->dataType == ParameterCaption2) { SetParameterCaption((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterDamage) { SetParameterDamage(static_cast(GetControlWZ_byPosition(kControl_TextImage_CaptionValue_S201 + index)),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterCaptionWithPercent) { SetParameterCaptionWithPercent((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterCaptionWithPercentReverseTextColor) { SetParameterCaptionWithPercentReverseTextColor((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterCaptionWithSecond) { SetParameterCaptionWithSecond((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterCaptionWithMilisecond) { SetParameterCaptionWithMilisecond((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } if (begin->dataType == ParameterCaptionWithSecondReverse) { SetParameterCaptionWithSecondReverse((uiCharacterStatusInfo2::UIControlPos)(kControl_TextImage_CaptionValue_S201 + index),begin->calc_value,begin->base_value); } ++index; if (kControl_TextImage_CaptionName_S006 + index > kControl_TextImage_CaptionName_S017 && kControl_TextImage_CaptionValue_S201 + index > kControl_TextImage_CaptionValue_S216) { break; } } } void uiCharacterStatusInfo2::UpdateMouseWheel() { //! 家南 可记 府胶飘甸 胶农费 眉农 CControlWZ* control_lt = GetControlWZ_byPosition(kControl_TextImage_CaptionName_S006); CControlWZ* control_rb = GetControlWZ_byPosition(kControl_TextImage_CaptionValue_S216); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if ((control_lt != NULL) && (control_rb != NULL) && (scroll_control != NULL)) { RECT area; area.left = control_lt->GetSizeRect().left; area.top = control_lt->GetSizeRect().top; area.right = control_rb->GetSizeRect().right; area.bottom = control_rb->GetSizeRect().bottom; switch (GetMouseWheelStatus(&area)) { case MOUSE_WHEEL_UP: { OnVScrollUp(scroll_control); } break; case MOUSE_WHEEL_DOWN: { OnVScrollDown(scroll_control); } break; } } } #endif void uiCharacterStatusInfo2::OnUpdateSolarDialog() { if (g_pHero == NULL) { return; } // 瓷仿摹 诀单捞飘 #ifdef _20220413_NEW_CHARAC_STATUS UpdateMouseWheel(); initOptionListVector(); #endif UpdateParameter(); } void uiCharacterStatusInfo2::OnRenderSolarDialog() { #ifdef _20220413_NEW_CHARAC_STATUS // 砒屏 免仿 //set_status_show_begin_index(0); int backup_cur_apply_status_count = status_vecotr.size(); CCtrlVScrollWZ* scroll_control = static_cast(GetControlWZ_byPosition(kControl_VScroll_V000)); if (scroll_control != NULL) { // 胶农费 官 诀单捞飘 int max_num = max(0, backup_cur_apply_status_count - kStatusRowCount); scroll_control->SetScrollRangeWZ(0, max_num); scroll_control->SetScrollPosWZ(status_show_begin_index()); int thumb_size = 100 / (max_num + 1); scroll_control->SetChangeSizeThumb(thumb_size); } UpdateStautsOption(); #endif if (IsLocked() == false) { RenderTooltip(); } } bool uiCharacterStatusInfo2::OnLButtonClick( SI_MESSAGE* message ) { bool result = true; DWORD control_position = GetControlPosition_byID(message->dwCtrlID); switch (control_position) { case kControl_CheckBT_C000: case kControl_CheckBT_C003: case kControl_CheckBT_C001: case kControl_CheckBT_C002: case kControl_CheckBT_C032: { uiCharacterStatusMan* ui_status_manager = GET_DIALOG_MANAGER(uiCharacterStatusMan, UIMAN_CHARACTERSTATUS); if (ui_status_manager != NULL) { TabCheckButtonControllManager& tab_manager = ui_status_manager->status_dialog_tab_manager(); tab_manager.OnClickTab(control_position - kControl_CheckBT_C000); } RefreshTab(); } break; default: { } break; } return result; } bool uiCharacterStatusInfo2::OnLButtonDown( SI_MESSAGE* message ) { return true; } bool uiCharacterStatusInfo2::OnLButtonUp( SI_MESSAGE* message ) { return true; } void uiCharacterStatusInfo2::RefreshTab() { CCtrlButtonCheckWZ* check_button = NULL; for (int position = kControl_CheckBT_C000; position < (kControl_CheckBT_C032 + 1); ++position) { check_button = static_cast(GetControlWZ(GetControlID_byPosition(position))); if (check_button == NULL) { continue; } check_button->SetCheckState((position == kControl_CheckBT_C003) ? (true) : (false)); } } void uiCharacterStatusInfo2::SetControlTextColor( CCtrlImageStaticWZ* control_ptr, int val, bool is_max /*= false*/ ) { #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT) == false) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE) == false) { #endif return; } #ifdef _20220413_NEW_CHARAC_STATUS if ((control_ptr->IsKind(CTRL_KIND_TEXT) == true)) { #else if ((control_ptr->IsKind(CTRL_KIND_TEXTIMAGE) == true)) { #endif if (is_max == true) { control_ptr->SetTextColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetFontID(StrToWzID("m217")); return; } else { control_ptr->SetFontID(StrToWzID("st10")); } if (val > 0) { control_ptr->SetTextColor(WzColor_RGBA(20,255,20,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,255,20,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,255,20,255)); } else if (val < 0) { control_ptr->SetTextColor(WzColor_RGBA(20,20,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,20,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,20,255,255)); } else { control_ptr->SetTextColor(WzColor_RGBA(255,255,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(255,255,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(255,255,255,255)); } } } void uiCharacterStatusInfo2::SetControlReverseTextColor( CCtrlImageStaticWZ* control_ptr, int val, bool is_max /*= false*/ ) { #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT) == false) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE) == false) { #endif return; } #ifdef _20220413_NEW_CHARAC_STATUS if ((control_ptr->IsKind(CTRL_KIND_TEXT) == true)) { #else if ((control_ptr->IsKind(CTRL_KIND_TEXTIMAGE) == true)) { #endif if (is_max == true) { control_ptr->SetTextColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,255,255,255)); control_ptr->SetFontID(StrToWzID("m217")); return; } else { control_ptr->SetFontID(StrToWzID("st10")); } if (val < 0) { control_ptr->SetTextColor(WzColor_RGBA(20,255,20,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,255,20,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,255,20,255)); } else if (val > 0) { control_ptr->SetTextColor(WzColor_RGBA(20,20,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(20,20,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(20,20,255,255)); } else { control_ptr->SetTextColor(WzColor_RGBA(255,255,255,255)); control_ptr->SetTextMouseOnColor(WzColor_RGBA(255,255,255,255)); control_ptr->SetTextMouseDownColor(WzColor_RGBA(255,255,255,255)); } } } #ifdef _20220413_NEW_CHARAC_STATUS void uiCharacterStatusInfo2::SetOptionName(UIControlPos control_position, DWORD nameCode){ CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); if (control_ptr->IsKind(CTRL_KIND_TEXT)) { static_cast(control_ptr)->SetTextWZ(g_InterfaceManager.GetInterfaceString(nameCode)); } } #endif void uiCharacterStatusInfo2::SetParameterCaption( UIControlPos control_position, int val ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlTextColor(static_cast(control_ptr), val, IsMaxParameterCaption(control_position, val)); TCHAR text_string[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(text_string, INTERFACE_STRING_LENGTH-1, _T("%d"), val); static_cast(control_ptr)->SetTextWZ(text_string); } } void uiCharacterStatusInfo2::SetParameterCaption( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR text_string[INTERFACE_STRING_LENGTH] = {0, }; Snprintf(text_string, INTERFACE_STRING_LENGTH-1, _T("%d"), calc_value); static_cast(control_ptr)->SetTextWZ(text_string); } } void uiCharacterStatusInfo2::SetParameterDamage( CCtrlImageStaticWZ* control_ptr, int min_value, int max_value ) { TCHAR text_string[INTERFACE_STRING_LENGTH] = {0, }; #ifdef _JAPAN Snprintf(text_string, INTERFACE_STRING_LENGTH-1, _T("%d-%d"), min_value, max_value); #else Snprintf(text_string, INTERFACE_STRING_LENGTH-1, _T("%d~%d"), min_value, max_value); #endif control_ptr->SetTextColor(WzColor_RGBA(255,255,255,255)); control_ptr->SetTextWZ(text_string); } void uiCharacterStatusInfo2::SetParameterCaptionWithPercent( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR string_format[INTERFACE_STRING_LENGTH] = {NULL, }; TCHAR string_messgae[INTERFACE_STRING_LENGTH] = {NULL, }; //! 158573 %d%% g_InterfaceManager.GetInterfaceString(158573, string_format, INTERFACE_STRING_LENGTH); Snprintf(string_messgae, INTERFACE_STRING_LENGTH-1, string_format, calc_value); static_cast(control_ptr)->SetTextWZ(string_messgae); } } void uiCharacterStatusInfo2::SetParameterCaptionWithPercentReverseTextColor( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlReverseTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR string_format[INTERFACE_STRING_LENGTH] = {NULL, }; TCHAR string_messgae[INTERFACE_STRING_LENGTH] = {NULL, }; //! 158573 %d%% g_InterfaceManager.GetInterfaceString(158573, string_format, INTERFACE_STRING_LENGTH); Snprintf(string_messgae, INTERFACE_STRING_LENGTH-1, string_format, calc_value); static_cast(control_ptr)->SetTextWZ(string_messgae); } } void uiCharacterStatusInfo2::SetParameterCaptionWithSecond( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR string_format[INTERFACE_STRING_LENGTH] = {0, }; TCHAR string_message[INTERFACE_STRING_LENGTH] = {0, }; // 2149 : 檬 g_InterfaceManager.GetInterfaceString(2149, string_format, INTERFACE_STRING_LENGTH); Snprintf(string_message, INTERFACE_STRING_LENGTH-1, "%d%s", calc_value, string_format); static_cast(control_ptr)->SetTextWZ(string_message); } } void uiCharacterStatusInfo2::SetParameterCaptionWithMilisecond( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); #ifdef _20220413_NEW_CHARAC_STATUS if (control_ptr->IsKind(CTRL_KIND_TEXT)) { #else if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { #endif SetControlTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR string_format[INTERFACE_STRING_LENGTH] = {0, }; TCHAR string_message[INTERFACE_STRING_LENGTH] = {0, }; // 2149 : 檬 g_InterfaceManager.GetInterfaceString(2149, string_format, INTERFACE_STRING_LENGTH); float result_value = static_cast(calc_value) * 0.001f; Snprintf(string_message, INTERFACE_STRING_LENGTH-1, "%.1f%s", result_value, string_format); static_cast(control_ptr)->SetTextWZ(string_message); } } bool uiCharacterStatusInfo2::IsMaxParameterCaption( UIControlPos control_position, IN OUT int& calc_value ) { return false; } void uiCharacterStatusInfo2::UpdateParameter() { uiCharacterStatusInfo* character_status_info = GET_CAST_DIALOG(uiCharacterStatusInfo, uiCharacterStatusInfo::kDialog_ID); if (character_status_info == NULL) { return; } PlayerAttributes* player_attributes = character_status_info->GetSimulationPlayerAttributes(); const BASE_PLAYERINFO* player_info = character_status_info->GetSimulation_BASE_PLAYERINFO(); #ifdef _20220413_NEW_CHARAC_STATUS /*BASE_OptionList *option = OptionListParser::Instance()->GetOptionListByAttr(eATTR_ADD_SKILL_ATTACK_POWER); SetOptionName(kControl_TextImage_CaptionName_S006,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S201, player_attributes->GetSkillAttackPower(), player_attributes->GetBaseSkillAttackPower()); option = OptionListParser::Instance()->GetOptionListByAttr(eATTR_ADD_SKILL_DAMAGE_RATIO); SetOptionName(kControl_TextImage_CaptionName_S000,option->mdwNameCode); SetParameterCaptionWithPercent(kControl_TextImage_CaptionValue_S202, player_attributes->GetSkillPercentDamage(), player_attributes->GetBaseSkillPercentDamage()); option = OptionListParser::Instance()->GetOptionListByAttr(eATTR_BONUS_SKILL_COOL_TIME); SetOptionName(kControl_TextImage_CaptionName_S001,option->mdwNameCode); SetParameterCaptionWithPercent(kControl_TextImage_CaptionValue_S203, player_attributes->GetBonusSkillCoolTime(), player_attributes->GetBaseBonusSkillCoolTime()); option = OptionListParser::Instance()->GetOptionList(41); //致命一擊幾率 SetOptionName(kControl_TextImage_CaptionName_S002,option->mdwNameCode); SetParameterCaptionWithPercent(kControl_TextImage_CaptionValue_S204, player_attributes->GetCriticalRatioBonus(), player_attributes->GetBaseCriticalRatioBonus()); option = OptionListParser::Instance()->GetOptionList(42); //致命一擊傷害 SetOptionName(kControl_TextImage_CaptionName_S004,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S205, player_attributes->GetCriticalDamageBonus(), player_attributes->GetBaseCriticalDamageBonus()); option = OptionListParser::Instance()->GetOptionList(61); //增益效果時間 SetOptionName(kControl_TextImage_CaptionName_S007,option->mdwNameCode); SetParameterCaptionWithMilisecond(kControl_TextImage_CaptionValue_S206, player_attributes->GetIncreaseSkillDuration(), player_attributes->GetBaseIncreaseSkillDuration()); option = OptionListParser::Instance()->GetOptionList(98); //转换输出伤害为护盾值的转换量 SetOptionName(kControl_TextImage_CaptionName_S008,option->mdwNameCode); SetParameterCaptionWithPercent(kControl_TextImage_CaptionValue_S207, player_attributes->GetAttackDamageAbsorbSDRatio(), player_attributes->GetBaseAttackDamageAbsorbSDRatio()); option = OptionListParser::Instance()->GetOptionList(99); //转换输出伤害为生命值的转换量 SetOptionName(kControl_TextImage_CaptionName_S009,option->mdwNameCode); SetParameterCaptionWithPercent(kControl_TextImage_CaptionValue_S208, player_attributes->GetAttackDamageAbsorbHPRatio(), player_attributes->GetBaseAttackDamageAbsorbHPRatio()); option = OptionListParser::Instance()->GetOptionList(72); //PVP時承受的傷害減少。 SetOptionName(kControl_TextImage_CaptionName_S010,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S209, player_attributes->GetDecreasePVPDamage(), player_attributes->GetBaseDecreasePVPDamage()); option = OptionListParser::Instance()->GetOptionList(117); //減少怪物的傷害。 SetOptionName(kControl_TextImage_CaptionName_S011,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S210, player_attributes->GetDecreaseDamageNPC(), player_attributes->GetBaseDecreaseDamageNPC()); option = OptionListParser::Instance()->GetOptionList(118); //減少狂戰士的傷害。 SetOptionName(kControl_TextImage_CaptionName_S012,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S211, player_attributes->GetDecreaseDamageBerserker (), player_attributes->GetBaseDecreaseDamageBerserker()); option = OptionListParser::Instance()->GetOptionList(119); //減少龍騎士的傷害。 SetOptionName(kControl_TextImage_CaptionName_S013,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S212, player_attributes->GetDecreaseDamageDragonKnight(), player_attributes->GetBaseDecreaseDamageDragonKnight()); option = OptionListParser::Instance()->GetOptionList(120); //減少聖射手的傷害。 SetOptionName(kControl_TextImage_CaptionName_S014,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S213, player_attributes->GetDecreaseDamageValkyrie(), player_attributes->GetBaseDecreaseDamageValkyrie()); option = OptionListParser::Instance()->GetOptionList(121); //減少魔法師的傷害。 SetOptionName(kControl_TextImage_CaptionName_S015,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S214, player_attributes->GetDecreaseDamageElementalist(), player_attributes->GetBaseDecreaseDamageElementalist()); option = OptionListParser::Instance()->GetOptionList(122); //減少暗影的傷害。 SetOptionName(kControl_TextImage_CaptionName_S016,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S215, player_attributes->GetDecreaseDamageShadow(), player_attributes->GetBaseDecreaseDamageShadow()); option = OptionListParser::Instance()->GetOptionList(123); //減少刺客的傷害。 SetOptionName(kControl_TextImage_CaptionName_S017,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S216, player_attributes->GetDecreaseDamageMystic(), player_attributes->GetBaseDecreaseDamageMystic()); /* option = OptionListParser::Instance()->GetOptionList(124); //減少海落伊德的傷害。 SetOptionName(kControl_TextImage_CaptionName_S018,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S210, player_attributes->GetDecreaseDamageNPC(), player_attributes->GetBaseDecreaseDamageNPC()); option = OptionListParser::Instance()->GetOptionList(125); //減少魔力刀鋒的傷害。 SetOptionName(kControl_TextImage_CaptionName_S011,option->mdwNameCode); SetParameterCaption(kControl_TextImage_CaptionValue_S210, player_attributes->GetDecreaseDamageNPC(), player_attributes->GetBaseDecreaseDamageNPC());*/ #else // 胶懦傍拜仿 刘啊(%) SetParameterCaptionWithPercent(kControl_TextImage_TI09, player_attributes->GetSkillPercentDamage(), player_attributes->GetBaseSkillPercentDamage()); // 胶懦 碍拳仿 SetParameterCaption(kControl_TextImage_TI12, player_attributes->GetSkillAttackPower(), player_attributes->GetBaseSkillAttackPower()); // 滚橇矫埃 刘啊 SetParameterCaptionWithSecond(kControl_TextImage_TI32, player_attributes->GetIncreaseSkillDuration(), player_attributes->GetBaseIncreaseSkillDuration()); // 乔秦 叼滚橇矫埃 皑家 SetParameterCaptionWithSecondReverse(kControl_TextImage_TI13, player_attributes->GetDecreaseSkillDuration(), player_attributes->GetBaseDecreaseSkillDuration()); // 啊秦 叼滚橇矫埃 碍拳 SetParameterCaptionWithMilisecond(kControl_TextImage_TI11, player_attributes->GetDebuffDuration(), player_attributes->GetBaseDebuffDuration()); // 胶懦惑怕公矫 SetParameterCaptionWithPercent(kControl_TextImage_I003, player_attributes->GetResistBadStatusRatio(), player_attributes->GetBaseResistBadStatusRatio()); // 弥措单固瘤 惯积犬伏 SetParameterCaptionWithPercent(kControl_TextImage_I004, player_attributes->GetMaxDamageRatio(), player_attributes->GetBaseMaxDamageRatio()); // 炼钦 己傍伏 SetParameterCaptionWithPercent(kControl_TextImage_I005, player_attributes->GetCompositeIncRatio(), player_attributes->GetBaseCompositeIncRatio()); // 窍烙 嚼垫 SetParameterCaptionWithPercent(kControl_TextImage_I001, player_attributes->GetBonusMoneyRatio(), player_attributes->GetBaseBonusMoneyRatio()); // 版氰摹 嚼垫 SetParameterCaptionWithPercent(kControl_TextImage_I002, player_attributes->GetBonusExpRatio(), player_attributes->GetBaseBonusExpRatio()); #endif // } void uiCharacterStatusInfo2::RenderTooltip() { uiCharacterStatusInfo* character_status_info = GET_CAST_DIALOG(uiCharacterStatusInfo, uiCharacterStatusInfo::kDialog_ID); if (character_status_info == NULL) { return; } PlayerAttributes* player_attributes = character_status_info->GetSimulationPlayerAttributes(); uiToolTipMan* tooltip_manager = GET_DIALOG_MANAGER(uiToolTipMan, UIMAN_TOOLTIP); if ((tooltip_manager == NULL) || (player_attributes == NULL)) { return; } if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_TI09))) // 胶懦傍拜仿 刘啊(%) { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseSkillPercentDamage(), player_attributes->GetSkillPercentDamage()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_TI12))) // 胶懦 碍拳仿 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseSkillAttackPower(), player_attributes->GetSkillAttackPower()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_TI32))) // 滚橇矫埃 刘啊 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseIncreaseSkillDuration(), player_attributes->GetIncreaseSkillDuration()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_TI13))) // 乔秦 叼滚橇矫埃 皑家 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseDecreaseSkillDuration(), player_attributes->GetDecreaseSkillDuration()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_TI11))) // 啊秦 叼滚橇矫埃 碍拳 { RenderTooltip_BaseAndCalcMilisecond(tooltip_manager, player_attributes->GetBaseDebuffDuration(), player_attributes->GetDebuffDuration()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_I003))) // 胶懦惑怕公矫 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseResistBadStatusRatio(), player_attributes->GetResistBadStatusRatio()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_I004))) // 弥措单固瘤 惯积犬伏 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseMaxDamageRatio(), player_attributes->GetMaxDamageRatio()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_I005))) // 炼钦 己傍伏 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseCompositeIncRatio(), player_attributes->GetCompositeIncRatio()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_I001))) // 窍烙 嚼垫 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseBonusMoneyRatio(), player_attributes->GetBonusMoneyRatio()); } else if (IsOverControl(GetControlWZ_byPosition(kControl_TextImage_I002))) // 版氰摹 嚼垫 { RenderTooltip_BaseAndCalc(tooltip_manager, player_attributes->GetBaseBonusExpRatio(), player_attributes->GetBonusExpRatio()); } } void uiCharacterStatusInfo2::RenderTooltip_StringCode( uiToolTipMan* tooltip_manager, int StringCode ) { tooltip_manager->RegisterTooltipWithStringCode( StringCode ); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } void uiCharacterStatusInfo2::RenderTooltip_BaseAndCalc( uiToolTipMan* tooltip_manager, int base_value, int calc_value, bool is_force /*= true*/, DWORD string_code /*= 0*/ ) { if ((base_value != calc_value) || (is_force == true)) { TCHAR tooltip_string[INTERFACE_STRING_LENGTH] = {NULL, }; if (string_code > 0) { g_InterfaceManager.GetInterfaceString(string_code, tooltip_string, INTERFACE_STRING_LENGTH); } if (calc_value >= base_value) { _tcscat(tooltip_string, _T("%d + %d")); } else { _tcscat(tooltip_string, _T("%d - %d")); } tooltip_manager->RegisterTooltipFormat(tooltip_string, base_value, abs(calc_value - base_value)); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } void uiCharacterStatusInfo2::RenderTooltip_BaseAndCalcMilisecond( uiToolTipMan* tooltip_manager, int base_value, int calc_value, bool is_force /*= true*/, DWORD string_code /*= 0*/ ) { if ((base_value != calc_value) || (is_force == true)) { TCHAR tooltip_string[INTERFACE_STRING_LENGTH] = {NULL, }; if (string_code > 0) { g_InterfaceManager.GetInterfaceString(string_code, tooltip_string, INTERFACE_STRING_LENGTH); } if (calc_value >= base_value) { _tcscat(tooltip_string, _T("%.1f + %.1f")); } else { _tcscat(tooltip_string, _T("%.1f - %.1f")); } float result_calc = static_cast(calc_value) * 0.001f; float result_base = static_cast(base_value) * 0.001f; tooltip_manager->RegisterTooltipFormat(tooltip_string, result_base, fabs(result_calc - result_base)); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } void uiCharacterStatusInfo2::SetParameterCaptionWithSecondReverse( UIControlPos control_position, int calc_value, int base_value ) { CControlWZ* control_ptr = GetControlWZ_byPosition(control_position); if (control_ptr->IsKind(CTRL_KIND_TEXTIMAGE)) { SetControlReverseTextColor(static_cast(control_ptr), (calc_value - base_value), IsMaxParameterCaption(control_position, calc_value)); TCHAR string_format[INTERFACE_STRING_LENGTH] = {0, }; TCHAR string_message[INTERFACE_STRING_LENGTH] = {0, }; // 2149 : 檬 g_InterfaceManager.GetInterfaceString(2149, string_format, INTERFACE_STRING_LENGTH); Snprintf(string_message, INTERFACE_STRING_LENGTH-1, "%d%s", calc_value, string_format); static_cast(control_ptr)->SetTextWZ(string_message); } } #endif // _NA_008472_20150903_IMPROVED_BALANCE