本文整理汇总了C++中PlayerbotAI::GetRunicPower方法的典型用法代码示例。如果您正苦于以下问题:C++ PlayerbotAI::GetRunicPower方法的具体用法?C++ PlayerbotAI::GetRunicPower怎么用?C++ PlayerbotAI::GetRunicPower使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PlayerbotAI
的用法示例。
在下文中一共展示了PlayerbotAI::GetRunicPower方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoNextCombatManeuver
void PlayerbotDeathKnightAI::DoNextCombatManeuver(Unit *pTarget)
{
PlayerbotAI* ai = GetAI();
if (!ai)
return;
switch (ai->GetScenarioType())
{
case PlayerbotAI::SCENARIO_DUEL:
ai->CastSpell(PLAGUE_STRIKE);
return;
}
// ------- Non Duel combat ----------
//ai->SetMovementOrder( PlayerbotAI::MOVEMENT_FOLLOW, GetMaster() ); // dont want to melee mob
// DK Attacks: Unholy, Frost & Blood
// damage spells
ai->SetInFront( pTarget );//<---
Player *m_bot = GetPlayerBot();
Unit* pVictim = pTarget->getVictim();
Pet *pet = m_bot->GetPet();
float dist = m_bot->GetDistance( pTarget );
std::ostringstream out;
switch (SpellSequence)
{
case SPELL_DK_UNHOLY:
if (UNHOLY_PRESENCE > 0)
(!m_bot->HasAura(UNHOLY_PRESENCE, 0) && !m_bot->HasAura(BLOOD_PRESENCE, 0) && !m_bot->HasAura(FROST_PRESENCE, 0) && ai->CastSpell (UNHOLY_PRESENCE, *m_bot));
// check for BONE_SHIELD in combat
if (BONE_SHIELD > 0)
(!m_bot->HasAura(BONE_SHIELD, 0) && !m_bot->HasAura(ARMY_OF_THE_DEAD, 0) && ai->CastSpell (BONE_SHIELD, *m_bot));
if (ARMY_OF_THE_DEAD > 0 && ai->GetAttackerCount()>=5 && LastSpellUnholyDK < 1)
{
ai->CastSpell(ARMY_OF_THE_DEAD);
out << " summoning Army of the Dead!";
if (ARMY_OF_THE_DEAD > 0 && m_bot->HasAura(ARMY_OF_THE_DEAD, 0))
ai->SetIgnoreUpdateTime(7);
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (PLAGUE_STRIKE > 0 && !pTarget->HasAura(PLAGUE_STRIKE, 0) && LastSpellUnholyDK < 2)
{
ai->CastSpell(PLAGUE_STRIKE, *pTarget);
out << " Plague Strike";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (DEATH_GRIP > 0 && !pTarget->HasAura(DEATH_GRIP, 0) && LastSpellUnholyDK < 3)
{
ai->CastSpell(DEATH_GRIP, *pTarget);
out << " Death Grip";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (DEATH_COIL > 0 && LastSpellUnholyDK < 4 && ai->GetRunicPower() >= 40)
{
ai->CastSpell(DEATH_COIL, *pTarget);
out << " Death Coil";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (DEATH_STRIKE > 0 && !pTarget->HasAura(DEATH_STRIKE, 0) && LastSpellUnholyDK < 5)
{
ai->CastSpell(DEATH_STRIKE, *pTarget);
out << " Death Strike";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (UNHOLY_BLIGHT > 0 && !pTarget->HasAura(UNHOLY_BLIGHT, 0) && LastSpellUnholyDK < 6)
{
ai->CastSpell(UNHOLY_BLIGHT);
out << " Unholy Blight";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (SCOURGE_STRIKE > 0 && LastSpellUnholyDK < 7)
{
ai->CastSpell(SCOURGE_STRIKE, *pTarget);
out << " Scourge Strike";
SpellSequence = SPELL_DK_FROST;
LastSpellUnholyDK = LastSpellUnholyDK +1;
break;
}
else if (DEATH_AND_DECAY > 0 && ai->GetAttackerCount()>=3 && dist <= ATTACK_DISTANCE && !pTarget->HasAura(DEATH_AND_DECAY, 0) && LastSpellUnholyDK < 8)
{
ai->CastSpell(DEATH_AND_DECAY);
out << " Death and Decay";
ai->SetIgnoreUpdateTime(1);
//.........这里部分代码省略.........
示例2: DoNextCombatManeuver
//.........这里部分代码省略.........
// If there's a cast stop
if(m_bot->HasUnitState(UNIT_STATE_CASTING)) { return; }
#pragma region Buff Heal Interrupt
//Buff UP
if (CastSpell(HORN_OF_WINTER,m_bot)) { return; }
if (CastSpell(BONE_SHIELD,m_bot)) { return; }
//HEAL UP && PROTECT UP
if (ai->GetHealthPercent() < 80 && ai->GetHealthPercent() > 20 && CastSpell(VAMPIRIC_BLOOD,m_bot)) { } //NO GCD
if (ai->GetHealthPercent() < 65 && CastSpell(RUNE_TAP,m_bot)) { } //NO GCD
if (CanCast(DEATH_STRIKE,pTarget,true) && ai->GetHealthPercent() < 90 &&
(pTarget->HasAura(FROST_FEVER,m_bot->GetGUID()) ||pTarget->HasAura(BLOOD_PLAGUE,m_bot->GetGUID()) )
&& CastSpell(DEATH_STRIKE,pTarget,false) ) {return;}
if (m_bot->getRace() == (uint8) RACE_DWARF && ai->GetHealthPercent() < 75 && CastSpell(R_STONEFORM,m_bot)) { } //no gcd
if (m_bot->getRace() == (uint8) RACE_DRAENEI && ai->GetHealthPercent() < 55 && CastSpell(R_GIFT_OF_NAARU,m_bot)) { return; } //no Gcd, but has cast
if (pet && ai->GetHealthPercent() < 50 && CastSpell(DEATH_PACT,m_bot)) { return; }
if (pet && ai->GetHealthPercent() < 60 && CastSpell(MARK_OF_BLOOD,pTarget)) { return; }
if (ai->GetHealthPercent() < 65 && CastSpell(ICEBOUND_FORTITUDE,m_bot)) { } //No GCD
if (ai->GetHealthPercent() < 65 && CastSpell(UNBREAKABLE_ARMOR,m_bot)) { return; }
//Break spells being cast
if (pTarget->IsNonMeleeSpellCasted(true))
{
if (CastSpell(MIND_FREEZE,pTarget)) {} // No GCD
if (CastSpell(STRANGULATE,pTarget)) { return; }
if (m_bot->getRace() == (uint8) RACE_BLOODELF && pDist < 8 && CastSpell(R_ARCANE_TORRENT, pTarget)) { } //no gcd
if (CastSpell(ANTI_MAGIC_ZONE,m_bot)) { return; }
if (CastSpell(ANTI_MAGIC_SHELL,m_bot)) {} //NO GCD
}
//Catch
if (pTarget->HasUnitMovementFlag(UNIT_FLAG_FLEEING))
{
if (CastSpell(DEATH_GRIP,pTarget)) return;
if (CastSpell(CHAINS_OF_ICE,pTarget)) return;
}
#pragma endregion
#pragma region Taunt / Threat
// if i am main tank, protect master by taunt
if(m_tank->GetGUID() == m_bot->GetGUID())
{
// Taunt if needed (Only for master)
Unit *curAtt = GetAttackerOf(GetMaster());
if (curAtt && CastSpell(DARK_COMMAND, curAtt)) { } //No gcd
// My target is not attacking me, taunt..
if (pVictim && pVictim->GetGUID() != m_bot->GetGUID() && CastSpell(DARK_COMMAND, pTarget) ) { } // No gcd
}
// If not in Frost Presence slow down due to threat
if (pThreat > threatThreshold && !m_bot->HasAura(FROST_PRESENCE) && m_tank->GetGUID() != m_bot->GetGUID() && !isUnderAttack())
{
if (m_tank->getVictim() && m_tank->getVictim()->GetGUID() != pTarget->GetGUID()) // I am attacking wrong target!!
{
m_bot->SetSelection(m_tank->getVictim()->GetGUID());
return;
}
else { return; } //DK has no threat reducing spells, just slow down
}
#pragma endregion
#pragma region Dps
//Dps up
if (CastSpell(EMPOWER_WEAPON,m_bot)) {} //NO GCD
if (ai->GetHealthPercent() > 90 && CastSpell(HYSTERIA,m_bot)) {} //NO GCD
if (m_bot->getRace() == (uint8) RACE_TROLL && CastSpell(R_BERSERKING,m_bot)) {} //no GCD
if (m_bot->getRace() == (uint8) RACE_ORC && CastSpell(R_BLOOD_FURY,m_bot)) {} //no GCD
// Use up excess Runic Power
if (ai->GetRunicPower() > 60 && CastSpell(FROST_STRIKE,pTarget)) { return; }
else if (ai->GetRunicPower() > 60 && CastSpell(DEATH_COIL,pTarget,true,true,true)) { return; }
if ((isUnderAttack() || ai->GetRunicPower() > 70) && CastSpell(RUNE_STRIKE,pTarget)) {} //Next attack spell
// Build Diseases
if (!pTarget->HasAura(FROST_FEVER,m_bot->GetGUID()) && CastSpell(ICY_TOUCH,pTarget)) { return; }
if (!pTarget->HasAura(BLOOD_PLAGUE,m_bot->GetGUID()) && CastSpell(PLAGUE_STRIKE,pTarget)) { return; }
// Use AOEs summons
if (isUnderAttack(m_tank,4) && CastSpell(DEATH_AND_DECAY,pTarget)) { return; }
if (isUnderAttack(m_tank,4) && CastSpell(HOWLING_BLAST,pTarget)) { return; }
if (CanCast(PESTILENCE,pTarget,true) && isUnderAttack(m_tank,4) &&
(pTarget->HasAura(FROST_FEVER,m_bot->GetGUID()) && pTarget->HasAura(BLOOD_PLAGUE,m_bot->GetGUID()) )
&& CastSpell(PESTILENCE,pTarget,false)) { return; }
if (CanCast(BLOOD_BOIL,pTarget,true) && isUnderAttack(m_tank,4) &&
(pTarget->HasAura(FROST_FEVER,m_bot->GetGUID()) || pTarget->HasAura(BLOOD_PLAGUE,m_bot->GetGUID()) )
&& CastSpell(BLOOD_BOIL,pTarget,false)) { return; }
if (m_bot->getRace() == (uint8) RACE_TAUREN && pDist < 8 && CastSpell(R_WAR_STOMP, pTarget)) { return; } //no gcd but is cast
if (isUnderAttack(m_tank,6) && CastSpell(ARMY_OF_THE_DEAD,m_bot)) { return; }
if (isUnderAttack(m_tank,4) && CastSpell(SUMMON_GARGOYLE,pTarget)) { return; } //This should be somewhat different
// Use standard damage spells
if (CastSpell(HEART_STRIKE,pTarget,true,true)) { return; }
if (CastSpell(BLOOD_STRIKE,pTarget)) { return; }
if (TALENT_FROST && CastSpell(OBLITERATE,pTarget)) { return; }
else if (TALENT_UNHOLY && CastSpell(SCOURGE_STRIKE,pTarget)) { return; }
else if (CastSpell(DEATH_STRIKE,pTarget)) { return; }
#pragma endregion
} // end DoNextCombatManeuver