240 lines
8.8 KiB
PHP
240 lines
8.8 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->execQueryRowCount('SELECT * FROM quest WHERE accountid=:accountid;',
|
|
array(
|
|
':accountid' => $account_id,
|
|
));
|
|
if (!$rows) {
|
|
echo json_encode(array(
|
|
'errcode' => 0,
|
|
'errmsg' => '',
|
|
'quest_list' => $quest_list,
|
|
));
|
|
}
|
|
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['condition']) {
|
|
$sum = $num ;
|
|
$status = 0;
|
|
} else {
|
|
$sum = $q['condition'];
|
|
$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['condition']) {
|
|
$sum = $row['quest_num'] + $num ;
|
|
$status = 0;
|
|
} else {
|
|
if ($row['quest_status'] != 0) {
|
|
$sum = $q['condition'];
|
|
$status = $row['quest_status'];
|
|
} else {
|
|
$sum = $q['condition'];
|
|
$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;
|
|
}
|
|
|
|
if ($row['quest_status'] == 1) {
|
|
//更新任务
|
|
$this->updateQuest($quest_id, $account_id, $row['quest_num'], 2);
|
|
//添加奖励
|
|
$addreward = new classes\AddReward();
|
|
$addreward->addReward(10003, $q['jewel_reward'], $account_id);
|
|
} else {
|
|
phpcommon\sendError(ERR_USER_BASE + 2, '任务未完成');
|
|
return;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
?>
|