|
@@ -529,7 +529,8 @@ class FightProc {
|
|
|
* @return type
|
|
|
*/
|
|
|
public static function Settle() {
|
|
|
- list($resultType, $gateId, $gold, $curTs, $pickups) = req()->paras;
|
|
|
+ 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);
|
|
@@ -542,43 +543,72 @@ class FightProc {
|
|
|
if ($resultType) { # 胜利
|
|
|
if (ctx()->gates->GateList->$gateId->pass == 0) {
|
|
|
ctx()->gates->GateList->$gateId->pass = 1;
|
|
|
- TaskProc::Day7TaskReset($gateId);
|
|
|
+ TaskProc::Day7TaskReset($gateId); # 刷新七日任务
|
|
|
}
|
|
|
- TaskProc::OnPassGate_X($gateId);
|
|
|
- StoreProc::AddMultiItemInStore($gateMo->reward_win);
|
|
|
+ TaskProc::OnPassGate_X($gateId); # 刷新任务进度: 通关第X关
|
|
|
+
|
|
|
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) {
|
|
|
+ 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 (str_len($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"); # 获得图纸
|
|
|
+ }
|
|
|
+ }
|
|
|
+ # 宝石奖励: 数量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); # 发放宝石并退出本次投色子
|
|
|
break;
|
|
|
}
|
|
|
+ $l += $item->p; # 累计到下一段
|
|
|
}
|
|
|
- } 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) {
|
|
|
+ if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainStoryGate) { # 主线剧情,
|
|
|
TaskProc::OnFightNumMainGate();
|
|
|
- } else if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainChallengeGate) {
|
|
|
+ } else if (Ins_GateInfo::GateTypeFromId($gateId) == Enum_GateType::MainChallengeGate) { # 主线剧情对应的难度挑战
|
|
|
TaskProc::OnFightNumChallengeGate();
|
|
|
}
|
|
|
- TaskProc::OnKillCommonNumMonster(1000);
|
|
|
- TaskProc::OnKillleaderNumMonster(500);
|
|
|
+ TaskProc::OnKillCommonNumMonster($killMonsterNum);
|
|
|
+ TaskProc::OnKillleaderNumMonster($killBossNum);
|
|
|
|
|
|
UserProc::updateUserInfo();
|
|
|
$ret = array(
|
|
@@ -654,6 +684,8 @@ class FightProc {
|
|
|
return Resp::ok($ret);
|
|
|
}
|
|
|
|
|
|
+// <editor-fold defaultstate="collapsed" desc="排行榜">
|
|
|
+
|
|
|
/**
|
|
|
* 参与主线关卡排行榜
|
|
|
* @param type $gateIndex
|
|
@@ -847,44 +879,46 @@ class FightProc {
|
|
|
* @return type
|
|
|
*/
|
|
|
public static function ReceiveRankReward_MainGate() {
|
|
|
- list($gateId) = req()->paras;
|
|
|
-
|
|
|
+ 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)){
|
|
|
+
|
|
|
+ $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;
|
|
|
-
|
|
|
+ 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)){
|
|
|
+
|
|
|
+ $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);
|
|
|
}
|
|
|
+
|
|
|
+ // </editor-fold>
|
|
|
}
|