diff --git a/doc/_common.py b/doc/_common.py index 0450eacb..25cfa1dd 100644 --- a/doc/_common.py +++ b/doc/_common.py @@ -20,8 +20,9 @@ class Attr(object): def __init__(self): self.fields = [ - ['attr_type', 0, '属性类型'], - ['attr_val', 0, '属性值'], + ['attr_id', 0, '属性id'], + ['type', 0, '0: 绝对值 1:百分比'], + ['val', 0, '属性值'], ] class Gun(object): diff --git a/webapp/controller/HeroController.class.php b/webapp/controller/HeroController.class.php index b4a414ef..656920bc 100644 --- a/webapp/controller/HeroController.class.php +++ b/webapp/controller/HeroController.class.php @@ -107,17 +107,17 @@ class HeroController extends BaseAuthedController { $this->_rspErr(2, '锁定期间不能操作'); return; } - $initLevelMeta = mt\HeroLevel::get(1, 1); + $initLevelMeta = mt\HeroLevel::getByQualityLevel(1, 1); if (!$initLevelMeta) { $this->_rspErr(100, '服务器内部错误'); return; } - $currLevelMeta = mt\HeroLevel::get($heroDb['quality'], $heroDb['hero_lv']); + $currLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'], $heroDb['hero_lv']); if (!$currLevelMeta) { $this->_rspErr(100, '服务器内部错误'); return; } - $nextLevelMeta = mt\HeroLevel::get($heroDb['quality'], $heroDb['hero_lv'] + 1); + $nextLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'], $heroDb['hero_lv'] + 1); if (!$nextLevelMeta) { $this->_rspErr(5, '已满级'); return; @@ -133,7 +133,7 @@ class HeroController extends BaseAuthedController { ) ); } - break; + Break; case V_ITEM_DIAMOND: { $costItems = array( @@ -157,7 +157,8 @@ class HeroController extends BaseAuthedController { return; } $oldAttr = json_decode($heroDb['rand_attr'], true); - $randAttr = array(); + $randAttr = $oldAttr; + mt\HeroLevel::getRandAttr($initLevelMeta, $nextLevelMeta, $oldAttr, $randAttr); $this->_decItems($costItems); Hero::update($heroUniId, array( @@ -165,12 +166,104 @@ class HeroController extends BaseAuthedController { 'rand_attr' => json_encode($randAttr) ) ); - } public function upgradeQuality() { + $costItemId = getReqVal('cost_item_id', 0); $heroUniId = getReqVal('hero_uniid', 0); + $heroDb = Hero::find($heroUniId); + if (!$heroDb) { + $this->_rspErr(1, '英雄不存在'); + return; + } + if ($heroDb['state'] == Hero::GETED_STATE) { + $this->_rspErr(3, '试用英雄不能操作'); + return; + } + if ($heroDb['unlock_time'] > $this->_getNowTime()) { + $this->_rspErr(2, '锁定期间不能操作'); + return; + } + if ($heroDb['unlock_trade_time'] > $this->_getNowTime()) { + $this->_rspErr(2, '锁定期间不能操作'); + return; + } + $initLevelMeta = mt\HeroLevel::getByQualityLevel(1, 1); + if (!$initLevelMeta) { + $this->_rspErr(100, '服务器内部错误'); + return; + } + $initQualityMeta = mt\HeroQuality::getByQuality(1); + if (!$initQualityMeta) { + $this->_rspErr(100, '服务器内部错误'); + return; + } + $currQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality']); + if (!$currQualityMeta) { + $this->_rspErr(100, '服务器内部错误'); + return; + } + $nextQualityMeta = mt\HeroQuality::getByQuality($heroDb['quality'] + 1); + if (!$nextQualityMeta) { + $this->_rspErr(5, '已满级'); + return; + } + $nextLevelMeta = mt\HeroLevel::getByQualityLevel($heroDb['quality'] + 1, $heroDb['level']); + if (!$nextLevelMeta) { + $this->_rspErr(5, '已满级'); + return; + } + $costItems = array(); + switch ($costItemId) { + case V_ITEM_GOLD: + { + $costItems = array( + array( + 'item_id' => $costItemId, + 'item_num' => $currQualityMeta['gold'] + ) + ); + } + break; + case V_ITEM_DIAMOND: + { + $costItems = array( + array( + 'item_id' => $costItemId, + 'item_num' => $currQualityMeta['diamond'] + ) + ); + } + break; + default: + { + $this->_rspErr(2, '支付方式不支持'); + return; + } + break; + } + $lackItem = null; + if (!$this->_hasEnoughItems($costItems, $lackItem)) { + $this->_rspErr(3, $this->_getLackItemErrMsg($lackItem)); + return; + } + $oldAttr = json_decode($heroDb['rand_attr'], true); + $randAttr = $oldAttr; + { + mt\HeroQuality::getNextAttr($initQualityMeta, $nextQualityMeta, $oldAttr, $randAttr); + $oldAttr = $randAttr; + } + { + mt\HeroLevel::getNextAttr($initLevelMeta, $nextLevelMeta, $oldAttr, $randAttr); + } + $this->_decItems($costItems); + Hero::update($heroUniId, + array( + 'quality' => $heroDb['quality'] + 1, + 'rand_attr' => json_encode($randAttr) + ) + ); } } diff --git a/webapp/mt/HeroLevel.php b/webapp/mt/HeroLevel.php index e136a4f1..bea6bc90 100644 --- a/webapp/mt/HeroLevel.php +++ b/webapp/mt/HeroLevel.php @@ -17,7 +17,7 @@ class HeroLevel { return getXVal(self::$qualityLevelHash, $quality . '_' . $level, null); } - public static function getRandAttr($initMeta, $currMeta, $oldAttr, &$newAttr) + public static function getRandAttr($initMeta, $nextMeta, $oldAttr, &$newAttr) { } diff --git a/webapp/mt/HeroQuality.php b/webapp/mt/HeroQuality.php index b6b0ac77..bbbe2a3a 100644 --- a/webapp/mt/HeroQuality.php +++ b/webapp/mt/HeroQuality.php @@ -17,6 +17,11 @@ class HeroQuality { return getXVal(self::$qualityHash, $level, null); } + public static function getRandAttr($initMeta, $nextMeta, $oldAttr, &$newAttr) + { + + } + protected static function getMetaList() { if (!self::$metaList) {