game2003api/webapp/controller/QuestController.class.php
aozhiwei ee07f2f6fe 1
2019-10-17 16:39:33 +08:00

227 lines
8.3 KiB
PHP

<?php
require 'classes/AddReward.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' => 'gamedb2003_' . $mysql_conf['instance_id']
));
return $conn;
}
protected function getQuest($quest_id)
{
$g_conf_quest_cluster = require('../res/task@task.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'],
'jewel_reward' => $quest_conf['jewel_reward'],
);
return $q;
}
public function questInfo()
{
$account_id = $_REQUEST['account_id'];
//登录校验
$login = loginVerify($account_id, $_REQUEST['session_id']);
if (!$login) {
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
return;
}
$conn = $this->getMysql($account_id);
$quest_list = array();
if (!$conn) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
}
$rows= $conn->execQuery('SELECT * FROM quest WHERE accountid=:accountid;',
array(
':accountid' => $account_id,
));
if ($rows) {
foreach ($rows as $row) {
array_push($quest_list, array(
'quest_id' => $row['quest_id'],
'quest_num' => $row['quest_num'],
'quest_status' => $row['quest_status']
));
}
}
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',
'quest_list' => $quest_list,
));
}
public function triggerQuest()
{
$account_id = $_REQUEST['account_id'];
//登录校验
$login = loginVerify($account_id, $_REQUEST['session_id']);
if (!$login) {
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
return;
}
$conn = $this->getMysql($account_id);
if (!$conn) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
}
$condition = $_REQUEST['type'];
$num = $_REQUEST['num'];
$g_conf_task_cluster = require('../res/task@task.php');
$quest_list = array();
$sum = 0;
$status = 0;
$rows = $conn->execQuery('SELECT quest_id, quest_num, quest_status ' .
' FROM quest WHERE accountid=:accountid AND quest_type=:quest_type;',
array(
':accountid' => $account_id,
':quest_type' => $condition,
));
if (!$rows) {
//插入任务
for ($i = 1; $i <= count($g_conf_task_cluster); $i++) {
$q = $this->getQuest($i + 71000);
if ($condition != $q['condition']) {
continue;
}
if ($num < $q['value']) {
$sum = $num ;
$status = 0;
} else {
$sum = $q['value'];
$status = 1;
array_push($quest_list, array(
'id' => $q['id'],
'num' => $num,
'status' => $status
));
}
$this->insertQuest($q['id'], $account_id, $sum, $status, $condition);
}
} else {
//更新任务
foreach ($rows as $row) {
$q = $this->getQuest($row['quest_id']);
if ($row['quest_num'] + $num < $q['value']) {
$sum = $row['quest_num'] + $num ;
$status = 0;
} else {
if ($row['quest_status'] != 0) {
$sum = $q['value'];
$status = $row['quest_status'];
} else {
$sum = $q['value'];
$status = 1;
array_push($quest_list, array(
'id' => $row['quest_id'],
'num' => $num,
'status' => $status
));
}
}
$this->updateQuest($row['quest_id'], $account_id, $sum, $status);
}
}
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',
'quest_list' => $quest_list,
));
}
public function submitQuest()
{
$account_id = $_REQUEST['account_id'];
//登录校验
$login = loginVerify($account_id, $_REQUEST['session_id']);
if (!$login) {
phpcommon\sendError(ERR_USER_BASE + 1, 'session无效');
return;
}
$quest_id = $_REQUEST['id'];
$conn = $this->getMysql($account_id);
if (!$conn) {
phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家');
return;
}
$q = $this->getQuest($quest_id);
$row = $conn->execQueryOne('SELECT quest_status, quest_num ' .
' FROM quest WHERE accountid=:accountid AND quest_id=:quest_id;',
array(
':accountid' => $account_id,
':quest_id' => $quest_id,
));
if (!$row || !$q) {
phpcommon\sendError(ERR_USER_BASE + 2, '没有这个任务');
return;
}
if ($row['quest_status'] == 2) {
phpcommon\sendError(ERR_USER_BASE + 2, '任务奖励已领取');
return;
}
//更新任务
$this->updateQuest($quest_id, $account_id, $row['quest_num'], 2);
echo json_encode(array(
'errcode' => 0,
'errmsg' => '',
));
}
protected function updateQuest($id, $account_id, $num, $status)
{
$conn = $this->getMysql($account_id);
$ret = $conn->execScript('UPDATE quest SET quest_status=:status, quest_num=:num, modify_time=:modify_time ' .
' WHERE accountid=:accountid AND quest_id =:quest_id;',
array(
':accountid' => $account_id,
':quest_id' => $id,
':num' => $num,
':status' => $status,
':modify_time' => time()
));
if (!$ret) {
die();
}
}
protected function insertQuest($id, $account_id, $num, $status, $type)
{
$conn = $this->getMysql($account_id);
$ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_status, create_time, modify_time) ' .
' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_status, :create_time, :modify_time) ' .
' ON DUPLICATE KEY UPDATE accountid=:accountid, quest_id=:quest_id, quest_num=:quest_num, quest_type=:quest_type, quest_status=:quest_status, modify_time=:modify_time;',
array(
':accountid' => $account_id,
':quest_id' => $id,
':quest_num' => $num,
':quest_type' => $type,
':quest_status'=> $status,
':create_time' => time(),
':modify_time' => time()
));
if (!$ret) {
die();
}
}
}
?>