From 047486718757cd01e045c1041b91e455b792ff05 Mon Sep 17 00:00:00 2001 From: wangwei01 Date: Wed, 17 Apr 2019 15:54:02 +0800 Subject: [PATCH] 1 --- sql/gamedb.sql | 21 +- webapp/bootstrap/config_loader.php | 2 +- webapp/classes/Quest.php | 112 +++++++++ webapp/controller/EquipController.class.php | 4 + webapp/controller/QuestController.class.php | 244 ++++++++------------ 5 files changed, 225 insertions(+), 158 deletions(-) create mode 100644 webapp/classes/Quest.php diff --git a/sql/gamedb.sql b/sql/gamedb.sql index 9a21750..b90aae3 100644 --- a/sql/gamedb.sql +++ b/sql/gamedb.sql @@ -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 */; diff --git a/webapp/bootstrap/config_loader.php b/webapp/bootstrap/config_loader.php index 3ffca76..f5d4685 100644 --- a/webapp/bootstrap/config_loader.php +++ b/webapp/bootstrap/config_loader.php @@ -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; } diff --git a/webapp/classes/Quest.php b/webapp/classes/Quest.php new file mode 100644 index 0000000..4313921 --- /dev/null +++ b/webapp/classes/Quest.php @@ -0,0 +1,112 @@ + $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; + } + } + } +} +?> diff --git a/webapp/controller/EquipController.class.php b/webapp/controller/EquipController.class.php index 104c967..39782d4 100644 --- a/webapp/controller/EquipController.class.php +++ b/webapp/controller/EquipController.class.php @@ -1,5 +1,7 @@ triggerQuest(71005, 1, 1, $account_id); echo json_encode(array( 'errcode' => 0, 'errmsg' => '', diff --git a/webapp/controller/QuestController.class.php b/webapp/controller/QuestController.class.php index ca454eb..09bd6b3 100644 --- a/webapp/controller/QuestController.class.php +++ b/webapp/controller/QuestController.class.php @@ -1,5 +1,7 @@ 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']); } } }