This commit is contained in:
aozhiwei 2024-04-19 20:22:28 +08:00
parent 6ef91c03c5
commit a430a318a7
4 changed files with 0 additions and 1019 deletions

View File

@ -1,36 +0,0 @@
# -*- coding: utf-8 -*-
import _common
class Match(object):
def __init__(self):
self.apis = [
{
'name': 'getMatchInfo',
'desc': '获取匹配信息',
'group': 'Match',
'url': 'webapp/index.php?c=Match&a=getMatchInfo',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
['info', _common.MatchInfo(), '匹配信息'],
]
},
{
'name': 'cancel',
'desc': '取消匹配',
'group': 'Match',
'url': 'webapp/index.php?c=Match&a=cancel',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
}
]

View File

@ -1,186 +0,0 @@
# -*- coding: utf-8 -*-
import _common
class Team(object):
def __init__(self):
self.apis = [
{
'name': 'createTeam',
'desc': '创建队伍',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=createTeam',
'params': [
_common.ReqHead(),
['node_id', 0, '节点id'],
['map_id', 0, '地图id'],
['match_mode', 0, '0: 匹配赛模式 1: 排位赛 2: pve'],
['pve_instance_id', 0, 'pve副本id'],
],
'response': [
_common.RspHead(),
['team_uuid', '', '队伍唯一id'],
]
},
{
'name': 'teamInfo',
'desc': '获取队伍信息',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=teamInfo',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
['team_info', _common.TeamInfo(), '队伍信息'],
]
},
{
'name': 'joinTeam',
'desc': '加入队伍',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=joinTeam',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
['team_uuid', '', '队伍唯一id'],
]
},
{
'name': 'leaveTeam',
'desc': '离开队伍',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=leaveTeam',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'breakup',
'desc': '解散队伍',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=breakup',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
},
{
'name': 'kickout',
'desc': '踢人',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=kickout',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
['target_id', '', '目标account_id'],
],
'response': [
_common.RspHead(),
]
},
{
'name': 'handover',
'desc': '转移队长职位',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=handover',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
['target_id', '', '目标account_id'],
],
'response': [
_common.RspHead(),
]
},
{
'name': 'cancel',
'desc': '取消游戏开始',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=cancel',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
},
{
'name': 'startGame',
'desc': '开始游戏',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=startGame',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'doReady',
'desc': '准备/取消',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=doReady',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
['ready_state', 0, '1准备 0取消'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'updateTeam',
'desc': '跟新队伍信息',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=updateTeam',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'permission',
'desc': '邀请许可',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=permission',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
['target_id', '', '目标account_id'],
],
'response': [
_common.RspHead(),
]
},{
'name': 'setCustomInfo',
'desc': '设置队伍自定义房间',
'group': 'Team',
'url': 'webapp/index.php?c=Team&a=setCustomInfo',
'params': [
_common.ReqHead(),
['team_uuid', '', '队伍唯一id'],
['custom_room_id', '', '自定义房间的ID'],
['custom_room_state', '', '自定义房间的状态'],
['custom_room_pwd', '', '自定义房间的密码'],
],
'response': [
_common.RspHead(),
]
},
]

View File

