This commit is contained in:
wangwei01 2019-04-17 15:54:02 +08:00
parent 788aa477f7
commit 0474867187
5 changed files with 225 additions and 158 deletions

View File

@ -146,10 +146,6 @@ DROP TABLE IF EXISTS `quest`;
CREATE TABLE `quest` (
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`accountid` varchar(60) DEFAULT '' COMMENT '账号id',
`active_num` int(11) NOT NULL COMMENT '日活跃度',
`num_time` varchar(50) NOT NULL DEFAULT '日活跃度时间',
`active_sum` int(11) NOT NULL COMMENT '周活跃度',
`sum_time` varchar(50) NOT NULL DEFAULT '周活跃度时间',
`quest_id` int(11) NOT NULL COMMENT '任务id',
`quest_num` int(11) NOT NULL COMMENT '任务进度',
`quest_type` int(11) NOT NULL COMMENT '任务类型',
@ -158,6 +154,23 @@ CREATE TABLE `quest` (
KEY `accountid` (`accountid`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
--
-- Table structrure for table `active`
--
DROP TABLE IF EXISTS `active`;
/*!40101 SET @saved_cs_client = @@character_set_client*/;
/*!40101 SET character_set_client = utf8*/;
CREATE TABLE `active` (
`idx` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`accountid` varchar(60) DEFAULT '' COMMENT '账号id',
`active_num` int(11) NOT NULL COMMENT '日活跃度',
`num_time` varchar(50) NOT NULL DEFAULT '日活跃度时间',
`active_sum` int(11) NOT NULL COMMENT '周活跃度',
`sum_time` varchar(50) NOT NULL DEFAULT '周活跃度时间',
PRIMARY KEY (`idx`),
KEY `accountid` (`accountid`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

View File

@ -82,7 +82,7 @@ function getQuestConfig($quest_table, $quest_id)
return array_key_exists($quest_id, $quest_table) ? $quest_table[$quest_id] : null;
}
function getTaskRewardConfig()
function getTaskRewardConfig($taskReward_table, $taskReward_id)
{
return array_key_exists($taskReward_id, $taskReward_table) ? $taskReward_table[$taskReward_id] : null;
}

112
webapp/classes/Quest.php Normal file
View File

@ -0,0 +1,112 @@
<?php
namespace classes;
use phpcommon;
class Quest{
protected function getMysql($account_id)
{
$mysql_conf = getMysqlConfig(crc32($account_id));
$conn = new phpcommon\Mysql(array(
'host' => $mysql_conf['host'],
'port' => $mysql_conf['port'],
'user' => $mysql_conf['user'],
'passwd' => $mysql_conf['passwd'],
'dbname' => 'gamedb2001_' . $mysql_conf['instance_id']
));
return $conn;
}
protected function getQuest($quest_id)
{
$g_conf_quest_cluster = require('../config/game2001api.quest.cluster.php');
$quest_conf = getQuestConfig($g_conf_quest_cluster, $quest_id);
$q = array(
'id' => $quest_conf['id'],
'type' => $quest_conf['type'],
'condition' => $quest_conf['condition'],
'value' => $quest_conf['value'],
'active_value' => $quest_conf['active_value'],
'gold' => $quest_conf['gold'],
);
return $q;
}
public function triggerQuest($quest_id, $quest_type, $quest_num, $account_id)
{
$conn = $this->getMysql($account_id);
if (!$conn) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
}
$q = $this->getQuest($quest_id);
if (!$q) {
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
return;
}
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_type' => $quest_type,
));
if ($row) {
if ($q['condition'] == 7 && $quest_type == 1) {
if($quest_num <= $q['value']) {
$quest_state = 1;
}
}
else {
if ($row['quest_num'] + $quest_num >= $q['value']) {
$quest_num = $q['value'];
$quest_state = 1;
} else {
$quest_num = $row['quest_num'] + $quest_num;
$quest_state = 0;
}
}
$ret = $conn->execScript('UPDATE quest SET quest_num=:quest_num, quest_state=:quest_state ' .
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_type' => $quest_type,
':quest_num' => $quest_num,
':quest_state' => $quest_state
));
if (!$ret) {
die();
return;
}
} else {
$quest_state = 0;
if ($q['condition'] == 7 && $quest_type == 1) {
if($quest_num <= $q['value']) {
$quest_state = 1;
}
} else {
if ($quest_num >= $q['value']) {
$quest_num = $q['value'];
$quest_state = 1;
}
}
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_state) ' .
' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_state);',
array(
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_num' => $quest_num,
':quest_type' => $quest_type,
':quest_state'=> $quest_state
));
if (!$ret) {
die();
return;
}
}
}
}
?>

View File

@ -1,5 +1,7 @@
<?php
require 'classes/Quest.php';
class EquipController{
protected function getMysql($account_id)
@ -144,6 +146,8 @@ class EquipController{
return;
}
}
$quest = new classes\Quest();
$quest->triggerQuest(71005, 1, 1, $account_id);
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',

View File

