internalUpdateRankActivity( self::ALIVE_TYPE, getReqVal('alive_time', 0) / 1000, self::OP_SUM); $this->internalUpdateRankActivity( self::KILLS_TYPE, getReqVal('kills', 0), self::OP_SUM); } public function heroUpgradeQuality($quality) { $this->internalUpdateRankActivity( self::HERO_UPGRADE_QUALITY_TYPE, $quality, self::OP_GREATEST); } public function heroUpgradeLevel($level) { $this->internalUpdateRankActivity( self::HERO_UPGRADE_LEVEL_TYPE, $level, self::OP_GREATEST); } private function internalUpdateRankActivity($type, $val, $opt) { $meta = mt\RankActivity::get($type); if (!$meta || !mt\RankActivity::isActivityPeriod($meta)) { return; } if ($val > $meta['limit']) { $val = $meta['limit']; } SqlHelper::upsert (myself()->_getSelfMysql(), 't_rank_activity', array( 'account_id' => myself()->_getAccountId(), 'type' => $type ), array( 'value' => function () use($val, $opt) { if ($opt == self::OP_SUM) { return "value + ${val}"; } else if ($opt == self::OP_GREATEST) { return "GREATEST(0, ${val})"; } else { return $val; } }, 'modifytime' => myself()->_getNowTime(), ), array( 'account_id' => myself()->_getAccountId(), 'channel' => myself()->_getChannel(), 'type' => $type, 'value' => $val, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) ); } }