@ -1,264 +0,0 @@
<?php
require_once('models/User.php');
require_once('models/Hero.php');
require_once('models/Gun.php');
require_once('models/ChipPage.php');
require_once('models/HeroPreset.php');
require_once('models/HeroSkin.php');
require_once('mt/PveGemini.php');
require_once('mt/Skill.php');
require_once('mt/StarLevel.php');
require_once('services/PropertyChgService.php');
use phpcommon\SqlHelper;
use models\User;
use models\Hero;
use models\Gun;
use models\ChipPage;
use models\HeroPreset;
use models\HeroSkin;
class MatchController extends BaseAuthedController {
public function getMatchInfo()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$matchInfo = array(
'state' => 0,
'team_list' => array()
);
$matchOkDb = $this->readMatchOk($r, $teamUuid);
if ($matchOkDb) {
$this->refreshKeyExpire($r, MATCH_OK_KEY . $teamUuid, 1000*600);
$this->refreshKeyExpire($r, MATCH_OK_KEY . $matchOkDb['target_team'], 1000*600);
$this->refreshKeyExpire($r, TEAMID_KEY . $matchOkDb['target_team'], 1000*600);
$this->fillMatchInfo($r, $teamUuid, $matchInfo, $matchOkDb);
} else {
$this->execMatch($r, $teamUuid, $teamDb, $matchInfo);
}
$this->_rspData($matchInfo);
}
public function cancel()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (!empty($teamDb)) {
$r->del(MATCH_OK_KEY . $teamUuid);
$matchOkDb = $this->readMatchOk($r, $teamUuid);
if ($matchOkDb) {
$r->del(MATCH_OK_KEY . $matchOkDb['target_team']);
}
{
$currMatchDb = $this->readCurrMatchTeam($r);
if (!empty($currMatchDb)) {
unset($currMatchDb[$teamUuid]);
$r->set(MATCH_CURRENT_TEAM_KEY, json_encode($currMatchDb));
$this->refreshKeyExpire($r, MATCH_CURRENT_TEAM_KEY, 1000*600);
}
}
}
$this->_rspOk();
}
private function readTeamDb($r, $teamUuid)
{
$teamDbStr = $r->get(TEAMID_KEY . $teamUuid);
if (empty($teamDbStr)) {
return null;
}
$this->refreshKeyExpire($r, TEAMID_KEY . $teamUuid, 1000*600);
$teamDb = json_decode($teamDbStr, true);
return $teamDb;
}
/*
{
"": {
"team_uuid": "dafsdf"
"match_time": 231434
}
}
*/
private function readCurrMatchTeam($r)
{
$teamDbStr = $r->get(MATCH_CURRENT_TEAM_KEY);
if (empty($teamDbStr)) {
return null;
}
$teamDb = json_decode($teamDbStr, true);
return $teamDb;
}
/*
{
"target_team": "dafsdf"
"match_time": 231434
}
*/
private function readMatchOk($r, $teamUuid)
{
$teamDbStr = $r->get(MATCH_OK_KEY . $teamUuid);
if (empty($teamDbStr)) {
return null;
}
$this->refreshKeyExpire($r, MATCH_OK_KEY . $teamUuid, 1000*600);
$teamDb = json_decode($teamDbStr, true);
return $teamDb;
}
private function refreshKeyExpire($r, $key, $time)
{
$r->pexpire($key, $time);
}
private function execMatch($r, $teamUuid, $teamDb, &$matchInfo)
{
$currMatchDb = $this->readCurrMatchTeam($r);
if (empty($currMatchDb)) {
$currMatchDb = array(
$teamUuid => array(
'team_uuid' => $teamUuid,
'match_time' => $this->_getNowTime()
)
);
$r->set(MATCH_CURRENT_TEAM_KEY, json_encode($currMatchDb));
$this->refreshKeyExpire($r, MATCH_CURRENT_TEAM_KEY, 1000*600);
} else {
$delTeams = array();
$selfTeamDb = $currMatchDb[$teamUuid];
if ($selfTeamDb && myself()->_getNowTime() - $selfTeamDb['match_time'] > 7) {
$this->matchOk($r, $teamUuid, $selfTeamDb);
$this->fillMatchInfo($r, $teamUuid, $matchInfo, $this->readMatchOk($r, $teamUuid));
array_push($delTeams, $teamUuid);
} else {
foreach ($currMatchDb as $key => $val) {
$tmpTeamDb = $this->readTeamDb($r, $key);
if ($tmpTeamDb['zid'] != $teamDb['zid'] ||
$tmpTeamDb['node_id'] != $teamDb['node_id'] ||
$tmpTeamDb['map_id'] != $teamDb['map_id']) {
continue;
}
if (!empty($tmpTeamDb) && $this->_getNowTime() - $val['match_time'] > 120) {
array_push($delTeams, $key);
} else {
$found = false;
if ($key == $teamUuid) {
$found = true;
} else {
foreach ($val['member_list'] as $member) {
if ($member['account_id'] == myself()->_getAccountId()) {
$found = true;
break;
}
}
}
if (!$found) {
$this->matchOk($r, $teamUuid, $val);
$this->fillMatchInfo($r, $teamUuid, $matchInfo, $this->readMatchOk($r, $teamUuid));
array_push($delTeams, $key);
}
}
}//end foreach $currMatchDb
}
if (count($delTeams) > 0) {
foreach ($delTeams as $id) {
unset($currMatchDb[$id]);
}
$r->set(MATCH_CURRENT_TEAM_KEY, json_encode($currMatchDb));
$this->refreshKeyExpire($r, MATCH_CURRENT_TEAM_KEY, 1000*600);
}
}
}
private function matchOk($r, $teamUuid, $currMatchDb)
{
{
$matchOkDb = array(
'target_team' => $currMatchDb['team_uuid'],
'match_time' => $this->_getNowTime()
);
$r->set(MATCH_OK_KEY . $teamUuid, json_encode($matchOkDb));
$this->refreshKeyExpire($r, MATCH_OK_KEY . $teamUuid, 1000*600);
}
{
$matchOkDb = array(
'target_team' => $teamUuid,
'match_time' => $this->_getNowTime()
);
$r->set(MATCH_OK_KEY . $currMatchDb['team_uuid'], json_encode($matchOkDb));
$this->refreshKeyExpire($r, MATCH_OK_KEY . $currMatchDb['team_uuid'], 1000*600);
}
}
private function fillMatchInfo($r, $teamUuid, &$matchInfo, $matchOkDb)
{
if (empty($matchOkDb)) {
return;
}
error_log(json_encode($matchOkDb));
$matchInfo['state'] = 1;
$data = array(
'zid' => '',
'node_id' => '',
'room_uuid' => '',
'start_time' => $matchOkDb['match_time'],
'team_list' => array()
);
$teamList = array();
{
$teamDb = $this->readTeamDb($r, $teamUuid);
array_push($matchInfo['team_list'], $teamDb);
$teamInfo = array(
'team_uuid' => $teamDb['team_uuid'],
'members' => array()
);
foreach ($teamDb['member_list'] as $val) {
array_push($teamInfo['members'], array(
'account_id' => $val['account_id']
));
}
array_push($teamList, $teamInfo);
$data['zid'] = $teamDb['zid'];
$data['node_id'] = $teamDb['node_id'];
$data['room_uuid'] = $teamDb['team_uuid'];
}
{
$teamDb = $this->readTeamDb($r, $matchOkDb['target_team']);
if (!empty($teamDb) && $teamDb['team_uuid'] != $teamUuid) {
array_push($matchInfo['team_list'], $teamDb);
$teamInfo = array(
'team_uuid' => $teamDb['team_uuid'],
'members' => array()
);
foreach ($teamDb['member_list'] as $val) {
array_push($teamInfo['members'], array(
'account_id' => $val['account_id']
));
}
array_push($teamList, $teamInfo);
if (strcasecmp($teamDb['team_uuid'], $data['room_uuid']) < 0) {
$data['room_uuid'] = $teamDb['team_uuid'];
}
}
}
$data['team_list'] = $teamList;
$payload = md5(json_encode($data) . '520d8eAbB(8cf1^#$^&!@d833a42c820432PDAFE^^)') .
":moba_room|" . json_encode($data);
$matchInfo['join_msg'] = array(
'team_uuid' => $teamUuid,
'payload' => $payload
);
}
}

