diff --git a/webapp/models/Hero.php b/webapp/models/Hero.php index 70312f0c..0ba24c5d 100644 --- a/webapp/models/Hero.php +++ b/webapp/models/Hero.php @@ -3,6 +3,8 @@ namespace models; require_once('mt/Hero.php'); +require_once('mt/HeroLevel.php'); +require_once('mt/HeroQuality.php'); require_once('models/HeroSkin.php'); use mt; @@ -82,15 +84,16 @@ class Hero extends BaseModel { public static function addHero($heroMeta) { $realHeroMeta = mt\Hero::get($heroMeta['id']); - SqlHelper::upsert( + $randAttr = array(); + { + $initQualityMeta = mt\HeroQuality::getByQuality(1); + if ($initQualityMeta) { + $randAttr = mt\HeroQuality::getRandAttr($initQualityMeta); + } + } + SqlHelper::insert( myself()->_getSelfMysql(), 't_hero', - array( - 'account_id' => myself()->_getAccountId(), - 'hero_id' => $heroMeta['id'] - ), - array( - ), array( 'account_id' => myself()->_getAccountId(), 'hero_id' => $heroMeta['id'], @@ -99,7 +102,7 @@ class Hero extends BaseModel { 'state' => self::GETED_STATE, 'skill_lv1' => 1, 'skill_lv2' => 1, - 'rand_attr' => '[]', + 'rand_attr' => json_encode($randAttr), 'lock_type' => self::NO_LOCK, 'unlock_time' => 0, 'unlock_trade_time' => 0, @@ -112,6 +115,13 @@ class Hero extends BaseModel { public static function addTryHero($heroMeta, $tryCount) { $realHeroMeta = mt\Hero::get($heroMeta['id']); + $randAttr = array(); + { + $initQualityMeta = mt\HeroQuality::getByQuality(1); + if ($initQualityMeta) { + $randAttr = mt\HeroQuality::getRandAttr($initQualityMeta); + } + } SqlHelper::upsert( myself()->_getSelfMysql(), 't_hero', diff --git a/webapp/mt/HeroQuality.php b/webapp/mt/HeroQuality.php index f2fbda7c..1baf80a0 100644 --- a/webapp/mt/HeroQuality.php +++ b/webapp/mt/HeroQuality.php @@ -17,9 +17,26 @@ class HeroQuality { return getXVal(self::$qualityHash, $quality, null); } - public static function getRandAttr($initMeta, $nextMeta, $oldAttr, &$newAttr) + public static function getRandAttr($qualityMeta) { - + $nums = explode(':', $qualityMeta['rand_attrs_num']); + $attrs = StrHelper::parseList($qualityMeta['rand_attrs'], array('|', ':')); + $num = rand($nums[0], $nums[1]); + shuffle($attrs); + $result = array(); + $i = 0; + foreach ($attrs as $item) { + if ($i < $num) { + array_push($result, + array( + 'attr_id' => $item[0], + 'type' => $item[1], + 'val' => rand($item[2], $item[3]) + )); + } + ++$i; + } + return $result; } protected static function getMetaList() @@ -30,7 +47,7 @@ class HeroQuality { return self::$metaList; } - protected static function mustBeQualityLevelHash() + protected static function mustBeQualityHash() { if (!self::$qualityHash) { self::$qualityHash = array(); diff --git a/webapp/mt/StrHelper.php b/webapp/mt/StrHelper.php index 221dd9d2..e837b1dd 100644 --- a/webapp/mt/StrHelper.php +++ b/webapp/mt/StrHelper.php @@ -10,21 +10,22 @@ class StrHelper { { $values = array(); if (!empty($val) && count($separators) > 0) { - function parse($data, $separators, $i, &$arr) { - $strs = explode($separators[$i], $data); - foreach ($strs as $str) { - if ($i + 1 < count($separators)) { - $item = array(); - parse($str, $separators, $i + 1, $item); - array_push($arr, $item); - } else { - array_push($arr, $str); - } - } - } - parse($val, $separators, 0, $values); + self::parse($val, $separators, 0, $values); } return $values; } + private function parse($data, $separators, $i, &$arr) { + $strs = explode($separators[$i], $data); + foreach ($strs as $str) { + if ($i + 1 < count($separators)) { + $item = array(); + self::parse($str, $separators, $i + 1, $item); + array_push($arr, $item); + } else { + array_push($arr, $str); + } + } + } + }