cmd) { case CmdCode::fight_settle: # 6801 主线战斗结算 return FightProc::Settle(); case CmdCode::fight_PassGateTsPrizeReceive: # 6802 章节宝箱的领取 return FightProc::PassGateTsPrizeReceive(); case CmdCode::fight_selectGate: # 6803 主线剧情关卡选择 return FightProc::SelectGate(); case CmdCode::fight_gateChallengeRewards: # 6804 挑战关卡: 领取奖励 return FightProc::GateChallengeRewards(); case CmdCode::fihgt_towerStart: # 6805 挑战关卡: 开始挑战 return FightProc::ChallengeGateStartFight(); case CmdCode::fight_plotSav: # 6806 主线剧情(已播放)回存 return FightProc::PlotSav(); case CmdCode::fight_sweep: # 6807 主线扫荡 return FightProc::FightSweep(); case CmdCode::fight_startFight: # 6808 主线剧情关卡开始挑战 return self::StartFight(); case CmdCode::fight_tower_RefreshSkills: # 6809 挑战关卡: 刷新初始技能 return self::TowerRefreshSkills(); case CmdCode::fight_tower_updatelocklist: # 6810 挑战关卡: 更新技能锁定列表 return self::TowerUpdateLockskillList(); case CmdCode::fight_rankInfo: # 6811 获取主线关卡排行榜信息 return self::GetRankInfo(); case CmdCode::fight_rank_uidEquipInfo: # 6812 获取主线关卡榜内玩家的装备信息 return self::GetUidEquipInfo_Rank(); case CmdCode::fight_rank_GetMainGateRankRewardInfo: # 6813 获取通关荣誉榜信息 return self::GetmainGate_RankRewardInfo(); case CmdCode::fight_rank_GetFightPowerRankRewardInfo: # 6814 获取战力荣誉榜信息 return self::GetFightPower_RankRewardInfo(); case CmdCode::fight_rank_ReceiveRankReward_MainGate: # 6815 领取通关荣誉榜奖励 return self::ReceiveRankReward_MainGate(); case CmdCode::fight_rank_ReceiveRankReward_FightPower: # 6816 领取战力荣誉榜奖励 return self::ReceiveRankReward_FightPower(); default: Err(ErrCode::cmd_err); } } /** * 6807 扫荡 * @return type */ public static function FightSweep() { //list($gateId) = req()->paras; my_Assert(ctx()->gates->UnlockedGatesMaxId != 0, ErrCode::gate_NoSweep); $mo = GameConfig::gate_getItem(ctx()->gates->UnlockedGatesMaxId); $costTili = glc()->sweep_cost_tili; my_Assert(ctx()->baseInfo->tili >= $costTili, ErrCode::notenough_tili); $max = glc()->sweepMaxNum; my_Assert(ctx()->gates->fightSweepNum < $max, ErrCode::gate_SweepMaxNum_limit); ctx()->gates->fightSweepNum += 1; ctx()->baseInfo->Consume_tili($costTili); $prizeArr = array(); $prizeArr[] = $mo->reward_win; if ($mo->sweep_gold != null) { $goodsStr = self::sweepRandReward($mo->sweep_gold); $prizeArr[] = $goodsStr; StoreProc::AddMultiItemInStore($goodsStr); } if ($mo->sweep_tuzhi != null) { $goodsStr = self::sweepRandReward($mo->sweep_tuzhi); $prizeArr[] = $goodsStr; StoreProc::AddMultiItemInStore($goodsStr); } if ($mo->sweep_gem != null) { $goodsStr = self::sweepRandReward($mo->sweep_gem); $list = explode(',', $goodsStr); $posId = rand(1, 6); $qual = $list[0]; $dic = GameConfig::gem(); foreach ($dic as $key => $gemMo) { if ($gemMo->qual == $qual && $gemMo->position == $posId) { $prizeArr[] = $gemMo->typeId . ',' . $list[1]; StoreProc::PutGemInStore($gemMo->typeId, $list[1]); break; } } } if ($mo->sweep_qiling != null) { $goodsStr = self::sweepRandReward($mo->sweep_qiling); $prizeArr[] = $goodsStr; StoreProc::AddMultiItemInStore($goodsStr); } UserProc::updateUserInfo(); $ret = array( 'tili' => ctx()->baseInfo->tili, 'fightSweepNum' => ctx()->gates->fightSweepNum, 'prizeArr' => $prizeArr, 'store' => ctx()->store, 'task' => ctx()->task, ); return Resp::ok($ret); } static function sweepRandReward($rewardStr) { $ctxArr = explode(';', $rewardStr); $numArr = explode('-', $ctxArr[0]); $num = rand($numArr[0], $numArr[1]); $randNum = rand(1, 100); $start = 0; $end = 0; $res = ""; $itemArr = explode(',', $ctxArr[1]); foreach ($itemArr as $str) { $arr = explode(':', $str); $itemId = $arr[0]; $per = $arr[1]; $end += $per; if ($randNum >= $start && $randNum < $end) { $res = $itemId; break; } $start = $end; } return $res . ',' . $num; } /** * 6808 开始挑战 (主线关卡:扣除体力, 挑战关卡: 增加次数) */ private static function StartFight() { list($gateId, $layerNum) = req()->paras; my_Assert($gateId > 0, ErrCode::paras_err); $mo = GameConfig::gate_getItem($gateId); my_Assert(null != $mo, ErrCode::err_const_no); if (Ints::Slice($gateId, 0, 1) == 9) { # 爬塔模式 // list($layerNum) = req()->paras; if ($layerNum != ctx()->gates()->TowerGateInfo()->CurLayer) { # 起始层数校验 Err(ErrCode::tower_layerNum); } if (ctx()->gates()->TowerGateInfo()->TodayChanNum < 1) { # 剩余次数校验 Err(ErrCode::tower_timeNo); } ctx()->gates()->TowerGateInfo()->TodayChanNum--; # 增加次数 } else { # 主线剧情 my_Assert(ctx()->base()->Consume_tili($mo->cost_tili), ErrCode::notenough_tili); } UserProc::updateUserInfo(); return Resp::ok(array("tili" => ctx()->baseInfo->tili, "tili_ts" => ctx()->baseInfo->tili_ts)); } /** * [废弃] 6807 巡逻奖励领取 * @return type */ public static function XunluoPrizeReceived() { list($type) = req()->paras; $gateId = ctx()->gates->UnlockedGatesMaxId; $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); if ($type == 1) {//巡逻 $curTs = now(); $startTs = ctx()->gates->xunluo_StartTs; $ts = $curTs - $startTs; $ts2 = intval($ts / 60); //总的分钟数 $fenzhong = intval($ts2 / 10); //有几个10分钟 $gold = 0; $exp = 0; $price = ""; if ($fenzhong > 0) { $gold = intval($gateMo->gold_xunluo / 6 * $fenzhong); $exp = intval($gateMo->exp_xunluo / 6 * $fenzhong); $price = "1," . $gold . ';' . "4," . $exp; } $itemStr = explode(';', $gateMo->xunluo_item_ts); $itemId = 0; $itemNum = 0; $tempTs = 0; foreach ($itemStr as $s) { $arr = explode('-', $s); $tsItemArr = explode(',', $arr[0]); $sTs = $tsItemArr[0]; //开始时间 $eTs = $tsItemArr[1]; //终止时间 $produceTs = $tsItemArr[2]; //间隔 while (true) { $tempTs += $produceTs; if ($tempTs <= $eTs && $tempTs <= $ts2) { $sList = explode(',', $arr[1]); $itemId = $sList[0]; $itemNum += $sList[1]; } if ($tempTs >= $ts2) { break; } if ($tempTs >= $eTs) { $tempTs = $eTs; break; } } if ($tempTs >= $ts2) { break; } } if ($itemNum > 0) { $price = $price . ";" . $itemId . ',' . $itemNum; } //--------------------------- $tuzhiStr = explode(';', $gateMo->xunluo_tuzhi_ts); $tuzhiId = 0; $tuzhiNum = 0; $tempTs2 = 0; foreach ($tuzhiStr as $s) { $arr = explode('-', $s); $tsItemArr = explode(',', $arr[0]); $sTs = $tsItemArr[0]; //开始时间 $eTs = $tsItemArr[1]; //终止时间 $produceTs = $tsItemArr[2]; //间隔 while (true) { $tempTs2 += $produceTs; if ($tempTs2 <= $eTs && $tempTs2 <= $ts2) { $sList = explode(',', $arr[1]); $tuzhiId = $sList[0]; $tuzhiNum += $sList[1]; } if ($tempTs2 >= $ts2) { break; } if ($tempTs2 >= $eTs) { $tempTs2 = $eTs; break; } } if ($tempTs2 >= $ts2) { break; } } if ($tuzhiNum > 0) { $price = $price . ";" . $tuzhiId . ',' . $tuzhiNum; } //--------------------- $equipStr = explode(';', $gateMo->xunluo_equip_ts); $equipId = 0; $equipNum = 0; $tempTs3 = 0; foreach ($equipStr as $s) { $arr = explode('-', $s); $tsItemArr = explode(',', $arr[0]); $sTs = $tsItemArr[0]; //开始时间 $eTs = $tsItemArr[1]; //终止时间 $produceTs = $tsItemArr[2]; //间隔 while (true) { $tempTs3 += $produceTs; if ($tempTs3 <= $eTs && $tempTs3 <= $ts2) { $sList = explode(',', $arr[1]); $equipId = $sList[0]; $equipNum += $sList[1]; } if ($tempTs3 >= $ts2) { break; } if ($tempTs3 >= $eTs) { $tempTs3 = $eTs; break; } } if ($tempTs3 >= $ts2) { break; } } if ($equipNum > 0) { $price = $price . ";" . $equipId . ',' . $equipNum; } StoreProc::AddMultiItemInStore($price); ctx()->gates->xunluo_StartTs = now(); } else {//快速巡逻 my_Assert(ctx()->gates->xunluo_quick_buyRecord < $gateMo->xueluo_quick_num, ErrCode::err_const_no); ctx()->gates->xunluo_quick_buyRecord += 1; ctx()->baseInfo->Consume_tili(15); StoreProc::AddMultiItemInStore($gateMo->xueluo_quick_reward); } UserProc::updateUserInfo(); $ret = array( 'tili' => ctx()->baseInfo->tili, 'gates' => ctx()->gates, ); return Resp::ok($ret); } public static function FightDailyClear() { //ctx()->gates->xunluo_quick_buyRecord = 0; ctx()->gates->fightSweepNum = 0; ctx()->gates()->TowerGateInfo()->RefreshSkillTimes = 0; ctx()->gates()->TowerGateInfo()->TodayChanNum = glc()->tower_daily_chanceNum; } /** * 6806 剧情回存 * @return type */ public static function PlotSav() { list($gateId) = req()->paras; my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId), ErrCode::err_const_no); ctx()->gates->GateList->$gateId->plotStart = 1; UserProc::updateUserInfo(); $ret = array( 'ok' => 1, ); return Resp::ok($ret); } // /** * 6810 挑战关卡: 更新锁定技能列表 */ public static function TowerUpdateLockskillList() { list($li_zd, $li_bd, $li_zds, $li_bds) = req()->paras; # 参数解析 $t = ctx()->gates()->TowerGateInfo(); # 记忆技能刷新结果 $t->skill_zhudong = $li_zd; $t->skill_beidong = $li_bd; $t->skill_zhudong_lockState = $li_zds; $t->skill_beidong_lockState = $li_bds; UserProc::updateUserInfo(); return Resp::ok(); } /** * 6809 挑战关卡: 刷新初始技能(扣除免费次数/cost) */ public static function TowerRefreshSkills() { list($isFree, $li_zd, $li_bd, $li_zds, $li_bds) = req()->paras; # 参数解析 if ($isFree) { if (ctx()->gates()->TowerGateInfo()->RefreshSkillTimes >= glc()->tower_daily_refreshChanceNum) { Err(ErrCode::tower_refreshNo); # 免费次数不足 } } else { list($type, $num) = explode(':', glc()->tower_refreshCost); # 二级货币类型(1:金币,2:元宝):数量 if ($type == 1) { # 金币 my_Assert(ctx()->base()->Consume_Gold($num), ErrCode::notenough_gold_msg); } else if ($type == 2) { # 元宝 my_Assert(ctx()->base()->Consume_Cash($num), ErrCode::notenough_cash_msg); } else { Err(ErrCode::err_const_no, "检查刷新扣费配置信息!"); } } $t = ctx()->gates()->TowerGateInfo(); # 记忆技能刷新结果 $t->RefreshSkillTimes++; $t->skill_zhudong = $li_zd; $t->skill_beidong = $li_bd; $t->skill_zhudong_lockState = $li_zds; $t->skill_beidong_lockState = $li_bds; UserProc::updateUserInfo(); $ret = array( 'task' => ctx()->task, ); return Resp::ok($ret); } /** * 6805 * @return type * @deprecated since version 2024年5月17日 已合并到6801 */ public static function ChallengeGateStartFight() { // list($layerNum) = req()->paras; // if ($layerNum != ctx()->gates()->TowerGateInfo()->CurLayer) { # 起始层数校验 // return Resp::err(ErrCode::tower_layerNum); // } // if (ctx()->gates()->TowerGateInfo()->TodayChanNum < 1) { # 剩余次数校验 // return Resp::err(ErrCode::tower_timeNo); // } // ctx()->gates()->TowerGateInfo()->TodayChanNum--; # 增加次数 // UserProc::updateUserInfo(); // return Resp::ok(); } /** * 6804 挑战关卡: 奖励领取 * @return type */ public static function GateChallengeRewards() { list($finalLayer) = req()->paras; # 战斗结束时的层数 $lastLayer = ctx()->gates()->TowerGateInfo()->CurLayer; $arr = GameConfig::waves_getItemArray(self::TowerGateId); if ($finalLayer > $lastLayer) { foreach ($arr as $layerId => $layerMo) { if ($layerId >= $lastLayer && $layerId < $finalLayer) { my_Assert($layerMo != null, ErrCode::err_const_no); StoreProc::AddMultiItemInStore($layerMo->rewards); # 发放奖励 } } ctx()->gates()->TowerGateInfo()->CurLayer = $finalLayer; UserProc::updateUserInfo(); $ret = array( 'store' => ctx()->store, 'gold' => ctx()->base()->gold, 'cash' => ctx()->base()->cash, 'task' => ctx()->task, ); return Resp::ok($ret); } return Resp::err(ErrCode::tower_rewardNo); # 没有奖励 } // /** * 6803 关卡选择 * @return type */ public static function SelectGate() { list($gateId) = req()->paras; ctx()->gates->CurrentGateId = $gateId; UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, ); return Resp::ok($ret); } /** * 6802 章节宝箱的领取 * @return type */ public static function PassGateTsPrizeReceive() { list($gateId, $index) = req()->paras; $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId), ErrCode::gate_NoUserGateInfo); $gateInfo = ctx()->gates->GateList->$gateId; $tag = false; $prize = ""; $mask = 0; switch ($index) { case 1: $ts = $gateMo->first_ts1 * 60; if ($gateInfo->MaxSeconds >= $ts) { $tag = true; } $mask = 1; $prize = $gateMo->first_reward1; break; case 2: $ts = $gateMo->first_ts2 * 60; if ($gateInfo->MaxSeconds >= $ts) { $tag = true; } $mask = 2; $prize = $gateMo->first_reward2; break; case 3: if ($gateInfo->pass > 0) { $tag = true; } $mask = 3; $prize = $gateMo->first_reward3; break; default: break; } if ($tag) { my_Assert($mask > $gateInfo->FirstReward, ErrCode::gate_GatePriceHasReceive); $gateInfo->FirstReward = $mask; StoreProc::AddMultiItemInStore($prize); } ctx()->gates->GateList->$gateId = $gateInfo; UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, 'store' => ctx()->store, 'task' => ctx()->task, 'gold' => ctx()->baseInfo->gold, ); return Resp::ok($ret); } /** * [6801]关卡战斗结算 * @return type */ public static function Settle() { list($resultType, $gateId, $gold, $curTs, $pickups, $finalLayer, $finalHpPercent, $killMonsterNum, $killBossNum) = req()->paras; # 客户端需要增加参数: killmonserNum,killBosssNum, finalHpPercent(最终血量百分比) $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId), ErrCode::gate_NoUserGateInfo); $gateInfo = ctx()->gates->GateList->$gateId; $ts = $gateInfo->MaxSeconds; if ($curTs >= $ts) { $gateInfo->MaxSeconds = $curTs; } if ($resultType) { # 胜利 if (ctx()->gates->GateList->$gateId->pass == 0) { ctx()->gates->GateList->$gateId->pass = 1; TaskProc::Day7TaskReset($gateId); # 刷新七日任务 $maxGateId= ctx()->gates->maxPassGateId(); if($maxGateId > 0){ self::Ranking_MainGateIndex($maxGateId); } } TaskProc::OnPassGate_X($gateId); # 刷新任务进度: 通关第X关 if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate) { ctx()->gates()->UnlockNextPlotGate(); # 解锁下一主线关卡 // ctx()->gates()->UnlockMainChallengeGate($gateId); # 挑战关卡解锁逻辑. -gwang 2024年4月15日 } else { # 不是主线关卡, 暂时没有其他逻辑 } // StoreProc::AddMultiItemInStore($gateMo->reward_win); # 发放胜利奖励(2024.5.30 过期) } // else { # 失败 //// StoreProc::AddMultiItemInStore($gateMo->reward_fail); # 发放失败奖励(2024.5.30 过期) // } StoreProc::AddMultiItemInStore($pickups); # 战场拾取道具直接入背包 ctx()->base()->Add_Gold($gold); # 战场拾取的金币直接入背包 //ctx()->base()->Add_Exp($exp); $waveMo = GameConfig::waveItem_getItem($gateId, $finalLayer); my_Assert(null != $waveMo, ErrCode::err_const_no); ctx()->base()->Add_Exp($waveMo->rewardExp); # 指挥官经验 ctx()->base()->Add_Gold($waveMo->rewardGold); # 金币奖励 # 图纸奖励: 数量min-max, 部位随机 if (strlen($waveMo->rewardTuZhi) > 0 && str_contains($waveMo->rewardTuZhi, '-')) { list($tz_min, $tz_max) = str_split($waveMo->rewardTuZhi); # 图纸数量 $tz_n = rand($tz_min, $tz_max); # 图纸部位数据源 1001, 1002, 1003, 1004, 1005, 1006 for ($i = 0; $i < $tz_n; $i++) { $id = 1000 + rand(1, 6); StoreProc::AddMultiItemInStore("$id,1"); # 获得图纸 $pickups .= ";$id,1"; } } # 宝石奖励: 数量min-max;品质:权重,品质:权重... if (strlen($waveMo->rewardGem) > 0) { list($gs_num, $gs_props) = str_split($waveMo->rewardGem, ';'); list($gem_min, $gem_max) = str_split($gs_num); # 宝石数量 $gem_n = rand($gem_min, $gem_max); $arr = str_split($gs_props, ","); $pool = array(); $n = 0; foreach ($arr as $str) { list($qual, $props) = str_split($str, ':'); $pool[] = array('q' => $qual, 'p' => $props); $n += $props; } for ($i = 0; $i < $gem_n; $i++) { # 随机n块宝石 $r = rand($n); # 投色子 $l = 0; foreach ($pool as $item) { if ($r < ($l + $item->p)) { $gemId = $item->q * 10000 + rand(6) * 1000; StoreProc::PutGemInStore($gemId); # 发放宝石并退出本次投色子 $pickups .= ";$gemId,1"; break; } $l += $item->p; # 累计到下一段 } } } if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate) { # 主线剧情, TaskProc::OnFightNumMainGate(); } else if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainChallengeGate) { # 主线剧情对应的难度挑战 TaskProc::OnFightNumChallengeGate(); } TaskProc::OnKillCommonNumMonster($killMonsterNum); TaskProc::OnKillleaderNumMonster($killBossNum); UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, 'store' => ctx()->store, 'task' => ctx()->task, 'baseInfo' => ctx()->base(), 'gold' => $gold + $waveMo->rewardGold, 'exp' => $waveMo->rewardExp, 'rewardStr' => $pickups ); return Resp::ok($ret); } /** * [6801]关卡战斗结算 * @return type */ public static function Settle_bak() { list($resultType, $gateId, $gold, $curTs, $pickups) = req()->paras; # 客户端需要增加参数: killmonserNum,killBosssNum, finalHpPercent(最终血量百分比) $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId), ErrCode::gate_NoUserGateInfo); $gateInfo = ctx()->gates->GateList->$gateId; $ts = $gateInfo->MaxSeconds; if ($curTs >= $ts) { $gateInfo->MaxSeconds = $curTs; } if ($resultType) { # 胜利 if (ctx()->gates->GateList->$gateId->pass == 0) { ctx()->gates->GateList->$gateId->pass = 1; TaskProc::Day7TaskReset($gateId); } TaskProc::OnPassGate_X($gateId); StoreProc::AddMultiItemInStore($gateMo->reward_win); if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate) { ctx()->gates->UnlockNextPlotGate(); $dic = GameConfig::gate(); $index = 0; # 挑战关卡解锁逻辑. -gwang 2024年4月15日 foreach ($dic as $id => $item) { if (Ins_GateInfo::GateTypeFromId($id) == Enum_GateType::MainChallengeGate && $item->challengeGateId == $gateId) { $index += 1; $gate = new Ins_GateInfo(); $gate->GateId = $id; ctx()->gates->GateList->$id = $gate; } if ($index >= 3) { break; } } } else { } } else { # 失败 StoreProc::AddMultiItemInStore($gateMo->reward_fail); } StoreProc::AddMultiItemInStore($pickups); # 战场拾取道具 ctx()->baseInfo->Add_Gold($gold); //ctx()->baseInfo->Add_Exp($exp); if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate) { TaskProc::OnFightNumMainGate(); } else if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainChallengeGate) { TaskProc::OnFightNumChallengeGate(); } TaskProc::OnKillCommonNumMonster(1000); TaskProc::OnKillleaderNumMonster(500); UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, 'store' => ctx()->store, 'task' => ctx()->task, ); return Resp::ok($ret); } // /** * 参与主线关卡排行榜 * @param type $gateIndex */ public static function Ranking_MainGateIndex($maxGateIndex) { $memKey = MemKey_GameRun::Rank_MainGateIndex_Zone_zset(req()->zoneid); $mem = gMem(); $uid = req()->uid; $arr = array(); $arr["$uid"] = $maxGateIndex; $mem->zadd($memKey, $arr); $length = $mem->zlen($memKey); if ($length > glc()->Rank_MainGateIndex_OnListRank) { $num = $length - glc()->Rank_MainGateIndex_OnListRank; $mem->zremrangebyrank($memKey, 0, $num - 1); } } /** * 战力榜 * @param type $gateIndex */ public static function Ranking_FightPower() { $memKey = MemKey_GameRun::Rank_FightPower_Zone_zset(req()->zoneid); $mem = gMem(); $arr = array(); $uid = req()->uid; $power = 10; $arr["$uid"] = $power; $mem->zadd($memKey, $arr); $length = $mem->zlen($memKey); if ($length > glc()->Rank_FightPower_OnListRank) { $num = $length - glc()->Rank_FightPower_OnListRank; $mem->zremrangebyrank($memKey, 0, $num - 1); } } /** * 6811 获取主线关卡排行榜信息 * @return type */ public static function GetRankInfo() { list($type) = req()->paras; $selfIsHasRank = 0; //本人是否上榜 0未上榜没有排名 1上榜则selfRank就是排名 $selfExtraInfo = 0; $isExistFinishReward = false; if ($type == 1) { $list = gMem()->zrevrange(MemKey_GameRun::Rank_MainGateIndex_Zone_zset(req()->zoneid), 0, glc()->Rank_MainGateIndex_OnListRank, true); $selfExtraInfo = ctx()->gates->UnlockedGatesMaxId; $memKey = MemKey_GameRun::RankReward_MainGateIndex_Zone_hash(req()->zoneid); $dic = gMem()->hgetall($memKey); foreach ($dic as $gateId => $ins_rank) { if(!in_array($gateId, ctx()->privateState->rankReward_drawed_MainGate)){ $isExistFinishReward = true; break; } } } else { $list = gMem()->zrevrange(MemKey_GameRun::Rank_FightPower_Zone_zset(req()->zoneid), 0, glc()->Rank_FightPower_OnListRank, true); $selfExtraInfo = 0; //战力还没有 $memKey = MemKey_GameRun::RankReward_FightPower_Zone_hash(req()->zoneid); $dic = gMem()->hgetall($memKey); foreach ($dic as $fightPower => $ins_rank) { if(!in_array($fightPower, ctx()->privateState->rankReward_drawed_fightPower)){ $isExistFinishReward = true; break; } } } $selfRank = self::initOtherUidRankInfo(req()->uid, $selfExtraInfo); $retArr = array(); if (count($list) > 0) { foreach ($list as $uid => $score) { $rankInfo = self::initOtherUidRankInfo($uid, $score); if ($rankInfo->uid == req()->uid) { $selfIsHasRank = 1; $selfRank = $rankInfo; } $retArr[] = $rankInfo; } } UserProc::updateUserInfo(); $ret = array( 'rankInfo' => $retArr, 'selfRank' => $selfRank, 'selfIsHasRank' => $selfIsHasRank, 'isExistFinishReward'=>$isExistFinishReward, ); return Resp::ok($ret); } /** * 初始化玩家rank * @param type $uid * @param type $score * @return \loyalsoft\Ins_rank */ static function initOtherUidRankInfo($uid, $score) { $ins_rank = new Ins_rank(); $lv = gMem()->zrank(MemKey_GameRun::Rank_MainGateIndex_Zone_zset(req()->zoneid), $uid); if ($lv == null) { $lv = 0; } $ins_rank->rank = $lv + 1; $ins_rank->uid = $uid; $userInfo = UserProc::getUserGame(req()->zoneid, $uid); $ins_rank->name = $userInfo->baseInfo->name; $ins_rank->headImg = $userInfo->baseInfo->headImg; $ins_rank->score = $score; return $ins_rank; } /** * 6812 获取排行榜内玩家的装备信息 * @return type */ public static function GetUidEquipInfo_Rank() { list($uid) = req()->paras; $userInfo = UserProc::getUserGame(req()->zoneid, $uid); $store = $userInfo->store; $heros = $userInfo->heros; UserProc::updateUserInfo(); $ret = array( 'store' => $store, 'heros' => $heros, ); return Resp::ok($ret); } /** * 通关奖励是否达成 * @param type $maxGateIndex */ public static function IsAchievedMainGate_PassReward($maxGateIndex) { $rewards = GameConfig::rank_passgatereward(); $memKey = MemKey_GameRun::RankReward_MainGateIndex_Zone_hash(req()->zoneid); foreach ($rewards as $passGateId => $mo) { if ($passGateId == $maxGateIndex && !gMem()->hexists($memKey, $maxGateIndex)) { $ins_rank = new Ins_rank(); $ins_rank->uid = req()->uid; $ins_rank->name = ctx()->baseInfo->name; $ins_rank->headImg = ctx()->baseInfo->headImg; $ins_rank->score = $passGateId; gMem()->hset($memKey, $maxGateIndex, $ins_rank); break; } } } /* * 战力奖励是否达成 */ public static function IsAchievedFightPower_PassReward() { $power = 0; //临时 $rewards = GameConfig::rank_fightpowerreward(); $memKey = MemKey_GameRun::RankReward_FightPower_Zone_hash(req()->zoneid); foreach ($rewards as $fightPower => $mo) { if ($power >= $fightPower && !gMem()->hexists($memKey, $fightPower)) { $ins_rank = new Ins_rank(); $ins_rank->uid = req()->uid; $ins_rank->name = ctx()->baseInfo->name; $ins_rank->headImg = ctx()->baseInfo->headImg; $ins_rank->score = $fightPower; gMem()->hset($memKey, $fightPower,$ins_rank); } } } /** * 6813 * @return type */ public static function GetmainGate_RankRewardInfo() { //list($type) = req()->paras; $memKey = MemKey_GameRun::RankReward_MainGateIndex_Zone_hash(req()->zoneid); $dic = gMem()->hgetall($memKey); // $retArr = new \stdClass(); // foreach ($dic as $gateId => $uid) { // $ins_rank = new Ins_rank(); // $ins_rank->uid = $uid; // $userInfo = UserProc::getUserGame(req()->zoneid, $uid); // $ins_rank->name = $userInfo->baseInfo->name; // $ins_rank->headImg = $userInfo->baseInfo->headImg; // $ins_rank->score = $gateId; // $retArr->$gateId = $ins_rank; // } UserProc::updateUserInfo(); $ret = array( 'rankReward' => $dic, ); return Resp::ok($ret); } /** * 6814 * @return type */ public static function GetFightPower_RankRewardInfo() { //list($type) = req()->paras; $memKey = MemKey_GameRun::RankReward_FightPower_Zone_hash(req()->zoneid); $dic = gMem()->hgetall($memKey); // $retArr = new \stdClass(); // foreach ($dic as $fightPower => $uid) { // $ins_rank = new Ins_rank(); // $ins_rank->uid = $uid; // $userInfo = UserProc::getUserGame(req()->zoneid, $uid); // $ins_rank->name = $userInfo->baseInfo->name; // $ins_rank->headImg = $userInfo->baseInfo->headImg; // $ins_rank->score = $fightPower; // $retArr->$fightPower = $ins_rank; // } UserProc::updateUserInfo(); $ret = array( 'rankReward' => $dic, ); return Resp::ok($ret); } /** * 6815 领取通关荣誉榜奖励 * @return type */ public static function ReceiveRankReward_MainGate() { list($gateId) = req()->paras; my_Assert(!in_array($gateId, ctx()->privateState->rankReward_drawed_MainGate), ErrCode::rankReward_HasReceive); $mo = GameConfig::rank_passgatereward_getItem($gateId); my_Assert($mo != null, ErrCode::err_const_no); $memKey = MemKey_GameRun::RankReward_MainGateIndex_Zone_hash(req()->zoneid); if (gMem()->hexists($memKey, $gateId)) { StoreProc::AddMultiItemInStore($mo->reward); ctx()->privateState->rankReward_drawed_MainGate[] = $gateId; } UserProc::updateUserInfo(); $ret = array(); return Resp::ok($ret); } /** * 6816 领取战力荣誉榜奖励 * @return type */ public static function ReceiveRankReward_FightPower() { list($fightPower) = req()->paras; my_Assert(!in_array($fightPower, ctx()->privateState->rankReward_drawed_fightPower), ErrCode::rankReward_HasReceive); $mo = GameConfig::rank_passgatereward_getItem($fightPower); my_Assert($mo != null, ErrCode::err_const_no); $memKey = MemKey_GameRun::RankReward_FightPower_Zone_hash(req()->zoneid); if (gMem()->hexists($memKey, $fightPower)) { StoreProc::AddMultiItemInStore($mo->reward); ctx()->privateState->rankReward_drawed_fightPower[] = $fightPower; } UserProc::updateUserInfo(); $ret = array(); return Resp::ok($ret); } // }