1
This commit is contained in:
parent
dc09bfa3c4
commit
788aa477f7
@ -134,8 +134,29 @@ CREATE TABLE `hang` (
|
||||
PRIMARY KEY (`idx`),
|
||||
KEY `accountid` (`accountid`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
|
||||
|
||||
--
|
||||
-- Table structrure for table `quest`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `quest`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client*/;
|
||||
/*!40101 SET character_set_client = utf8*/;
|
||||
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 '任务类型',
|
||||
`quest_state` int(11) NOT NULL COMMENT '任务状态',
|
||||
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 */;
|
||||
|
@ -76,5 +76,15 @@ function getSignConfig($sign_table, $sign_id)
|
||||
{
|
||||
return array_key_exists($sign_id, $sign_table) ? $sign_table[$sign_id] : null;
|
||||
}
|
||||
|
||||
function getQuestConfig($quest_table, $quest_id)
|
||||
{
|
||||
return array_key_exists($quest_id, $quest_table) ? $quest_table[$quest_id] : null;
|
||||
}
|
||||
|
||||
function getTaskRewardConfig()
|
||||
{
|
||||
return array_key_exists($taskReward_id, $taskReward_table) ? $taskReward_table[$taskReward_id] : null;
|
||||
}
|
||||
checkMysqlConfig();
|
||||
checkRedisConfig();
|
||||
|
396
webapp/controller/QuestController.class.php
Normal file
396
webapp/controller/QuestController.class.php
Normal file
@ -0,0 +1,396 @@
|
||||
<?php
|
||||
|
||||
class QuestController{
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
protected function getTaskReward($taskReward_id)
|
||||
{
|
||||
$g_conf_taskReward_cluster = require('../config/game2001api.taskReward.cluster.php');
|
||||
$taskReward_conf = getTaskRewardConfig($g_conf_taskReward_cluster, $taskReward_id);
|
||||
$t = array(
|
||||
'id' => $taskReward_conf['id'],
|
||||
'type' => $taskReward_conf['type'],
|
||||
'value' => $taskReward_conf['value'],
|
||||
'reward' => $taskReward_conf['reward']
|
||||
);
|
||||
return $t;
|
||||
}
|
||||
|
||||
protected function insertActive($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);',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $i,
|
||||
':quest_type' => 0,
|
||||
':quest_state'=> 0
|
||||
));
|
||||
}
|
||||
for ($j = 74001; $j < 73004; $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_type' => 0,
|
||||
':quest_state'=> 0
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function updateActive($account_id, $active_num, $active_sum)
|
||||
{
|
||||
for ($i = 73001; $i < 73006; $i++) {
|
||||
$row = execQueryOne('SELECT * FROM quest WHERE accountid=:accoutnid AND quest_id=:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $i
|
||||
));
|
||||
$t = $this->getTaskReward[$i];
|
||||
if ($row['quest_state'] != 0 || $active_num < $t['value']) {
|
||||
continue;
|
||||
}
|
||||
$ret = $conn->execScript('UPDATE quest SET quest_state=:quest_state, ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_state' => $quest_state
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for ($j = 74001; $j < 74003; $j++) {
|
||||
$row = execQueryOne('SELECT * FROM quest WHERE accountid=:accoutnid AND quest_id=:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_id' => $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, ' .
|
||||
' WHERE accountid=:accountid AND quest_id =:quest_id;',
|
||||
array(
|
||||
':account_id' => $account_id,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_state' => $quest_state
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function updateActiveTime($accountid, $quest_id)
|
||||
{
|
||||
$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 ' .
|
||||
' WHERE accountid=:accountid AND quest_type=:quest_type AND quest_id<:quest_id;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 0,
|
||||
':quest_id' => $quest_id
|
||||
));
|
||||
}
|
||||
|
||||
public function getQuestInfo()
|
||||
{
|
||||
$account_id = $_REQUEST['account_id'];
|
||||
$conn = $this->getMysql($account_id);
|
||||
$quest_list = array();
|
||||
$active_list = array();
|
||||
$achievement_list = array();
|
||||
$active_sum = 0;
|
||||
$active_num = 0;
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$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,
|
||||
':quest_type' => 1
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($quest_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'quest_id' => $row['quest_id'],
|
||||
'quest_num' => $row['quest_num'],
|
||||
'quest_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 2
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($achievement_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'quest_id' => $row['quest_id'],
|
||||
'quest_num' => $row['quest_num'],
|
||||
'quest_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
$rows = $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
|
||||
array(
|
||||
':accountid' => $account_id,
|
||||
':quest_type' => 0
|
||||
));
|
||||
if ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
array_push($active_list, array(
|
||||
'type' => $row['quest_type'],
|
||||
'quest_id' => $row['quest_id'],
|
||||
'quest_state' => $row['quest_state']
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => '',
|
||||
'active_num' => $active_num,
|
||||
'active_sum' => $active_sum,
|
||||
'active_list' => $active_list,
|
||||
'quest_list' => $quest_list,
|
||||
'achievement_list' => $achievement_list
|
||||
));
|
||||
}
|
||||
|
||||
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'];
|
||||
$quest_type = $_REQUEST['type'];
|
||||
$conn = $this->getMysql($accountid);
|
||||
if (!$conn) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
|
||||
return;
|
||||
}
|
||||
$q = $this->getQuest($quest_id);
|
||||
if (!$q) {
|
||||
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;',
|
||||
array(
|
||||
':accountid' => $accountid,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type
|
||||
));
|
||||
if (!$row) {
|
||||
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
|
||||
return;
|
||||
}
|
||||
if ($row['quest_state'] == 1) {
|
||||
$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,
|
||||
':quest_id' => $quest_id,
|
||||
':quest_type' => $quest_type,
|
||||
':quest_state' => 2
|
||||
));
|
||||
if (!$ret) {
|
||||
die();
|
||||
return;
|
||||
}
|
||||
if ($q['condition'] == 13) {
|
||||
$this->triggerQuest($quest_id, $quest_type, 1, $accountid);
|
||||
}
|
||||
//发奖励
|
||||
|
||||
|
||||
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;',
|
||||
array(
|
||||
':accountid' => $account_id
|
||||
));
|
||||
//增加活跃度
|
||||
if (!$rows) {
|
||||
$this->insertActive($account_id);
|
||||
$ret = $conn->execScript('INSERT INTO quest(accountid, active_num, num_time) ' .
|
||||
' VALUES(:accountid, :active_num, :num_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,
|
||||
':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);
|
||||
} else {
|
||||
$active_num = $q['active_value'] + $active_num;
|
||||
$active_sum = $q['active_value'] + $active_sum;
|
||||
$this->updateActive($account_id, $active_num, $active_sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode(array(
|
||||
'errcode' => 0,
|
||||
'errmsg' => ''
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
Loading…
x
Reference in New Issue
Block a user