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::getUserGame($zoneID, $mboid)->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; } // }