cmd) { case CmdCode::cmd_fight_settle: # 6801 战斗结算 return FightProc::Settle(); case CmdCode::cmd_fight_PassGateTsPrizeReceive: # 6802 章节宝箱的领取 return FightProc::PassGateTsPrizeReceive(); case CmdCode::cmd_fight_selectGate: # 6803 关卡选择 return FightProc::SelectGate(); case CmdCode::cmd_fight_gateChallengePriceReviced: # 6804 挑战奖励 return FightProc::GateChallengePriceReviced(); case CmdCode::cmd_fight_evolveUnlock: # 6805 进化解锁 return FightProc::EvolveUnlock(); case CmdCode::cmd_fight_plotSav: # 6806 剧情回存 return FightProc::PlotSav(); case CmdCode::cmd_fight_xunluoPrizeReceived: #6807 巡逻奖励领取 return FightProc::XunluoPrizeReceived(); case CmdCode::fight_startFight: # 6808 开始挑战 return self::StartFight(); default: Err(ErrCode::cmd_err); } } /** * 6808 开始挑战 (扣除体力) */ private static function StartFight() { list($gateId) = req()->paras; my_Assert($gateId > 0, ErrCode::paras_err); $mo = GameConfig::gate_getItem($gateId); my_Assert(null != $mo, ErrCode::err_const_no); my_Assert(ctx()->base()->Consume_tili($mo->cost_tili), ErrCode::notenough_tili); 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; } /** * 剧情回存 * @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); } /** * 6805 进化解锁 * @return type */ public static function EvolveUnlock() { list($type, $id) = req()->paras; if ($type == 1) { $mo = GameConfig::evolve_getItem($id); my_Assert($mo != null, ErrCode::err_const_no); my_Assert(ctx()->baseInfo->gold >= $mo->needGold_unlock, ErrCode::notenough_gold_msg); ctx()->baseInfo->Consume_Gold($mo->needGold_unlock); ctx()->gates->evolveMaxId_left = $id; } else { $dic = GameConfig::evolve(); foreach ($dic as $key => $value) { if ($value->specificEvolveId == $id) { $mo = $value; } } my_Assert($mo != null, ErrCode::err_const_no); if ($mo->specificEvolveCost != null) { $cost = explode(',', $mo->specificEvolveCost); $costId = $cost[0]; $costNum = $cost[1]; my_Assert(StlUtil::dictHasProperty(ctx()->store->items, $costId) && ctx()->store->items->$costId >= $costNum, ErrCode::notenough_item); } ctx()->gates->evolveMaxId_right = $id; // my_Assert(ctx()->baseInfo->gold>=$mo->needGold_unlock, ErrCode::notenough_gold_msg); } UserProc::updateUserInfo(); $ret = array( 'store' => ctx()->store, 'gates' => ctx()->gates, ); return Resp::ok($ret); } /** * 6804 挑战奖励领取 * @return type */ public static function GateChallengePriceReviced() { list($zhangjieId, $gateId) = req()->paras; $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); if (!StlUtil::dictHasProperty(ctx()->gates->GatesChallengeRecord, $zhangjieId)) { ctx()->gates->GatesChallengeRecord->$zhangjieId = array(); } my_Assert(!in_array($gateId, ctx()->gates->GatesChallengeRecord->$zhangjieId), ErrCode::user_Gate_GatePriceHasReceive); my_Assert(in_array($gateMo->challengeUnlockId, ctx()->gates->GatesChallengeRecord->$zhangjieId), ErrCode::user_Gate_GateNoUnlock); ctx()->gates->GatesChallengeRecord->$zhangjieId[] = $gateId; StoreProc::AddMultiItemInStore($gateMo->reward_win); ctx()->gates->CurrentGateId = $gateId; UserProc::updateUserInfo(); $ret = array( 'store' => ctx()->store, 'gates' => ctx()->gates, ); return Resp::ok($ret); } /** * 关卡选择 * @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); } /** * 关卡战斗结算 * @return type */ public static function Settle() { list($resultType, $gateId, $gold, $curTs, $pickups) = req()->paras; $gateMo = GameConfig::gate_getItem($gateId); my_Assert($gateMo != null, ErrCode::err_const_no); my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $gateId), ErrCode::user_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; } StoreProc::AddMultiItemInStore($gateMo->reward_win); if(Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate){ ctx()->gates->UnlockNextPlotGate(); $dic = GameConfig::gate(); $index = 0; foreach ($dic as $id => $item) { if(Ints::Slice($gateId, 0, 1) == 2 && $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); UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, 'store' => ctx()->store, ); return Resp::ok($ret); } /** * 章节宝箱的领取 * @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::user_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) { StoreProc::AddMultiItemInStore($prize); $gateInfo->FirstReward = $mask; } ctx()->gates->GateList->$gateId = $gateInfo; UserProc::updateUserInfo(); $ret = array( 'gates' => ctx()->gates, 'store' => ctx()->store, ); return Resp::ok($ret); } }