Show
Ignore:
Timestamp:
11/19/08 13:39:20 (17 years ago)
Author:
yumileroy
Message:

[svn] Provide creature dual wield support.
Update glancing damage formula.
Do not daze creatures when other creatures attack from the back (need to find a better way).
Fix the damage calculation of +damage aura.

Original author: megamage
Date: 2008-10-29 20:00:21-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/StatSystem.cpp

    r102 r136  
    667667    UpdateMaxHealth(); 
    668668    UpdateAttackPowerAndDamage(); 
     669    UpdateAttackPowerAndDamage(true); 
    669670 
    670671    for(int i = POWER_MANA; i < MAX_POWERS; ++i) 
     
    710711void Creature::UpdateAttackPowerAndDamage(bool ranged) 
    711712{ 
     713    //automatically update weapon damage after attack power modification 
    712714    if(ranged) 
    713         return; 
    714  
    715     //automatically update weapon damage after attack power modification 
    716     UpdateDamagePhysical(BASE_ATTACK); 
     715        UpdateDamagePhysical(RANGED_ATTACK); 
     716    else 
     717    { 
     718        UpdateDamagePhysical(BASE_ATTACK); 
     719        UpdateDamagePhysical(OFF_ATTACK); 
     720    } 
    717721} 
    718722 
    719723void Creature::UpdateDamagePhysical(WeaponAttackType attType) 
    720724{ 
    721     if(attType > BASE_ATTACK) 
    722         return; 
    723  
    724     UnitMods unitMod = UNIT_MOD_DAMAGE_MAINHAND; 
    725  
    726     float att_speed = float(GetAttackTime(BASE_ATTACK))/1000.0f; 
     725    UnitMods unitMod; 
     726    switch(attType) 
     727    { 
     728        case BASE_ATTACK: 
     729        default: 
     730            unitMod = UNIT_MOD_DAMAGE_MAINHAND; 
     731            break; 
     732        case OFF_ATTACK: 
     733            unitMod = UNIT_MOD_DAMAGE_OFFHAND; 
     734            break; 
     735        case RANGED_ATTACK: 
     736            unitMod = UNIT_MOD_DAMAGE_RANGED; 
     737            break; 
     738    } 
     739 
     740    float att_speed = float(GetAttackTime(attType))/1000.0f; 
    727741 
    728742    float base_value  = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed; 
     
    731745    float total_pct   = GetModifierValue(unitMod, TOTAL_PCT); 
    732746 
    733     float weapon_mindamage = GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE); 
    734     float weapon_maxdamage = GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE); 
     747    float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE); 
     748    float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE); 
    735749 
    736750    float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct ; 
    737751    float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct ; 
    738752 
    739     SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage); 
    740     SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage); 
     753    switch(attType) 
     754    { 
     755        case BASE_ATTACK: 
     756        default: 
     757            SetStatFloatValue(UNIT_FIELD_MINDAMAGE,mindamage); 
     758            SetStatFloatValue(UNIT_FIELD_MAXDAMAGE,maxdamage); 
     759            break; 
     760        case OFF_ATTACK: 
     761            SetStatFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE,mindamage); 
     762            SetStatFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE,maxdamage); 
     763            break; 
     764        case RANGED_ATTACK: 
     765            SetStatFloatValue(UNIT_FIELD_MINRANGEDDAMAGE,mindamage); 
     766            SetStatFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE,maxdamage); 
     767            break; 
     768    } 
    741769} 
    742770