cmd) {
case CmdCode::cmd_guild_getUserGuildInfo: # 7000 查询自己的公会
return self::GetUserGuildInfo();
case CmdCode::cmd_guild_getList: # 7001 查公会列表 公会浏览 列表以cupScore依据 从多到少排列 暂未开放
return self::GetGuildList();
// case CmdCode::cmd_guild_refuseGuildCupScore: # 7002 每日一次刷新公会积分
// return self::refuseGuildCupScore();
case CmdCode::cmd_guild_searchGuildByID: # 7003 通过id搜索公会
return self::SearchByGuildID();
case CmdCode::cmd_guild_create: # 7004 创建公会
return self::CreateGuild();
// case CmdCode:: cmd_guild_apply: # 7005 申请加入
// return self::ApplyForGuild($req);
case CmdCode::cmd_guild_QuickIn: # 7006 一键加入
return self::QuickIn();
// case CmdCode::cmd_guild_GetGuildInfo: # 7007 请求本公会数据
// return self::GetGuildInfo($req);
// case CmdCode::cmd_guild_modifyDeclare: # 7008 编辑
// return self::ModifyDeclare($req);
// // case CmdCode::cmd_guild_chairmanQuit: # 7009 会长退会
// // return self::chairmanQuit($req);
// case CmdCode::cmd_guild_fireMember: # 7010 开除
// return self::FireMember($req);
// case CmdCode::cmd_guild_approve: # 7011 审批 申请
// return self:: Approve($req);
// case CmdCode::cmd_guild_setPriceChairman: # 7013 设置 会员 干部 副会长
// return self::SetViceChairman($req);
case CmdCode::cmd_guild_getGuildMembers: # 7014 获取成员信息
return self::GetGuildMembers();
//
// case CmdCode::cmd_guild_quit: # 7016 退会
// return self::QuitGuild($req);
// case CmdCode::cmd_guild_InitiateAccuse: # 7017 发起弹劾
// return self::InitiateAccuseChairMan($req);
// case CmdCode::cmd_guild_Accuse: # 7018 同意弹劾
// return self::ApproveAccuseChairMan($req);
// case CmdCode::cmd_guild_ChairmanCancelAccuse: # 7019 会长取消本次弹劾
// return self::CancelAccuse($req);
// case CmdCode::cmd_guild_ApplyUserIntro: # 7020 申请者玩家简介
// return self::ApplyUserIntro($req);
// #捐献
// case CmdCode::cmd_guild_requestDonate: # 7021 请求捐献
// return self::requestDonate($req);
// case CmdCode::cmd_guild_donate: # 7022 捐献
// return self::Donate($req);
// case CmdCode::cmd_guild_donateInfoRefresh: # 7023 到捐献时间后 刷新
// return self::donateInfoRefresh($req);
// #礼包
// case CmdCode::cmd_guild_buyDonateGift: # 7024 购买捐献度礼包
// return self::buyDonateGift($req);
// case CmdCode::cmd_guild_buyGuildCashGift: # 7025 购买公会钻石礼包 弃用
// return self::buyGuildCashGift($req);
// #公会公告 邮件 会长 副会长有权限
// case CmdCode::cmd_guild_announcement: # 7026 公告
// return self::announcement($req);
// case CmdCode::cmd_guild_noticeMail: # 7027 公会邮件
// return self::noticeMail($req);
// #公会战 未开启状态
// case CmdCode::cmd_guild_vsFightInvite: #7028 邀请战斗
// return self::vsFightInvite($req);
// case CmdCode::cmd_guild_cancelInvite: #7029 取消邀请战斗
// return self::cancelInvite($req);
// case CmdCode::cmd_guild_fight: #7030 接受并战斗
// return self::fight($req);
//
default:
return Err(ErrCode::cmd_err);
}
}
//
/**
* [7000]查询自己的公会信息
* 玩家打开公会的时候第一步就是这个,如果没有数据,就显示公会列表吧。
*/
static function GetUserGuildInfo() {
$uid = req()->uid;
$zoneid = req()->zoneid;
$userGuildInfo = self:: getMemUserGuildInfo($uid, $zoneid); # 取玩家公会信息
self::updateUserGuildInfo($userGuildInfo, $uid, $zoneid); # 回写玩家公会数据
return Resp::ok($userGuildInfo);
}
/**
* [7001]获取公会列表,
*/
static function GetGuildList() {
$zoneid = req()->zoneid;
$page = intval(req()->paras[0]); # 起始页索引编号
$startIndex = ($page - 1) * 20; # 换算成index(按照1页20条计算)
if ($startIndex < 0) { # 防御: 避免出现 小于0的索引值
$startIndex = 0;
}
$memList = self::getGuildListCache($page, $zoneid); # 取缓存
if (empty($memList) || $memList->ts < now()) {
$memList = self::UpdateGuildListCache($zoneid, $startIndex, $page); # 更新并返回缓存的公会列表
}
$result = array(# # 返回值
"totalcount" => $memList->count, # # 有多少个公会 分页用
"table" => $memList->table # # 该页的公会信息
);
return Resp::ok($result);
}
/**
* [7003] 通过公会ID进行搜索
*/
static function SearchByGuildID() {
$zoneid = req()->zoneid;
$keywords = req()->paras[0]; // 搜索 关键字
$sqlret = daoInst()->select()->from(self::tabGuild)
->where("`zoneid`=$zoneid and (`guildId`='$keywords' OR `name` like '%$keywords%')")
->limit(10)->fetchAll();
return Resp::ok(array(
"guildInfo" => $sqlret,
));
}
/**
* [7004]创建公会
*/
static function CreateGuild() {
$base = ctx()->base();
$zoneid = req()->zoneid;
$uid = req()->uid; // fromoid
//客户端参数解析
list($guildName, $declare, $guild_img, $applyType) = req()->paras; # 公会名称, 宗旨, 徽章, 允许加入类型
// $gcfg = glc(); # 全局变量
$userGuildInfo = self:: getMemUserGuildInfo($uid, $zoneid); # 取玩家公会信息
my_Assert($userGuildInfo->guildId <= 0, ErrCode::err_guild_userhasbeenaguildmember); # 防御: 已经加入公会
$n = daoInst()->select()->from(self::tabGuild)->where(" `name` ='$guildName' ")->count(); # 检查公会名称是否已存在
my_Assert($n <= 0, ErrCode::err_guild_nameexists); # 防御: 公会名称已存在
my_Assert(!empty($guildName), ErrCode::err_guild_nameEmputy); # 防御: 参数公会名称为空
my_Assert(!empty($guild_img), ErrCode::err_guild_imgEmputy); # 防御: 参数公会图标为空
// my_Assert($base->Consume_Gold($gcfg->Guild_Found_CostGold), ErrCode::err_msg_goldnotenough); # 扣除金币
$guildInfo = Data_Guild::NewGuildInit($uid, $base->name, $guildName); # 创建公会MEM数据体,
$userGuildInfo->Clear(); # 创建/重置玩家公会信息
$userGuildInfo->guildId = $guildInfo->guildId;
$userGuildInfo->position = 'Chairman';
$userGuildInfo->guildName = $guildInfo->name;
if (GAME_ONLINE) {
$userGuildInfo->create_coding = now(self::create_codingTime); # 设置冷却时间. Ps, 24小时内不准再创建公会.
}
// Mysql 插入公会记录
$data = array(
'guildId' => intval($guildInfo->guildId),
'name' => $guildName,
'createts' => $guildInfo->createts,
'declare' => $declare,
'membercount' => count($guildInfo->members),
'chairman_id' => $uid,
'chairman_name' => $base->name,
'guild_img' => $guild_img,
'zoneid' => $zoneid,
'cupScore' => 0,
'level' => 1,
'enableQuickIn' => $guildInfo->enableQuickIn,
'condition' => ''
);
daoInst()->insert(self::tabGuild)->data($data)->exec();
self::updateUserGuildInfo($userGuildInfo, $uid, $zoneid); # 回写玩家公会数据
$guildInfo->updateDataFull(MemKey_Guild::getGuildInfo_hash($guildInfo->guildId, $zoneid)); # 保存公会数据
UserProc::updateUserInfo();
return Resp::ok($guildInfo); # 设置成功返回值
}
/**
* [7014] 获取公会成员信息
*/
static function GetGuildMembers() {
$zoneID = req()->zoneid;
$guildId = req()->paras[0]; # 公会ID
$guildInfo = self::getMemGuildInfo($guildId, $zoneID); # 取公会信息
my_Assert(isset($guildInfo), ErrCode::err_guild_guildinfono); # 找不到公会
$memberArr = array();
foreach ($guildInfo->members as $mboid) {
$memberInfo = self::getMemUserGuildInfo($mboid, $zoneID);
$base = UserProc::getUserInfo($zoneID, $mboid)->game->base();
$memberInfo->name = $base->name; # 刷新下昵称
$memberInfo->level = $base->level; # 刷新下等级
// $memberInfo->fightPower = self::initFightTeamInfo($mem, $mboid, $zoneID);
// $memberInfo->uid = $mboid;
$memberInfo->img = $base->img; # 刷新下头像
$memberInfo->imgBorderId = $base->imgBorderId; # 刷新下头像框
$memberInfo->lastLogin = $base->lastLogin; # 成员最后登陆时间
unset($memberInfo->appliedguildlist);
unset($memberInfo->appliedguildRecord);
$memberArr[] = $memberInfo;
}
// $chairmanInfo = UserProc::getUserInfo($mem, $zoneID, $guildInfo->chairman_id);
// $guildInfo->chairmanLastLogin = $chairmanInfo->game->lastLogin;
return Resp::ok(array(
"guildInfo" => $guildInfo,
"member" => $memberArr,
));
}
/**
* [7006] 一键加入公会
*/
static function QuickIn() {
$mem = gMem();
$zoneid = req()->zoneid;
$uid = req()->uid; # fromoid
$guildId = req()->paras[0]; # 公会ID
$userGuildInfo = self:: getMemUserGuildInfo($uid, $zoneid); # 取玩家公会信息
my_Assert(0 == $userGuildInfo->guildId, ErrCode::err_guild_userhasbeenaguildmember); # 防御: 玩家已经加入某个公会
my_Assert($userGuildInfo->create_coding <= now(), ErrCode::err_guild_dissmisscodingtime); # 防御: 冷却中
$guildInfo = self::getMemGuildInfo($guildId, $zoneid); # 公会信息
my_Assert(isset($guildInfo), ErrCode::err_guild_guildinfono); # 找不到公会
my_Assert(!$guildInfo->checkmemberfull(), ErrCode::err_guild_memberfull); # 公会已满 Ps.公会成员数量 20~60
my_Assert(0 == $guildInfo->enableQuickIn, ErrCode::err_guild_quickinclosed); # 公会未开启一键加入功能(0 开放加入,1 需审批,2 不允许加入)
// 直接跳过审批流程
$guildInfo->members[] = $uid; # 添加成员
$userGuildInfo->Clear(); # 玩家数据清零
$userGuildInfo->guildId = $guildId;
$userGuildInfo->guildName = empty($guildInfo->name) ? "" : $guildInfo->name;
$userGuildInfo->appliedguildlist = array(); # 清空玩家申请记录
$userGuildInfo->joints = now();
$userGuildInfo->position = 'Member';
$guildInfo->updateGuildMemberCount(); # 同步更新一下数据库中公会成员数量
$guildInfo->updateDataFull(MemKey_Guild::getGuildInfo_hash($guildInfo->guildId, $zoneid)); # 回写公会数据
self::updateUserGuildInfo($userGuildInfo, $uid, $zoneid); # 回写玩家公会数据
return Resp::ok($userGuildInfo); # 设置成功返回值
}
//
//
/**
* 读Redis中玩家公会信息
* @param int $uid
* @param int $zoneid
* @return Data_UserGuild
*/
static function getMemUserGuildInfo($uid, $zoneid) {
$ret = new Data_UserGuild();
$ret->readDataFromMem(MemKey_Guild::getUserGuildInfo_hash($uid, $zoneid));
return $ret;
}
/**
* 回写玩家公会信息
* @param Data_UserGuild $userGuildInfo
* @param int $uid
* @param int $zoneid
*/
static function updateUserGuildInfo($userGuildInfo, $uid, $zoneid) {
$memkey = MemKey_Guild::getUserGuildInfo_hash($uid, $zoneid);
$userGuildInfo->updateDataFull($memkey); # 回写玩家公会数据
}
/**
* 取指定guildid的公会数据
* @param int $guildId
* @param int $zoneid
* @return Data_Guild/null
*/
static function getMemGuildInfo($guildId, $zoneid) {
$ret = new Data_Guild();
return $ret->readDataFromMem(MemKey_Guild::getGuildInfo_hash($guildId, $zoneid));
}
/**
* 获取公会列表缓存信息 ok
* @param type $page
* @param type $zoneid
* @return {"count":0,"ts":0,"table":[]}
*/
static function getGuildListCache($page, $zoneid) {
return gMem()->get(MemKey_Guild::guildListCache($page, $zoneid));
}
/**
* 更新并返回缓存的公会列表
* @param type $zoneid
* @param type $startIndex
* @param type $page
* @return type
*/
static function UpdateGuildListCache($zoneid, $startIndex, $page) {
$dbret = daoInst()->select()->from(self::tabGuild)
->where('zoneid')->eq($zoneid)
->limit("$startIndex ,20")
->fetchAll();
$count = daoInst()->select()->from(self::tabGuild)->where('zoneid')->eq($zoneid)->count();
$memList = ObjectInit();
$memList->ts = now(3); # 设置为3秒好了,如果体验差,再缩短一下
$memList->table = $dbret;
$memList->count = $count;
gMem()->set(MemKey_Guild::guildListCache($page, $zoneid), $memList); # 更新缓存的公会列表
return $memList;
}
/**
* 判断玩家是否公会会长
* @param type $uid
* @param type $guildInfo
* @return boolean
*/
static function isGuildChairman($uid, $guildInfo) {
return $guildInfo->chairman_id == $uid;
}
//
}