@ -1,5 +1,7 @@
<?php
require 'classes/Quest.php';
class QuestController{
protected function getMysql($account_id)
@ -45,6 +47,8 @@ class QuestController{
protected function insertActive($account_id)
{
$conn = $this->getMysql($account_id);
for ($i = 73001; $i < 73006; $i++) {
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_type, quest_state) ' .
' VALUES(:accountid, :quest_id, :quest_type, :quest_state);',
@ -55,36 +59,38 @@ class QuestController{
':quest_state'=> 0
));
}
for ($j = 74001; $j < 73004; $j++) {
for ($j = 74001; $j < 74004; $j++) {
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_type, quest_state) ' .
' VALUES(:accountid, :quest_id, :quest_type, :quest_state);',
array(
':accountid' => $account_id,
':quest_id' => 73001,
':quest_id' => $j,
':quest_type' => 0,
':quest_state'=> 0
));
}
}
protected function updateActive($account_id, $active_num, $active_sum)
public function updateActive($account_id, $active_num, $active_sum)
{
$conn = $this->getMysql($account_id);
for ($i = 73001; $i < 73006; $i++) {
$row = execQueryOne('SELECT * FROM quest WHERE accountid=:accoutnid AND quest_id=:quest_id;',
$quest_id = $i;
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id;',
array(
':accountid' => $account_id,
':quest_id' => $i
':quest_id' => $quest_id
));
$t = $this->getTaskReward[$i];
$t = $this->getTaskReward($quest_id);
if ($row['quest_state'] != 0 || $active_num < $t['value']) {
continue;
}
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, ' .
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state ' .
' WHERE accountid=:accountid AND quest_id =:quest_id;',
array(
':account_id' => $account_id,
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_state' => $quest_state
':quest_state' => 1
));
if (!$ret) {
die();
@ -93,21 +99,22 @@ class QuestController{
}
for ($j = 74001; $j < 74003; $j++) {
$row = execQueryOne('SELECT * FROM quest WHERE accountid=:accoutnid AND quest_id=:quest_id;',
$quest_id = $j;
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id;',
array(
':accountid' => $account_id,
':quest_id' => $j
':quest_id' => $quest_id
));
$t = $this->getTaskReward[$j];
$t = $this->getTaskReward($j);
if ($row['quest_state'] != 0 || $active_sum < $t['value']) {
continue;
}
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, ' .
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state ' .
' WHERE accountid=:accountid AND quest_id =:quest_id;',
array(
':account_id' => $account_id,
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_state' => $quest_state
':quest_state' => 1
));
if (!$ret) {
die();
@ -116,16 +123,27 @@ class QuestController{
}
}
protected function updateActiveTime($accountid, $quest_id)
protected function updateActiveTime($account_id, $quest_id, $flag)
{
$ret = $conn->execScript('UPDATE SET sum_time=:sum_time, active_sum=:active_sum ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':time' => time(),
':active_sum' => 0
));
$ret1 = $conn->execScript('DELETE FROM quest ' .
$conn = $this->getMysql($account_id);
if ($flag == 2) {
$ret = $conn->execScript('UPDATE active SET sum_time=:sum_time, active_sum=:active_sum ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':sum_time' => time(),
':active_sum' => 0
));
} else if ($flag == 1) {
$ret = $conn->execScript('UPDATE active SET num_time=:num_time, active_num=:active_num ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':num_time' => time(),
':active_num' => 0
));
}
$ret = $conn->execScript('DELETE FROM quest ' .
' WHERE accountid=:accountid AND quest_type=:quest_type AND quest_id<:quest_id;',
array(
':accountid' => $account_id,
@ -134,7 +152,7 @@ class QuestController{
));
}
public function getQuestInfo()
public function QuestInfo()
{
$account_id = $_REQUEST['account_id'];
$conn = $this->getMysql($account_id);
@ -147,35 +165,35 @@ class QuestController{
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
}
$row = $conn->execQueryOne('SELECT active_sum, sum_time FROM active WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($row) {
//每周更新活跃度
if (phpcommon\getMondayseconds(time()) - phpcommon\getMondayseconds($row['sum_time']) > 0) {
$this->updateActiveTime($account_id, 75000, 2);
} else {
$active_sum = $row['active_sum'];
}
}
$row = $conn->execQueryOne('SELECT active_num, num_time FROM active WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($row) {
//每日更新活跃度
if (phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['num_time']) > 0) {
$this->updateActiveTime($account_id, 74000, 1);
} else {
$active_num = $row['active_num'];
}
}
$rowCount = $conn->execQueryRowCount('SELECT * FROM quest WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($rowCount != 0) {
$row = $conn->execQuery('SELECT active_sum, sum_time FROM quest WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($row) {
//每周更新活跃度
if (phpcommon\getMondayseconds(time()) - phpcommon\getMondayseconds($row['sum_time']) > 0) {
updateActiveTime($accountid, 75000);
} else {
$active_sum = $row['active_sum'];
}
}
$row = $conn->execQuery('SELECT active_num, num_time FROM quest WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($row) {
//每日更新活跃度
if (phpcommon\getdayseconds(time()) - phpcommon\getdayseconds($row['num_time']) > 0) {
updateActiveTime($accountid, 74000);
} else {
$active_num = $row['active_num'];
}
}
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
@ -232,82 +250,12 @@ class QuestController{
));
}
public function triggerQuest($quest_id, $quest_type, $quest_num, $account_id)
{
$q = $this->getQuest($quest_id);
if (!$q) {
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
return;
}
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
':quest_type' => $quest_type,
':quest_id' => $quest_id
));
if ($row) {
if ($q['condition'] == 7 && $quest_type == 1) {
if($quest_num <= $q['value']) {
$quest_state = 1;
}
}
else {
if ($row['quest_num'] + $quest_num >= $q['value']) {
$quest_num = $q['value'];
$quest_state = 1;
} else {
$quest_num = $row['quest_num'] + $quest_num;
$quest_state = 0;
}
}
$ret = $conn->execScript('UPDATE quest SET quest_num=:quest_num, quest_state=:quest_state ' .
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
array(
':account_id' => $account_id,
':quest_id' => $quest_id,
':quest_type' => $quest_type,
':quest_num' => $quest_num,
':quest_state' => $quest_state
));
if (!$ret) {
die();
return;
}
} else {
$quest_state = 0;
if ($q['condition'] == 7 && $quest_type == 1) {
if($quest_num <= $q['value']) {
$quest_state = 1;
}
} else {
if ($quest_num >= $q['value']) {
$quest_num = $q['value'];
$quest_state = 1;
}
}
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_state) ' .
' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_state);',
array(
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_num' => $quest_num,
':quest_type' => $quest_type,
':quest_state'=> $quest_state
));
if (!$ret) {
die();
return;
}
}
}
public function SubmitQuest()
{
$accountid = $_REQUEST['accountid'];
$quset_id = $_REQUEST['quest_id'];
$account_id = $_REQUEST['account_id'];
$quest_id = $_REQUEST['quest_id'];
$quest_type = $_REQUEST['type'];
$conn = $this->getMysql($accountid);
$conn = $this->getMysql($account_id);
if (!$conn) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
@ -317,9 +265,9 @@ class QuestController{
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
return;
}
$row = execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id AND quest_type=:quest_type;',
$row = $conn->execQueryOne('SELECT * FROM quest WHERE accountid=:accountid AND quest_id=:quest_id AND quest_type=:quest_type;',
array(
':accountid' => $accountid,
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_type' => $quest_type
));
@ -331,7 +279,7 @@ class QuestController{
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state ' .
' WHERE accountid=:accountid AND quest_id =:quest_id AND quest_type=:quest_type;',
array(
':account_id' => $account_id,
':accountid' => $account_id,
':quest_id' => $quest_id,
':quest_type' => $quest_type,
':quest_state' => 2
@ -341,49 +289,39 @@ class QuestController{
return;
}
if ($q['condition'] == 13) {
$this->triggerQuest($quest_id, $quest_type, 1, $accountid);
$this->triggerQuest($quest_id, $quest_type, 1, $account_id);
}
//发奖励
if ($row['type'] == 1) {
$rows = execQuery('SELECT * FROM quest WHERE accountid=:accoutnid AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
':quest_type' => 0
));
$active_num = execQuery('SELECT * FROM quest WHERE accountid=:accoutnid;',
array(
':accountid' => $account_id
));
$active_sum = execQuery('SELECT * FROM quest WHERE accountid=:accoutnid;',
if ($row['quest_type'] == 1) {
$active = $conn->execQueryOne('SELECT active_num, active_sum FROM active WHERE accountid=:accountid;',
array(
':accountid' => $account_id
));
//增加活跃度
if (!$rows) {
if (!$active) {
$this->insertActive($account_id);
$ret = $conn->execScript('INSERT INTO quest(accountid, active_num, num_time) ' .
' VALUES(:accountid, :active_num, :num_time);',
$ret = $conn->execScript('INSERT INTO active(accountid, active_num, num_time, active_sum, sum_time) ' .
' VALUES(:accountid, :active_num, :num_time, :active_sum, :sum_time);',
array(
':accountid' => $account_id,
':active_num' => $q['active_value'],
':num_time' => time()
));
$ret = $conn->execScript('INSERT INTO quest(accountid, active_sum, sum_time) ' .
' VALUES(:accountid, :active_sum, :sum_time);',
array(
':accountid' => $account_id,
':num_time' => time(),
':active_sum' => $q['active_value'],
':sum_time' => time()
));
$active_num = $q['active_value'];
$active_sum = $q['active_value'];
$this->updateActive($account_id, $active_num, $active_sum);
$this->updateActive($account_id, $q['active_value'], $q['active_value']);
} else {
$active_num = $q['active_value'] + $active_num;
$active_sum = $q['active_value'] + $active_sum;
$this->updateActive($account_id, $active_num, $active_sum);
$active['active_num'] = $q['active_value'] + $active['active_num'];
$active['active_sum'] = $q['active_value'] + $active['active_sum'];
$ret = $conn->execScript('UPDATE active SET active_num=:active_num, active_sum=:active_sum ' .
' WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
':active_num' => $active['active_num'],
':active_sum' => $active['active_sum'],
));
$this->updateActive($account_id, $active['active_num'], $active['active_sum']);
}
}
}