This commit is contained in:
hujiabin 2024-01-03 17:40:47 +08:00
parent 3a06683610
commit 43771c8e67
5 changed files with 293 additions and 291 deletions

View File

@ -39,6 +39,7 @@ define('TN_TOTAL_STAR_NUM', 8014);
define('TN_TOTAL_RANK_NUM', 8015); define('TN_TOTAL_RANK_NUM', 8015);
define('TN_TOTAL_DIAMOND_CONSUME', 8016);//钻石消耗 define('TN_TOTAL_DIAMOND_CONSUME', 8016);//钻石消耗
define('TN_TOTAL_CEG_CONSUME', 8017);//ceg消耗 define('TN_TOTAL_CEG_CONSUME', 8017);//ceg消耗
define('TN_TOTAL_GATHER_GOLD', 8018);//收集金币
define('TN_DAILY_BEGIN', 9001); define('TN_DAILY_BEGIN', 9001);
define('TN_DAILY_LOGINS', 9001); define('TN_DAILY_LOGINS', 9001);

View File

@ -24,6 +24,7 @@ require_once('mt/Task.php');
require_once('mt/Drop.php'); require_once('mt/Drop.php');
require_once('mt/StarLevel.php'); require_once('mt/StarLevel.php');
require_once('mt/BattlePass.php'); require_once('mt/BattlePass.php');
require_once('mt/AchievementsCycle.php');
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
use models\Bag; use models\Bag;
@ -344,6 +345,7 @@ class BaseAuthedController extends BaseController {
return "gold + ${itemNum}"; return "gold + ${itemNum}";
} }
)); ));
$this->_incPeriodV(TN_TOTAL_GATHER_GOLD,0,$itemNum);
} }
break; break;
case V_ITEM_DIAMOND: case V_ITEM_DIAMOND:
@ -804,4 +806,16 @@ class BaseAuthedController extends BaseController {
DynData::decWeeklyV($x, $y, $decVal); DynData::decWeeklyV($x, $y, $decVal);
} }
public function _incPeriodV($x, $y, $incVal){
$currentPeriod= \mt\AchievementsCycle::getCurrentPeriod();
if ($currentPeriod && strtotime($currentPeriod['obtain_end_time']) > myself()->_getNowTime()){
DynData::incPeriodV($x, $y,strtotime($currentPeriod['obtain_start_time']), $incVal);
}
}
public function _getPeriodV($x, $y, $decVal = 0){
$currentPeriod= \mt\AchievementsCycle::getCurrentPeriod();
return DynData::getPeriodV($x, $y,strtotime($currentPeriod['obtain_start_time']), $decVal);
}
} }

View File

