diff --git a/webapp/bootstrap/constant.php b/webapp/bootstrap/constant.php index 803c494f..b7327df8 100644 --- a/webapp/bootstrap/constant.php +++ b/webapp/bootstrap/constant.php @@ -78,7 +78,6 @@ define('SHOP_BUY_MODE_NORMAL', 0); define('SHOP_BUY_MODE_DAILY_SELECTION', 1); define('MARKET_BUY_MODE_NORMAL', 2); -const kHAT_Begin = 0; const kHAT_Hp = 1; const kHAT_HPRecover = 2; const kHAT_Atk = 3; @@ -117,6 +116,60 @@ const kHAT_BrainLifePct = 47; const kHAT_BulletSpeed = 49; const kHAT_BulletSpeedPct = 50; +const kHAT_Begin = 0; +const kHAT_vCurrnetHealth = 1; +const kHAT_vHealth = 2; +const kHAT_pHealth = 3; +const kHAT_pHealthAm = 4; +const kHAT_pHealthRateSe = 5; +const kHAT_pHealthRateIn = 6; +const kHAT_vHealthAm = 7; +const kHAT_vHealthRateSe = 8; +const kHAT_vHealthRateIn = 9; +const kHAT_vAttack = 10; +const kHAT_pAttack = 11; +const kHAT_pAttackAm = 12; +const kHAT_pAttackRateSe = 13; +const kHAT_pAttackRateIn = 14; +const kHAT_vAttackAm = 15; +const kHAT_vAttackRateSe = 16; +const kHAT_vAttackRateIn = 17; +const kHAT_vDefend = 18; +const kHAT_pDefend = 19; +const kHAT_pDefendAm = 20; +const kHAT_pDefendRateSe = 21; +const kHAT_pDefendRateIn = 22; +const kHAT_vBlock = 23; +const kHAT_pBlock = 24; +const kHAT_pBlockAm = 25; +const kHAT_pBlockRateSe = 26; +const kHAT_pBlockRateIn = 27; +const kHAT_vBloPro = 28; +const kHAT_vBloDef = 29; +const kHAT_vCrit = 30; +const kHAT_pCrit = 31; +const kHAT_pCritAm = 32; +const kHAT_pCritRateSe = 33; +const kHAT_pCritRateIn = 34; +const kHAT_vCriPro = 35; +const kHAT_vCriBon = 36; +const kHAT_vSpeed = 37; +const kHAT_vSpeedRateIn = 38; +const kHAT_vHaste = 39; +const kHAT_vDrain = 40; +const kHAT_vTenacity = 41; +const kHAT_vDamageTakenRateIn = 42; +const kHAT_vDamageDealtRateIn = 43; +const kHAT_vNormalDamageTakenRateIn = 44; +const kHAT_vNormalDamageDealtRateIn = 45; +const kHAT_vSkillDamageTakenRateIn = 46; +const kHAT_vSkillDamageDealtRateIn = 47; +const kHAT_vHealthGainRateIn = 48; +const kHAT_vHealDealtRateIn = 49; + +const kHAT_Hold = 55; +const kHAT_End = 56; + const kHAT_ABS_VAL = 1; const kHAT_RATE_VAL = 2; diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index 6c652629..22f3c984 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -8,6 +8,7 @@ require_once('mt/HeroQuality.php'); require_once('mt/HeroLevel.php'); require_once('mt/AttrHelper.php'); require_once('mt/Item.php'); +require_once('mt/BattleBasicAttribute.php'); require_once('models/HeroSkin.php'); require_once('models/Chip.php'); require_once('models/User.php'); @@ -333,6 +334,111 @@ class Hero extends BaseModel { 'block' => 0, 'critical' => 0 ); + $attr = array(); + $basicMeta = mt\BattleBasicAttribute::get($row['hero_id']); + if (!$basicMeta) { + return $info; + } + { + $pHealRateAm = 0; + $pHealthAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pHealthAm, 0); + $pHealRateAm += $pHealthAm_Add; + + $pHealthRateSe = 0; + $pHealthRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pHealthRateSe, 0); + $pHealthRateSe += $pHealthRateSe_Add; + + $pHealthRateIn = 0; + $pHealthRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pHealthRateIn, 0); + $pHealthRateIn = (1 + $pHealthRateIn) * (1 + $pHealthRateIn_Add) - 1; + + $pHealth = ($basicMeta['pOrigHealth'] + $pHealRateAm) * (1 + $pHealthRateSe) * (1 + $pHealthRateIn); + + $vHealthAm = 0; + $vHealthAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vHealthAm, 0); + $vHealthAm += $vHealthAm_Add; + + $vHealthRateSe = 0; + $vHealthRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vHealthRateSe, 0); + $vHealthRateSe += $vHealthRateSe_Add; + + $vHealthRateIn = 0; + $vHealthRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vHealthRateIn, 0); + $vHealthRateIn = (1 + $vHealthRateIn) * (1 + $vHealthRateIn_Add) - 1; + + $info['hp'] = ($basicMeta['vOrigHealth'] * (1 + $pHealth / $basicMeta['pBaseHealth'] + $vHealthAm)) * + (1 + $vHealthRateSe) * (1 + $vHealthRateIn); + } + { + $pAttackAm = 0; + $pAttackAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pAttackAm, 0); + $pAttackAm += $pAttackAm; + + $pAttackRateSe = 0; + $pAttackRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pAttackRateSe, 0); + $pAttackRateSe += $pAttackRateSe_Add; + + $pAttackRateIn = 0; + $pAttackRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pAttackRateIn, 0); + $pAttackRateIn = (1 + $pAttackRateIn) * (1 + $pAttackRateIn_Add) - 1; + + $vAttackAm = 0; + $vAttackAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vAttackAm, 0); + $vAttackAm += $vAttackAm_Add; + + $vAttackRateSe = 0; + $vAttackRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vAttackRateSe, 0); + $vAttackRateSe += $vAttackRateSe_Add; + + $vAttackRateIn = 0; + $vAttackRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vAttackRateIn, 0); + $vAttackRateIn = (1 + $vAttackRateIn) * (1 + $vAttackRateIn_Add) - 1; + + $pAttack = 0; + $pAttack = ($basicMeta['pOrigAttack'] + $pAttackAm) * (1 + $pAttackRateSe) * (1 + $pAttackRateIn); + + $info['attack'] = ($basicMeta['vOrigAttack'] * (1 + $pAttack / $basicMeta['pBaseAttack'] + $vAttackAm)) * + (1 + $vAttackRateSe) * (1 + $vAttackRateIn); + } + { + $pBlockAm = 0; + $pBlockAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_vAttackRateIn, 0); + $pBlockAm += $pBlockAm_Add; + + $pBlockRateSe = 0; + $pBlockRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pBlockRateSe, 0); + $pBlockRateSe += $pBlockRateSe_Add; + + $pBlockRateIn = 0; + $pBlockRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pBlockRateIn, 0); + $pBlockRateIn = (1 + $pBlockRateIn) * (1 + $pBlockRateIn_Add) - 1; + + $pBlock = ($basicMeta['pOrigBlock'] + $pBlockAm) * (1 + $pBlockRateSe_Add) * (1 + $pBlockRateIn); + + $vBlock = 1 - (1 - $basicMeta['vOrigBlock']) / (1 + $pBlock / $basicMeta['pBaseBlock']); + + $info['block'] = $vBlock; + } + { + $pCritAm = 0; + $pCritAm_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pCritAm, 0); + $pCritAm += $pCritAm_Add; + + $pCritRateSe = 0; + $pCritRateSe_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pCritRateSe, 0); + $pCritRateSe += $pCritAm_Add; + + $pCritRateIn = 0; + $pCritRateIn_Add = mt\AttrHelper::getAttrVal($attr, kHAT_pCritRateIn, 0); + $pCritRateIn = (1 - $pCritRateIn) * (1 + $pCritRateIn_Add) - 1; + + $pCrit = 0; + $pCrit = ($basicMeta['pOrigCrit'] + $pCritAm) * (1 + $pCritRateSe) * (1 + $pCritRateIn); + + $vCrit = 0; + $vCrit = (1 + $basicMeta['vOrigCrit']) * (1 + $pCrit / $basicMeta['pBaseCrit']) - 1; + $info['critical'] = $vCrit; + } return $info; } diff --git a/webapp/mt/AttrHelper.php b/webapp/mt/AttrHelper.php index 9a0c94c6..3b747e5f 100644 --- a/webapp/mt/AttrHelper.php +++ b/webapp/mt/AttrHelper.php @@ -108,4 +108,30 @@ class AttrHelper { return $defVal; } + public static function getAttrVal($randAttr, $attrId, $defVal) + { + if (!$randAttr) { + return $defVal; + } + foreach ($randAttr as $attr){ + if ($attr['attr_id'] == $attrId) { + return $attr['val']; + } + } + return $defVal; + } + + public static function hasAttr($attr, $attrId) + { + if (!$randAttr) { + return false; + } + foreach ($randAttr as $attr){ + if ($attr['attr_id'] == $attrId) { + return true; + } + } + return false; + } + } diff --git a/webapp/mt/BattleBasicAttribute.php b/webapp/mt/BattleBasicAttribute.php new file mode 100644 index 00000000..e199408b --- /dev/null +++ b/webapp/mt/BattleBasicAttribute.php @@ -0,0 +1,24 @@ +