FightProc.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace loyalsoft;
  3. require_once __DIR__ . '/FightProc/SweepGatesProc.php';
  4. require_once __DIR__ . '/FightProc/PVPProc.php';
  5. /**
  6. * 战斗业务逻辑分发
  7. * @author gwang
  8. */
  9. class FightProc {
  10. /**
  11. * 战斗逻辑分发
  12. * 所有的Proc中必须有这样一个方法
  13. */
  14. static function procMain() {
  15. switch (req()->cmd) {
  16. # 关卡-征战
  17. case CmdCode::cmd_fight_arenas_preFight: # 6800 关卡挑战 - 预先计算掉落
  18. return SweepGatesProc::Arenas_preFight();
  19. case CmdCode::cmd_fight_arenasfight: # 6801 挑战关卡
  20. return SweepGatesProc::Arenas_Fight();
  21. case CmdCode::cmd_fight_arenassweep: # [6802] 扫荡
  22. Err(ErrCode::function_notopen_msg); # 暂未开放扫荡功能. -gwang 2020.4.20
  23. return SweepGatesProc::Arenas_NewSweepFight();
  24. case CmdCode::cmd_fight_GetArenasActiveReward: # 6806 领取章节星级奖励
  25. return SweepGatesProc::DrawChapterStarsReward();
  26. // <editor-fold defaultstate="collapsed" desc=" 玩家挑战 ">
  27. case CmdCode::cmd_fight_GetChallengeAdversaryInfo: # 6803 获取挑战对手的信息
  28. return PVPProc::GetChallengeAdversaryInfo();
  29. case CmdCode::cmd_fight_LogChallengeResult: # 6804 记录挑战结果
  30. return PVPProc::LogChallengeInfo();
  31. case CmdCode::cmd_fight_GetChallengeLog: # 6805 拉取挑战记录
  32. return PVPProc::GetChagllengeLog();
  33. // </editor-fold>
  34. // <editor-fold defaultstate="collapsed" desc=" PVP 模块 681x ">
  35. case CmdCode::cmd_fight_pvp_maininfo: # [6810] 竞技场 主界面拉取信息
  36. return PVPProc::pvpMainInfo();
  37. case CmdCode::cmd_fight_pvp_refresh: # [6811] 竞技场 刷新对手列表
  38. return PVPProc::pvp_Refresh();
  39. case CmdCode::cmd_fight_pvp_pk: # [6812] 竞技场 挑战对手
  40. return PVPProc::pvp_PK();
  41. case CmdCode::cmd_fight_pvp_setTeam: # [6813] 竞技场 设定防守队伍
  42. return PVPProc::pvp_setTeam();
  43. case CmdCode::cmd_fight_pvp_buyTicket: # [6814] 竞技场 购买挑战票
  44. return PVPProc::pvp_buyticket();
  45. case CmdCode::cmd_fight_pvp_getrank: # [6815] 竞技场 查看排行榜
  46. return PVPProc::pvp_getRank();
  47. case CmdCode::cmd_fight_pvp_getLog: # [6816] 竞技场 查看挑战记录
  48. return PVPProc::pvp_getFightLogs();
  49. // </editor-fold>
  50. // <editor-fold defaultstate="collapsed" desc=" 竞技商店 682x ">
  51. case CmdCode::cmd_fight_pvpShop_getMainInfo: # [6820] 竞技场 竞技商店主界面
  52. return PVPProc::pvpShopMain();
  53. case CmdCode::cmd_fight_pvpShop_buy: # [6821] 竞技场 竞技商店购买道具
  54. return PVPProc::pvpShopBuy();
  55. case CmdCode::cmd_fight_pvpShop_refresh: # [6822] 竞技场 竞技商店刷新道具(扣钻)
  56. return PVPProc::pvpShopRefresh();
  57. // </editor-fold>
  58. case CmdCode::fight_worldBoss_refresh_rank : # 6834 查询世界boss伤害输出榜
  59. return self::GetWorldBossRank();
  60. case CmdCode::fight_endlessTower_Get: # 6841 查询无尽塔的进度
  61. return self::EndlessTower_Get();
  62. case CmdCode::fight_endlessTower_Up: # 6842 无尽塔升级
  63. return self::EndlessTower_Up();
  64. case CmdCode::fight_endlessTower_drawreward: # 6843 无尽塔,领取特殊奖励
  65. return self::EndlessTower_Drawreward();
  66. default:
  67. return Resp::err(ErrCode::cmd_err);
  68. }
  69. }
  70. //
  71. // <editor-fold defaultstate="collapsed" desc=" 世界boss ">
  72. /**
  73. * [6834] 查询世界boss伤害输出榜
  74. */
  75. static function GetWorldBossRank() {
  76. $zoneid = req()->zoneid;
  77. list($bossId) = req()->paras; # 提取参数bossid.
  78. $key = MemKey_GameRun::Game_WorldBoss_X_Rank($zoneid, $bossId);
  79. $rank = gMem()->zrange($key, 0, 50, true);
  80. return Resp::ok(array('rank' => $rank));
  81. }
  82. static function SettleWorldBoss($zoneId, $bossid) {
  83. $key = MemKey_GameRun::Game_WorldBoss_X_Rank($zoneId, $bossid);
  84. $range = gMem()->zrange($key, 0, -1); # 全部取出(暂时这么写吧)
  85. $i = 1;
  86. foreach ($range as $uid_name) {
  87. $rwd = $bossid == 2 ? self::getWorldbossRankReward2($i) : self::getWorldbossRankReward($i);
  88. $uid = substr($uid_name, 0, strpos($uid_name, "__"));
  89. EmailProc::SendWorldBossReward($zoneId, $uid, $i++, $rwd->rankName, $rwd->reward);
  90. }
  91. CLog::info("世界Boss($bossid)已结算,未更新结算标记(防止重复发放).");
  92. }
  93. /**
  94. * 按排名查询上榜奖励配置对象
  95. * @param type $index
  96. * @return \sm_worldboss_rankreward
  97. */
  98. static function getWorldbossRankReward($index) {
  99. $arr = (array) GameConfig::worldboss_rankreward();
  100. foreach ($arr as $i => $v) {
  101. isEditor() and $v = new \sm_worldboss_rankreward();
  102. if ($index >= $v->minRank && $index <= $v->maxRank) {
  103. return $v;
  104. }
  105. }
  106. return $arr[max(array_keys($arr))];
  107. }
  108. /**
  109. * 按排名查询上榜奖励配置对象
  110. * @param type $index
  111. * @return \sm_worldboss_rankreward2
  112. */
  113. static function getWorldbossRankReward2($index) {
  114. $arr = (array) GameConfig::worldboss_rankreward2();
  115. foreach ($arr as $i => $v) {
  116. isEditor() and $v = new \sm_worldboss_rankreward2();
  117. if ($index >= $v->minRank && $index <= $v->maxRank) {
  118. return $v;
  119. }
  120. }
  121. return $arr[max(array_keys($arr))];
  122. }
  123. // </editor-fold>
  124. //
  125. // <editor-fold defaultstate="collapsed" desc=" 无尽塔 ">
  126. /**
  127. * [6841] 查询无尽塔的进度
  128. */
  129. static function EndlessTower_Get() {
  130. return Resp::ok(array('index' => ctx()->privateData()->endlessTower));
  131. }
  132. /**
  133. * [6842] 无尽塔升级
  134. */
  135. static function EndlessTower_Up() {
  136. $gateId = 600001;
  137. list( $index) = req()->paras;
  138. my_Assert($index == ctx()->privateData()->endlessTower, ErrCode::Fight_endlessTower_index);
  139. ctx()->privateData()->endlessTower++; # 指向下一关
  140. // 发放奖励
  141. $mo = GameConfig::endless_tower_getItem($index); # 取配置信息
  142. my_Assert(isset($mo), ErrCode::err_const_no); # 防御
  143. $rsArr = str_replace(',', ';', $mo->rewardList); # 修复下奖励格式, ,=>;
  144. $rewardStr = str_replace('_', ',', $rsArr); # _ => ,
  145. $err = StoreProc::AddMultiItemInStore($rewardStr); # 发放奖励
  146. my_Assert(ErrCode::ok == $err, $err); # 防御代码
  147. UserProc::updateUserInfo(); # 更新
  148. TaskProc::OnPassEndlessCarboN($gateId, $index);
  149. var_dump("无尽塔");
  150. return Resp::ok(array('index' => ctx()->privateData()->endlessTower,
  151. 'baseInfo' => ctx()->base(),
  152. 'store' => ctx()->store()
  153. ));
  154. }
  155. static function EndlessTower_Drawreward() {
  156. list($index) = req()->paras;
  157. // my_Assert($index % 5 == 0, ErrCode::paras_err); # 领取指定关卡的特殊奖励(逢5/0才有)
  158. my_Assert(ctx()->privateData()->endlessTower >= $index, "请先完成挑战再来领奖!"); # 防御未通关直接领奖(刷接口)
  159. my_Assert(in_array($index, ctx()->privateData()->endlessTower_rewarded), "已经领取!"); # 防御已经领取
  160. $mo = GameConfig::endless_tower_getItem($index);
  161. my_Assert(isset($mo), ErrCode::err_const_no);
  162. my_Assert(strlen($mo->rewardOne) > 0, "该关卡无特殊奖励!");
  163. $rs = str_replace(',', ';', $mo->rewardOne); # 奖励串格式修复,
  164. $rewardStr = str_replace('_', ',', $rs);
  165. $err = StoreProc::AddMultiItemInStore($rewardStr); # 发放奖励
  166. my_Assert(ErrCode::ok == $err, $err); # 防御
  167. ctx()->privateData()->endlessTower_rewarded[] = $index; # 更新记录
  168. UserProc::updateUserInfo();
  169. return Resp::ok(array(# # 返回
  170. 'baseInfo' => ctx()->base(),
  171. 'store' => ctx()->store()
  172. ));
  173. }
  174. // </editor-fold>
  175. //
  176. /**
  177. * 清理每日字段
  178. */
  179. static function ClearByDay() {
  180. SweepGatesProc::ClearGateTimes(); # 清理每个难度副本的每日战斗次数
  181. $pvp = new Info_UserPVP(req()->userInfo->game->pvp);
  182. $pvp->refreshDailyData();
  183. $pvp->sendRewardEmail(req()->zoneid, req()->uid, PVPProc::GetCurSeasonID());
  184. req()->userInfo->game->pvp = $pvp;
  185. }
  186. }