$mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => 'gamedb2004_' . $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'], ); 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 ($row['quest_state'] == 0) { if ($q['condition'] == 7 && $quest_type == 1) { if($quest_num <= $q['value']) { $quest_state = 1; $this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id); } } else if ($q['condition'] == 13 && $quest_type == 1){ 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; } } else { if ($row['quest_num'] + $quest_num >= $q['value']) { $quest_num = $q['value']; $quest_state = 1; if ($quest_type == 1) { $this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id); } } 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, modify_time=:modify_time ' . ' 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, ':modify_time' => time() )); if (!$ret) { die(); return; } } } else { $quest_state = 0; if ($q['condition'] == 7 && $quest_type == 1) { if($quest_num <= $q['value']) { $quest_state = 1; $this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id); } } else if ($q['condition'] == 13 && $quest_type == 1){ if ($row['quest_num'] >= $q['value']) { $quest_num = $q['value']; $quest_state = 1; } } else { if ($quest_num >= $q['value']) { $quest_num = $q['value']; $quest_state = 1; if ($quest_type == 1) { $this->triggerQuest(QUEST_DAY_COMPLETE, 1, 1, $account_id); } } } $ret = $conn->execScript('INSERT INTO quest(accountid, quest_id, quest_num, quest_type, quest_state, create_time, modify_time) ' . ' VALUES(:accountid, :quest_id, :quest_num, :quest_type, :quest_state, :create_time, :modify_time) ' . ' ON DUPLICATE KEY UPDATE accountid=:accountid, quest_id=:quest_id, quest_num=:quest_num, quest_type=:quest_type, quest_state=:quest_state, modify_time=:modify_time;', array( ':accountid' => $account_id, ':quest_id' => $quest_id, ':quest_num' => $quest_num, ':quest_type' => $quest_type, ':quest_state'=> $quest_state, ':create_time' => time(), ':modify_time' => time() )); if (!$ret) { die(); return; } } } //提交假日活动任务 public function flushHolidayQuest($quest_id, $quest_num, $account_id) { $conn = $this->getMysql($account_id); if (!$conn) { return; } $user_db = $this->readHolidayDB($account_id); if (!$user_db || empty($user_db)) { return; } $id = $quest_id; $flag = 0; foreach ($user_db['quest_list'] as &$user) { if (isset($user['quest_list']) && !empty($user['quest_list'])) { foreach ($user['quest_list'] as &$us) { if ($us['id'] != $id || $us['status'] != 0) { continue; } if ($id == 72009) { if($quest_num <= $us['condition']) { $us['status'] = 1; $flag = 1; } } else { $us['num'] = $us['num'] + $quest_num; if ($us['num'] >= $us['condition']) { $us['status'] = 1; $flag = 1; } } } } } $this->saveHolidayDB($account_id, $user_db); if ($flag == 1 && $id != 72010) { $this->flushAllQuest($account_id); } } public function flushAllQuest($account_id) { $conn = $this->getMysql($account_id); if (!$conn) { return; } $user_db = $this->readHolidayDB($account_id); if (!$user_db || empty($user_db)) { return; } $id = 72010; foreach ($user_db['quest_list'] as &$user) { if (isset($user['quest_list']) && !empty($user['quest_list'])) { foreach ($user['quest_list'] as &$us) { if ($us['id'] != $id || $us['status'] != 0) { continue; } $us['num'] = $us['num'] + 1; if ($us['num'] >= $us['condition']) { $us['status'] = 1; } } } } $this->saveHolidayDB($account_id, $user_db); } protected function readHolidayDB($account_id) { $conn = $this->getMysql($account_id); $row = $conn->execQueryOne('SELECT blobdata FROM holiday WHERE accountid=:accountid;', array( ':accountid' => $account_id )); if (!empty($row)) { $hol_db_str = $row['blobdata']; $hol_db = json_decode($hol_db_str, true); return $hol_db; } else { return null; } } protected function saveHolidayDB($account_id, $hol_db) { $conn = $this->getMysql($account_id); $row = $conn->execQueryOne('SELECT accountid FROM holiday WHERE accountid=:accountid;', array( ':accountid' => $account_id )); $hol_db_str = ""; if (!empty($hol_db)) { $hol_db_str = json_encode($hol_db); } if (!empty($row)) { //update $row = $conn->execScript('UPDATE holiday SET blobdata=:blobdata, modify_time=:modify_time WHERE accountid=:accountid;', array( ':accountid' => $account_id, ':blobdata' => $hol_db_str, ':modify_time' => time() )); } else { //insert $row = $conn->execScript('INSERT INTO holiday(accountid, blobdata, create_time, modify_time) ' . ' VALUES(:account_id, :blobdata, :create_time, :modify_time) ' . ' ON DUPLICATE KEY UPDATE accountid=:account_id, blobdata=:blobdata, modify_time=:modify_time;', array( ':account_id' => $account_id, ':blobdata' => $hol_db_str, ':create_time' => time(), ':modify_time' => time(), )); } } } ?>