ActiveProc.php 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165
  1. <?php
  2. /*
  3. * To change this license header, choose License Headers in Project Properties.
  4. * To change this template file, choose Tools | Templates
  5. * and open the template in the editor.
  6. */
  7. namespace loyalsoft;
  8. /**
  9. * Description of ActiveProc
  10. *
  11. * @author c'y'zhao
  12. */
  13. class ActiveProc {
  14. const tab_token_gift = "tab_token_gift";
  15. /**
  16. * 逻辑分发
  17. * 所有的Proc中必须有这样一个方法
  18. * @param Req $req
  19. */
  20. public static function procMain($req) {
  21. switch ($req->cmd) {
  22. case CmdCode::cmd_active_day7_drawreward: # 6101 签到
  23. return ActiveProc::Day7_DrawReward();
  24. case CmdCode::cmd_active_drawPackageByCode: # 6102 兑换码礼包
  25. return ActiveProc::drawPackageByCode();
  26. case CmdCode::cmd_active_lottery_Tree: # 6103 转盘抽奖
  27. return ActiveProc::lottery_Tree();
  28. case CmdCode::cmd_active_lottery_Tree_cashExchange: # 6104 元宝兑换抽奖券
  29. return ActiveProc::lottery_Tree_cashExchange();
  30. case CmdCode::cmd_active_lotteryNumBox_RewardReceived: # 6105 抽奖宝箱奖励领取
  31. return ActiveProc::lotteryNumBox_RewardReceived();
  32. case CmdCode::cmd_active_LotteryExchangeItem: # 6106 兑换
  33. return ActiveProc::LotteryExchangeItem();
  34. case CmdCode::cmd_active_day7_accumulateDrawreward: # 6107 7日签到 累计天数宝箱奖励领取
  35. return ActiveProc::Day7_AccumulateDrawreward();
  36. case CmdCode::cmd_active_limitTsBuy: # 6108 限时贩售
  37. return ActiveProc::LimitTsBuy_Drawreward();
  38. case CmdCode::cmd_active_battlePassDrawReward: # 6109 战令奖励领取
  39. return ActiveProc::BattlePassDrawReward();
  40. case CmdCode::cmd_active_day7_drawreward_newPlayer: # 6110 新手7日签到领取奖励
  41. return ActiveProc::Day7_Drawreward_NewPlayer();
  42. case CmdCode::cmd_active_getTodayOnlineInfos: # 6111 查询当天在线时长信息
  43. return self::GetTodayOnlineInfos();
  44. case CmdCode::cmd_active_draw_onlinegift: # 6112 领取在线(时长)礼包
  45. return self::DrawOnlineGift();
  46. case CmdCode::cmd_active_YanBaoBuyItemActive_drawReward:
  47. return self::YanBaoBuyItemActive_drawReward();
  48. case CmdCode::active_FlipCardLottery_DrawCardReward: # 6114 金蛇献瑞抽奖
  49. return self::FlipCardLottery_DrawReward();
  50. case CmdCode::active_FlipCardLottery_BuyTickets: # 6115 金蛇献瑞购买抽奖券
  51. return self::FlipCardLottery_BuyTickets();
  52. case CmdCode::active_FlipCardLottery_DrawGrandReward: # 6116 领取大奖信息
  53. return self::FlipCardLottery_DrawGrandReward();
  54. case CmdCode::active_FlipCardLottery_DrawAccumulateReward: # 6117 领取卡牌累计次数奖励
  55. return self::FlipCardLottery_DrawAccumulateReward();
  56. case CmdCode::active_FlipCardLottery_Exchange: # 6118 金蛇兌換 6118 金蛇兌換
  57. return self::FlipCardLottery_Exchange();
  58. default:
  59. Err(ErrCode::cmd_err);
  60. }
  61. }
  62. /**
  63. * 每日重置数据
  64. */
  65. public static function ResetActiveInfos() {
  66. ctx()->privateState->flipCardNum_daily = 0;
  67. ActiveProc::DailyResetDay7Task();
  68. self::ClearOnlineGiftTs();
  69. ActiveProc::ClearYanBaoBuyItemActive_drawReward();
  70. }
  71. /**
  72. * 重置金蛇数据
  73. */
  74. public static function ClearFlipCardInfo() {
  75. //活动结束
  76. $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::FlipCardLottery);
  77. if (now() >= $mo->startTs && now() < $mo->endTs && $mo->endTs != ctx()->privateState->flipCardLottery_endTs) {//当活动重启再次开启的时候再重置数据
  78. ctx()->privateState->flipCardLottery_startTs = now();
  79. ctx()->privateState->flipCardLottery_endTs = $mo->endTs;
  80. ctx()->privateState->flipCardNum_all = 0;
  81. ctx()->privateState->flipCardNum_turnNum = 0;
  82. //初始化大奖
  83. ctx()->privateState->flipCard_RewardRecord = array();
  84. ctx()->privateData(true)->flipCard_randGrandReward = self::RandGrandRewardOrder();
  85. ctx()->privateState->flipCardLottery_AccumulateReward = array();
  86. //初始化对应任务数据
  87. self::InitFlipLotteryTask();
  88. }
  89. }
  90. /**
  91. * 初始化金蛇任务数据
  92. */
  93. public static function InitFlipLotteryTask() {
  94. $activeTaskInfo = ctx()->task->activeTaskInfo;
  95. $arr = array();
  96. foreach ($activeTaskInfo as $taskUid => $ins_task) {
  97. $ins_taskStep_active = new Ins_TaskStep_Active($ins_task);
  98. if ($ins_taskStep_active->mo()->type == Enum_ActiveTaskType::FlipCardLotteryTask) {
  99. $arr[] = $taskUid;
  100. }
  101. }
  102. if (count($arr) > 0) {
  103. foreach ($arr as $uid) {
  104. StlUtil::dictRemove($activeTaskInfo, $uid);
  105. }
  106. }
  107. $list = explode(',', GameConfig::glc2()->FlipCardLotteryTask);
  108. $length = ctx()->task->activeTaskLength;
  109. foreach ($list as $taskId) {
  110. $mo = GameConfig::activeTask_getItem($taskId);
  111. my_Assert(null != $mo, ErrCode::err_const_no);
  112. $length += 1;
  113. $ins_TaskStep_Active = new Ins_TaskStep_Active($mo->id);
  114. $ins_TaskStep_Active->uid = $length;
  115. $ins_TaskStep_Active->state = Enum_TaskCardStateType::ing;
  116. ctx()->task->activeTaskInfo->$length = $ins_TaskStep_Active;
  117. }
  118. ctx()->task->activeTaskLength = $length;
  119. TaskProc::autoRecoverState_activeTask();
  120. }
  121. /**
  122. * 6118 金蛇兌換
  123. */
  124. public static function FlipCardLottery_Exchange() {
  125. list($id) = req()->paras;
  126. $arr = array_count_values(ctx()->privateState->flipCardLottery_exchange);
  127. $num = $arr[$id];
  128. $mo = GameConfig::activity_flipcardlottery_exchange_getItem($id);
  129. my_Assert($mo != null, ErrCode::err_const_no);
  130. my_Assert($num < $mo->exchangeNum, ErrCode::active_lotteryExchangeNumLimit);
  131. $itemNum = 0;
  132. $cost = explode(',', $mo->cost);
  133. $costId = $cost[0];
  134. if (StlUtil::dictHasProperty(ctx()->store->items, $costId)) {
  135. $itemNum = ctx()->store->items->$costId;
  136. }
  137. my_Assert($itemNum >= $cost[1], ErrCode::notenough_item);
  138. ctx()->store->removeItem($costId, $cost[1]);
  139. StoreProc::AddMultiItemInStore($mo->reward);
  140. ctx()->privateState->flipCardLottery_exchange[] = $id;
  141. UserProc::updateUserInfo();
  142. return Resp::ok(array(
  143. "store" => ctx()->store,
  144. 'cash' => ctx()->baseInfo->cash,
  145. 'gold' => ctx()->baseInfo->gold,
  146. 'reward' => StoreProc::$reward,
  147. 'reward_Gem' => StoreProc::$reward_Gem,
  148. 'reward_equip' => StoreProc::$reward_equip,
  149. ));
  150. // return Resp::ok(array(
  151. // 'gold' => ctx()->baseInfo->gold,
  152. // 'cash' => ctx()->baseInfo->cash,
  153. // 'store' => ctx()->store,
  154. // 'heros' => ctx()->heros,
  155. // 'privateState' => ctx()->privateState,
  156. // 'reward_equip'=> StoreProc::$reward_equip,
  157. // 'reward_Gem'=> StoreProc::$reward_Gem,
  158. // 'reward'=> StoreProc::$reward,
  159. // ));
  160. }
  161. /**
  162. * 6117 领取卡牌累计次数奖励
  163. */
  164. public static function FlipCardLottery_DrawAccumulateReward() {
  165. $dic = GameConfig::activity_flipcardlottery_accumulate();
  166. $accumulateRewardList = ctx()->privateState->flipCardLottery_AccumulateReward;
  167. $allNum = ctx()->privateState->flipCardNum_all;
  168. foreach ($dic as $numId => $mo) {
  169. if ($allNum >= $numId && !in_array($numId, $accumulateRewardList)) {
  170. StoreProc::AddMultiItemInStore($mo->reward);
  171. ctx()->privateState->flipCardLottery_AccumulateReward[] = $numId;
  172. }
  173. }
  174. return Resp::ok(array(
  175. 'gold' => ctx()->baseInfo->gold,
  176. 'cash' => ctx()->baseInfo->cash,
  177. 'store' => ctx()->store,
  178. 'heros' => ctx()->heros,
  179. 'privateState' => ctx()->privateState,
  180. 'reward_equip' => StoreProc::$reward_equip,
  181. 'reward_Gem' => StoreProc::$reward_Gem,
  182. 'reward' => StoreProc::$reward,
  183. ));
  184. }
  185. /**
  186. * 6116 领取大奖信息
  187. * @return type
  188. */
  189. public static function FlipCardLottery_DrawGrandReward() {
  190. //list() = req()->paras; # 提取参数
  191. $lineArr = array();
  192. $list = ctx()->privateState->flipCard_randGrandReward;
  193. $index = 0;
  194. foreach ($list as $orderId) {
  195. $mo = GameConfig::activity_flipCardLottery_lineIds_getItem($index);
  196. $s = explode(',', $mo->cardIds);
  197. $tag = true;
  198. foreach ($s as $cId) {
  199. if (!self::isExistCard($cId)) {
  200. $tag = false;
  201. break;
  202. }
  203. }
  204. if ($tag) {
  205. $lineArr[] = $orderId;
  206. }
  207. $index += 1;
  208. }
  209. if (count($lineArr) >= GameConfig::glc2()->FlipCardLottery_ResetNum) {
  210. $reward = self::GetCurGrandReward();
  211. if ($reward != "") {
  212. $str = explode(';', $reward);
  213. foreach ($lineArr as $orderId) {
  214. $s = explode(',', $str[$orderId]);
  215. StoreProc::AddMultiItemInStore($s[0] . ',' . $s[1]);
  216. }
  217. }
  218. ctx()->privateState->flipCard_RewardRecord = array();
  219. ctx()->privateData(true)->flipCard_randGrandReward = self::RandGrandRewardOrder();
  220. ctx()->privateState->flipCardNum_turnNum += 1;
  221. }
  222. return Resp::ok(array(
  223. 'gold' => ctx()->baseInfo->gold,
  224. 'cash' => ctx()->baseInfo->cash,
  225. 'store' => ctx()->store,
  226. 'heros' => ctx()->heros,
  227. 'privateState' => ctx()->privateState,
  228. 'reward_equip' => StoreProc::$reward_equip,
  229. 'reward_Gem' => StoreProc::$reward_Gem,
  230. 'reward' => StoreProc::$reward,
  231. ));
  232. }
  233. /*
  234. * 6114 金蛇献瑞抽奖
  235. */
  236. public static function FlipCardLottery_DrawReward() {
  237. //list() = req()->paras; # 提取参数
  238. //my_Assert(!in_array($id, ctx()->privateState->flipCard_RewardRecord) , ErrCode::active_hasgetted);
  239. my_Assert(ctx()->privateState->flipCardNum_daily < GameConfig::glc2()->FlipCardLotteryNum_Daily, ErrCode::active_lotteryNumLimit);
  240. $itemId = 802;
  241. $item = GameConfig::item();
  242. foreach ($item as $key => $value) {
  243. if($value->itemType == 802){
  244. $itemId = $value->typeId;
  245. break;
  246. }
  247. }
  248. $itemNum = 0;
  249. if(StlUtil::dictHasProperty(ctx()->store->items, $itemId)){
  250. $itemNum = ctx()->store->items->$itemId;
  251. }
  252. my_Assert($itemNum > 0 , ErrCode::notenough_item);
  253. ctx()->store()->removeItem($itemId, 1);
  254. $cardId = self::RandCardReward();
  255. my_Assert($cardId != 0, ErrCode::active_const_no_err);
  256. $rewards = GameConfig::glc2()->FlipCardLottery_CardRewards;
  257. $str = explode(';', $rewards);
  258. $per = 0;
  259. foreach ($str as $key => $value) {
  260. $s = explode(',', $value);
  261. $per += $s[2];
  262. }
  263. $randNum = rand(1, $per);
  264. $start = 0;
  265. $end = 0;
  266. $rewardStr = "";
  267. foreach ($str as $key => $value) {
  268. $s = explode(',', $value);
  269. $end += $s[2];
  270. if ($randNum > $start && $randNum <= $end) {
  271. $rewardStr = $cardId . "-" . $s[0] . "-" . $s[1];
  272. StoreProc::AddMultiItemInStore($s[0] . "," . $s[1]);
  273. break;
  274. }
  275. $start = $end;
  276. }
  277. ctx()->privateData(true)->flipCard_RewardRecord[] = $rewardStr;
  278. ctx()->privateData(true)->flipCardNum_daily += 1;
  279. ctx()->privateData(true)->flipCardNum_all += 1;
  280. $dic = GameConfig::activity_flipCardLottery_lineIds();
  281. $lineList = array();
  282. $curUnlockLine = array();
  283. foreach ($dic as $id => $mo) {
  284. $s = explode(',', $mo->cardIds);
  285. $tag = true;
  286. foreach ($s as $cId) {
  287. if (!self::isExistCard($cId)) {
  288. $tag = false;
  289. break;
  290. }
  291. }
  292. if ($tag) {
  293. $lineList[] = $id;
  294. if (in_array($cardId, $s)) {
  295. $curUnlockLine[] = $id;
  296. }
  297. }
  298. }
  299. //$grandReward = array();
  300. return Resp::ok(array(
  301. 'gold' => ctx()->baseInfo->gold,
  302. 'cash' => ctx()->baseInfo->cash,
  303. 'store' => ctx()->store,
  304. 'heros' => ctx()->heros,
  305. 'privateState' => ctx()->privateState,
  306. 'cardReward' => $rewardStr,
  307. //'grandReward' => $grandReward,
  308. 'curUnlockLine' => $curUnlockLine,
  309. // 'reward_equip'=> StoreProc::$reward_equip,
  310. 'cardId' => $cardId,
  311. ));
  312. }
  313. public static function isExistCard($id) {
  314. foreach (ctx()->privateData(true)->flipCard_RewardRecord as $key => $value) {
  315. $arr = explode('-', $value);
  316. if ($arr[0] == $id) {
  317. return true;
  318. }
  319. }
  320. return false;
  321. }
  322. public static function GetCurGrandReward() {
  323. $turnNum = ctx()->privateState->flipCardNum_turnNum;
  324. //$lineList = array();
  325. $dic = GameConfig::activity_flipcardlottery_grandreward();
  326. $reward = "";
  327. foreach ($dic as $id => $mo) {
  328. if ($turnNum >= $mo->flipCount_start && $turnNum <= $mo->flipCount_end) {
  329. $reward = $mo->reward;
  330. break;
  331. }
  332. }
  333. return $reward;
  334. }
  335. /**
  336. * 初始化大奖信息 12个大奖在数组的位置对应了 界面上 0-12个位置
  337. * @return type
  338. */
  339. public static function RandGrandRewardOrder() {
  340. $numbers = range(0, 11);
  341. // 使用shuffle函数打乱数组顺序
  342. shuffle($numbers);
  343. return $numbers;
  344. }
  345. /**
  346. * 随机抽取一个卡牌
  347. * @return int
  348. */
  349. public static function RandCardReward() {
  350. $randGrandReward = ctx()->privateState->flipCard_randGrandReward;
  351. $grandReward = self::GetCurGrandReward();
  352. $gList = explode(';', $grandReward);
  353. $cId = 0;
  354. $index = 0;
  355. $noflipArr = array();
  356. foreach ($randGrandReward as $orderId) {
  357. $mo = GameConfig::activity_flipCardLottery_lineIds_getItem($index);
  358. $s = explode(',', $mo->cardIds);
  359. $tag = true;
  360. foreach ($s as $cid) {
  361. if (!self::isExistCard($cid)) {
  362. $tag = false;
  363. break;
  364. }
  365. }
  366. if (!$tag) {//true 意思就是没有被全部翻牌
  367. $noflipArr[] = $orderId;
  368. }
  369. $index += 1;
  370. }
  371. $perNum = 0; //大奖总概率
  372. foreach ($noflipArr as $k) {
  373. $s = explode(',', $gList[$k]);
  374. $perNum += $s[2];
  375. }
  376. $rand = rand(1, $perNum);
  377. $start = 0;
  378. $end = 0;
  379. $grandId = 999;
  380. foreach ($noflipArr as $k) {
  381. $s = explode(',', $gList[$k]);
  382. $end += $s[2];
  383. if ($rand > $start && $rand <= $end) {
  384. $grandId = $k;
  385. break;
  386. }
  387. $start = $end;
  388. }
  389. if ($grandId != 999) {
  390. $lineId = array_search($grandId, $randGrandReward);
  391. $lineMo = GameConfig::activity_flipCardLottery_lineIds_getItem($lineId);
  392. $str = explode(',', $lineMo->cardIds);
  393. $cardArr = array();
  394. foreach ($str as $cardId) {
  395. if (!self::isExistCard($cardId)) {
  396. $cardArr[] = $cardId;
  397. }
  398. }
  399. $n = rand(0, count($cardArr) - 1);
  400. $cId = $cardArr[$n];
  401. }
  402. return $cId;
  403. }
  404. /*
  405. * 6115 金蛇献瑞购买抽奖券
  406. */
  407. public static function FlipCardLottery_BuyTickets() {
  408. list($num) = req()->paras; # 提取参数
  409. my_Assert($num <= GameConfig::glc2()->FlipCardLottery_BuyTickets_MaxNumLimit, ErrCode::active_flipCardLotteru_buyNumLimit);
  410. $cash = $num * GameConfig::glc2()->FlipCardLottery_Yuanbao_BuyOneTickets;
  411. my_Assert(ctx()->baseInfo->cash >= $cash, ErrCode::notenough_cash_msg);
  412. ctx()->base(true)->Consume_Cash($cash);
  413. $str = '802,' . $num;
  414. StoreProc::AddMultiItemInStore($str);
  415. return Resp::ok(array(
  416. 'cash' => ctx()->baseInfo->cash,
  417. 'store' => ctx()->store,
  418. 'reward' => StoreProc::$reward,
  419. ));
  420. }
  421. /**
  422. * [6112] 领取连续在线礼包
  423. */
  424. static function YanBaoBuyItemActive_drawReward() {
  425. list($typeId) = req()->paras; # 提取参数: 礼包的编号
  426. $Mo = GameConfig::activity_cashmall_getItem($typeId); # 常量数据
  427. my_Assert(null != $Mo, ErrCode::err_const_no); # 防御找不到配置数据
  428. my_Assert(ctx()->baseInfo->cash >= explode(',', $Mo->cost)[1], ErrCode::notenough_cash_msg);
  429. ctx()->baseInfo->Consume_Cash(explode(',', $Mo->cost)[1]);
  430. $rewardArr = ctx()->privateState->YuanbaoBuy_RewardRecord;
  431. $count = array_count_values($rewardArr)[$typeId];
  432. my_Assert($count < $Mo->limitNum, ErrCode::user_shop_LimitNum);
  433. // my_Assert(!in_array($typeId, ctx()->privateData()->YuanbaoBuy_RewardRecord), # # 判断礼包ID是否已经领取
  434. // ErrCode::active_hasgetted);
  435. $err = StoreProc::AddMultiItemInStore($Mo->reward); # 发放奖励
  436. my_Assert(ErrCode::ok == $err, $err); # 发放奖励失败
  437. ctx()->privateData(true)->YuanbaoBuy_RewardRecord[] = $typeId; # 记录已领礼包ID
  438. UserProc::updateUserInfo(); # 回写用户数据
  439. return Resp::ok(array(
  440. "reward" => StoreProc::$reward,
  441. "reward_Gem" => StoreProc::$reward_Gem,
  442. "reward_equip" => StoreProc::$reward_equip,
  443. 'gold' => ctx()->base()->gold,
  444. 'cash' => ctx()->base()->cash,
  445. 'store' => ctx()->store(),
  446. 'heros' => ctx()->heros()
  447. )); # 设置返回值
  448. }
  449. public static function GetTodayOnlineInfos() {
  450. return Resp::ok(array(
  451. 'onlineGiftts' => ctx()->privateState->onlineGiftts,
  452. 'onlineGiftIDs' => ctx()->privateState->onlineGiftIDs,
  453. ));
  454. }
  455. /**
  456. * 清理/重置 在线礼包时间戳
  457. */
  458. public static function ClearOnlineGiftTs() {
  459. ctx()->privateState->onlineGiftts = 1;
  460. ctx()->privateState->onlineGiftIDs = array();
  461. ctx()->privateState->flipCardNum_daily = 0;
  462. }
  463. /**
  464. * 清理/重置 元宝商城购买记录
  465. */
  466. public static function ClearYanBaoBuyItemActive_drawReward() {
  467. ctx()->privateState->YuanbaoBuy_RewardRecord = array();
  468. }
  469. /**
  470. * [6112] 领取连续在线礼包
  471. */
  472. static function DrawOnlineGift() {
  473. list($giftid) = req()->paras; # 提取参数: 礼包的编号
  474. $giftData = GameConfig::activity_onlinegift_getItem($giftid); # 在线礼包常量数据
  475. my_Assert(null != $giftData, ErrCode::onlinegift_constno_err); # 防御找不到配置数据
  476. // my_Assert($privateState->onlineGiftts + 30 >= $giftData->onlineSec, # # 时间未到,不可以领取
  477. // ErrCode::onlinegift_timenotenough);
  478. my_Assert(ctx()->privateState->onlineGiftts >= $giftData->onlineSec, #
  479. ErrCode::active_day7_expired);
  480. my_default_Arr(ctx()->privateData()->onlineGiftIDs); # 防御未初始化领取记录
  481. my_Assert(!in_array($giftid, ctx()->privateData()->onlineGiftIDs), # # 判断礼包ID是否已经领取
  482. ErrCode::active_hasgetted);
  483. $err = StoreProc::AddMultiItemInStore($giftData->rewardstr); # 发放奖励
  484. my_Assert(ErrCode::ok == $err, $err); # 发放奖励失败
  485. ctx()->privateData(true)->onlineGiftIDs[] = $giftid; # 记录已领礼包ID
  486. //$privateState->onlineGiftts = 0; #每次领取奖励则时间重新计算
  487. UserProc::updateUserInfo(); # 回写用户数据
  488. return Resp::ok(array(
  489. 'onlineGiftts' => ctx()->privateState->onlineGiftts,
  490. 'onlineGiftIDs' => ctx()->privateState->onlineGiftIDs,
  491. "reward" => StoreProc::$reward,
  492. "reward_Gem" => StoreProc::$reward_Gem,
  493. "reward_equip" => StoreProc::$reward_equip,
  494. 'gold' => ctx()->base()->gold,
  495. 'cash' => ctx()->base()->cash,
  496. 'tili' => ctx()->base()->tili,
  497. 'tili_ts' => ctx()->base()->tili_ts,
  498. 'store' => ctx()->store(),
  499. 'heros' => ctx()->heros()
  500. )); # 设置返回值
  501. }
  502. /**
  503. * 6106 抽奖里面的兑换
  504. * @return type
  505. */
  506. public static function LotteryExchangeItem() {
  507. list($id) = req()->paras;
  508. $arr = array_count_values(ctx()->privateState->lotteryExchange);
  509. $num = $arr[$id];
  510. $mo = GameConfig::activity_lotteryitem_exchange_getItem($id);
  511. my_Assert($mo != null, ErrCode::err_const_no);
  512. my_Assert($num < $mo->exchangeNum, ErrCode::active_lotteryExchangeNumLimit);
  513. $itemNum = 0;
  514. $cost = explode(',', $mo->cost);
  515. $costId = $cost[0];
  516. if (StlUtil::dictHasProperty(ctx()->store->items, $costId)) {
  517. $itemNum = ctx()->store->items->$costId;
  518. }
  519. my_Assert($itemNum >= $cost[1], ErrCode::notenough_item);
  520. ctx()->store->removeItem($costId, $cost[1]);
  521. StoreProc::AddMultiItemInStore($mo->reward);
  522. ctx()->privateState->lotteryExchange[] = $id;
  523. UserProc::updateUserInfo();
  524. return Resp::ok(array(
  525. "store" => ctx()->store,
  526. 'cash' => ctx()->baseInfo->cash,
  527. 'gold' => ctx()->baseInfo->gold,
  528. 'reward' => StoreProc::$reward,
  529. 'reward_Gem' => StoreProc::$reward_Gem,
  530. 'reward_equip' => StoreProc::$reward_equip,
  531. ));
  532. }
  533. /**
  534. * 6105 抽奖宝箱奖励领取
  535. * @return type
  536. */
  537. public static function lotteryNumBox_RewardReceived() {
  538. list($id) = req()->paras;
  539. $mo = GameConfig::activity_lotterynum_accumulate_getItem($id);
  540. my_Assert($mo != null, ErrCode::err_const_no);
  541. my_Assert(ctx()->privateState->lotteryNum >= $id, ErrCode::active_lotteryNumNotEnough);
  542. my_Assert(!in_array($id, ctx()->privateState->lotteryNumRewardReceived), ErrCode::active_hasgetted);
  543. StoreProc::AddMultiItemInStore($mo->reward);
  544. ctx()->privateState->lotteryNumRewardReceived[] = $id;
  545. UserProc::updateUserInfo();
  546. return Resp::ok(array(
  547. "store" => ctx()->store,
  548. 'cash' => ctx()->baseInfo->cash,
  549. 'reward' => StoreProc::$reward,
  550. 'reward_Gem' => StoreProc::$reward_Gem,
  551. 'reward_equip' => StoreProc::$reward_equip,
  552. ));
  553. }
  554. /**
  555. * 6103 转盘抽奖
  556. */
  557. public static function lottery_Tree() {
  558. list($num) = req()->paras; //抽奖次数 1 10
  559. $arr = array(1, 10);
  560. my_Assert(in_array($num, $arr), ErrCode::active_lotteryNumErr);
  561. my_Assert(ctx()->privateState->lotteryNum + $num <= glc()->activity_lottery_allNum, ErrCode::active_lotteryNumLimit);
  562. $costTag = true;
  563. if ($num == 1 && ctx()->privateState->lotteryNum_free < GameConfig::glc2()->activity_lottery_FreeNum + GameConfig::glc2()->activity_lottery_GuanggaoNum) {
  564. $costTag = false;
  565. }
  566. if ($num == 1) {
  567. ctx()->privateState->lotteryNum_free += 1;
  568. }
  569. if ($costTag) {
  570. $cost = "";
  571. if ($num == 1) {
  572. $cost = glc()->activity_lottery_tree_one_cost;
  573. } else {
  574. $cost = glc()->activity_lottery_tree_ten_cost;
  575. }
  576. my_Assert($cost != "", ErrCode::active_lotteryCostErr);
  577. $costArr = explode(',', $cost);
  578. $item = ctx()->store->items;
  579. $costId = $costArr[0];
  580. $costNum = $costArr[1];
  581. my_Assert(StlUtil::dictHasProperty($item, $costId) && $item->$costId >= $costNum, ErrCode::notenough_item);
  582. ctx()->store->removeItem($costId, $costNum);
  583. }
  584. if (ctx()->privateState->lotteryNum_free > GameConfig::glc2()->activity_lottery_FreeNum && ctx()->privateState->lotteryNum_free <= GameConfig::glc2()->activity_lottery_FreeNum + GameConfig::glc2()->activity_lottery_GuanggaoNum) {
  585. my_Assert(now() - ctx()->privateData(true)->activity_lottery_guanggaoTs >= GameConfig::glc2()->activity_lottery_GuanggaoDownTs, ErrCode::user_shop_DownTsLimit);
  586. ctx()->privateData(true)->activity_lottery_guanggaoTs = now();
  587. TaskProc::OnLookGuanggao();
  588. }
  589. if (ctx()->privateState->lotteryNum < glc()->activity_lottery_allNum) {
  590. ctx()->privateState->lotteryNum += $num;
  591. }
  592. $rewardList = array();
  593. $dic = GameConfig::activity_lottery_tree();
  594. for ($i = 0; $i < $num; $i++) {
  595. $randNum = random_int(1, 10000);
  596. $start = 0;
  597. $end = 0;
  598. foreach ($dic as $id => $mo) {
  599. $end += $mo->per * 10000;
  600. if ($randNum > $start && $randNum <= $end) {
  601. $rewardList[] = $id;
  602. StoreProc::AddMultiItemInStore($mo->reward);
  603. $prize = explode(',', $mo->reward);
  604. if (GameConfig::item_getItem($prize[0])->itemType == 201 && GameConfig::item_getItem($prize[0])->quality >= 4 && ctx()->privateState->lottery_qualGem_4 == 0) {
  605. ctx()->privateState->lottery_qualGem_4 = 1;
  606. }
  607. break;
  608. }
  609. $start = $end;
  610. }
  611. }
  612. UserProc::updateUserInfo();
  613. return Resp::ok(array(
  614. "store" => ctx()->store,
  615. 'reward' => StoreProc::$reward,
  616. 'reward_Gem' => StoreProc::$reward_Gem,
  617. 'reward_equip' => StoreProc::$reward_equip,
  618. 'gold' => ctx()->baseInfo->gold,
  619. 'cash' => ctx()->baseInfo->cash,
  620. 'privateState' => ctx()->privateState,
  621. 'indexReward' => $rewardList,
  622. 'heros' => ctx()->heros,
  623. ));
  624. }
  625. /**
  626. * 元宝兑换寻宝券
  627. * @return type
  628. */
  629. public static function lottery_Tree_cashExchange() {
  630. list($num) = req()->paras; //抽奖次数 1 10
  631. $cost = "";
  632. if ($num == 1) {
  633. $cost = glc()->activity_lottery_tree_one_cost;
  634. } else {
  635. $cost = glc()->activity_lottery_tree_ten_cost;
  636. }
  637. my_Assert($cost != "", ErrCode::active_lotteryCostErr);
  638. $costArr = explode(',', $cost);
  639. $item = ctx()->store->items;
  640. $costId = $costArr[0];
  641. $costNum = $costArr[1];
  642. $selfNum = 0;
  643. if (StlUtil::dictHasProperty($item, $costId)) {
  644. $selfNum = $item->$costId;
  645. }
  646. my_Assert($selfNum < $costNum, ErrCode::active_lottery_unwantedExchange);
  647. $costNum -= $selfNum;
  648. $cash = glc()->activity_lottery_oneCost_cash * $costNum;
  649. my_Assert(ctx()->baseInfo->cash >= $cash, ErrCode::notenough_cash_msg);
  650. ctx()->baseInfo->Consume_Cash($cash);
  651. StoreProc::AddMultiItemInStore($costId . ',' . $costNum);
  652. UserProc::updateUserInfo();
  653. return Resp::ok(array(
  654. "store" => ctx()->store,
  655. 'cash' => ctx()->baseInfo->cash,
  656. ));
  657. }
  658. /**
  659. * 6102 兑换码礼包
  660. */
  661. static function drawPackageByCode() {
  662. list($activeId, $codestring) = req()->paras; # 取参数 活动id, 兑换码
  663. $codePlatStr = "";
  664. $packageID = 0;
  665. if (self::PublicTokenCodeCheck($codestring)) {
  666. $packageInfo = GameConfig::token_PublicGift_getItem($codestring);
  667. my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
  668. ErrCode::active_activecode_outtime);
  669. my_Assert(!in_array($packageInfo->id, ctx()->privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
  670. $packageID = $packageInfo->id;
  671. //$err = StoreProc::AddMultiItemInStore($packageInfo->reward); # 发放礼包
  672. EmailProc::SendPackageByCodeMail(req()->zoneid, req()->uid, $packageInfo->reward);
  673. my_Assert(ErrCode::ok == $err, $err);
  674. } else {
  675. $active = GameConfig::activity_getItem($activeId); # 活动数据
  676. my_Assert(null != $active, ErrCode::active_const_no_err);
  677. my_Assert($active->startts <= now() && $active->endts >= now(), ErrCode::active_time); # 校验开放时间
  678. my_Assert(preg_match("/^[a-kmnp-z2-9]{10}$/", $codestring), ErrCode::active_activecode_format); # 基础格式校验(10个特定字符)
  679. $activeCode = CipheredBase32::Decode($codestring); # 解码
  680. $codePlatStr = GameConstants::GetPlatStringByActivteCode($activeCode); # platstr
  681. my_Assert(GameConstants::AllPlatStr == $codePlatStr # # 忽略全平台礼包
  682. || req()->getPlatStr() == $codePlatStr, # # 平台字符串必须相符
  683. ErrCode::active_activecode_plat); # # 平台错误
  684. my_Assert(is_int($activeCode->number) # # 编号为int值
  685. && $activeCode->number >= 1 && $activeCode->number <= 50000, # # 检查 兑换码的编号范围0~50000
  686. ErrCode::active_activecode_format);
  687. $packageID = $activeCode->package; # 礼包id
  688. $packageInfo = GameConfig::token_gift_getItem($packageID); # 礼包常量数据
  689. my_Assert(null != $packageInfo, ErrCode::err_const_no); # 防御
  690. CLog::err(json_encode($packageInfo));
  691. my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
  692. ErrCode::active_activecode_outtime); # 激活码已经失效,或者礼包尚未开启
  693. $privateState = new Info_PrivateState(ctx()->privateState); # 快速访问
  694. my_Assert(!in_array($packageID, $privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
  695. my_Assert(!self::checkActiveCodeIsUsed($activeCode), ErrCode::active_activecode_used); # 检查 该激活码是否别人已经使用过了
  696. $err = StoreProc::AddMultiItemInStore($packageInfo->reward); # 发放礼包
  697. EmailProc::SendPackageByCodeMail(req()->zoneid, req()->uid, $packageInfo->reward);
  698. // my_Assert(ErrCode::ok == $err, $err); # 防御发放礼包过程出错
  699. $ok = self::setActiveCodeUserRecord($activeCode, req()->uid); # 插入数据库
  700. my_Assert($ok, ErrCode::err_db); # 数据库操作失败- 重试
  701. }
  702. ctx()->privateState->usedTokens[] = $packageID;
  703. UserProc::updateUserInfo(); # 回存玩家数据
  704. $ret = array(# # 返回值
  705. "plat" => $codePlatStr,
  706. "packageId" => $packageID,
  707. "reward" => $packageInfo->reward,
  708. 'gold' => ctx()->base()->gold,
  709. 'cash' => ctx()->base()->cash,
  710. //'tili' => ctx()->base()->tili,
  711. 'store' => ctx()->store,
  712. //'hero' => ctx()->heros,
  713. );
  714. return Resp::ok($ret); # 返回成功信息
  715. }
  716. public static function PublicTokenCodeCheck($codestring) {
  717. $dic = GameConfig::token_PublicGift();
  718. if (StlUtil::dictHasProperty($dic, $codestring)) {
  719. return true;
  720. }
  721. return false;
  722. }
  723. /**
  724. * 检查兑换码是否已经使用过了
  725. * @param ActiveCode $activeCode
  726. * @return boolean true : 已经用过了, false : 激活码尚未使用过.
  727. */
  728. static function checkActiveCodeIsUsed($activeCode) {
  729. $sql = sprintf("`plat`='%d' and `package`='%d' and `number`='%d'", # # where 子句
  730. $activeCode->plat, $activeCode->package, $activeCode->number);
  731. $rows = daoInst()
  732. ->select()
  733. ->from(self::tab_token_gift) # 表名
  734. ->where($sql)
  735. ->count();
  736. return $rows > 0;
  737. }
  738. /**
  739. * 将兑换码添加到使用记录中
  740. * @param ActiveCode $actvieCode
  741. * @param string $uid
  742. * @return boolean true: 操作成功, false: 操作失败
  743. */
  744. static function setActiveCodeUserRecord($actvieCode, $uid) {
  745. $actvieCode->uid = $uid; # 添加uid
  746. $ret = daoInst()
  747. ->insert(self::tab_token_gift) # 表名
  748. ->data($actvieCode)
  749. ->exec();
  750. return $ret > 0;
  751. }
  752. /**
  753. * 7日签到 数据更新
  754. */
  755. public static function DailyResetDay7Task($unlock = false) {
  756. if (!$unlock && !FightProc::isFunUnlock(5)) {//之所以这有两个判断是因为这个 活动解锁的代码监测位置问题,fightProc 里解锁监测代码在 $gateInfo->tz_state = $index;之前了 这个位置没有办法解锁
  757. return;
  758. }
  759. if (count(ctx()->privateState->LoginDays) >= 7) {
  760. ctx()->privateState->LoginDays = array();
  761. ctx()->privateState->day7_drawed = array();
  762. }
  763. $index = count(ctx()->privateState->LoginDays) + 1;
  764. ctx()->privateState->LoginDays[] = $index;
  765. ctx()->privateState->day7_accumulate += 1;
  766. }
  767. /**
  768. * 6101 签到
  769. * @return type
  770. */
  771. public static function Day7_DrawReward() {
  772. list($day) = req()->paras; # 参数: 领取第x天的奖励
  773. my_Assert(in_array($day, ctx()->privateState->LoginDays), ErrCode::active_day7_expired);
  774. my_Assert(!in_array($day, ctx()->privateState->day7_drawed), ErrCode::active_hasgetted);
  775. $day_rwd = GameConfig::activity_day7_getItem($day); # 查询奖励数据
  776. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  777. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  778. ctx()->privateState->day7_drawed[] = $day; # 添加领取记录
  779. UserProc::updateUserInfo(); # 回存
  780. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  781. 'cash' => ctx()->baseInfo->cash,
  782. 'store' => ctx()->store,
  783. 'heros' => ctx()->heros,
  784. 'reward' => StoreProc::$reward,
  785. 'reward_Gem' => StoreProc::$reward_Gem,
  786. 'reward_equip' => StoreProc::$reward_equip,
  787. ));
  788. }
  789. /**
  790. * 6107 7日签到 累计天数宝箱奖励领取
  791. * @return type
  792. */
  793. public static function Day7_AccumulateDrawreward() {
  794. list($day) = req()->paras; # 参数: 领取第x天的奖励
  795. $yushu = $day % 10;
  796. if ($yushu == 0) {
  797. $num = $day / 10;
  798. if ($num > 6) {
  799. $n = $num % 6;
  800. $typeId = $n * 10;
  801. } else {
  802. $typeId = $day;
  803. }
  804. } else {
  805. $typeId = $yushu;
  806. }
  807. my_Assert(ctx()->privateState->day7_accumulate >= $day, ErrCode::active_day7_expired);
  808. my_Assert(!in_array($day, ctx()->privateState->day7_accumulateDrawed), ErrCode::active_hasgetted);
  809. $day_rwd = GameConfig::active_day7_accumulate_getItem($typeId); # 查询奖励数据
  810. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  811. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  812. ctx()->privateState->day7_accumulateDrawed[] = $day;
  813. $baseArr = array(2, 4, 6, 8, 10);
  814. $tag = true;
  815. $loopNum = ctx()->privateState->day7_accumulate_loopNum;
  816. foreach ($baseArr as $id) {//查看当前这组天奖励是否全部被领取
  817. $id += ($loopNum - 1) * 10;
  818. // if(ctx()->privateState->day7_accumulate < $id){
  819. // $tag = false;
  820. // break;
  821. // }
  822. if (!in_array($id, ctx()->privateState->day7_accumulateDrawed)) {
  823. $tag = false;
  824. }
  825. }
  826. if ($tag) {//$typeId % 10 == 0
  827. ctx()->privateState->day7_accumulate_loopNum += 1;
  828. }
  829. UserProc::updateUserInfo(); # 回存
  830. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  831. 'cash' => ctx()->baseInfo->cash,
  832. 'store' => ctx()->store,
  833. 'privateState' => ctx()->privateState,
  834. 'reward' => StoreProc::$reward,
  835. 'reward_Gem' => StoreProc::$reward_Gem,
  836. 'reward_equip' => StoreProc::$reward_equip,
  837. ));
  838. }
  839. /**
  840. * 限时贩卖 2天一刷
  841. */
  842. public static function ResetLimitTsBuy() {
  843. ctx()->privateState->limitTsBuy_RewardRecord = array();
  844. $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::LimitTsSale);
  845. $day = $mo->ts;
  846. $startDay = TimeUtil::totalDays($mo->startTs);
  847. $nextDay = TimeUtil::totalDays();
  848. $num = $nextDay - $startDay;
  849. $refershType = $num % $day; //day 2天一刷新 余数只会是0 或 1; 0:两天后在刷新,1就是已经过了一天了,在过一天就刷新,当前时间减一天
  850. ctx()->privateState->nextDayLogin = now() - 86400 * $refershType;
  851. // if ($refershType == 1) {
  852. // ctx()->privateState->nextDayLogin = now() - 86400;
  853. // }
  854. $val = intval($num / $day);
  855. $yushu = $val % glc()->activity_limitTsBuy_giftTypeNum;
  856. $type = $yushu + 1;
  857. $arr = GameConfig::activity_promopackinfo_type_getItemArray($type);
  858. $count = count($arr);
  859. $ret = array();
  860. if ($count == 6) {
  861. $ret = $arr;
  862. } else {
  863. for ($i = 0; $i < 6; $i++) {
  864. $count = count($arr);
  865. $rand = rand(0, $count - 1);
  866. $ret[] = $arr[$rand];
  867. StlUtil::arrayRemoveAt($arr, $rand);
  868. if (count($arr) == 0) {
  869. break;
  870. }
  871. }
  872. }
  873. ctx()->privateState->limitTsBuy_RandIds = array();
  874. foreach ($ret as $mo) {
  875. ctx()->privateState->limitTsBuy_RandIds[] = $mo->typeId;
  876. }
  877. }
  878. /**
  879. * 6108 限时贩售
  880. */
  881. public static function LimitTsBuy_Drawreward() {
  882. list($typeId) = req()->paras; # 参数: 领取第x天的奖励
  883. my_Assert(in_array($typeId, ctx()->privateState->limitTsBuy_RandIds), ErrCode::active_const_no_err);
  884. $mo = GameConfig::activity_promopackinfo_getItem($typeId); # 查询奖励数据
  885. my_Assert(null != $mo, ErrCode::err_const_no); # 防御找不到配置
  886. my_Assert(ctx()->baseInfo->cash >= explode(',', $mo->cost)[1], ErrCode::notenough_cash_msg);
  887. ctx()->baseInfo->Consume_Cash(explode(',', $mo->cost)[1]);
  888. $rewardArr = ctx()->privateState->limitTsBuy_RewardRecord;
  889. $count = array_count_values($rewardArr)[$typeId];
  890. my_Assert($count < $mo->limitNum, ErrCode::user_shop_LimitNum);
  891. StoreProc::AddMultiItemInStore($mo->reward); # 发放奖励
  892. ctx()->privateState->limitTsBuy_RewardRecord[] = $typeId;
  893. UserProc::updateUserInfo(); # 回存
  894. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  895. 'cash' => ctx()->baseInfo->cash,
  896. 'store' => ctx()->store,
  897. 'heros' => ctx()->heros,
  898. 'privateState' => ctx()->privateState,
  899. 'reward' => StoreProc::$reward,
  900. 'reward_Gem' => StoreProc::$reward_Gem,
  901. 'reward_equip' => StoreProc::$reward_equip,
  902. ));
  903. }
  904. /**
  905. * 6109 战令奖励领取
  906. */
  907. public static function BattlePassDrawReward() {
  908. list($id) = req()->paras;
  909. $mo = GameConfig::activity_battlepass_getItem($id); # 查询奖励数据
  910. my_Assert(null != $mo, ErrCode::err_const_no); # 防御找不到配置
  911. $subFunType = $mo->type;
  912. $typeId = $mo->typeId;
  913. $str_1 = $subFunType . '-1-' . $typeId;
  914. $str_2 = $subFunType . '-2-' . $typeId;
  915. $isHasBuy_high = false;
  916. switch ($subFunType) {
  917. case Enum_SubFunType::ActivePoint_BattlePass:
  918. $point = ctx()->privateState->battlePass_taskPoint;
  919. my_Assert($point >= $typeId, ErrCode::active_pointNotEnough);
  920. if (ctx()->privateState->battlePass_activePoint_cost_ts > 0 && now() < ctx()->privateState->battlePass_activePoint_cost_ts + 30 * 24 * 60 * 60) {
  921. $isHasBuy_high = true;
  922. }
  923. break;
  924. case Enum_SubFunType::Tili_BattleBass:
  925. my_Assert(ctx()->privateData()->battlePass_tili >= $typeId, ErrCode::active_costTiliNotEnough);
  926. if (ctx()->privateState->battlePass_tili_cost_ts > 0 && now() < ctx()->privateState->battlePass_tili_cost_ts + 30 * 24 * 60 * 60) {
  927. $isHasBuy_high = true;
  928. }
  929. break;
  930. case Enum_SubFunType::Gate_BattleBass:
  931. my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $typeId), ErrCode::gate_GateNoUnlock);
  932. my_Assert(ctx()->gates->GateList->$typeId->pass > 0, ErrCode::evolve_GateNoPass);
  933. if (ctx()->privateState->battlePass_gate_cost_ts > 0 && now() < ctx()->privateState->battlePass_gate_cost_ts + 30 * 24 * 60 * 60) {
  934. $isHasBuy_high = true;
  935. }
  936. break;
  937. default:
  938. break;
  939. }
  940. if (!in_array($str_1, ctx()->privateState->battlePassRewardReceived)) {
  941. StoreProc::AddMultiItemInStore($mo->rewards_1); # 发放奖励
  942. ctx()->privateData(true)->battlePassRewardReceived[] = $str_1;
  943. }
  944. //my_Assert(!in_array($str_1, ctx()->privateState->battlePassRewardReceived), ErrCode::active_hasgetted);
  945. if ($isHasBuy_high && !in_array($str_2, ctx()->privateState->battlePassRewardReceived)) {
  946. StoreProc::AddMultiItemInStore($mo->rewards_2); # 发放奖励
  947. ctx()->privateData(true)->battlePassRewardReceived[] = $str_2;
  948. }
  949. UserProc::updateUserInfo(); # 回存
  950. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  951. 'cash' => ctx()->baseInfo->cash,
  952. 'store' => ctx()->store,
  953. 'heros' => ctx()->heros,
  954. 'privateState' => ctx()->privateState,
  955. 'reward' => StoreProc::$reward,
  956. 'reward_Gem' => StoreProc::$reward_Gem,
  957. 'reward_equip' => StoreProc::$reward_equip,
  958. "tili" => ctx()->baseInfo->tili,
  959. "tili_ts" => ctx()->baseInfo->tili_ts,
  960. ));
  961. }
  962. /**
  963. * 重置战令奖励信息 一个月一清理但是不同战令 开始时间不同所以 清理时间也不同
  964. * @param type $type
  965. */
  966. public static function ResetBattlePassReward($type) {
  967. $list = ctx()->privateState->battlePassRewardReceived;
  968. $rmArr = array();
  969. foreach ($list as $str) {
  970. $arr = explode('-', $str);
  971. if ($arr[0] == $type) {
  972. $rmArr[] = $str;
  973. }
  974. }
  975. foreach ($rmArr as $k) {
  976. StlUtil::arrayRemove(ctx()->privateData(true)->battlePassRewardReceived, $k);
  977. }
  978. }
  979. /**
  980. * 7日签到 数据更新
  981. */
  982. public static function InitDay7_Sign_NewPlayer($unlock = false) {
  983. if (!$unlock && !FightProc::isFunUnlock(21)) {//之所以这有两个判断是因为这个 活动解锁的代码监测位置问题,fightProc 里解锁监测代码在 $gateInfo->tz_state = $index;之前了 这个位置没有办法解锁
  984. return;
  985. }
  986. $index = count(ctx()->privateState->day7_drawed_newPlayer_LoginDays) + 1;
  987. if (count(ctx()->privateState->day7_drawed_newPlayer_LoginDays) < 7) {
  988. ctx()->privateState->day7_drawed_newPlayer_LoginDays[] = $index;
  989. }
  990. }
  991. /**
  992. * 6110 新手7日签到
  993. * @return type
  994. */
  995. public static function Day7_Drawreward_NewPlayer() {
  996. list($day) = req()->paras; # 参数: 领取第x天的奖励
  997. my_Assert(in_array($day, ctx()->privateState->day7_drawed_newPlayer_LoginDays), ErrCode::active_day7_expired);
  998. my_Assert(!in_array($day, ctx()->privateState->day7_drawed_newPlayer), ErrCode::active_hasgetted);
  999. $day_rwd = GameConfig::activity_day7sign_newplayer_getItem($day); # 查询奖励数据
  1000. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  1001. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  1002. ctx()->privateState->day7_drawed_newPlayer[] = $day; # 添加领取记录
  1003. UserProc::updateUserInfo(); # 回存
  1004. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  1005. 'cash' => ctx()->baseInfo->cash,
  1006. 'store' => ctx()->store,
  1007. 'heros' => ctx()->heros,
  1008. 'reward' => StoreProc::$reward,
  1009. 'reward_Gem' => StoreProc::$reward_Gem,
  1010. 'reward_equip' => StoreProc::$reward_equip,
  1011. ));
  1012. }
  1013. }