This commit is contained in:
aozhiwei 2022-01-06 16:20:36 +08:00
parent 0df61ca158
commit 765a6117e8
3 changed files with 52 additions and 24 deletions

View File

@ -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',

View File

@ -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();

View File

@ -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);
}
}
}
}