_getSelfMysql(), 't_hero', array( 'account_id' => myself()->_getAccountId(), 'idx' => $heroUniId, ) ); if ($row) { $row['hero_uniid'] = $row['idx']; } return $row; } public static function getValidHero($heroId) { $row = SqlHelper::ormSelectOne( myself()->_getSelfMysql(), 't_hero', array( 'account_id' => myself()->_getAccountId(), 'hero_id' => $heroId, 'state' => self::GETED_STATE, ) ); if ($row) { $row['hero_uniid'] = $row['idx']; } return $row; } public static function toDto($row) { $attr = emptyReplace(json_decode($row['rand_attr'], true), array()); $lockType = 0; $unlockTime = 0; if ($row['lock_type'] != 0 && $row['unlock_time'] - myself()->_getNowTime() > 0) { $lockType = $row['lock_type']; $unlockTime = $row['unlock_time']; } $heroMeta = mt\Hero::get($row['hero_id']); if ($heroMeta) { $baseAttr = mt\Hero::getHeroAttr($heroMeta); mt\AttrHelper::mergeAttr($attr, $baseAttr); } $dto = array( 'hero_uniid' => $row['idx'], 'hero_id' => $row['hero_id'], 'hero_lv' => $row['hero_lv'], 'hero_tili' => $row['hero_tili'], 'state' => $row['state'], 'skin_id' => $row['skin_id'], 'quality' => $row['quality'], 'skill_lv1' => $row['skill_lv1'], 'skill_lv2' => $row['skill_lv2'], 'attr' => $attr, 'try_count' => $row['try_count'], 'lock_type' => $lockType, 'unlock_time' => $unlockTime, 'unlock_trade_time' => $row['unlock_trade_time'], ); return $dto; } public static function addHero($heroMeta) { $realHeroMeta = mt\Hero::get($heroMeta['id']); $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'], 'hero_lv' => 1, 'quality' => 1, 'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0, 'state' => self::GETED_STATE, 'skill_lv1' => 1, 'skill_lv2' => 1, 'rand_attr' => json_encode($randAttr), 'lock_type' => self::NO_LOCK, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) ); } 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', array( 'account_id' => myself()->_getAccountId(), 'hero_id' => $heroMeta['id'] ), array( ), array( 'account_id' => myself()->_getAccountId(), 'hero_id' => $heroMeta['id'], 'hero_lv' => 1, 'quality' => 1, 'hero_tili' => $realHeroMeta ? $realHeroMeta['tili'] : 0, 'state' => self::TRY_STATE, 'try_count' => $tryCount, 'skill_lv1' => 1, 'skill_lv2' => 1, 'rand_attr' => json_encode($randAttr), 'lock_type' => self::NO_LOCK, 'unlock_time' => 0, 'unlock_trade_time' => 0, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) ); } public static function takeonSkin($heroUniId, $skinId) { self::update($heroUniId, array( 'skin_id' => $skinId, 'modifytime' => myself()->_getNowTime() )); } public static function upgradeSkill($heroUniId, $skillIdx) { if (!in_array($skillIdx, array(0, 1))) { return; } $fieldName = 'skill_lv' . ($skillIdx + 1); self::update($heroUniId, array( $fieldName => function () use($fieldName) { return "${fieldName} + 1"; }, 'modifytime' => myself()->_getNowTime() )); } public static function update($heroUniId, $fieldsKv) { SqlHelper::update (myself()->_getSelfMysql(), 't_hero', array( 'account_id' => myself()->_getAccountId(), 'idx' => $heroUniId, ), $fieldsKv ); } public static function randHero(&$heroUniId, &$heroId) { $heroUniId = 0; $heroId = 0; $rows = SqlHelper::select( myself()->_getSelfMysql(), 't_hero', array( 'idx', 'hero_id' ), array( 'account_id' => myself()->_getAccountId(), 'state' => self::GETED_STATE ) ); $key = array_rand($rows, 1); if (!is_null($key)) { $heroUniId = $rows[$key]['idx']; $heroId = $rows[$key]['hero_id']; } } }