算力功能修改

This commit is contained in:
hujiabin 2024-08-05 16:25:29 +08:00
parent a80c0eb249
commit 4075c6d2bc
11 changed files with 301 additions and 134 deletions

View File

@ -455,7 +455,8 @@ class BaseAuthedController extends BaseController {
$this->_updateUserInfo($fieldsKv); $this->_updateUserInfo($fieldsKv);
$this->_incDailyV(TN_DAILY_USED_GOLD_NUM, 0, $itemNum); $this->_incDailyV(TN_DAILY_USED_GOLD_NUM, 0, $itemNum);
$this->_incPeriodV(TN_HASH_RATE_GOLD_CONSUME, 0, $itemNum); // $this->_incPeriodV(TN_HASH_RATE_GOLD_CONSUME, 0, $itemNum);
myself()->_fireEvent('HashRate','onSpendGold',$itemNum);
} }
break; break;
case V_ITEM_DIAMOND: case V_ITEM_DIAMOND:

View File

@ -183,6 +183,7 @@ class BattleController extends BaseAuthedController {
$teamBattleDataService->addBattleSettlementTeam(); $teamBattleDataService->addBattleSettlementTeam();
foreach ($teamData['members'] as $member){ foreach ($teamData['members'] as $member){
$member['pvp_team_rank'] = getXVal($teamData,'pvp_team_rank', 0); $member['pvp_team_rank'] = getXVal($teamData,'pvp_team_rank', 0);
$member['victory'] = getXVal($teamData,'victory', 0);
if ($member['account_id'] && !myself()->_isAndroidAccountId($member['account_id'])){ if ($member['account_id'] && !myself()->_isAndroidAccountId($member['account_id'])){
$this->switchAccount($member['account_id']); $this->switchAccount($member['account_id']);
$teamBattleDataService->battleInfo = $member; $teamBattleDataService->battleInfo = $member;

View File

@ -173,7 +173,8 @@ class ChipController extends BaseAuthedController
'modifytime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(),
)); ));
} }
$this->_incPeriodV(TN_HASH_RATE_UP_CHIP_TIMES, 0, 1); // $this->_incPeriodV(TN_HASH_RATE_UP_CHIP_TIMES, 0, 1);
myself()->_fireEvent('HashRate','onUpLvChip');
$propertyChgService->addChip(); $propertyChgService->addChip();
$hashChance = \mt\Manufacture::hashChance($manufactureMeta['chance']); $hashChance = \mt\Manufacture::hashChance($manufactureMeta['chance']);
$weight = $hashChance[0]; $weight = $hashChance[0];
@ -251,7 +252,8 @@ class ChipController extends BaseAuthedController
$this->_addItems($items,$awardService,$propertyChgService); $this->_addItems($items,$awardService,$propertyChgService);
} }
$propertyChgService->addChip(); $propertyChgService->addChip();
$this->_incPeriodV(TN_HASH_RATE_SYN_CHIP_TIMES, 0, $number); // $this->_incPeriodV(TN_HASH_RATE_SYN_CHIP_TIMES, 0, $number);
myself()->_fireEvent('HashRate','onSynChip',$number);
$event = array( $event = array(
'ID' => 'chip', 'ID' => 'chip',
'SUB_ID' => 'synthesis', 'SUB_ID' => 'synthesis',

View File

@ -32,10 +32,11 @@ class HashRateController extends BaseAuthedController
$goldRate = 0; $goldRate = 0;
$currentPeriod= \mt\AchievementsCycle::getCurrentPeriod(); $currentPeriod= \mt\AchievementsCycle::getCurrentPeriod();
if ($currentPeriod){ if ($currentPeriod){
$mateList = \mt\AchievementsPower::getCustomTypeMetaList($type,$this->hashRateService); // $mateList = \mt\AchievementsPower::getCustomTypeMetaList($type,$this->hashRateService);
foreach ($mateList as $mate) { $taskList = $this->hashRateService->getHashRateTasks($type);
$taskDb = HashRate::find($mate['id'],$currentPeriod['id']); foreach ($taskList as $task) {
$taskDto = $this->hashRateService->hashRateTaskDto($mate,$taskDb,$currentPeriod['id']); $taskDb = HashRate::find($task['task_id'],$currentPeriod['id']);
$taskDto = $this->hashRateService->hashRateTaskDto($task,$taskDb,$currentPeriod['id']);
array_push($taskDtoList1, $taskDto); array_push($taskDtoList1, $taskDto);
} }
$mateList2 = \mt\AchievementsPower::getListByType(\mt\AchievementsPower::TYPE5); $mateList2 = \mt\AchievementsPower::getListByType(\mt\AchievementsPower::TYPE5);
@ -90,8 +91,14 @@ class HashRateController extends BaseAuthedController
$this->_rspErr(1, 'task_id error'); $this->_rspErr(1, 'task_id error');
return; return;
} }
$taskList = $this->hashRateService->getHashRateTasks($taskMeta['task_type']);
$taskDto = null;
foreach ($taskList as $task){
if ($task['task_id'] == $taskId){
$taskDb = HashRate::find($taskMeta['id'],$currentPeriod['id']); $taskDb = HashRate::find($taskMeta['id'],$currentPeriod['id']);
$taskDto = $this->hashRateService->hashRateTaskDto($taskMeta,$taskDb,$currentPeriod['id']); $taskDto = $this->hashRateService->hashRateTaskDto($task,$taskDb,$currentPeriod['id']);
}
}
if (!$taskDto) { if (!$taskDto) {
$this->_rspErr(10, 'server internal error'); $this->_rspErr(10, 'server internal error');

View File

@ -110,7 +110,8 @@ class HeroController extends BaseAuthedController {
Hero::addSyntheticHero($heroMeta,2); Hero::addSyntheticHero($heroMeta,2);
} }
$propertyChgService->addHeroChg(); $propertyChgService->addHeroChg();
$this->_incPeriodV(TN_HASH_RATE_SYN_HERO_TIMES, 0, $number); // $this->_incPeriodV(TN_HASH_RATE_SYN_HERO_TIMES, 0, $number);
myself()->_fireEvent('HashRate','onSynHero',$number);
$event = array( $event = array(
'ID' => 'hero', 'ID' => 'hero',
'SUB_ID' => 'synthesis', 'SUB_ID' => 'synthesis',
@ -187,7 +188,8 @@ class HeroController extends BaseAuthedController {
} }
//消耗材料 //消耗材料
$this->_decItems($costItems); $this->_decItems($costItems);
$this->_incPeriodV(TN_HASH_RATE_UP_HERO_TIMES, 0, 1); // $this->_incPeriodV(TN_HASH_RATE_UP_HERO_TIMES, 0, 1);
myself()->_fireEvent('HashRate','onUpLvHero');
$propertyChgService = new services\PropertyChgService(); $propertyChgService = new services\PropertyChgService();
$propertyChgService->addBagChg(); $propertyChgService->addBagChg();
$propertyChgService->addUserChg(); $propertyChgService->addUserChg();
@ -214,6 +216,9 @@ class HeroController extends BaseAuthedController {
$basicMeta = mt\BattleBasicAttribute::get($heroDb['hero_id']); $basicMeta = mt\BattleBasicAttribute::get($heroDb['hero_id']);
$randMeta = mt\BattleRandAttribute::getByWeight($basicMeta['randomAttribute_Default'],$heroDb['quality'] + 1); $randMeta = mt\BattleRandAttribute::getByWeight($basicMeta['randomAttribute_Default'],$heroDb['quality'] + 1);
$attr = mt\BattleRandAttribute::getRandAttr($randMeta); $attr = mt\BattleRandAttribute::getRandAttr($randMeta);
foreach ($attr as $key=>$value){
$attr[$key]['new_attr'] = 1;
}
$newAttr = array_merge($randAttr,$attr); $newAttr = array_merge($randAttr,$attr);
$fieldsKv['rand_attr'] = json_encode($newAttr); $fieldsKv['rand_attr'] = json_encode($newAttr);
} }

View File

@ -226,7 +226,8 @@ class HeroSkinController extends BaseAuthedController {
HeroSkin::addSkin($skinMeta); HeroSkin::addSkin($skinMeta);
} }
$propertyChgService->addHeroSkinChg(); $propertyChgService->addHeroSkinChg();
$this->_incPeriodV(TN_HASH_RATE_SYN_SKIN_TIMES, 0, $number); // $this->_incPeriodV(TN_HASH_RATE_SYN_SKIN_TIMES, 0, $number);
myself()->_fireEvent('HashRate','onSynSkin',$number);
$event = array( $event = array(
'ID' => 'heroSkin', 'ID' => 'heroSkin',
'SUB_ID' => 'synthesis', 'SUB_ID' => 'synthesis',

View File

@ -204,7 +204,7 @@ class InGameMallController extends BaseAuthedController {
switch ($itemMeta['type']){ switch ($itemMeta['type']){
case \mt\Item::HERO_SKIN_TYPE : { case \mt\Item::HERO_SKIN_TYPE : {
$skinDb = HeroSkin::find($goodsUniid); $skinDb = HeroSkin::find($goodsUniid);
if (!$skinDb){ if (!$skinDb || $skinDb['used'] == HeroSkin::USED){
$this->_rspErr(1, 'param goods_unnid error'); $this->_rspErr(1, 'param goods_unnid error');
return; return;
} }

View File

@ -8,6 +8,7 @@ class Battle
public static function onSettlement($battleData) public static function onSettlement($battleData)
{ {
//触发(调用)对应对该事件感兴趣的模块 //触发(调用)对应对该事件感兴趣的模块
myself()->_callServiceStatic('HashRateService', 'onBattleSettele', $battleData);
//myself()->_callServiceStatic('A', 'f1', $battleData); //myself()->_callServiceStatic('A', 'f1', $battleData);
//myself()->_callServiceStatic('B', 'f1', $battleData); //myself()->_callServiceStatic('B', 'f1', $battleData);
echo json_encode($battleData); echo json_encode($battleData);

View File

@ -0,0 +1,57 @@
<?php
namespace events;
require_once('models/BigData.php');
require_once('mt/AchievementsPower.php');
use models\BigData;
use mt\AchievementsPower;
class HashRate
{
public static function onSpendGold($goldNum){
self::_updateTaskSchedule(AchievementsPower::SPEND_GOLD,$goldNum);
}
public static function onSynHero($number){
self::_updateTaskSchedule(AchievementsPower::SYN_HERO,$number);
}
public static function onSynChip($number){
self::_updateTaskSchedule(AchievementsPower::SYN_CHIP,$number);
}
public static function onSynSkin($number){
self::_updateTaskSchedule(AchievementsPower::SYN_SKIN,$number);
}
public static function onUpLvHero(){
self::_updateTaskSchedule(AchievementsPower::UP_HERO,1);
}
public static function onUpLvChip(){
self::_updateTaskSchedule(AchievementsPower::UP_CHIP,1);
}
private static function _updateTaskSchedule($completionType,$number){
$tasks = BigData::getData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE);
foreach ($tasks['task3'] as &$task){
$meta = AchievementsPower::find($task['task_id']);
if ($meta['Completion_type'] == $completionType){
$task['current'] += $number;
}
}
foreach ($tasks['task4'] as &$task){
$meta = AchievementsPower::find($task['task_id']);
if ($meta['Completion_type'] == $completionType){
$task['current'] += $number;
}
}
BigData::setData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE,
json_encode($tasks));
}
}

View File

@ -6,9 +6,11 @@ require_once('mt/AchievementsCycle.php');
require_once('mt/AchievementsPower.php'); require_once('mt/AchievementsPower.php');
require_once('mt/ServerTask.php'); require_once('mt/ServerTask.php');
require_once('mt/ServerTaskTime.php'); require_once('mt/ServerTaskTime.php');
require_once('mt/Equip.php');
require_once('models/BigData.php'); require_once('models/BigData.php');
require_once('models/Hero.php'); require_once('models/Hero.php');
require_once('models/Chip.php');
require_once('models/HashRate.php'); require_once('models/HashRate.php');
require_once('models/HashRateBattleData.php'); require_once('models/HashRateBattleData.php');
require_once('models/GlobalData.php'); require_once('models/GlobalData.php');
@ -17,9 +19,11 @@ use models\GlobalData;
use models\HashRateBattleData; use models\HashRateBattleData;
use models\HashRate; use models\HashRate;
use models\Hero; use models\Hero;
use models\Chip;
use models\BigData; use models\BigData;
use mt\AchievementsCycle; use mt\AchievementsCycle;
use mt\AchievementsPower; use mt\AchievementsPower;
use mt\Equip;
class HashRateService extends BaseService class HashRateService extends BaseService
{ {
@ -39,7 +43,7 @@ class HashRateService extends BaseService
public function init() public function init()
{ {
//------------------------算力系统------------------------ //------------------------算力系统------------------------
$this->hisBattleData = HashRateBattleData::getMyBattleData(); /* $this->hisBattleData = HashRateBattleData::getMyBattleData();
$this->hashRateData = getXVal($this->hisBattleData, 'hash_rate_data', array()); $this->hashRateData = getXVal($this->hisBattleData, 'hash_rate_data', array());
if (!$this->hashRateData){ if (!$this->hashRateData){
$this->hashRateData = array( $this->hashRateData = array(
@ -59,7 +63,7 @@ class HashRateService extends BaseService
); );
} }
$this->pvpBattleData = $this->hashRateData['pvpData']; $this->pvpBattleData = $this->hashRateData['pvpData'];
$this->mobaBattleData = $this->hashRateData['mobaData']; $this->mobaBattleData = $this->hashRateData['mobaData']; */
$this->hashRateTask = BigData::getData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE); $this->hashRateTask = BigData::getData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE);
if (!$this->hashRateTask) { if (!$this->hashRateTask) {
$this->hashRateTask = array( $this->hashRateTask = array(
@ -71,6 +75,7 @@ class HashRateService extends BaseService
'initTime' => 0 'initTime' => 0
); );
} }
$currentPeriod= \mt\AchievementsCycle::getCurrentPeriod();
if ($currentPeriod && $currentPeriod['id'] != $this->hashRateTask['currentPeriod']){ if ($currentPeriod && $currentPeriod['id'] != $this->hashRateTask['currentPeriod']){
$this->initHashRateTask($currentPeriod['id']); $this->initHashRateTask($currentPeriod['id']);
} }
@ -97,10 +102,14 @@ class HashRateService extends BaseService
public function hashRateTaskDto($taskMate, $taskDb,$period){ public function hashRateTaskDto($task, $taskDb,$period){
$taskMate = AchievementsPower::find($task['task_id']);
if (!$taskMate){
return ;
}
$taskDto = array( $taskDto = array(
'task_id' => $taskMate['id'], 'task_id' => $taskMate['id'],
'current' => 0, 'current' => $task['current'],
'target' => getXVal($taskMate, 'Completed_quantity', 1), 'target' => getXVal($taskMate, 'Completed_quantity', 1),
'state' => self::NOT_FINISHED_STATE, 'state' => self::NOT_FINISHED_STATE,
); );
@ -120,59 +129,59 @@ class HashRateService extends BaseService
} }
switch ($taskMate['Completion_type']){ switch ($taskMate['Completion_type']){
//吃鸡或4v4获得胜利 // //吃鸡或4v4获得胜利
case \mt\AchievementsPower::TOTAL_WINS_TIMES : { // case \mt\AchievementsPower::TOTAL_WINS_TIMES : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_win_times'); // 'total_win_times');
} // }
break; // break;
//击杀人数 // //击杀人数
case \mt\AchievementsPower::TOTAL_KILL_TIMES : { // case \mt\AchievementsPower::TOTAL_KILL_TIMES : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_kills_times'); // 'total_kills_times');
} // }
break; // break;
//使用X道具 // //使用X道具
case \mt\AchievementsPower::USE_ITEM_TIMES : { // case \mt\AchievementsPower::USE_ITEM_TIMES : {
$taskDto['current'] = $this->getWeaponsSlotData($taskMate); // $taskDto['current'] = $this->getWeaponsSlotData($taskMate);
} // }
break; // break;
//X分钟内结束比赛 // //X分钟内结束比赛
case \mt\AchievementsPower::NOMINAL_TIME_BATTLE_END : { // case \mt\AchievementsPower::NOMINAL_TIME_BATTLE_END : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_fiveMin_times'); // 'total_fiveMin_times');
} // }
break; // break;
//在局内升级最快次数 // //在局内升级最快次数
case \mt\AchievementsPower::IN_BATTLE_UP_LV : { // case \mt\AchievementsPower::IN_BATTLE_UP_LV : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_first_Lv_up'); // 'total_first_Lv_up');
} // }
break; // break;
//游戏场次 // //游戏场次
case \mt\AchievementsPower::TOTAL_BATTLE_TIMES : { // case \mt\AchievementsPower::TOTAL_BATTLE_TIMES : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_battle_times'); // 'total_battle_times');
} // }
break; // break;
//最后一名次数 // //最后一名次数
case \mt\AchievementsPower::TOTAL_LAST_RUNNER : { // case \mt\AchievementsPower::TOTAL_LAST_RUNNER : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_last_runner_times'); // 'total_last_runner_times');
} // }
break; // break;
//救援队友数 // //救援队友数
case \mt\AchievementsPower::RESCUE_TEAMMATE_TIMES : { // case \mt\AchievementsPower::RESCUE_TEAMMATE_TIMES : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_rescue_times'); // 'total_rescue_times');
} // }
break; // break;
//累计行走距离(米) // //累计行走距离(米)
case \mt\AchievementsPower::WALKING_DISTANCE : { // case \mt\AchievementsPower::WALKING_DISTANCE : {
$taskDto['current'] = $this->getBattleData($taskMate, // $taskDto['current'] = $this->getBattleData($taskMate,
'total_walking_distance'); // 'total_walking_distance');
} // }
break; // break;
//指定英雄升阶数 //指定英雄升阶数
case \mt\AchievementsPower::HERO_UP_QUALITY : { case \mt\AchievementsPower::HERO_UP_QUALITY : {
$state = false; $state = false;
@ -199,7 +208,13 @@ class HashRateService extends BaseService
break; break;
//拥有芯片nft数 //拥有芯片nft数
case \mt\AchievementsPower::OWN_CHIP_NFT_NUM : { case \mt\AchievementsPower::OWN_CHIP_NFT_NUM : {
//....../ $chipNftCount = 0;
Chip::getChipList(function ($row) use (&$chipNftCount){
if ($row['token_id']){
$chipNftCount += 1;
}
});
$taskDto['current'] = $chipNftCount;
} }
break; break;
//拥有金币数 //拥有金币数
@ -215,73 +230,60 @@ class HashRateService extends BaseService
break; break;
//花费钻石数 //花费钻石数
case \mt\AchievementsPower::SPEND_DIAMOND : { case \mt\AchievementsPower::SPEND_DIAMOND : {
$meta = AchievementsCycle::find($period);
if ($meta) {
$obtain_start_time = strtotime($meta['obtain_start_time']);
$income_end_time = strtotime($meta['income_end_time']);
$row = myself()->_getSelfMysql()->execQueryOne( $row = myself()->_getSelfMysql()->execQueryOne(
'SELECT SUM(amount) FROM t_diamond_consume_product WHERE (account_id=:account_id OR passport_address=:address) AND type=:type AND createtime BETWEEN :star_time AND :end_time', 'SELECT SUM(amount) FROM t_diamond_consume_product WHERE (account_id=:account_id OR passport_address=:address) AND type=:type AND createtime > :star_time',
array( array(
':account' => myself()->_getAccountId(), ':account' => myself()->_getAccountId(),
':address' => 1, ':address' => 1,
':type' => 0, ':type' => 0,
':star_time' => $obtain_start_time, ':star_time' => $task['createtime'],
':end_time' => $income_end_time,
) )
); );
$taskDto['current'] = $row[0]; $taskDto['current'] = $row[0];
} }
} // break;
break; // //消耗金币
//消耗金币 // case \mt\AchievementsPower::SPEND_GOLD : {
case \mt\AchievementsPower::SPEND_GOLD : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_GOLD_CONSUME, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_GOLD_CONSUME, 0); // }
} // break;
break; // //合成英雄
//合成英雄 // case \mt\AchievementsPower::SYN_HERO : {
case \mt\AchievementsPower::SYN_HERO : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_HERO_TIMES, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_HERO_TIMES, 0); // }
} // break;
break; // //合成芯片
//合成芯片 // case \mt\AchievementsPower::SYN_CHIP : {
case \mt\AchievementsPower::SYN_CHIP : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_CHIP_TIMES, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_CHIP_TIMES, 0); // }
} // break;
break; // //合成皮肤
//合成皮肤 // case \mt\AchievementsPower::SYN_SKIN : {
case \mt\AchievementsPower::SYN_SKIN : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_SKIN_TIMES, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_SYN_SKIN_TIMES, 0); // }
} // break;
break; // //升阶英雄
//升阶英雄 // case \mt\AchievementsPower::UP_HERO : {
case \mt\AchievementsPower::UP_HERO : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_UP_HERO_TIMES, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_UP_HERO_TIMES, 0); // }
} // break;
break; // //升阶芯片
//升阶芯片 // case \mt\AchievementsPower::UP_CHIP : {
case \mt\AchievementsPower::UP_CHIP : { // $taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_UP_CHIP_TIMES, 0);
$taskDto['current'] = myself()->_getPeriodV(TN_HASH_RATE_UP_CHIP_TIMES, 0); // }
}
break; break;
//合成金币卡 //合成金币卡
case \mt\AchievementsPower::SYN_GOLD_CARD : { case \mt\AchievementsPower::SYN_GOLD_CARD : {
$meta = AchievementsCycle::find($period);
if ($meta){
$obtain_start_time = strtotime($meta['obtain_start_time']);
$income_end_time = strtotime($meta['income_end_time']);
$row = myself()->_getSelfMysql()->execQueryOne( $row = myself()->_getSelfMysql()->execQueryOne(
'SELECT COUNT(*) FROM t_gold_bullion WHERE src_account_id=:account AND activated=:activated AND activate_time BETWEEN :star_time AND :end_time', 'SELECT COUNT(*) FROM t_gold_bullion WHERE src_account_id=:account AND activated=:activated AND activate_time > :star_time ',
array( array(
':account' => myself()->_getAccountId(), ':account' => myself()->_getAccountId(),
':activated' => 1, ':activated' => 1,
':star_time' => $obtain_start_time, ':star_time' => $task['createtime'],
':end_time' => $income_end_time,
) )
); );
$taskDto['current'] = $row[0]; $taskDto['current'] = $row[0];
} }
}
break; break;
//累计完成任务数 //累计完成任务数
case \mt\AchievementsPower::TOTAL_COMPLETE_NUM : { case \mt\AchievementsPower::TOTAL_COMPLETE_NUM : {
@ -351,6 +353,7 @@ class HashRateService extends BaseService
array_push($this->hashRateTask['task'.$type], array_push($this->hashRateTask['task'.$type],
array( array(
'task_id' => $meta['id'], 'task_id' => $meta['id'],
'current' => 0,
'createtime' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(),
)); ));
@ -507,4 +510,93 @@ class HashRateService extends BaseService
} }
public static function onBattleSettele($battleData)
{
//遍历已刷出的任务列表,更新战斗像相关进度
$tasks = BigData::getData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE);
if (!$tasks){
return;
}
self::_computeTaskProgress($tasks['task1'],$battleData);
self::_computeTaskProgress($tasks['task2'],$battleData);
BigData::setData(BigData::OFFER_INTEGRAL_HASHRATE_TYPE,
json_encode($tasks));
}
private static function _computeTaskProgress(&$tasks,$battleData){
foreach ($tasks as &$task){
$taskMeta = AchievementsPower::find($task['task_id']);
switch ($taskMeta['Completion_type']){
case AchievementsPower::TOTAL_WINS_TIMES : {
if (getXVal($battleData,'victory', 0)){
$task['current'] += 1;
}
}
break;
case AchievementsPower::TOTAL_KILL_TIMES : {
$task['current'] += getXVal($battleData,'kills', 0);
}
break;
case AchievementsPower::USE_ITEM_TIMES : {
$task['current'] += self::_procWeaponsSlot($battleData,$taskMeta['condition']);
}
break;
case AchievementsPower::NOMINAL_TIME_BATTLE_END : {
$duration = getXVal($battleData,'game_duration', 0);
if ($duration && floor($duration / 60) < $taskMeta['condition']){
$task['current'] += 1;
}
}
break;
case AchievementsPower::IN_BATTLE_UP_LV : {
$fullLv = getXVal($battleData,'full_level_idx', 0);
if ($fullLv == 1){
$task['current'] += 1;
}
}
break;
case AchievementsPower::TOTAL_BATTLE_TIMES : {
if (! getXVal($battleData,'is_run_away', 0)){
$task['current'] += 1;
}
}
break;
case AchievementsPower::TOTAL_LAST_RUNNER : {
$ranked = getXVal($battleData,'pvp_personal_rank', 0);
if ($ranked == 20){
$task['current'] += 1;
}
}
break;
case AchievementsPower::RESCUE_TEAMMATE_TIMES : {
$task['current'] += getXVal($battleData,'rescue_teammate_times', 0);
}
break;
case AchievementsPower::WALKING_DISTANCE : {
$task['current'] += getXVal($battleData,'move_distance', 0);
}
break;
}
}
}
private static function _procWeaponsSlot($battleData,$condition)
{
$useCount = 0;
$tmpStrs1 = explode('|', getXVal($battleData,'weapons_slot', ''));
foreach ($tmpStrs1 as $str) {
$tmpStrs2 = explode(':', $str);
if (count($tmpStrs2) >= 2) {
list($weaponId, $use_times) = $tmpStrs2;
$weaponMeta = Equip::get($weaponId);
if ($weaponMeta && $weaponMeta['inventory_slot'] > 0) {
if ( $weaponId == $condition ){
$useCount = $use_times;
}
}
}
}
return $useCount;
}
} }

View File

@ -100,7 +100,7 @@ class TameBattleDataService extends BaseService {
if (!$heroMeta) { if (!$heroMeta) {
return false; return false;
} }
myself()->_fireEvent('Battle','onSettlement',$this->battleInfo);
//记录战斗有效行为 //记录战斗有效行为
$this->_updateBattleData(); $this->_updateBattleData();
//记录战斗数据的排行榜 //记录战斗数据的排行榜