From c6b602ebf23da76d6046b4c5ea39a0a6695528d9 Mon Sep 17 00:00:00 2001 From: hujiabin <519660157@qq.com> Date: Tue, 2 Jan 2024 16:20:11 +0800 Subject: [PATCH] 1 --- doc/HashRate.py | 35 ++++ sql/gamedb.sql | 2 +- sql/gamedb2006_migrate_231027_01.sql | 19 -- sql/gamedb2006_migrate_231228_01.sql | 26 +++ .../controller/BaseAuthedController.class.php | 1 - .../controller/HashRateController.class.php | 41 ++++ webapp/controller/UserController.class.php | 51 ++++- webapp/models/HashRateBattleData.php | 46 +++++ webapp/models/HashRateTask.php | 31 ++- webapp/mt/AchievementsCycle.php | 30 +++ webapp/mt/AchievementsPower.php | 51 +++++ webapp/mt/Equip.php | 190 +++++++++--------- webapp/services/HashRateService.php | 156 ++++++++++++++ webapp/services/TameBattleDataService.php | 91 +++++++-- 14 files changed, 637 insertions(+), 133 deletions(-) create mode 100644 doc/HashRate.py delete mode 100644 sql/gamedb2006_migrate_231027_01.sql create mode 100644 sql/gamedb2006_migrate_231228_01.sql create mode 100644 webapp/controller/HashRateController.class.php create mode 100644 webapp/models/HashRateBattleData.php create mode 100644 webapp/mt/AchievementsCycle.php create mode 100644 webapp/mt/AchievementsPower.php diff --git a/doc/HashRate.py b/doc/HashRate.py new file mode 100644 index 00000000..437e6335 --- /dev/null +++ b/doc/HashRate.py @@ -0,0 +1,35 @@ +import _common + +class HashRate(object): + + def __init__(self): + self.apis = [ + { + 'name': 'info', + 'desc': '获取算力信息', + 'group': 'ComputingPower', + 'url': 'webapp/index.php?c=ComputingPower&a=info', + 'params': [ + _common.ReqHead(), + ], + 'response': [ + _common.RspHead(), + ['!list', [HashRateList()], '行为列表'], + ['obtain_end_time', 0, '获得期结束时间'], + ['income_end_time', 0, '盈利期结束时间'], + ['state', 0, '0:获得期 1:盈利期'], + ['myHashRate', 0, '我的算力'], + ] + }, + ] + + +class HashRateList(object): + + def __init__(self): + self.fields = [ + ['task_id', 0, '任务id'], + ['current', 0, '当前进度'], + ['target', 0, '目标进度'], + ['state', 0, '1:完成 0:未完成'], + ] \ No newline at end of file diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 851cc237..409e1c53 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -1707,4 +1707,4 @@ CREATE TABLE `t_hash_rate_task` ( `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', PRIMARY KEY (`idx`), UNIQUE KEY `account_task_id` (`account_id`, `task_id`) -) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; diff --git a/sql/gamedb2006_migrate_231027_01.sql b/sql/gamedb2006_migrate_231027_01.sql deleted file mode 100644 index fb776cc8..00000000 --- a/sql/gamedb2006_migrate_231027_01.sql +++ /dev/null @@ -1,19 +0,0 @@ -begin; - -CREATE TABLE `t_hash_rate_task` ( - `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', - `account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)', - `task_id` int(11) NOT NULL COMMENT '配置表HashRateTask', - `season` int(11) NOT NULL DEFAULT '0' COMMENT 'taskId 为10003可用', - `record_total` int(64) NOT NULL DEFAULT '0' COMMENT '记录总数据', - `claim_day` int(64) NOT NULL DEFAULT '0' COMMENT '当天领取数据', - `claim_total` int(64) NOT NULL DEFAULT '0' COMMENT '领取总数据', - `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', - `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', - PRIMARY KEY (`idx`), - UNIQUE KEY `account_task_id` (`account_id`, `task_id`) -) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; - -insert into version (version) values(2023092001); - -commit; diff --git a/sql/gamedb2006_migrate_231228_01.sql b/sql/gamedb2006_migrate_231228_01.sql new file mode 100644 index 00000000..41f84e78 --- /dev/null +++ b/sql/gamedb2006_migrate_231228_01.sql @@ -0,0 +1,26 @@ +begin; + +CREATE TABLE `t_hash_rate_task` ( + `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', + `account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)', + `task_id` int(11) NOT NULL COMMENT '配置表id', + `period` int(11) NOT NULL DEFAULT '0' COMMENT '算力期数', + `total_num` int(64) NOT NULL DEFAULT '0' COMMENT '记录数据', + `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', + PRIMARY KEY (`idx`), + UNIQUE KEY `account_task_id` (`account_id`, `task_id`) +) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +CREATE TABLE `t_hash_rate_battle_data` ( + `idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', + `account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id(channel + "_" + gameid + "_" + openid)', + `battle_data` mediumblob COMMENT 'battle_data', + `createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间', + PRIMARY KEY (`idx`) +) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +insert into version (version) values(2023122801); + +commit; diff --git a/webapp/controller/BaseAuthedController.class.php b/webapp/controller/BaseAuthedController.class.php index a688d328..0f502a96 100644 --- a/webapp/controller/BaseAuthedController.class.php +++ b/webapp/controller/BaseAuthedController.class.php @@ -419,7 +419,6 @@ class BaseAuthedController extends BaseController { } )); $this->_incDailyV(TN_DAILY_GET_STAR_NUM, 0,$itemNum); - HashRateTask::incRecordNum(HashRateTask::STAR_TYPE,$itemNum); } break; default: diff --git a/webapp/controller/HashRateController.class.php b/webapp/controller/HashRateController.class.php new file mode 100644 index 00000000..3e65ca9e --- /dev/null +++ b/webapp/controller/HashRateController.class.php @@ -0,0 +1,41 @@ +hashRateService = new services\HashRateService(); + $this->hashRateService->init(); + } + + public function info(){ + $mateList = \mt\AchievementsPower::getMetaList(); + $currentPeriod= \mt\AchievementsCycle::getCurrentPeriod(); + $hashRateDtoList = array(); + foreach ($mateList as $mate) { + $temp = $this->hashRateService->hashRateTaskDto($mate); + array_push($hashRateDtoList, $temp); + } + $obtain_end_time = strtotime($currentPeriod['obtain_end_time']); + $income_end_time = strtotime($currentPeriod['income_end_time']); + $state = 0; + if ($obtain_end_time < myself()->_getNowTime()){ + $state = 1; + } + $this->_rspData(array( + 'list' => $hashRateDtoList, + 'obtain_end_time' => $obtain_end_time, + 'income_end_time' => $income_end_time, + 'state' => $state, + 'myHashRate' => 0, + )); + } + +} \ No newline at end of file diff --git a/webapp/controller/UserController.class.php b/webapp/controller/UserController.class.php index 720aa5c6..5cb995df 100644 --- a/webapp/controller/UserController.class.php +++ b/webapp/controller/UserController.class.php @@ -56,7 +56,7 @@ class UserController extends BaseAuthedController { $this->createNewUserV2($userName); $this->_addFreeItem(); $userInfo = $this->_getOrmUserInfo(); - $this->_setBattleHero($userInfo); +// $this->_setBattleHero($userInfo); // $this->_setV(TN_RANK_STATUS, 0, 1); //初始化芯片页 $chipPageObj = new services\ChipPageService(); @@ -666,7 +666,6 @@ class UserController extends BaseAuthedController { $this->_rspData(array( 'property_chg' => $propertyChgService->toDto(), )); - error_log(11111111111111111111111111); } public function setUserHonor(){ @@ -708,6 +707,54 @@ class UserController extends BaseAuthedController { )); } + public function getFreeItemList(){ + $freeHero = mt\Parameter::getListValue('free_hero_list'); + $this->_rspData([ + 'data'=>$freeHero + ]); + + } + + public function selectFreeItem(){ + $itemId = getReqVal('itemId', ''); + if (!$itemId){ + $this->_rspErr(1, 'param is error'); + return; + } + $heroMeta = mt\Item::get($itemId); + if (! $heroMeta || $heroMeta['type'] != \mt\Item::HERO_TYPE){ + $this->_rspErr(1, 'itemId is error'); + return; + } + $userInfo = $this->_getOrmUserInfo(); + $headList = emptyReplace(json_decode($userInfo['head_list'], true), array()); + if ($heroMeta['hero_head'] && !in_array($heroMeta['hero_head'],$headList)){ + array_push($headList,$heroMeta['hero_head']); + } + Hero::addFreeHero($heroMeta); + $heroUid = SqlHelper::getLastInsertId($this->_getSelfMysql()); + $fields = array( + 'hero_id' => $heroUid, + 'head_id' => $heroMeta['hero_head'], + 'head_frame' => 60000, + 'head_list' => json_encode($headList), + 'head_frame_list' => json_encode(array(60000)), + 'is_gain_item' => 1, + ); + User::update($fields); + $propertyChgService = new services\PropertyChgService(); + $propertyChgService->addUserChg(); + $propertyChgService->addHeroChg(); + $propertyChgService->addGunChg(); + $this->_rspData([ + 'data'=>array( + 'hero_id' => $itemId, + ), + 'property_chg' => $propertyChgService->toDto(), + ]); + } + + private function dampingElo($userInfo){ //每天elo衰减 $time_diff = myself()->_getNowTime()-$userInfo['last_login_time']; diff --git a/webapp/models/HashRateBattleData.php b/webapp/models/HashRateBattleData.php new file mode 100644 index 00000000..5de4ba5c --- /dev/null +++ b/webapp/models/HashRateBattleData.php @@ -0,0 +1,46 @@ +_getSelfMysql(), + 't_hash_rate_battle_data', + array( + 'account_id' => myself()->_getAccountId(), + ) + ); + return $row ? json_decode($row['battle_data'], true) : array(); + } + + public static function add($battleData) + { + SqlHelper::upsert + (myself()->_getSelfMysql(), + 't_hash_rate_battle_data', + array( + 'account_id' => myself()->_getAccountId(), + ), + array( + 'battle_data' => $battleData, + 'modifytime' => myself()->_getNowTime(), + ), + array( + 'account_id' => myself()->_getAccountId(), + 'battle_data' => $battleData, + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ) + ); + } + + +} \ No newline at end of file diff --git a/webapp/models/HashRateTask.php b/webapp/models/HashRateTask.php index 25a5d41c..7cce9d04 100644 --- a/webapp/models/HashRateTask.php +++ b/webapp/models/HashRateTask.php @@ -19,6 +19,27 @@ class HashRateTask extends BaseModel 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(){ $rows = SqlHelper::ormSelect( myself()->_getSelfMysql(), @@ -50,24 +71,26 @@ class HashRateTask extends BaseModel ); } - public static function incRecordNum($taskId,$num){ + public static function incRecordNum($period,$taskId,$num){ SqlHelper::upsert (myself()->_getSelfMysql(), 't_hash_rate_task', array( 'account_id' => myself()->_getAccountId(), + 'period' => $period, 'task_id' => $taskId, ), array( - 'record_total' => function () use($num) { - return "record_total + ${num}"; + 'total_num' => function () use($num) { + return "total_num + ${num}"; }, 'modifytime' => myself()->_getNowTime() ), array( 'account_id' => myself()->_getAccountId(), + 'period' => $period, 'task_id' => $taskId, - 'record_total' => $num, + 'total_num' => $num, 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime() ) diff --git a/webapp/mt/AchievementsCycle.php b/webapp/mt/AchievementsCycle.php new file mode 100644 index 00000000..e2c1201a --- /dev/null +++ b/webapp/mt/AchievementsCycle.php @@ -0,0 +1,30 @@ +_getNowTime() >= strtotime($meta['obtain_start_time']) && + myself()->_getNowTime() <= strtotime($meta['income_end_time'])) { + return $meta; + } + } + return array(); + } + + public static function getMetaList() + { + if (!self::$metaList) { + self::$metaList = getMetaTable('AchievementsCycle@AchievementsCycle.php'); + } + return self::$metaList; + } + + protected static $metaList; + +} diff --git a/webapp/mt/AchievementsPower.php b/webapp/mt/AchievementsPower.php new file mode 100644 index 00000000..aaff0f2e --- /dev/null +++ b/webapp/mt/AchievementsPower.php @@ -0,0 +1,51 @@ + kHAT_Atk, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'atk' - ],[//射速-固定值 - 'attr_id' => kHAT_FireRate, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'fire_rate' - ],[//弹夹-固定值 - 'attr_id' => kHAT_Volume, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'clip_volume' - ],[//换弹-固定值 - 'attr_id' => kHAT_ReloadTime, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'reload_time' - ],[//射程-固定值 - 'attr_id' => kHAT_ShotRange, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'range' - ],[//攻击吸血-百分比 - 'attr_id' => kHAT_BrainLifePct, - 'type' => kHAT_RATE_VAL, - 'field_name' => 'brain_life_pct' - ],[//子弹飞行速度-固定值 - 'attr_id' => kHAT_BulletSpeed, - 'type' => kHAT_ABS_VAL, - 'field_name' => 'bullet_speed' - ], - ]; - foreach ($fields as $field) { - array_push($attr, array( - 'attr_id' => $field['attr_id'], - 'type' => $field['type'], - 'val' => $mate[$field['field_name']] - )); - } - } - return $attr; - } - - public static function getOldEquip($id) - { - $meta = self::get($id); - return array( - 'id' => $equip_conf['id'], - 'upgrade_priority' => $equip_conf['upgrade_priority'], - 'equip_upgrade' => $equip_conf['equip_upgrade'], - 'level_gold_cost' => $equip_conf['level_gold_cost'], - 'max_level' => $equip_conf['max_level'], - 'equip_upgradematerial' => $equip_conf['equip_upgradematerial'], - 'equip_upgradetime' => $equip_conf['equip_upgradetime'], - 'diamond_cost' => $equip_conf['diamond_cost'], - 'drop_id' => $equip_conf['drop_id'], - 'reduce_time' => $equip_conf['reduce_time'], - 'diamond_time' => $equip_conf['diamond_time'], - 'upgrade_gold' => $equip_conf['upgrade_gold'], - 'promote_gold' => $equip_conf['promote_gold'], - 'promote_material' => $equip_conf['promote_material'], - 'real_index_id' => $equip_conf['real_index_id'], - 'promote_gold' => $equip_conf['promote_gold'], - ); - } - - protected static function getMetaList() - { - if (!self::$metaList) { - self::$metaList = getMetaTable('equip@equip.php'); - } - return self::$metaList; - } - - protected static $metaList; - -} + kHAT_Atk, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'atk' + ],[//射速-固定值 + 'attr_id' => kHAT_FireRate, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'fire_rate' + ],[//弹夹-固定值 + 'attr_id' => kHAT_Volume, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'clip_volume' + ],[//换弹-固定值 + 'attr_id' => kHAT_ReloadTime, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'reload_time' + ],[//射程-固定值 + 'attr_id' => kHAT_ShotRange, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'range' + ],[//攻击吸血-百分比 + 'attr_id' => kHAT_BrainLifePct, + 'type' => kHAT_RATE_VAL, + 'field_name' => 'brain_life_pct' + ],[//子弹飞行速度-固定值 + 'attr_id' => kHAT_BulletSpeed, + 'type' => kHAT_ABS_VAL, + 'field_name' => 'bullet_speed' + ], + ]; + foreach ($fields as $field) { + array_push($attr, array( + 'attr_id' => $field['attr_id'], + 'type' => $field['type'], + 'val' => $mate[$field['field_name']] + )); + } + } + return $attr; + } + + public static function getOldEquip($id) + { + $meta = self::get($id); + return array( + 'id' => $equip_conf['id'], + 'upgrade_priority' => $equip_conf['upgrade_priority'], + 'equip_upgrade' => $equip_conf['equip_upgrade'], + 'level_gold_cost' => $equip_conf['level_gold_cost'], + 'max_level' => $equip_conf['max_level'], + 'equip_upgradematerial' => $equip_conf['equip_upgradematerial'], + 'equip_upgradetime' => $equip_conf['equip_upgradetime'], + 'diamond_cost' => $equip_conf['diamond_cost'], + 'drop_id' => $equip_conf['drop_id'], + 'reduce_time' => $equip_conf['reduce_time'], + 'diamond_time' => $equip_conf['diamond_time'], + 'upgrade_gold' => $equip_conf['upgrade_gold'], + 'promote_gold' => $equip_conf['promote_gold'], + 'promote_material' => $equip_conf['promote_material'], + 'real_index_id' => $equip_conf['real_index_id'], + 'promote_gold' => $equip_conf['promote_gold'], + ); + } + + protected static function getMetaList() + { + if (!self::$metaList) { + self::$metaList = getMetaTable('equip@equip.php'); + } + return self::$metaList; + } + + protected static $metaList; + +} diff --git a/webapp/services/HashRateService.php b/webapp/services/HashRateService.php index 0071494a..c4cb6b93 100644 --- a/webapp/services/HashRateService.php +++ b/webapp/services/HashRateService.php @@ -11,11 +11,14 @@ require_once('models/Bag.php'); require_once('models/CrystalRecord.php'); require_once('models/Staking.php'); require_once('models/HashRateTask.php'); +require_once('models/HashRateBattleData.php'); use models\Bag; use models\CrystalRecord; +use models\HashRateBattleData; use models\Staking; use models\HashRateTask; +use mt\AchievementsPower; use mt\HashRate; use mt\Parameter; use mt\Rank; @@ -23,9 +26,161 @@ use mt\RankSeason; class HashRateService extends BaseService { + const FINISHED_STATE = 1; + const NOT_FINISHED_STATE = 0; + + private $hisBattleData = array(); + private $hashRateData = array(); + private $mobaBattleData = array(); + private $pvpBattleData = array(); + + public function init() + { + + $this->hisBattleData = HashRateBattleData::getMyBattleData(); + $this->hashRateData = getXVal($this->hisBattleData, 'data', array()); +// $currentPeriod= \mt\AchievementsCycle::getCurrentPeriod(); +// if (myself()->_getDaySeconds(getXVal($this->hashRateData, 'modifytime', 0)) < +// myself()->_getDaySeconds($currentPeriod['obtain_end_time'])) { +// $this->hashRateData = array( +// 'pvpData' => array(), +// 'mobaData' => array(), +// 'createtime' => myself()->_getNowTime(), +// 'modifytime' => myself()->_getNowTime(), +// ); +// } + if (!$this->hashRateData){ + $this->hashRateData = array( + 'pvpData' => array(), + 'mobaData' => array(), + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime(), + ); + } + $this->pvpBattleData = $this->hashRateData['pvpData']; + $this->mobaBattleData = $this->hashRateData['mobaData']; + } + + public function hashRateTaskDto($taskMate){ + $taskDto = array( + 'task_id' => $taskMate['id'], + 'current' => 0, + 'target' => getXVal($taskMate, 'Completed_quantity', 1), + 'state' => self::NOT_FINISHED_STATE, + ); + + switch ($taskMate['Completion_type']){ + //吃鸡或4v4获得胜利 + case AchievementsPower::TOTAL_WINS_TIMES : { + $taskDto['current'] = $this->getBattleData($taskMate, + 'total_win_times'); + } + break; + //击杀人数 + case AchievementsPower::TOTAL_KILL_TIMES : { + $taskDto['current'] = $this->getBattleData($taskMate, + 'total_kills_times'); + } + break; + //使用X道具 + case AchievementsPower::USE_ITEM_TIMES : { + $taskDto['current'] = $this->getWeaponsSlotData($taskMate); + } + break; + //X分钟内结束比赛 + case AchievementsPower::NOMINAL_TIME_BATTLE_END : { + //.... + } + break; + //在局内升级最快次数 + case AchievementsPower::IN_BATTLE_UP_LV : { + //..... + } + break; + //游戏场次 + case AchievementsPower::TOTAL_BATTLE_TIMES : { + $taskDto['current'] = $this->getBattleData($taskMate, + 'total_battle_times'); + } + break; + //最后一名次数 + case AchievementsPower::TOTAL_LAST_RUNNER : { + $taskDto['current'] = $this->getBattleData($taskMate, + 'total_last_runner_times'); + } + break; + //救援队友数 + case AchievementsPower::RESCUE_TEAMMATE_TIMES : { + $taskDto['current'] = $this->getBattleData($taskMate, + 'total_rescue_times'); + } + break; + //累计行走距离(米) + case AchievementsPower::WALKING_DISTANCE : { + //.../ + } + break; + //指定英雄升阶数 + case AchievementsPower::HERO_UP_QUALITY : { + //..../ + } + break; + //拥有英雄nft数 + case AchievementsPower::OWN_HERO_NFT_NUM : { + //...../ + } + break; + //拥有芯片nft数 + case AchievementsPower::OWN_CHIP_NFT_NUM : { + //....../ + } + break; + //拥有金币数 + case AchievementsPower::OWN_GOLD_NUM : { + //......./ + } + break; + } + if ($taskDto['current'] >= $taskDto['target']) { + $taskDto['current'] = $taskDto['target']; + } + return $taskDto; + } + + private function getBattleData($taskMate, $key) + { + $val = 0; + $battleData = $this->internalGetBattleData($taskMate); + $val = getXVal($battleData, $key, 0); + return $val; + } + + private function internalGetBattleData($taskMate) + { + $battleData = null; + if ($taskMate['scene'] == AchievementsPower::PVP_SCENE) { + $battleData = $this->pvpBattleData; + } else if ($taskMate['scene'] == AchievementsPower::MOBA_SCENE){ + $battleData = $this->mobaBattleData; + } + return $battleData ? $battleData : array(); + } + + private function getWeaponsSlotData($taskMate){ + $val = 0; + $battleData = $this->internalGetBattleData($taskMate); + $slotData = $battleData['weapons_slot_data'] ? $battleData['weapons_slot_data'] : array(); + if (array_key_exists($taskMate['condition'],$slotData)){ + $val = $slotData[$taskMate['condition']]; + } + return $val; + } + +//-----------------------以下弃用--------------------------- const NONE_STATE = 0; const RECEIVED_STATE = 1; const EXCHANGE_RATE = 10; + //弃用 public function getCrystalDto($crystalMeta,&$crystalDto){ $crystalDto = array( 'item_id' => $crystalMeta['id'], @@ -107,6 +262,7 @@ class HashRateService extends BaseService } } + //弃用 public function getCrystalValue(){ $chaimNum = 0; $playing = array(); diff --git a/webapp/services/TameBattleDataService.php b/webapp/services/TameBattleDataService.php index ec8d308c..b2518907 100644 --- a/webapp/services/TameBattleDataService.php +++ b/webapp/services/TameBattleDataService.php @@ -16,6 +16,7 @@ require_once('mt/PveGeminiMode.php'); require_once('mt/RankSeason.php'); require_once('mt/LevelUp.php'); require_once('mt/StarLevel.php'); +require_once('mt/AchievementsCycle.php'); require_once('models/Season.php'); require_once('models/Battle.php'); @@ -32,6 +33,7 @@ require_once('models/FragmentRecord.php'); require_once('models/BattleSettlement.php'); require_once('models/RankBattle.php'); require_once('models/HashRateTask.php'); +require_once('models/HashRateBattleData.php'); require_once('services/RankActivityService.php'); require_once('services/FormulaService.php'); @@ -54,6 +56,7 @@ use phpcommon; use phpcommon\SqlHelper; use models\Season; use models\Battle; +use models\HashRateBattleData; use models\Bag; use models\Hero; use models\Gun; @@ -69,6 +72,7 @@ class TameBattleDataService extends BaseService { const ROOM_MODE_PVP = 0; const ROOM_MODE_PVE = 1; + const ROOM_MODE_MOBA = 2; const MATCH_MODE_PVP = 0; const MATCH_MODE_RANK = 1; @@ -115,7 +119,7 @@ class TameBattleDataService extends BaseService { } //记录算力系统有效行为 - $this->_addHashRateTask(); + $this->_updateHashRateData(); switch ($matchMode) { //PVP模式 @@ -1221,20 +1225,81 @@ class TameBattleDataService extends BaseService { $battleData[$key] = max(getXVal($battleData, $key, 0), $val); } - private function _addHashRateTask(){ + private function _updateHashRateData(){ error_log("_addHashRateTask"); - //击杀 - HashRateTask::incRecordNum(HashRateTask::KILL_TYPE,getXVal($this->battleInfo,'kills', 0)); - //存活时间、战斗时长 - HashRateTask::incRecordNum(HashRateTask::BATTLE_TIME_TYPE,getXVal($this->battleInfo,'alive_time', 0)); - //吃鸡、4v4吃鸡 - $ranked = getXVal($this->battleInfo,'pvp_team_rank', 0); - if ($ranked == 1){ - HashRateTask::incRecordNum(HashRateTask::BATTLE_WIN_TYPE,1); -// HashRateTask::incRecordNum(HashRateTask::VS_FOUR_BATTLE_WIN_TYPE,1); + $hisBattleData = HashRateBattleData::getMyBattleData(); + $currentPeriod= \mt\AchievementsCycle::getCurrentPeriod(); + if (!isset($hisBattleData['data'])) { + $hisBattleData['data'] = array( + 'pvpData' => array(), + 'mobaData' => array(), + 'createtime' => myself()->_getNowTime(), + 'modifytime' => myself()->_getNowTime() + ); } - //承伤 - HashRateTask::incRecordNum(HashRateTask::DAMAGE_TYPE,getXVal($this->battleInfo,'damage_in', 0)); + if (myself()->_getDaySeconds($hisBattleData['data']['modifytime']) < + myself()->_getDaySeconds($currentPeriod['obtain_end_time'])) { + $hisBattleData['data'] = array( + 'pvpData' => array(), + 'mobaData' => array(), + 'createtime' => $hisBattleData['data']['createtime'], + 'modifytime' => myself()->_getNowTime() + ); + } + if ($currentPeriod && $currentPeriod['obtain_end_time'] > myself()->_getNowTime()){ + switch (getXVal($this->allInfo,'room_mode', 0)){ + case self::MATCH_MODE_PVP :{ + $this->applyEx($hisBattleData['data']['pvpData']); + } + break; + case self::ROOM_MODE_MOBA :{ + $this->applyEx($hisBattleData['data']['mobaData']); + } + break; + default:{ + + } + break; + } + $hisBattleData['data']['modifytime'] = myself()->_getNowTime(); + } + HashRateBattleData::add(json_encode($hisBattleData)); + } + + private function applyEx(&$battleData) + { + //战斗次数 + $this->incValue($battleData, 'total_battle_times', 1); + //排名 + $ranked = 0; + switch (getXVal($this->allInfo,'room_mode', 0)){ + case self::MATCH_MODE_PVP :{ + $ranked = getXVal($this->battleInfo,'pvp_team_rank', 0); + if ($ranked == 40){ + $this->incValue($battleData, 'total_last_runner_times', 1); + } + //救援次数 + $this->incValue($battleData, 'total_rescue_times', getXVal($this->battleInfo,'rescue_teammate_times', 0)); + + } + break; + case self::ROOM_MODE_MOBA :{ + /* + 排名 + 几分钟结束战斗 + 第一个升满级 + */ + } + break; + } + if ($ranked == 1){ + $this->incValue($battleData, 'total_win_times', 1); + } + //击杀 + $kills = getXVal($this->battleInfo,'kills', 0); + $this->incValue($battleData, 'total_kills_times', $kills); + //道具使用 + $this->procWeaponsSlot($battleData); } } \ No newline at end of file