@ -1,262 +1,276 @@
<?php <?php
namespace models; namespace models;
use mt; use mt;
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
class DynData extends BaseModel { class DynData extends BaseModel {
public static function preload() public static function preload()
{ {
if (is_null(self::$dynData)) { if (is_null(self::$dynData)) {
self::$dynData = array(); self::$dynData = array();
$rows = SqlHelper::ormSelect( $rows = SqlHelper::ormSelect(
myself()->_getSelfMysql(), myself()->_getSelfMysql(),
't_dyndata', 't_dyndata',
array( array(
'account_id' => myself()->_getAccountId(), 'account_id' => myself()->_getAccountId(),
) )
); );
foreach ($rows as $row) { foreach ($rows as $row) {
$key = self::calcKey($row['x'], $row['y']); $key = self::calcKey($row['x'], $row['y']);
self::$dynData[$key] = array( self::$dynData[$key] = array(
'val' => $row['val'], 'val' => $row['val'],
'modifytime' => $row['modifytime'], 'modifytime' => $row['modifytime'],
); );
} }
} }
} }
public static function getVEx($accountId, $x, $y, $defVal = 0) public static function getVEx($accountId, $x, $y, $defVal = 0)
{ {
$row = SqlHelper::ormSelectOne( $row = SqlHelper::ormSelectOne(
myself()->_getMysql($accountId), myself()->_getMysql($accountId),
't_dyndata', 't_dyndata',
array( array(
'account_id' => $accountId, 'account_id' => $accountId,
'x' => $x, 'x' => $x,
'y' => $y, 'y' => $y,
) )
); );
return $row ? $row['val'] : $defVal; return $row ? $row['val'] : $defVal;
} }
public static function getV($x, $y, $defVal = 0) public static function getV($x, $y, $defVal = 0)
{ {
$valData = self::internalGetV($x, $y, $defVal); $valData = self::internalGetV($x, $y, $defVal);
return $valData['val']; return $valData['val'];
} }
public static function setV($x, $y, $defVal) public static function setV($x, $y, $defVal)
{ {
$key = self::calcKey($x, $y); $key = self::calcKey($x, $y);
self::internalSetV($x, $y, $defVal); self::internalSetV($x, $y, $defVal);
} }
public static function incV($x, $y, $val) public static function incV($x, $y, $val)
{ {
$key = self::calcKey($x, $y); $key = self::calcKey($x, $y);
$oldVal = self::getV($x, $y); $oldVal = self::getV($x, $y);
self::internalSetV($x, $y, $oldVal + $val); self::internalSetV($x, $y, $oldVal + $val);
} }
public static function incVEx($accountId, $x, $y, $val) public static function incVEx($accountId, $x, $y, $val)
{ {
$oldVal = self::getVEx($accountId, $x, $y); $oldVal = self::getVEx($accountId, $x, $y);
SqlHelper::upsert SqlHelper::upsert
(myself()->_getMysql($accountId), (myself()->_getMysql($accountId),
't_dyndata', 't_dyndata',
array( array(
'account_id' => $accountId, 'account_id' => $accountId,
'x' => $x, 'x' => $x,
'y' => $y 'y' => $y
), ),
array( array(
'val' => $oldVal + $val, 'val' => $oldVal + $val,
'modifytime' => myself()->_getNowTime() 'modifytime' => myself()->_getNowTime()
), ),
array( array(
'account_id' => $accountId, 'account_id' => $accountId,
'x' => $x, 'x' => $x,
'y' => $y, 'y' => $y,
'val' => $val, 'val' => $val,
'createtime' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime() 'modifytime' => myself()->_getNowTime()
) )
); );
} }
public static function setVEx($accountId, $x, $y, $val) public static function setVEx($accountId, $x, $y, $val)
{ {
SqlHelper::upsert SqlHelper::upsert
(myself()->_getMysql($accountId), (myself()->_getMysql($accountId),
't_dyndata', 't_dyndata',
array( array(
'account_id' => $accountId, 'account_id' => $accountId,
'x' => $x, 'x' => $x,
'y' => $y 'y' => $y
), ),
array( array(
'val' => $val, 'val' => $val,
'modifytime' => myself()->_getNowTime() 'modifytime' => myself()->_getNowTime()
), ),
array( array(
'account_id' => $accountId, 'account_id' => $accountId,
'x' => $x, 'x' => $x,
'y' => $y, 'y' => $y,
'val' => $val, 'val' => $val,
'createtime' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime() 'modifytime' => myself()->_getNowTime()
) )
); );
} }
public static function decV($x, $y, $val) public static function decV($x, $y, $val)
{ {
self::incV($x, $y, 0 - $val); self::incV($x, $y, 0 - $val);
} }
public static function getDailyV($x, $y, $defVal = 0) public static function getDailyV($x, $y, $defVal = 0)
{ {
$valData = self::internalGetV($x, $y, $defVal); $valData = self::internalGetV($x, $y, $defVal);
if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getNowDaySeconds()) { if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getNowDaySeconds()) {
$valData['val'] = $defVal; $valData['val'] = $defVal;
} }
return $valData['val']; return $valData['val'];
} }
public static function setDailyV($x, $y, $val) public static function setDailyV($x, $y, $val)
{ {
self::setV($x, $y, $val); self::setV($x, $y, $val);
} }
public static function incDailyV($x, $y, $val) public static function incDailyV($x, $y, $val)
{ {
$key = self::calcKey($x, $y); $key = self::calcKey($x, $y);
$oldVal = self::getDailyV($x, $y); $oldVal = self::getDailyV($x, $y);
self::internalSetV($x, $y, $oldVal + $val); self::internalSetV($x, $y, $oldVal + $val);
} }
public static function decDailyV($x, $y, $val) public static function decDailyV($x, $y, $val)
{ {
self::incDailyV($x, $y, 0 - $val); self::incDailyV($x, $y, 0 - $val);
} }
public static function getWeeklyV($x, $y, $defVal = 0) public static function getWeeklyV($x, $y, $defVal = 0)
{ {
$valData = self::internalGetV($x, $y, $defVal); $valData = self::internalGetV($x, $y, $defVal);
if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getMondaySeconds()) { if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getMondaySeconds()) {
$valData['val'] = $defVal; $valData['val'] = $defVal;
} }
return $valData['val']; return $valData['val'];
} }
public static function setWeeklyV($x, $y, $val) public static function setWeeklyV($x, $y, $val)
{ {
self::setV($x, $y, $val); self::setV($x, $y, $val);
} }
public static function incWeeklyV($x, $y, $val) public static function incWeeklyV($x, $y, $val)
{ {
$key = self::calcKey($x, $y); $key = self::calcKey($x, $y);
$oldVal = self::getWeeklyV($x, $y); $oldVal = self::getWeeklyV($x, $y);
self::internalSetV($x, $y, $oldVal + $val); self::internalSetV($x, $y, $oldVal + $val);
} }
public static function decWeeklyV($x, $y, $val) public static function decWeeklyV($x, $y, $val)
{ {
self::incWeeklyV($x, $y, 0 - $val); self::incWeeklyV($x, $y, 0 - $val);
} }
public static function calcKey($x, $y) public static function calcKey($x, $y)
{ {
$low32 = (int)$x; $low32 = (int)$x;
$high32 = (int)$y; $high32 = (int)$y;
$key = $low32 + ($high32 << 32); $key = $low32 + ($high32 << 32);
return $key; return $key;
} }
public static function getPeriodV($x, $y,$time, $defVal = 0)
private static function internalSetV($x, $y, $val) {
{ $valData = self::internalGetV($x, $y, $defVal);
if (!is_int($x) || !is_int($y)) { if (myself()->_getDaySeconds($valData['modifytime']) < myself()->_getDaySeconds($time)) {
die('internalSet type error'); $valData['val'] = $defVal;
return; }
} return $valData['val'];
if (abs($x) > 0xFFFFFFFF) { }
die('internalSet x error');
return; public static function incPeriodV($x, $y, $time, $val){
} $key = self::calcKey($x, $y);
if (abs($y) > 0xFFFFFFFF) { $oldVal = self::getPeriodV($x, $y, $time);
die('internalSet y error'); self::internalSetV($x, $y, $oldVal + $val);
return; }
}
$key = self::calcKey($x, $y); private static function internalSetV($x, $y, $val)
SqlHelper::upsert {
(myself()->_getSelfMysql(), if (!is_int($x) || !is_int($y)) {
't_dyndata', die('internalSet type error');
array( return;
'account_id' => myself()->_getAccountId(), }
'x' => $x, if (abs($x) > 0xFFFFFFFF) {
'y' => $y die('internalSet x error');
), return;
array( }
'val' => $val, if (abs($y) > 0xFFFFFFFF) {
'modifytime' => myself()->_getNowTime() die('internalSet y error');
), return;
array( }
'account_id' => myself()->_getAccountId(), $key = self::calcKey($x, $y);
'x' => $x, SqlHelper::upsert
'y' => $y, (myself()->_getSelfMysql(),
'val' => $val, 't_dyndata',
'createtime' => myself()->_getNowTime(), array(
'modifytime' => myself()->_getNowTime() 'account_id' => myself()->_getAccountId(),
) 'x' => $x,
); 'y' => $y
if (self::$dynData) { ),
self::$dynData[$key] = array( array(
'val' => $val, 'val' => $val,
'modifytime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime()
); ),
} array(
} 'account_id' => myself()->_getAccountId(),
'x' => $x,
private static function internalGetV($x, $y, $defVal = 0) 'y' => $y,
{ 'val' => $val,
$key = self::calcKey($x, $y); 'createtime' => myself()->_getNowTime(),
if (!is_null(self::$dynData)) { 'modifytime' => myself()->_getNowTime()
if (isset(self::$dynData[$key])) { )
return self::$dynData[$key]; );
} else { if (self::$dynData) {
return array( self::$dynData[$key] = array(
'val' => $defVal, 'val' => $val,
'modifytime' => myself()->_getNowTime() 'modifytime' => myself()->_getNowTime(),
); );
} }
} else { }
++self::$hitCount;
if (self::$hitCount > 5 && is_null(self::$dynData)) { private static function internalGetV($x, $y, $defVal = 0)
self::preload(); {
return self::internalGetV($x, $y, $defVal); $key = self::calcKey($x, $y);
} else { if (!is_null(self::$dynData)) {
$row = SqlHelper::ormSelectOne( if (isset(self::$dynData[$key])) {
myself()->_getSelfMysql(), return self::$dynData[$key];
't_dyndata', } else {
array( return array(
'account_id' => myself()->_getAccountId(), 'val' => $defVal,
'x' => $x, 'modifytime' => myself()->_getNowTime()
'y' => $y, );
) }
); } else {
return array( ++self::$hitCount;
'val' => $row ? $row['val'] : $defVal, if (self::$hitCount > 5 && is_null(self::$dynData)) {
'modifytime' => $row ? $row['modifytime'] : myself()->_getNowTime(), self::preload();
); return self::internalGetV($x, $y, $defVal);
} } else {
} $row = SqlHelper::ormSelectOne(
} myself()->_getSelfMysql(),
't_dyndata',
private static $dynData = null; array(
private static $hitCount = 0; 'account_id' => myself()->_getAccountId(),
'x' => $x,
} 'y' => $y,
)
);
return array(
'val' => $row ? $row['val'] : $defVal,
'modifytime' => $row ? $row['modifytime'] : myself()->_getNowTime(),
);
}
}
}
private static $dynData = null;
private static $hitCount = 0;
}

