您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ CalculatePctN函数代码示例

51自学网 2021-06-01 20:08:54
  C++
这篇教程C++ CalculatePctN函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中CalculatePctN函数的典型用法代码示例。如果您正苦于以下问题:C++ CalculatePctN函数的具体用法?C++ CalculatePctN怎么用?C++ CalculatePctN使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了CalculatePctN函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: CalculatePctN

/// the sum of outbid is (1% from current bid)*5, if bid is very small, it is 1cuint32 AuctionEntry::GetAuctionOutBid() const{    uint32 outbid = CalculatePctN(bid, 5);    return outbid ? outbid : 1;}
开发者ID:Gamerzon94,项目名称:wowrean-emu,代码行数:6,


示例2: Absorb

 void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     // reduces all damage taken while Stunned in Cat Form     if (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED))         absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); }
开发者ID:Gamerzon94,项目名称:wowrean-emu,代码行数:6,


示例3: Absorb

 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     // reduces all damage taken while stun or fear     if (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_FLEEING) || (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED) && GetTarget()->HasAuraWithMechanic(1<<MECHANIC_STUN)))         absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); }
开发者ID:Aristoo,项目名称:TrinityCore,代码行数:6,


示例4: Absorb

 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     if (GetTarget()->GetShapeshiftForm() == FORM_CAT && GetTarget()->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && GetTarget()->HasAuraWithMechanic(1<<MECHANIC_STUN))         absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); }
开发者ID:boom8866,项目名称:new,代码行数:5,


示例5: GetStat

void Player::UpdateManaRegen(){    float Intellect = GetStat(STAT_INTELLECT);    // Mana regen from spirit and intellect    float power_regen = sqrt(Intellect) * OCTRegenMPPerSpirit();    // Apply PCT bonus from SPELL_AURA_MOD_POWER_REGEN_PERCENT aura on spirit base regen    power_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA);    // Mana regen from SPELL_AURA_MOD_POWER_REGEN aura    float power_regen_mp5 = (GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_MANA) + m_baseManaRegen) / 5.0f;    // Get bonus from SPELL_AURA_MOD_MANA_REGEN_FROM_STAT aura    AuraEffectList const& regenAura = GetAuraEffectsByType(SPELL_AURA_MOD_MANA_REGEN_FROM_STAT);    for (AuraEffectList::const_iterator i = regenAura.begin(); i != regenAura.end(); ++i)    {        power_regen_mp5 += GetStat(Stats((*i)->GetMiscValue())) * (*i)->GetAmount() / 500.0f;    }    // Set regen rate in cast state apply only on spirit based regen    int32 modManaRegenInterrupt = GetTotalAuraModifier(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT);    if (modManaRegenInterrupt > 100)        modManaRegenInterrupt = 100;    SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER, power_regen_mp5 + CalculatePctN(power_regen, modManaRegenInterrupt));    SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER, power_regen_mp5 + power_regen);}
开发者ID:SkyFireArchives,项目名称:SkyFireEMU_434,代码行数:26,


示例6: Absorb

 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     absorbAmount = std::min(CalculatePctN(dmgInfo.GetDamage(), absorbPct), GetTarget()->CountPctFromMaxHealth(hpPct)); }
开发者ID:Blackn7g,项目名称:Voodoo,代码行数:4,


示例7: GetStat