View File

@ -1,533 +0,0 @@
<?php
require_once('models/User.php');
require_once('models/Hero.php');
require_once('models/Gun.php');
require_once('models/ChipPage.php');
require_once('models/HeroPreset.php');
require_once('models/HeroSkin.php');
require_once('mt/PveGemini.php');
require_once('mt/Skill.php');
require_once('mt/StarLevel.php');
require_once('services/PropertyChgService.php');
use phpcommon\SqlHelper;
use models\User;
use models\Hero;
use models\Gun;
use models\ChipPage;
use models\HeroPreset;
use models\HeroSkin;
class TeamController extends BaseAuthedController {
const MATCH_MODE_NORMAL = 0;
const MATCH_MODE_RANK = 1;
const MATCH_MODE_PVE = 2;
public function createTeam()
{
$mapId = getReqVal('map_id', 0);
$nodeId = getReqVal('node_id', 1);
$matchMode = getReqVal('match_mode', 0);
$pveInstanceId = getReqVal('pve_instance_id', 0);
$zid = myself()->_getZid();
$teamUuid = $nodeId . '_' .
$zid . '_' .
md5($this->_getAccountId() . $this->_getNowTime());
/*if (!in_array(array
(
self::MATCH_MODE_NORMAL,
self::MATCH_MODE_RANK,
self::MATCH_MODE_PVE,
),
$matchMode)) {
$this->_rspErr(1, 'match mode error');
return;
}*/
$userDb = $this->_getOrmUserInfo();
error_log("CREATE TEAM : " . $userDb['account_id']);
//验证pve_instance_id合法性
if ($pveInstanceId){
// if ($userDb['level'] < \mt\LevelUp::USER_LEVEL_PVE_MATCH_LIMIT){
if ($userDb['star_num'] < \mt\StarLevel::STAR_NUM_PVE_MATCH_LIMIT){
$this->_rspErr(1,'Not agreed terms');
return;
}
$pveGame = \mt\PveGemini::get($pveInstanceId);
if (!$pveGame){
$this->_rspErr(1, 'pve_instance_id error');
return;
}
if (!in_array($pveInstanceId,\mt\PveGemini::getAbleCombatMeta($userDb['pve_instance_id']))){
$this->_rspErr(1, "You can't challenge beyond your level");
return;
}
}
if ($matchMode == self::MATCH_MODE_RANK){
// if ($userDb['level'] < \mt\LevelUp::USER_LEVEL_RANK_MATCH_LIMIT){
if ($userDb['star_num'] < \mt\StarLevel::STAR_NUM_RANK_MATCH_LIMIT){
$this->_rspErr(1,'Not agreed terms');
return;
}
}
$userDto = User::toPreset($userDb);
$userDto['is_leader'] = 1;
$userDto['is_ready'] = 1;
$userDto['permission'] = 1;
$userDto['createtime'] = $userDb['createtime'];
$teamDb = array(
'map_id' => $mapId,
'node_id' => $nodeId,
'zid' => $zid,
'team_uuid' => $teamUuid,
'state' => 0,
'payload' => '',
'match_mode' => $matchMode,
'pve_instance_id' => $pveInstanceId,
'slot_num' => 1,
'member_list' => array($userDto),
'custom_room' => array(),
);
$r = $this->_getRedis($teamUuid);
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspData(array(
'team_uuid' => $teamUuid
));
}
public function teamInfo()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$r->pexpire(TEAMID_KEY . $teamUuid, 1000*600);
$this->_rspData(array(
'team_info' => $teamDb
));
}
public function updateTeam(){
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$userDb = $this->_getOrmUserInfo();
$userDto = User::toPreset($userDb);
foreach ($teamDb['member_list'] as $key=>$member) {
if ($member['account_id'] == $this->_getAccountId()) {
$userDto['is_leader'] = $member['is_leader'];
$userDto['is_ready'] = $member['is_ready'];
$userDto['createtime'] = $member['createtime'];
$teamDb['member_list'][$key] = $userDto;
}
}
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspData(array(
'team_uuid' => $teamUuid
));
}
public function joinTeam()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$userDb = $this->_getOrmUserInfo();
if ($teamDb['match_mode'] == self::MATCH_MODE_RANK &&
// $userDb['level'] < \mt\LevelUp::USER_LEVEL_RANK_MATCH_LIMIT){
$userDb['star_num'] < \mt\StarLevel::STAR_NUM_RANK_MATCH_LIMIT){
$this->_rspErr(1,'Not agreed terms');
return;
}
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId()) {
$this->_rspData(array(
'team_uuid' => $teamUuid
));
return;
}
}
$userDb = User::find($this->_getAccountId());
//验证pve_instance_id合法性
if ($teamDb['pve_instance_id']>0){
if (!in_array($teamDb['pve_instance_id'],\mt\PveGemini::getAbleCombatMeta($userDb['pve_instance_id']))) {
$this->_rspErr(1, 'No challenge');
return;
}
// if ($userDb['level'] < \mt\LevelUp::USER_LEVEL_PVE_MATCH_LIMIT){
if ($userDb['star_num'] < \mt\StarLevel::STAR_NUM_PVE_MATCH_LIMIT){
$this->_rspErr(1,'Not agreed terms');
return;
}
}
$userDto = User::toPreset($userDb);
$userDto['createtime'] = $userDb['createtime'];
array_push($teamDb['member_list'], $userDto);
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspData(array(
'team_uuid' => $teamUuid
));
}
public function leaveTeam()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$newMemberList = array();
$isLeader = false;
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] == 1){
$isLeader = true;
}
if ($member['account_id'] != $this->_getAccountId()) {
array_push($newMemberList, $member);
}
}
if (count($newMemberList)<1){
$this->delTeamDb($r, $teamUuid);
$this->_rspOk();
return;
}
if ($isLeader){
$newMemberList[0]['is_leader'] = 1;
}
$teamDb['member_list'] = $newMemberList;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function breakup(){
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as &$member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
$this->delTeamDb($r, $teamUuid);
$this->_rspOk();
}
public function kickout()
{
$teamUuid = getReqVal('team_uuid', '');
$account_id = getReqVal('target_id', '');
if (! $account_id){
$this->_rspErr(1, 'target_id param error');
return;
}
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$temp = array_map(function ($val){
return $val['account_id'];
},$teamDb['member_list']);
if(! in_array($account_id,$temp)){
$this->_rspErr(1, 'The team do not have users');
return;
}
// if(! in_array($account_id,array_column($teamDb['member_list'],'account_id'))){
// $this->_rspErr(1, 'The team do not have users');
// return;
// }
if ($account_id == $this->_getAccountId()){
$this->_rspErr(1, 'do not get myself out of line');
return;
}
$newMemberList = array();
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
if ($member['account_id'] != $account_id) {
array_push($newMemberList, $member);
}
}
$teamDb['member_list'] = $newMemberList;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function closeSlot()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
if ($teamDb['slot_num'] <= 1){
$this->_rspErr(1, 'Minimum size of team');
return;
}
if (count($teamDb['member_list'])== 4){
$this->_rspErr(1, "Can't shut down");
return;
}
$teamDb['slot_num']-=1;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function openSlot()
{
$teamUuid = getReqVal('team_uuid', '');
$slotNum = getReqVal('slot_num', 1);
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspOk();
return;
}
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
if (count($teamDb['member_list'])>$slotNum){
$this->_rspErr(1, 'slot_num Insufficient ');
return;
}
$teamDb['slot_num'] = $slotNum;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function handover()
{
$teamUuid = getReqVal('team_uuid', '');
$account_id = getReqVal('target_id', '');
if (! $account_id){
$this->_rspErr(1, 'target_id param error');
return;
}
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$temp = array_map(function ($val){
return $val['account_id'];
},$teamDb['member_list']);
if(! in_array($account_id,$temp)){
$this->_rspErr(1, 'The team do not have users');
return;
}
// if(! in_array($account_id,array_column($teamDb['member_list'],'account_id'))){
// $this->_rspErr(1, 'The team do not have users');
// return;
// }
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
if ($account_id == $this->_getAccountId()){
$this->_rspErr(1, " You're already the captain ");
return;
}
foreach ($teamDb['member_list'] as &$member) {
if ($member['account_id'] == $this->_getAccountId()){
$member['is_leader'] = 0;
}
if ($member['account_id'] == $account_id){
$member['is_leader'] = 1;
}
}
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function cancel()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
$teamDb['state'] = 0;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function startGame()
{
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as $member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
}
$teamDb['state'] = 1;
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function doReady(){
$teamUuid = getReqVal('team_uuid', '');
$readyState = getReqVal('ready_state', 0); //1准备 0取消
if(!in_array($readyState,array(0,1))){
$this->_rspErr(1, 'ready_state param error');
return;
}
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as &$member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] == 1){
$this->_rspErr(1, 'Captain no operation');
return;
}
if ($member['account_id'] == $this->_getAccountId()){
$member['is_ready'] = $readyState?:0;
}
}
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspOk();
}
public function getPveFragmentNumOrDay(){
$todayPveGetHeroFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_HERO_FRAGMENT_NUM, 0);
$todayPveGetGunFragmentNum = myself()->_getDailyV(TN_DAILY_PVE_GET_GUN_FRAGMENT_NUM, 0);
$this->_rspData(array(
'heroNum'=>$todayPveGetHeroFragmentNum,
'gunNum'=>$todayPveGetGunFragmentNum,
));
}
public function permission(){
$teamUuid = getReqVal('team_uuid', '');
$accountId = getReqVal('target_id', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
foreach ($teamDb['member_list'] as &$member) {
if ($member['account_id'] == $this->_getAccountId() && $member['is_leader'] != 1){
$this->_rspErr(1, 'You are not the captain.');
return;
}
if ($member['account_id'] == $accountId){
$member['permission'] = 1;
}
}
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspData(array(
'team_uuid' => $teamUuid
));
}
public function setCustomInfo(){
$custom_room_state = getReqVal('custom_room_state', '');
$custom_room_id = getReqVal('custom_room_id', '');
$custom_room_pwd = getReqVal('custom_room_pwd', '');
$teamUuid = getReqVal('team_uuid', '');
$r = $this->_getRedis($teamUuid);
$teamDb = $this->readTeamDb($r, $teamUuid);
if (empty($teamDb)) {
$this->_rspErr(1, 'The team has been disbanded');
return;
}
$teamDb['custom_room'] = array(
'custom_room_id' => $custom_room_id,
'custom_room_state' => $custom_room_state,
'custom_room_pwd' => $custom_room_pwd,
);
$this->saveTeamDb($r, $teamUuid, $teamDb);
$this->_rspData(array(
'team_uuid' => $teamUuid
));
}
private function readTeamDb($r, $teamUuid)
{
$teamDbStr = $r->get(TEAMID_KEY . $teamUuid);
if (empty($teamDbStr)) {
return null;
}
$teamDb = json_decode($teamDbStr, true);
return $teamDb;
}
private function saveTeamDb($r, $teamUuid, $teamDb)
{
$r->set(TEAMID_KEY . $teamUuid, json_encode($teamDb));
$r->pexpire(TEAMID_KEY . $teamUuid, 1000*600);
}
private function delTeamDb($r, $teamUuid){
$r->del(TEAMID_KEY . $teamUuid);
}
}