本文整理汇总了C++中CBattleEntity::GetHPP方法的典型用法代码示例。如果您正苦于以下问题:C++ CBattleEntity::GetHPP方法的具体用法?C++ CBattleEntity::GetHPP怎么用?C++ CBattleEntity::GetHPP使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBattleEntity
的用法示例。
在下文中一共展示了CBattleEntity::GetHPP方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ActionAbilityStart
//.........这里部分代码省略.........
int hasSkipped = 0;
for (int i = 0; i < m_PPet->PetSkills.size(); i++){
if (m_PPet->PetSkills[i]->getValidTargets() == TARGET_ENEMY){
if (hasSkipped == skip){
SetCurrentMobSkill(m_PPet->PetSkills[i]);
break;
}
else{
hasSkipped++;
}
}
}
preparePetAbility(m_PBattleTarget);
return;
}
}
else if (m_MasterCommand == MASTERCOMMAND_HEALING_BREATH && (wyverntype == WYVERNTYPE_DEFENSIVE || wyverntype == WYVERNTYPE_MULTIPURPOSE))
{
m_MasterCommand = MASTERCOMMAND_NONE;
m_PBattleSubTarget = nullptr;
//TODO: CHECK FOR STATUS EFFECTS FOR REMOVE- BREATH (higher priority than healing breaths)
// if(m_PPet->PMaster->PParty==nullptr){//solo with master-kun
CItemArmor* masterHeadItem = ((CCharEntity*)(m_PPet->PMaster))->getEquip(SLOT_HEAD);
uint16 masterHead = masterHeadItem ? masterHeadItem->getID() : 0;
// Determine what the required HP percentage will need to be
// at or under in order for healing breath to activate.
uint8 requiredHPP = 0;
if (((CCharEntity*)(m_PPet->PMaster))->objtype == TYPE_PC && (masterHead == 12519 || masterHead == 15238)) { //Check for player & AF head, or +1
if (wyverntype == WYVERNTYPE_DEFENSIVE) { //healer wyvern
requiredHPP = 50;
}
else if (wyverntype == WYVERNTYPE_MULTIPURPOSE) { //hybrid wyvern
requiredHPP = 33;
}
}
else {
if (wyverntype == WYVERNTYPE_DEFENSIVE) { //healer wyvern
requiredHPP = 33;
}
else if (wyverntype == WYVERNTYPE_MULTIPURPOSE) { //hybrid wyvern
requiredHPP = 25;
}
}
// Only attempt to find a target if there is an HP percentage to calculate.
if (requiredHPP) {
CBattleEntity* master = m_PPet->PMaster;
// Check the master first.
if (master->GetHPP() <= requiredHPP) {
m_PBattleSubTarget = master;
}
// Otherwise if this is a healer wyvern, and the member is in a party
// check all of the party members who qualify.
else if (wyverntype == WYVERNTYPE_DEFENSIVE && master->PParty != nullptr) {
master->ForParty([this, requiredHPP](CBattleEntity* PTarget){
if (PTarget->GetHPP() <= requiredHPP) {
m_PBattleSubTarget = PTarget;
}
});
}
}
if (m_PBattleSubTarget != nullptr){ //target to heal
//get highest breath for wyverns level
m_PMobSkill = nullptr;
for (int i = 0; i < m_PPet->PetSkills.size(); i++){
if (m_PPet->PetSkills[i]->getValidTargets() == TARGET_PLAYER_PARTY){
if (m_PPet->PetSkills[i]->getID() == 638 &&
m_PPet->PMaster->GetMLevel() < 20){ //can only using hb1
SetCurrentMobSkill(m_PPet->PetSkills[i]);
break;
}
else if (m_PPet->PetSkills[i]->getID() == 639 &&
m_PPet->PMaster->GetMLevel() < 40){ //can only using hb2
SetCurrentMobSkill(m_PPet->PetSkills[i]);
break;
}
else if (m_PPet->PetSkills[i]->getID() == 640 &&
m_PPet->PMaster->GetMLevel() >= 40){ //can only using hb3
SetCurrentMobSkill(m_PPet->PetSkills[i]);
break;
}
}
}
preparePetAbility(m_PBattleSubTarget);
return;
}
}
}
TransitionBack(true);
}
示例2: TryHeal
bool CAutomatonController::TryHeal(const CurrentManeuvers& maneuvers)
{
if (!PAutomaton->PMaster || m_healCooldown == 0s || m_Tick <= m_LastHealTime + (m_healCooldown - std::chrono::seconds(PAutomaton->getMod(Mod::AUTO_HEALING_DELAY))))
return false;
float threshold = 0;
switch (maneuvers.light) // Light -> Higher healing threshold
{
case 1:
threshold = 40;
break;
case 2:
threshold = 50;
break;
case 3:
threshold = 75;
break;
default:
threshold = 30;
break;
}
threshold = dsp_cap(threshold + PAutomaton->getMod(Mod::AUTO_HEALING_THRESHOLD), 30, 90);
CBattleEntity* PCastTarget = nullptr;
bool haveHate = false;
EnmityList_t* enmityList;
auto PMob = dynamic_cast<CMobEntity*>(PTarget);
if (PMob)
{
enmityList = PMob->PEnmityContainer->GetEnmityList();
auto masterEnmity_obj = enmityList->find(PAutomaton->PMaster->id);
auto selfEnmity_obj = enmityList->find(PAutomaton->id);
if (masterEnmity_obj == enmityList->end())
haveHate = true;
else if (selfEnmity_obj == enmityList->end())
haveHate = false;
else
{
uint16 selfEnmity = selfEnmity_obj->second.CE + selfEnmity_obj->second.VE;
uint16 masterEnmity = masterEnmity_obj->second.CE + masterEnmity_obj->second.VE;
haveHate = selfEnmity > masterEnmity ? true : false;
}
}
// Prioritize hate
if (haveHate)
{
if (PAutomaton->GetHPP() <= 50) // Automaton only heals itself when <= 50%
PCastTarget = PAutomaton;
else if (PAutomaton->PMaster->GetHPP() <= threshold && distance(PAutomaton->loc.p, PAutomaton->PMaster->loc.p) < 20)
PCastTarget = PAutomaton->PMaster;
}
else
{
if (PAutomaton->PMaster->GetHPP() <= threshold)
PCastTarget = PAutomaton->PMaster;
else if (PAutomaton->GetHPP() <= 50) // Automaton only heals itself when <= 50%
PCastTarget = PAutomaton;
}
if (maneuvers.light && !PCastTarget && PAutomaton->getHead() == HEAD_SOULSOOTHER && PAutomaton->PMaster->PParty) // Light + Soulsoother head -> Heal party
{
if (PMob)
{
uint16 highestEnmity = 0;
for (uint8 i = 0; i < PAutomaton->PMaster->PParty->members.size(); ++i)
{
CBattleEntity* member = PAutomaton->PMaster->PParty->members.at(i);
if (member->id != PAutomaton->PMaster->id)
{
auto enmity_obj = enmityList->find(member->id);
if (enmity_obj != enmityList->end() && highestEnmity < enmity_obj->second.CE + enmity_obj->second.VE &&
member->GetHPP() <= threshold && distance(PAutomaton->loc.p, PAutomaton->PMaster->loc.p) < 20)
{
highestEnmity = enmity_obj->second.CE + enmity_obj->second.VE;
PCastTarget = member;
}
}
}
}
else
{
for (uint8 i = 0; i < PAutomaton->PMaster->PParty->members.size(); ++i)
{
CBattleEntity* member = PAutomaton->PMaster->PParty->members.at(i);
if (member->id != PAutomaton->PMaster->id && distance(PAutomaton->loc.p, PAutomaton->PMaster->loc.p) < 20)
{
if (member->GetHPP() <= threshold)
{
PCastTarget = member;
break;
}
}
}
}
}
//.........这里部分代码省略.........