void Guardian::UpdateAttackPowerAndDamage(bool ranged){    if (ranged)        return;    float val = 0.0f;    float bonusAP = 0.0f;    UnitMods unitMod_pos = UNIT_MOD_ATTACK_POWER_POS;    UnitMods unitMod_neg = UNIT_MOD_ATTACK_POWER_NEG;    if (GetEntry() == ENTRY_IMP)                                   // imp's attack power        val = GetStat(STAT_STRENGTH) - 10.0f;    else        val = 2 * GetStat(STAT_STRENGTH) - 20.0f;    Unit* owner = GetOwner();    if (owner && owner->GetTypeId() == TYPEID_PLAYER)    {        if (isHunterPet())                      //hunter pets benefit from owner's attack power        {            float mod = 1.0f;                                                 //Hunter contribution modifier            if (isPet())            {                PetSpellMap::const_iterator itr = ToPet()->m_spells.find(62758);    //Wild Hunt rank 1                if (itr == ToPet()->m_spells.end())                    itr = ToPet()->m_spells.find(62762);                            //Wild Hunt rank 2                if (itr != ToPet()->m_spells.end())                                 // If pet has Wild Hunt                {                    SpellEntry const* sProto = sSpellStore.LookupEntry(itr->first); // Then get the SpellProto and add the dummy effect value                    mod += CalculatePctN(1.0f, SpellMgr::CalculateSpellEffectAmount(sProto, 1));                }            }            bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.22f * mod;            SetBonusDamage(int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.425f  * mod));        }        else if (IsPetGhoul()) //ghouls benefit from deathknight's attack power (may be summon pet or not)        {            bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.22f;            SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.1287f));        }        //demons benefit from warlocks shadow or fire damage        else if (isPet())        {            int32 fire  = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);            int32 shadow = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);            int32 maximum  = (fire > shadow) ? fire : shadow;            if (maximum < 0)                maximum = 0;            SetBonusDamage(int32(maximum * 0.15f));            bonusAP = maximum * 0.57f;        }        //water elementals benefit from mage's frost damage        else if (GetEntry() == ENTRY_WATER_ELEMENTAL)        {            int32 frost = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST);            if (frost < 0)                frost = 0;            SetBonusDamage(int32(frost * 0.4f));        }    }    if(bonusAP > 0)    {        SetModifierValue(UNIT_MOD_ATTACK_POWER_POS, BASE_VALUE, val + bonusAP);    }    else     {        SetModifierValue(UNIT_MOD_ATTACK_POWER_POS, BASE_VALUE, val);        SetModifierValue(UNIT_MOD_ATTACK_POWER_NEG, BASE_VALUE, -bonusAP);    }    // in BASE_VALUE of UNIT_MOD_ATTACK_POWER for creatures we store data of meleeattackpower field in DB    float base_attPower  = (GetModifierValue(unitMod_pos, BASE_VALUE) - GetModifierValue(unitMod_neg, BASE_VALUE)) * (GetModifierValue(unitMod_pos, BASE_PCT) + (1 - GetModifierValue(unitMod_neg, BASE_PCT)));    float attPowerMod_pos = GetModifierValue(unitMod_pos, TOTAL_VALUE);    float attPowerMod_neg = GetModifierValue(unitMod_neg, TOTAL_VALUE);    float attPowerMultiplier = (GetModifierValue(unitMod_pos, TOTAL_PCT) + (1 - GetModifierValue(unitMod_neg, TOTAL_PCT))) - 1.0f;    //UNIT_FIELD_(RANGED)_ATTACK_POWER field    SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower);    //UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field    SetInt32Value(UNIT_FIELD_ATTACK_POWER_MOD_POS, (int32)attPowerMod_pos);    SetInt32Value(UNIT_FIELD_ATTACK_POWER_MOD_NEG, (int32)attPowerMod_neg);    //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field    SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier);    //automatically update weapon damage after attack power modification    UpdateDamagePhysical(BASE_ATTACK);}
开发者ID:sacel,项目名称:StrawberryEMU,代码行数:90,


示例8: float

void Player::UpdateAttackPowerAndDamage(bool ranged){    float val2 = 0.0f;    float level = float(getLevel());    UnitMods unitMod_pos = ranged ? UNIT_MOD_ATTACK_POWER_RANGED_POS : UNIT_MOD_ATTACK_POWER_POS;    UnitMods unitMod_neg = ranged ? UNIT_MOD_ATTACK_POWER_RANGED_NEG : UNIT_MOD_ATTACK_POWER_NEG;    uint16 index = UNIT_FIELD_ATTACK_POWER;    uint16 index_mod_pos = UNIT_FIELD_ATTACK_POWER_MOD_POS;    uint16 index_mod_neg = UNIT_FIELD_ATTACK_POWER_MOD_NEG;    uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;    if (ranged)    {        index = UNIT_FIELD_RANGED_ATTACK_POWER;        index_mod_pos = UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS;        index_mod_neg = UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG;        index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;        switch (getClass())        {            case CLASS_HUNTER: val2 = level * 2.0f + GetStat(STAT_AGILITY) * 2.0f - 20.0f;    break;            case CLASS_ROGUE:  val2 = level        + GetStat(STAT_AGILITY) - 10.0f;    break;            case CLASS_WARRIOR:val2 = level        + GetStat(STAT_AGILITY) - 10.0f;    break;            case CLASS_DRUID:                switch (GetShapeshiftForm())                {                    case FORM_CAT:                    case FORM_BEAR:                    case FORM_DIREBEAR:                        val2 = 0.0f; break;                    default:                        val2 = GetStat(STAT_AGILITY) - 10.0f; break;                }                break;            default: val2 = GetStat(STAT_AGILITY) - 10.0f; break;        }    }    else    {        switch (getClass())        {            case CLASS_WARRIOR:      val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f; break;            case CLASS_PALADIN:      val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f; break;            case CLASS_DEATH_KNIGHT: val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f; break;            case CLASS_ROGUE:        val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) * 2.0f - 20.0f; break;            case CLASS_HUNTER:       val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) * 2.0f - 20.0f; break;            case CLASS_SHAMAN:       val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) * 2.0f - 20.0f; break;            case CLASS_DRUID:            {                ShapeshiftForm form = GetShapeshiftForm();                // Check if Predatory Strikes is skilled                float mLevelMult = 0.0f;                switch (form)                {                    case FORM_CAT:                    case FORM_BEAR:                    case FORM_DIREBEAR:                    case FORM_MOONKIN:                    {                        Unit::AuraEffectList const& mDummy = GetAuraEffectsByType(SPELL_AURA_DUMMY);                        for (Unit::AuraEffectList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr)                        {                            // Predatory Strikes (effect 0)                            if ((*itr)->GetEffIndex() == 0 && (*itr)->GetSpellProto()->SpellIconID == 1563)                            {                                mLevelMult = CalculatePctN(1.0f, (*itr)->GetAmount());                                break;                            }                        }                        break;                    }                    default: break;                }                switch (form)                {                    case FORM_CAT:                        val2 = getLevel() * (mLevelMult + 2.0f) + GetStat(STAT_STRENGTH) * 2.0f - 20.0f + GetStat(STAT_AGILITY) * 2.0f - 20.0f + m_baseFeralAP; break;                    case FORM_BEAR:                    case FORM_DIREBEAR:                        val2 = getLevel() * (mLevelMult + 2.0f) + GetStat(STAT_STRENGTH) * 2.0f - 20.0f + GetStat(STAT_AGILITY) * 2.0f - 20.0f + m_baseFeralAP; break;                    case FORM_MOONKIN:                        val2 = getLevel() * (mLevelMult + 1.5f) + GetStat(STAT_STRENGTH) * 2.0f - 20.0f + m_baseFeralAP; break;                    default:                        val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f; break;                }                break;            }            case CLASS_MAGE:    val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;            case CLASS_PRIEST:  val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;            case CLASS_WARLOCK: val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;        }    }    SetModifierValue(unitMod_pos, BASE_VALUE, val2);    float base_attPower  = (GetModifierValue(unitMod_pos, BASE_VALUE) - GetModifierValue(unitMod_neg, BASE_VALUE)) * (GetModifierValue(unitMod_pos, BASE_PCT) - GetModifierValue(unitMod_neg, BASE_PCT));    float attPowerMod_pos = GetModifierValue(unitMod_pos, TOTAL_VALUE);//.........这里部分代码省略.........
开发者ID:sacel,项目名称:StrawberryEMU,代码行数:101,


示例9: float

void Player::UpdateAttackPowerAndDamage(bool ranged){    float val2 = 0.0f;    float level = float(getLevel());    UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER;    uint16 index = UNIT_FIELD_ATTACK_POWER;    uint16 index_mod = UNIT_FIELD_ATTACK_POWER_MODS;    uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER;    if (ranged)    {        index = UNIT_FIELD_RANGED_ATTACK_POWER;        index_mod = UNIT_FIELD_RANGED_ATTACK_POWER_MODS;        index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER;        switch (getClass())        {            case CLASS_HUNTER:                val2 = level * 2.0f + GetStat(STAT_AGILITY) - 10.0f;                break;            case CLASS_ROGUE:                val2 = level + GetStat(STAT_AGILITY) - 10.0f;                break;            case CLASS_WARRIOR:                val2 = level + GetStat(STAT_AGILITY) - 10.0f;                break;            case CLASS_DRUID:                switch (GetShapeshiftForm())                {                    case FORM_CAT:                    case FORM_BEAR:                    case FORM_DIREBEAR:                        val2 = 0.0f; break;                    default:                        val2 = GetStat(STAT_AGILITY) - 10.0f; break;                }                break;            default: val2 = GetStat(STAT_AGILITY) - 10.0f; break;        }    }    else    {        switch (getClass())        {            case CLASS_WARRIOR:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_PALADIN:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_DEATH_KNIGHT:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_ROGUE:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_HUNTER:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_SHAMAN:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_DRUID:            {                // Check if Predatory Strikes is skilled                float mLevelMult = 0.0f;                float weapon_bonus = 0.0f;                if (IsInFeralForm())                {                    Unit::AuraEffectList const& mDummy = GetAuraEffectsByType(SPELL_AURA_DUMMY);                    for (Unit::AuraEffectList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr)                    {                        AuraEffect* aurEff = *itr;                        if (aurEff->GetSpellInfo()->SpellIconID == 1563)                        {                            switch (aurEff->GetEffIndex())                            {                                case 0: // Predatory Strikes (effect 0)                                    mLevelMult = CalculatePctN(1.0f, aurEff->GetAmount());                                    break;                                case 1: // Predatory Strikes (effect 1)                                    if (Item* mainHand = m_items[EQUIPMENT_SLOT_MAINHAND])                                    {                                        // also gains % attack power from equipped weapon                                        ItemTemplate const *proto = mainHand->GetTemplate();                                        if (!proto)                                            continue;                                        weapon_bonus = CalculatePctN(float(proto->getFeralBonus()), aurEff->GetAmount());                                    }                                    break;                                default:                                    break;                            }                        }                    }                }//.........这里部分代码省略.........
开发者ID:Archives,项目名称:MMOCore,代码行数:101,


示例10: HandleScriptEffect

        void HandleScriptEffect(SpellEffIndex /*effIndex*/)        {            Unit* caster = GetCaster();            if (Unit* unitTarget = GetHitUnit())            {                uint32 spellId = 0;                int32 basePoint = 0;                Unit::AuraApplicationMap& Auras = unitTarget->GetAppliedAuras();                for (Unit::AuraApplicationMap::iterator i = Auras.begin(); i != Auras.end(); ++i)                {                    Aura* aura = i->second->GetBase();                    if (aura->GetCasterGUID() != caster->GetGUID())                        continue;                    // Search only Serpent Sting, Viper Sting, Scorpid Sting auras                    flag96 familyFlag = aura->GetSpellInfo()->SpellFamilyFlags;                    if (!(familyFlag[1] & 0x00000080 || familyFlag[0] & 0x0000C000))                        continue;                    if (AuraEffect const* aurEff = aura->GetEffect(0))                    {                        // Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting.                        if (familyFlag[0] & 0x4000)                        {                            int32 TickCount = aurEff->GetTotalTicks();                            spellId = HUNTER_SPELL_CHIMERA_SHOT_SERPENT;                            basePoint = caster->SpellDamageBonus(unitTarget, aura->GetSpellInfo(), aurEff->GetAmount(), DOT, aura->GetStackAmount());                            ApplyPctN(basePoint, TickCount * 40);                        }                        // Viper Sting - Instantly restores mana to you equal to 60% of the total amount drained by your Viper Sting.                        else if (familyFlag[1] & 0x00000080)                        {                            int32 TickCount = aura->GetEffect(0)->GetTotalTicks();                            spellId = HUNTER_SPELL_CHIMERA_SHOT_VIPER;                            // Amount of one aura tick                            basePoint = int32(CalculatePctN(unitTarget->GetMaxPower(POWER_MANA), aurEff->GetAmount()));                            int32 casterBasePoint = aurEff->GetAmount() * unitTarget->GetMaxPower(POWER_MANA) / 50; // TODO: WTF? caster uses unitTarget?                            if (basePoint > casterBasePoint)                                basePoint = casterBasePoint;                            ApplyPctN(basePoint, TickCount * 60);                        }                        // Scorpid Sting - Attempts to Disarm the target for 10 sec. This effect cannot occur more than once per 1 minute.                        else if (familyFlag[0] & 0x00008000)                            spellId = HUNTER_SPELL_CHIMERA_SHOT_SCORPID;                        // ?? nothing say in spell desc (possibly need addition check)                        //if (familyFlag & 0x0000010000000000LL || // dot                        //    familyFlag & 0x0000100000000000LL)   // stun                        //{                        //    spellId = 53366; // 53366 Chimera Shot - Wyvern                        //}                        // Refresh aura duration                        aura->RefreshDuration();                    }                    break;                }                if (spellId)                    caster->CastCustomSpell(unitTarget, spellId, &basePoint, 0, 0, true);                if (spellId == HUNTER_SPELL_CHIMERA_SHOT_SCORPID && caster->ToPlayer()) // Scorpid Sting - Add 1 minute cooldown                    caster->ToPlayer()->AddSpellCooldown(spellId, 0, uint32(time(NULL) + 60));            }        }
开发者ID:tinymac,项目名称:123,代码行数:62,


示例11: HandleDummy

 void HandleDummy(SpellEffIndex /* effIndex */) {     SetHitDamage(CalculatePctN(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetEffectValue())); }
开发者ID:Folderp,项目名称:TrinityCore,代码行数:4,


示例12: CalculatePctN

void SpellValanarKineticBombAbsorbAuraScript::OnAbsorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount){    absorbAmount = CalculatePctN(dmgInfo.GetDamage(), aurEff->GetAmount());    RoundToInterval<uint32>(absorbAmount, 0, dmgInfo.GetDamage());    dmgInfo.AbsorbDamage(absorbAmount);}
开发者ID:Allowed,项目名称:Strawberry335,代码行数:6,


示例13: GetPlayer

void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/){    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT_MONEY");    Player* player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot* loot = NULL;    bool shareMoney = true;    switch (GUID_HIPART(guid))    {        case HIGHGUID_GAMEOBJECT:        {            GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);            // do not check distance for GO if player is the owner of it (ex. fishing bobber)            if (go && ((go->GetOwnerGUID() == player->GetGUID() || go->IsWithinDistInMap(player, INTERACTION_DISTANCE))))                loot = &go->loot;            break;        }        case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG        {            Corpse* bones = ObjectAccessor::GetCorpse(*player, guid);            if (bones && bones->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &bones->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_ITEM:        {            if (Item* item = player->GetItemByGuid(guid))            {                loot = &item->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_UNIT:        case HIGHGUID_VEHICLE:        {            Creature* creature = player->GetMap()->GetCreature(guid);            bool lootAllowed = creature && creature->isAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);            if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &creature->loot;                if (creature->isAlive())                    shareMoney = false;            }            break;        }        default:            return;                                         // unlootable type    }    if (loot)    {        loot->NotifyMoneyRemoved();        if (shareMoney && player->GetGroup())      //item, pickpocket and players can be looted only single player        {            Group* group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* member = itr->getSource();                if (!member)                    continue;                if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))                    playersNear.push_back(member);            }            uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                (*i)->ModifyMoney(goldPerPlayer);                (*i)->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);                if (Guild* guild = sGuildMgr->GetGuildById((*i)->GetGuildId()))                    if (uint32 guildGold = CalculatePctN(goldPerPlayer, (*i)->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)))                        guild->HandleMemberDepositMoney(this, guildGold, true);                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);                data << uint32(goldPerPlayer);                data << uint8(playersNear.size() <= 1); // Controls the text displayed in chat. 0 is "Your share is..." and 1 is "You loot..."                (*i)->GetSession()->SendPacket(&data);            }        }        else        {            player->ModifyMoney(loot->gold);//.........这里部分代码省略.........
开发者ID:AnthoDevMoP,项目名称:Genesis,代码行数:101,


示例14: Absorb

 void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     // reduces all damage taken while Stunned in Cat Form     if (GetTarget()->GetShapeshiftForm() == FORM_CAT && GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED) && GetTarget()->HasAuraWithMechanic(1<<MECHANIC_STUN))         absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); }
开发者ID:SkyFireArchives,项目名称:SkyFireEMU_434,代码行数:6,


示例15: Absorb

 void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) {     // reduces all damage taken while stun, fear or silence     if (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED | UNIT_FLAG_FLEEING | UNIT_FLAG_SILENCED))         absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct); }
开发者ID:Ballwinkle,项目名称:SkyFireEMU,代码行数:6,


示例16: HandleOnHit

 void HandleOnHit() {     if (Aura* aura = GetHitAura())         if (AuraEffect* aurEff = aura->GetEffect(EFFECT_1))             aurEff->SetAmount(CalculatePctN(aurEff->GetAmount(), GetHitDamage())); }
开发者ID:S-proyect,项目名称:Emu-S,代码行数:6,


示例17: float

//.........这里部分代码省略.........    {        switch (getClass())        {            case CLASS_WARRIOR:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_PALADIN:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_DEATH_KNIGHT:                val2 = level * 3.0f + GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                break;            case CLASS_ROGUE:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_HUNTER:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_SHAMAN:                val2 = level * 2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f;                break;            case CLASS_DRUID:            {                switch (GetShapeshiftForm())                {                    case FORM_CAT:                        val2 = GetStat(STAT_STRENGTH) * 2.0f + GetStat(STAT_AGILITY) - 20.0f + m_baseFeralAP;                        break;                    case FORM_BEAR:                    case FORM_DIREBEAR:                    case FORM_MOONKIN:                        val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f + m_baseFeralAP;                        break;                    default:                        val2 = GetStat(STAT_STRENGTH) * 2.0f - 20.0f;                        break;                }                break;            }            case CLASS_MAGE:                val2 =  GetStat(STAT_STRENGTH) - 10.0f;                break;            case CLASS_PRIEST:                val2 = GetStat(STAT_STRENGTH) - 10.0f;                break;            case CLASS_WARLOCK:                val2 = GetStat(STAT_STRENGTH) - 10.0f;                break;        }    }    SetModifierValue(unitMod, BASE_VALUE, val2);    float base_attPower  = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);    float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE);    //add dynamic flat mods    if (ranged)    {        if ((getClassMask() & CLASSMASK_WAND_USERS) == 0)        {            AuraEffectList const& mRAPbyStat = GetAuraEffectsByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT);            for (AuraEffectList::const_iterator i = mRAPbyStat.begin(); i != mRAPbyStat.end(); ++i)                attPowerMod += CalculatePctN(GetStat(Stats((*i)->GetMiscValue())), (*i)->GetAmount());        }    }    else    {        AuraEffectList const& mAPbyStat = GetAuraEffectsByType(SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT);        for (AuraEffectList::const_iterator i = mAPbyStat.begin(); i != mAPbyStat.end(); ++i)            attPowerMod += CalculatePctN(GetStat(Stats((*i)->GetMiscValue())), (*i)->GetAmount());        AuraEffectList const& mAPbyArmor = GetAuraEffectsByType(SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR);        for (AuraEffectList::const_iterator iter = mAPbyArmor.begin(); iter != mAPbyArmor.end(); ++iter)            // always: ((*i)->GetModifier()->m_miscvalue == 1 == SPELL_SCHOOL_MASK_NORMAL)            attPowerMod += int32(GetArmor() / (*iter)->GetAmount());    }    SetInt32Value(index, (uint32)base_attPower);            //UNIT_FIELD_(RANGED)_ATTACK_POWER field    Pet* pet = GetPet();                                //update pet's AP    //automatically update weapon damage after attack power modification    if (ranged)    {        UpdateDamagePhysical(RANGED_ATTACK);        if (pet && pet->isHunterPet()) // At ranged attack change for hunter pet            pet->UpdateAttackPowerAndDamage();    }    else    {        UpdateDamagePhysical(BASE_ATTACK);        if (CanDualWield() && haveOffhandWeapon())           //allow update offhand damage only if player knows DualWield Spec and has equipped offhand weapon            UpdateDamagePhysical(OFF_ATTACK);        if (getClass() == CLASS_SHAMAN || getClass() == CLASS_PALADIN)                      // mental quickness            UpdateSpellDamageAndHealingBonus();        if (pet && pet->IsPetGhoul()) // At ranged attack change for hunter pet            pet->UpdateAttackPowerAndDamage();    }}
开发者ID:SkyFireArchives,项目名称:SkyFireEMU_434,代码行数:101,


示例18: GetTotalStatValue

bool Guardian::UpdateStats(Stats stat){    if (stat >= MAX_STATS)        return false;    // value = ((base_value * base_pct) + total_value) * total_pct    float value  = GetTotalStatValue(stat);    ApplyStatBuffMod(stat, m_statFromOwner[stat], false);    float ownersBonus = 0.0f;    Unit* owner = GetOwner();    // Handle Death Knight Glyphs and Talents    float mod = 0.75f;    if (IsPetGhoul() && (stat == STAT_STAMINA || stat == STAT_STRENGTH))    {        switch (stat)        {            case STAT_STAMINA:  mod = 0.3f; break;                // Default Owner's Stamina scale            case STAT_STRENGTH: mod = 0.7f; break;                // Default Owner's Strength scale            default: break;        }        // Ravenous Dead        AuraEffect const* aurEff = NULL;        // Check just if owner has Ravenous Dead since it's effect is not an aura        aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);        if (aurEff)        {            SpellInfo const* spellInfo = aurEff->GetSpellInfo();                                                 // Then get the SpellProto and add the dummy effect value            AddPctN(mod, spellInfo->Effects[EFFECT_1].CalcValue());                                              // Ravenous Dead edits the original scale        }        // Glyph of the Ghoul        aurEff = owner->GetAuraEffect(58686, 0);        if (aurEff)            mod += CalculatePctN(1.0f, aurEff->GetAmount());                                                    // Glyph of the Ghoul adds a flat value to the scale mod        ownersBonus = float(owner->GetStat(stat)) * mod;        value += ownersBonus;    }    else if (stat == STAT_STAMINA)    {        if (owner->getClass() == CLASS_WARLOCK && isPet())        {            ownersBonus = CalculatePctN(owner->GetStat(STAT_STAMINA), 75);            value += ownersBonus;        }        else        {            mod = 0.45f;            if (isPet())            {                PetSpellMap::const_iterator itr = (ToPet()->m_spells.find(62758)); // Wild Hunt rank 1                if (itr == ToPet()->m_spells.end())                    itr = ToPet()->m_spells.find(62762);                            // Wild Hunt rank 2                if (itr != ToPet()->m_spells.end())                                 // If pet has Wild Hunt                {                    SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value                    AddPctN(mod, spellInfo->Effects[EFFECT_0].CalcValue());                }            }            ownersBonus = float(owner->GetStat(stat)) * mod;            value += ownersBonus;        }    }                                                            //warlock's and mage's pets gain 30% of owner's intellect    else if (stat == STAT_INTELLECT)    {        if (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE)        {            ownersBonus = CalculatePctN(owner->GetStat(stat), 30);            value += ownersBonus;        }    }/*    else if (stat == STAT_STRENGTH)    {        if (IsPetGhoul())            value += float(owner->GetStat(stat)) * 0.3f;    }*/    SetStat(stat, int32(value));    m_statFromOwner[stat] = ownersBonus;    ApplyStatBuffMod(stat, m_statFromOwner[stat], true);    switch (stat)    {        case STAT_STRENGTH:         UpdateAttackPowerAndDamage();        break;        case STAT_AGILITY:          UpdateArmor();                       break;        case STAT_STAMINA:          UpdateMaxHealth();                   break;        case STAT_INTELLECT:        UpdateMaxPower(POWER_MANA);          break;        case STAT_SPIRIT:        default:            break;    }    return true;}
开发者ID:Havenard,项目名称:tmpFaceCore,代码行数:97,



注:本文中的CalculatePctN函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ CalculateRanks函数代码示例
C++ CalculatePct函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。