View File

@ -11,34 +11,6 @@ use mt\RankSeason;
use phpcommon\SqlHelper; use phpcommon\SqlHelper;
class HashRateTask extends BaseModel class HashRateTask extends BaseModel
{ {
const KILL_TYPE = 10001;
const STAR_TYPE = 10002;
const RANK_TYPE = 10003;
const BATTLE_TIME_TYPE = 10004;
const BATTLE_WIN_TYPE = 10005;
const VS_FOUR_BATTLE_WIN_TYPE = 10006;
const DAMAGE_TYPE = 10007;
const MOBA_WIN_ID = 1;
const MOBA_KILL_ID = 2;
const MOBA_GATHER_GRENADE_ID = 3;
const MOBA_GATHER_BURNING_ID = 4;
const MOBA_GATHER_BLOOD_ID = 5;
const MOBA_BATTLE_END_ID =6;
const MOBA_FAST_UP_ID =7;
const MOBA_BATTLE_TIMES_ID =8;
const PVP_WIN_ID =9;
const PVP_LAST_RUNNER_ID =10;
const PVP_KILL_ID =11;
const PVP_GATHER_GRENADE_ID =12;
const PVP_GATHER_BURNING_ID =13;
const PVP_GATHER_BLOOD_ID =14;
const PVP_WALKING_DISTANCE_ID =16;
const PVP_BATTLE_TIMES_ID =17;
const HERO_UP_QUALITY_ID =18;
const OWN_HERO_NFT_ID =19;
const OWN_CHIP_NFT_ID =20;
const OWN_GOLD_ID =21;
public static function find(){ public static function find(){
$rows = SqlHelper::ormSelect( $rows = SqlHelper::ormSelect(

View File

@ -137,12 +137,13 @@ class HashRateService extends BaseService
break; break;
//拥有金币数 //拥有金币数
case AchievementsPower::OWN_GOLD_NUM : { case AchievementsPower::OWN_GOLD_NUM : {
//......./ $taskDto['current'] = myself()->_getPeriodV(TN_TOTAL_GATHER_GOLD,0);
} }
break; break;
} }
if ($taskDto['current'] >= $taskDto['target']) { if ($taskDto['current'] >= $taskDto['target']) {
$taskDto['current'] = $taskDto['target']; $taskDto['current'] = $taskDto['target'];
$taskDto['state'] = self::FINISHED_STATE;
} }
return $taskDto; return $taskDto;
} }