game2005api/webapp/controller/NTaskController.class.php
aozhiwei b8bb70a77f 1
2021-06-18 22:23:50 +08:00

468 lines
17 KiB
PHP

<?php
require_once('mt/Task.php');
require_once('mt/Parameter.php');
require_once 'metatable/drop.php';
class NTaskController extends BaseAuthedController {
public $m_testCnt = 0;
public function getGunInfo()
{
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM gun_intensify WHERE accountid=:accountid; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id));
if($row) {
error_log("GunTest3======");
}
else{
error_log("GunTest4=======");
}
$this->sendDataToClient(0,"test02",$row);
}
public function test()
{
error_log("testController====".$this->m_testCnt);
$this->m_testCnt ++;
}
public function updateLogin()//更新登录任务
{
}
public function getRewardState($_num)
{
$g = $_num % 10;
$s = floor(($_num % 100)/10);
$b = floor(($_num % 1000)/100);
$q = floor(($_num % 10000)/1000);
$w = floor(($_num % 100000)/10000);
$listArr = array();
array_push($listArr,$g);
array_push($listArr,$s);
array_push($listArr,$b);
array_push($listArr,$q);
array_push($listArr,$w);
return $listArr;
}
public function getLvTastRewardByTaskID()//领取玩家等级成长任务奖励
{
$code = 100;
$account_id = $_REQUEST['account_id'];
$taskID = $_REQUEST['id'];
$taskCfg = mt\Task::getTaskCfgByID($taskID);
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT lv FROM user WHERE accountid=:accountid;";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id));
$playerLv = 0;
$itemList = array();
$resultArr = array();
array_push($resultArr,array("taskID"=>$taskID));
if($row)
{
$playerLv = $row[0]["lv"];
}
else
{
$code = 99;//玩家不存在
}
$playerLv = 7;
if($code == 100)
{
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id; ";
$row2 = $conn->execQuery($sqlStr,array(':accountid' => $account_id,':quest_id' => $taskID));
if(!$row2)
{
$lvLimit = $taskCfg["value"];
if($playerLv >= $lvLimit)
{
$dropID = $taskCfg["reward_dropid"];
$dropItemArr = metatable\getDropListById($dropID);
$dropItemLen = count($dropItemArr);
$dropList = array();
for($j = 0; $j < $dropItemLen ; $j++)
{
$itemID = $dropItemArr[$j]["item_id"];
$itemNum = $dropItemArr[$j]["item_num"];
$item = array("item_id"=>$itemID,"item_num"=>$itemNum);
if($itemID == Daily_AP_ID)
{
error_log("我是每日活跃度ID=====".$itemID."==".$itemNum);
$this->updateActivePointTODB(999,$itemNum,0);
}
else if($itemID == WEEK_AP_ID)
{
$this->updateActivePointTODB(998,$itemNum,0);
error_log("我是周活跃度ID=====".$itemID."==".$itemNum);
}
else
{
array_push($itemList,$item);
}
array_push($resultArr,$item);
}
}
else
{
$code = 97;//等级不足
}
//
}
else
{
$code = 98;//奖励已经领取
}
}
if($code == 100)
{
$itemLen = count($itemList);
if($itemLen >0 )
{
$this->addItem($itemList);
}
$this->InsertTaskType($taskID,$taskCfg["type"],0);
}
error_log("PlayerLv=====".$playerLv);
$this->sendDataToClient($code,"GetPlayerLvTaskReward",$resultArr);
}
public function getRewardByTaskID()//领取任务奖励
{
$code = 100;
$account_id = $_REQUEST['account_id'];
$taskID = $_REQUEST['id'];
$tmpIndex = $_REQUEST["rewardIndex"];
$taskCfg = mt\Task::getTaskCfgByID($taskID);
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id,':quest_id' => $taskID));
$itemList = array();
$resultArr = array();
array_push($resultArr,array("taskID"=>$taskID,"index"=>$tmpIndex));
$rewardState = 0;//未领取奖励状态
error_log("准备领取奖励测试======".$taskID."==".json_encode($row));
if($row)
{
$rewardState = $row[0]["quest_state"];//重新赋值是否领取了奖励
$isGet = 0;//是否领取了奖励
$listArr = [];
$maxNum = 0;
$dropID = 0;
if($taskID >=900 && $taskID < 1000)
{
$targetLimitID = 0;
$targetDropID = 0;
$stateNum = $rewardState;
if($taskID == 999)
{
$targetLimitID = 208;
$targetDropID = 209;
}
else if($taskID == 998)
{
$targetLimitID = 210;
$targetDropID = 211;
}
if($stateNum <= 0)
{
$stateNum = 1000000;
}
$listArr = $this->getRewardState($stateNum);
$limitCfg = mt\Parameter::getParameterCfgByID($targetLimitID);
$dropIDCfg = mt\Parameter::getParameterCfgByID($targetDropID);
$limitStr = $limitCfg["param_value"];
$limitStrArr = explode("|",$limitStr);
$dropIDStr = $dropIDCfg["param_value"];
$dropIDStrArr = explode("|",$dropIDStr);
$dropID = $dropIDStrArr[$tmpIndex - 1];
$maxNum = $limitStrArr[$tmpIndex - 1];
$tmpState = $listArr[$tmpIndex - 1];
if($tmpState >= 1)
{
$isGet = 1;//奖励已经领取
}
else
{
$listArr[$tmpIndex - 1] = 1;
}
$listLen = count($listArr);
$newState = "10";
for($i = $listLen -1;$i >=0;$i--)
{
$newState = $newState."".$listArr[$i];
}
$rewardState = $newState;
error_log("配置信息======".$maxNum."==".$dropID."==".json_encode($listArr)."==".$newState);
}
else
{
$maxNum = $taskCfg["value"];
$dropID = $taskCfg["reward_dropid"];
$isGet = $rewardState;
$rewardState = 1;
}
if($isGet == 0)//未领取奖励
{
$curNum = $row[0]["quest_num"];
if($curNum >= $maxNum)
{
$dropItemArr = metatable\getDropListById($dropID);
$dropItemLen = count($dropItemArr);
$dropList = array();
for($j = 0; $j < $dropItemLen ; $j++)
{
$itemID = $dropItemArr[$j]["item_id"];
$itemNum = $dropItemArr[$j]["item_num"];
$item = array("item_id"=>$itemID,"item_num"=>$itemNum);
if($itemID == Daily_AP_ID)
{
error_log("我是每日活跃度ID=====".$itemID."==".$itemNum);
$this->updateActivePointTODB(999,$itemNum,0);
}
else if($itemID == WEEK_AP_ID)
{
$this->updateActivePointTODB(998,$itemNum,0);
error_log("我是周活跃度ID=====".$itemID."==".$itemNum);
}
else
{
array_push($itemList,$item);
}
array_push($resultArr,$item);
}
}
else
{
$code = 92;//条件不足领取奖励
}
}
else//已经领取了奖励
{
$code = 91;//j奖励已经领取
}
}
else
{
$code = 90;//任务不存在
}
if($code == 100)
{
$itemLen = count($itemList);
if($itemLen >0 )
{
$this->addItem($itemList);
}
$this->updateActivePointTODB($taskID,0,$rewardState);
}
$this->sendDataToClient($code,"GetRewardFromTask",$resultArr);
//error_log("准备领取奖励=====".json_encode($_REQUEST)."==".$taskID);
}
//更新日活跃和周活跃分数
public function updateActivePointTODB($_questID,$_questNum,$_rewardState)
{
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id,':quest_id' => $_questID));
$nowSeconds = $this->getNowTime();
$nextDaySeconds = phpcommon\getNextDaySeconds($nowSeconds);
$nextWeekSeconds = phpcommon\getMondaySeconds($nowSeconds);
$weekDeadLine = ($nextWeekSeconds + 86400*7);
$rewardState = 0;
$modifyTime = 0;
$taskNum = 0 ;
if($row) {
$item = $row[0];
$taskNum = $item["quest_num"];
$taskCondition = $item["quest_type"];
$rewardState = $item["quest_state"];
$modifyTime = $item["modify_time"];
if($taskCondition == 1 || $taskCondition == 99)//每日任务 周活跃奖励
{
if($nowSeconds >= $modifyTime)//是否过期
{
$rewardState = 0;
$modifyTime = $nextDaySeconds;
if($taskCondition == 99)
{
$modifyTime = $weekDeadLine;
}
$taskNum = $_questNum;
}
else
{
$taskNum = $taskNum + $_questNum;
$rewardState = $_rewardState;
}
}
phpcommon\SqlHelper::update
($this->getSelfMysql(),
'quest',
array(
'accountid' => $this->getAccountId(),
'quest_id' => $_questID
),
array(
'quest_num' =>$taskNum,
"quest_state" =>$rewardState,
'modify_time' => $modifyTime
)
);
}
else{
error_log("questInfo2=======");
}
}
public function updateTaskToDB($_questID,$_questNum)
{
$taskCfg = mt\Task::getTaskCfgByID($_questID);
$taskType = $taskCfg["type"];
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id; ";
//$sqlStr = "SELECT * FROM quest WHERE quest_id=:quest_id; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id,':quest_id' => $_questID));
//$row = $conn->execQuery($sqlStr,array(':quest_id' => $_questID));
$questNum = 0;
$nowSeconds = phpcommon\getNowTime();
$nextDaySeconds = phpcommon\getNextDaySeconds($nowSeconds);
$nowTime = $this->getNowTime();
$modifyTime = 0;
$getReward = 0 ;
if($row) {
$modifyTime = $row[0]["modify_time"];
$getReward = $row[0]["quest_state"];
if($nowTime >= $modifyTime)
{
$getReward = 0;//第二天 数据恢复
$questNum = $_questNum;
$modifyTime = $nextDaySeconds;
}
else
{
$questNum = $row[0]["quest_num"] + $_questNum;
}
}
else{
$modifyTime = $nextDaySeconds;
$questNum = $_questNum;
}
//quest_state = 奖励是否领取
phpcommon\SqlHelper::insertOrUpdate
($this->getSelfMysql(),
'quest',
array(
'accountid' => $account_id,
'quest_id' => $_questID
),
array(
'accountid' => $account_id,
'quest_id' => $_questID,
'quest_num' =>$questNum,
'quest_type' =>$taskType,
'quest_state' =>0,
'create_time' => $this->getNowTime(),
'modify_time' => $modifyTime
),
array(
'quest_num' => $questNum,
'quest_state' =>$getReward,
'modify_time' => $modifyTime
)
);
}
public function getAllTaskInfo()
{
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
$nowSeconds = $this->getNowTime();
$nextDaySeconds = phpcommon\getNextDaySeconds($nowSeconds);
$nextWeekSeconds = phpcommon\getMondaySeconds($nowSeconds);
$weekDeadLine = ($nextWeekSeconds + 86400*7);
//插入今日活跃度任务开始--
$this->InsertTaskType(999,1,$nextDaySeconds);
//插入今日活跃度任务结束--
//插入每周活跃度任务开始--
$this->InsertTaskType(998,99,$weekDeadLine);
//插入每周活跃度任务结束--
$resultArr = array();
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id));
if($row) {
foreach($row as $item)
{
$taskID = $item["quest_id"];
$taskNum = $item["quest_num"];
$rewardState = $item["quest_state"];
$taskCondition = $item["quest_type"];
$modifyTime = $item["modify_time"];
if($taskCondition == 1 || $taskCondition == 99)//每日任务 周活跃奖励
{
if($nowSeconds >= $modifyTime)
{
$rewardState = 0;
$modifyTime = $nextDaySeconds;
if($taskCondition == 99)
{
$modifyTime = $weekDeadLine;
}
$taskNum = 0;
error_log("重置======".$nowSeconds."==".$modifyTime);
}
}
$tmpData = array("id"=>$taskID,"num"=>$taskNum,"rewardState"=>$rewardState,"condition"=>$taskCondition,"modifyTime"=>$modifyTime);
array_push($resultArr,$tmpData);
}
}
else{
error_log("questInfo2=======");
}
$this->sendDataToClient(100,"getAllTaskInfo",$resultArr);
}
public function InsertTaskType($questID,$dailyType,$deadline)
{
$nowSeconds = $this->getNowTime();
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
$sqlStr = "SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id; ";
$row = $conn->execQuery($sqlStr,array(':accountid' => $account_id,':quest_id' => $questID));
if($row)
{
}
else//不存在插入
{
$sqlStr ='INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_state, create_time, modify_time) ' .
' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_state, :create_time, :modify_time) ';
$params = array(
':accountid' => $account_id,
':quest_id' => $questID,
':quest_num' => 0,
':quest_type' => $dailyType,
':quest_state'=> 1000000,
':create_time' => $nowSeconds,
':modify_time' => $deadline
);
$ret = $conn->execScript($sqlStr,$params);
if (!$ret) {
die();
return;
}
}
}
}