<?php

//
//namespace loyalsoft;
//
////define("GUILDAPPLYCAPACITY", 99);                                               # 公会申请记录的容量限制
////define("CREATECODINGTIME", 86400);                                              # 退出公会开除会员后有24小时冷却时间, 不能加入其他公会
////define("GUILDIDBASE", 100000);                                                  # 公会ID开始增长的基础值
////define("GUILDMAXJOURNALCOUNT", 80);                                             # 公会日志最多存80条记录
////define("ACCUSESUCCEEDNUM", 3);                                                  # 弹劾会长成功人数
////define("ACCUSEFAILNUM", 2);                                                     # 弹劾会长失败人数
////define("GUILDCUPSCOREREFUSE", 86400);                                           # 公会积分刷新时间间隔
//#
////// 获取公会列表,PS根据等级排序
////define("SQLSELECTGUILDBYLEVEL", "SELECT * FROM `tab_guild`  where `zoneid`=%d  ORDER BY `cupScore` DESC,`createts` LIMIT %s,20;");
////// 查询公会总数量
////define("SELECTGUILDCOUNT", "SELECT COUNT(`id`) FROM `tab_guild`  where `zoneid`=%d ;");
////// 通过名称模糊查询公会
////define("SQLSELECTGUILDBYNAME", "SELECT * FROM `tab_guild` WHERE `zoneid`=%d and (`guildId`=%d OR `name` like '%s') LIMIT 10;");
////// 通过guildid查询公会
////define("SQLSELECTGUILDBYGUILDID", "SELECT * FROM `tab_guild` WHERE `zoneid`=%d and `guildId`=%d ;");
////// 检查公会名称是否已存在 =: 各区也不能重名
////define("SQLCHECKISNAMEEXIST", "SELECT `id` FROM `tab_guild` WHERE `name`='%s' ");
////// 创建公会
////define("SQLCREATEGUILD", "INSERT INTO `tab_guild` (`guildId`, `name`, `createts`,`declare`,`membercount`, `chairman_id`, `chairman_name`,`guild_img`,`zoneid`,`cupScore`,`enableQuickIn`,`condition`) VALUES (%d, '%s',%d, '%s', %d,'%s','%s','%s', %d, %d,%d,'%s'); ");
////// 更新公会成员数量
////define("SQLUPDATEGUILDMEMBERCOUNT", "UPDATE `tab_guild` SET `membercount`=%d WHERE `guildId`=%d  and `zoneid`=%d ;");
////// 更新公会的公告/宗旨 徽章
////define("SQLUPDATEGUILDDECLARE", "UPDATE `tab_guild` SET `declare`='%s',`guild_img`='%s',`enableQuickIn`=%d,`condition`='%s' where `guildId`=%d and `zoneid`=%d;");
////// 解散公会
////define("SQLDISSMISS", "DELETE FROM `tab_guild` WHERE `guildId`=%d and `zoneid`=%d; ");
////// 更新公会会长id name
////define("SQLUPDATECHAIRMAN", "UPDATE `tab_guild` SET `chairman_id`='%s',`chairman_name`='%s' WHERE `guildId`=%d  and `zoneid`=%d ;");
////// 更新公会积分
////define("SQLUPDATEGUILDCUPSTORE", "UPDATE `tab_guild` SET `cupScore`=%d WHERE `guildId`=%d  and `zoneid`=%d ;");
//
///**
// *  公会模块
// */
//class GuildProc {
//
//    /**
//     * 表名
//     */
//    const tabGuild = 'tab_guild';
//
//    /**
//     * 创建公会的冷却时间
//     */
//    const create_codingTime = 86400;
//
//    /**
//     * 逻辑分发
//     * 所有的Proc中必须有这样一个方法
//     */
//    static function procMain() {
//        switch (req()->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();
//
//            // <editor-fold defaultstate="collapsed" desc=" 注释掉">
////            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);
//            // </editor-fold>
//            default:
//                return Err(ErrCode::cmd_err);
//        }
//    }
//
//// <editor-fold defaultstate="collapsed" desc="公会基础操作">
//
//    /**
//     * [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;
//
//        $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);                                        # 设置成功返回值
//    }
//
//// </editor-fold>
//// <editor-fold defaultstate="collapsed" desc="公会封装函数集合">
//
//    /**
//     * 读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;
//    }
//
//// </editor-fold>
//}
