From 788aa477f730ee24fab353b08734413af77be462 Mon Sep 17 00:00:00 2001 From: wangwei01 Date: Wed, 17 Apr 2019 10:05:42 +0800 Subject: [PATCH] 1 --- sql/gamedb.sql | 25 +- webapp/bootstrap/config_loader.php | 10 + webapp/controller/QuestController.class.php | 396 ++++++++++++++++++++ 3 files changed, 429 insertions(+), 2 deletions(-) create mode 100644 webapp/controller/QuestController.class.php diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 2d664fc..9a21750 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -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 */; diff --git a/webapp/bootstrap/config_loader.php b/webapp/bootstrap/config_loader.php index 1c6e692..3ffca76 100644 --- a/webapp/bootstrap/config_loader.php +++ b/webapp/bootstrap/config_loader.php @@ -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(); diff --git a/webapp/controller/QuestController.class.php b/webapp/controller/QuestController.class.php new file mode 100644 index 0000000..ca454eb --- /dev/null +++ b/webapp/controller/QuestController.class.php @@ -0,0 +1,396 @@ + $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' => '' + )); + } +} +?>