ActiveProc.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  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. default:
  47. Err(ErrCode::cmd_err);
  48. }
  49. }
  50. /**
  51. * 清理/重置 在线礼包时间戳
  52. */
  53. public static function ClearOnlineGiftTs() {
  54. ctx()->privateState->onlineGiftts = 0;
  55. ctx()->privateState->onlineGiftIDs = array();
  56. }
  57. /**
  58. * [6112] 领取连续在线礼包
  59. */
  60. static function DrawOnlineGift() {
  61. list($giftid) = req()->paras; # 提取参数: 礼包的编号
  62. $giftData = GameConfig::activity_onlinegift_getItem($giftid); # 在线礼包常量数据
  63. my_Assert(null != $giftData, ErrCode::onlinegift_constno_err); # 防御找不到配置数据
  64. // my_Assert($privateState->onlineGiftts + 30 >= $giftData->onlineSec, # # 时间未到,不可以领取
  65. // ErrCode::onlinegift_timenotenough);
  66. my_default_Arr(ctx()->privateData()->onlineGiftIDs); # 防御未初始化领取记录
  67. my_Assert(!in_array($giftid, ctx()->privateData()->onlineGiftIDs), # # 判断礼包ID是否已经领取
  68. ErrCode::active_hasgetted);
  69. $err = StoreProc::AddMultiItemInStore($giftData->rewardstr); # 发放奖励
  70. my_Assert(ErrCode::ok == $err, $err); # 发放奖励失败
  71. ctx()->privateData(true)->onlineGiftIDs[] = $giftid; # 记录已领礼包ID
  72. //$privateState->onlineGiftts = 0; #每次领取奖励则时间重新计算
  73. UserProc::updateUserInfo(); # 回写用户数据
  74. return Resp::ok(array(
  75. 'onlineGiftts' => ctx()->privateState->onlineGiftts,
  76. 'onlineGiftIDs' => ctx()->privateState->onlineGiftIDs,
  77. "reward" => StoreProc::$reward,
  78. "reward_Gem" => StoreProc::$reward_Gem,
  79. "reward_equip" => StoreProc::$reward_equip,
  80. 'gold' => ctx()->base()->gold,
  81. 'cash' => ctx()->base()->cash,
  82. 'tili' => ctx()->base()->tili,
  83. 'tili_ts' => ctx()->base()->tili_ts,
  84. 'store' => ctx()->store(),
  85. 'heros' => ctx()->heros()
  86. )); # 设置返回值
  87. }
  88. /**
  89. * 6106 抽奖里面的兑换
  90. * @return type
  91. */
  92. public static function LotteryExchangeItem() {
  93. list($id) = req()->paras;
  94. $arr = array_count_values(ctx()->privateState->lotteryExchange);
  95. $num = $arr[$id];
  96. $mo = GameConfig::activity_lotteryitem_exchange_getItem($id);
  97. my_Assert($mo != null, ErrCode::err_const_no);
  98. my_Assert($num < $mo->exchangeNum, ErrCode::active_lotteryExchangeNumLimit);
  99. $itemNum = 0;
  100. $cost = explode(',', $mo->cost);
  101. $costId = $cost[0];
  102. if (StlUtil::dictHasProperty(ctx()->store->items, $costId)) {
  103. $itemNum = ctx()->store->items->$costId;
  104. }
  105. my_Assert($itemNum >= $cost[1], ErrCode::notenough_item);
  106. ctx()->store->removeItem($costId, $cost[1]);
  107. StoreProc::AddMultiItemInStore($mo->reward);
  108. ctx()->privateState->lotteryExchange[] = $id;
  109. UserProc::updateUserInfo();
  110. return Resp::ok(array(
  111. "store" => ctx()->store,
  112. 'cash' => ctx()->baseInfo->cash,
  113. 'gold' => ctx()->baseInfo->gold,
  114. 'reward' => StoreProc::$reward,
  115. 'reward_Gem' => StoreProc::$reward_Gem,
  116. 'reward_equip' => StoreProc::$reward_equip,
  117. ));
  118. }
  119. /**
  120. * 6105 抽奖宝箱奖励领取
  121. * @return type
  122. */
  123. public static function lotteryNumBox_RewardReceived() {
  124. list($id) = req()->paras;
  125. $mo = GameConfig::activity_lotterynum_accumulate_getItem($id);
  126. my_Assert($mo != null, ErrCode::err_const_no);
  127. my_Assert(ctx()->privateState->lotteryNum >= $id, ErrCode::active_lotteryNumNotEnough);
  128. my_Assert(!in_array($id, ctx()->privateState->lotteryNumRewardReceived), ErrCode::active_hasgetted);
  129. StoreProc::AddMultiItemInStore($mo->reward);
  130. ctx()->privateState->lotteryNumRewardReceived[] = $id;
  131. UserProc::updateUserInfo();
  132. return Resp::ok(array(
  133. "store" => ctx()->store,
  134. 'cash' => ctx()->baseInfo->cash,
  135. 'reward' => StoreProc::$reward,
  136. 'reward_Gem' => StoreProc::$reward_Gem,
  137. 'reward_equip' => StoreProc::$reward_equip,
  138. ));
  139. }
  140. /**
  141. * 6103 转盘抽奖
  142. */
  143. public static function lottery_Tree() {
  144. list($num) = req()->paras; //抽奖次数 1 10
  145. $arr = array(1, 10);
  146. my_Assert(in_array($num, $arr), ErrCode::active_lotteryNumErr);
  147. my_Assert(ctx()->privateState->lotteryNum + $num <= glc()->activity_lottery_allNum, ErrCode::active_lotteryNumLimit);
  148. $costTag = true;
  149. if ($num == 1 && ctx()->privateState->lotteryNum_free < GameConfig::glc2()->activity_lottery_FreeNum + GameConfig::glc2()->activity_lottery_GuanggaoNum) {
  150. $costTag = false;
  151. }
  152. if ($num == 1) {
  153. ctx()->privateState->lotteryNum_free += 1;
  154. }
  155. if ($costTag) {
  156. $cost = "";
  157. if ($num == 1) {
  158. $cost = glc()->activity_lottery_tree_one_cost;
  159. } else {
  160. $cost = glc()->activity_lottery_tree_ten_cost;
  161. }
  162. my_Assert($cost != "", ErrCode::active_lotteryCostErr);
  163. $costArr = explode(',', $cost);
  164. $item = ctx()->store->items;
  165. $costId = $costArr[0];
  166. $costNum = $costArr[1];
  167. my_Assert(StlUtil::dictHasProperty($item, $costId) && $item->$costId >= $costNum, ErrCode::notenough_item);
  168. ctx()->store->removeItem($costId, $costNum);
  169. }
  170. if (ctx()->privateState->lotteryNum_free > GameConfig::glc2()->activity_lottery_FreeNum && ctx()->privateState->lotteryNum_free <= GameConfig::glc2()->activity_lottery_FreeNum + GameConfig::glc2()->activity_lottery_GuanggaoNum) {
  171. my_Assert(now() - ctx()->privateData(true)->activity_lottery_guanggaoTs >= GameConfig::glc2()->activity_lottery_GuanggaoDownTs, ErrCode::user_shop_DownTsLimit);
  172. ctx()->privateData(true)->activity_lottery_guanggaoTs = now();
  173. TaskProc::OnLookGuanggao();
  174. }
  175. if (ctx()->privateState->lotteryNum < glc()->activity_lottery_allNum) {
  176. ctx()->privateState->lotteryNum += $num;
  177. }
  178. $rewardList = array();
  179. $dic = GameConfig::activity_lottery_tree();
  180. for ($i = 0; $i < $num; $i++) {
  181. $randNum = random_int(1, 10000);
  182. $start = 0;
  183. $end = 0;
  184. foreach ($dic as $id => $mo) {
  185. $end += $mo->per * 10000;
  186. if ($randNum > $start && $randNum <= $end) {
  187. $rewardList[] = $id;
  188. StoreProc::AddMultiItemInStore($mo->reward);
  189. $prize = explode(',', $mo->reward);
  190. if (GameConfig::item_getItem($prize[0])->itemType == 201 && GameConfig::item_getItem($prize[0])->quality >= 4 && ctx()->privateState->lottery_qualGem_4 == 0) {
  191. ctx()->privateState->lottery_qualGem_4 = 1;
  192. }
  193. break;
  194. }
  195. $start = $end;
  196. }
  197. }
  198. UserProc::updateUserInfo();
  199. return Resp::ok(array(
  200. "store" => ctx()->store,
  201. 'reward' => StoreProc::$reward,
  202. 'reward_Gem' => StoreProc::$reward_Gem,
  203. 'reward_equip' => StoreProc::$reward_equip,
  204. 'gold' => ctx()->baseInfo->gold,
  205. 'cash' => ctx()->baseInfo->cash,
  206. 'privateState' => ctx()->privateState,
  207. 'indexReward' => $rewardList,
  208. 'heros' => ctx()->heros,
  209. ));
  210. }
  211. /**
  212. * 元宝兑换寻宝券
  213. * @return type
  214. */
  215. public static function lottery_Tree_cashExchange() {
  216. list($num) = req()->paras; //抽奖次数 1 10
  217. $cost = "";
  218. if ($num == 1) {
  219. $cost = glc()->activity_lottery_tree_one_cost;
  220. } else {
  221. $cost = glc()->activity_lottery_tree_ten_cost;
  222. }
  223. my_Assert($cost != "", ErrCode::active_lotteryCostErr);
  224. $costArr = explode(',', $cost);
  225. $item = ctx()->store->items;
  226. $costId = $costArr[0];
  227. $costNum = $costArr[1];
  228. $selfNum = 0;
  229. if (StlUtil::dictHasProperty($item, $costId)) {
  230. $selfNum = $item->$costId;
  231. }
  232. my_Assert($selfNum < $costNum, ErrCode::active_lottery_unwantedExchange);
  233. $costNum -= $selfNum;
  234. $cash = glc()->activity_lottery_oneCost_cash * $costNum;
  235. my_Assert(ctx()->baseInfo->cash >= $cash, ErrCode::notenough_cash_msg);
  236. ctx()->baseInfo->Consume_Cash($cash);
  237. StoreProc::AddMultiItemInStore($costId . ',' . $costNum);
  238. UserProc::updateUserInfo();
  239. return Resp::ok(array(
  240. "store" => ctx()->store,
  241. 'cash' => ctx()->baseInfo->cash,
  242. ));
  243. }
  244. /**
  245. * 6102 兑换码礼包
  246. */
  247. static function drawPackageByCode() {
  248. list($activeId, $codestring) = req()->paras; # 取参数 活动id, 兑换码
  249. $codePlatStr = "";
  250. $packageID = 0;
  251. if (self::PublicTokenCodeCheck($codestring)) {
  252. $packageInfo = GameConfig::token_PublicGift_getItem($codestring);
  253. my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
  254. ErrCode::active_activecode_outtime);
  255. my_Assert(!in_array($packageInfo->id, ctx()->privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
  256. $packageID = $packageInfo->id;
  257. //$err = StoreProc::AddMultiItemInStore($packageInfo->reward); # 发放礼包
  258. EmailProc::SendPackageByCodeMail(req()->zoneid, req()->uid, $packageInfo->reward);
  259. my_Assert(ErrCode::ok == $err, $err);
  260. } else {
  261. $active = GameConfig::activity_getItem($activeId); # 活动数据
  262. my_Assert(null != $active, ErrCode::active_const_no_err);
  263. my_Assert($active->startts <= now() && $active->endts >= now(), ErrCode::active_time); # 校验开放时间
  264. my_Assert(preg_match("/^[a-kmnp-z2-9]{10}$/", $codestring), ErrCode::active_activecode_format); # 基础格式校验(10个特定字符)
  265. $activeCode = CipheredBase32::Decode($codestring); # 解码
  266. $codePlatStr = GameConstants::GetPlatStringByActivteCode($activeCode); # platstr
  267. my_Assert(GameConstants::AllPlatStr == $codePlatStr # # 忽略全平台礼包
  268. || req()->getPlatStr() == $codePlatStr, # # 平台字符串必须相符
  269. ErrCode::active_activecode_plat); # # 平台错误
  270. my_Assert(is_int($activeCode->number) # # 编号为int值
  271. && $activeCode->number >= 1 && $activeCode->number <= 50000, # # 检查 兑换码的编号范围0~50000
  272. ErrCode::active_activecode_format);
  273. $packageID = $activeCode->package; # 礼包id
  274. $packageInfo = GameConfig::token_gift_getItem($packageID); # 礼包常量数据
  275. my_Assert(null != $packageInfo, ErrCode::err_const_no); # 防御
  276. CLog::err(json_encode($packageInfo));
  277. my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
  278. ErrCode::active_activecode_outtime); # 激活码已经失效,或者礼包尚未开启
  279. $privateState = new Info_PrivateState(ctx()->privateState); # 快速访问
  280. my_Assert(!in_array($packageID, $privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
  281. my_Assert(!self::checkActiveCodeIsUsed($activeCode), ErrCode::active_activecode_used); # 检查 该激活码是否别人已经使用过了
  282. $err = StoreProc::AddMultiItemInStore($packageInfo->reward); # 发放礼包
  283. EmailProc::SendPackageByCodeMail(req()->zoneid, req()->uid, $packageInfo->reward);
  284. // my_Assert(ErrCode::ok == $err, $err); # 防御发放礼包过程出错
  285. $ok = self::setActiveCodeUserRecord($activeCode, req()->uid); # 插入数据库
  286. my_Assert($ok, ErrCode::err_db); # 数据库操作失败- 重试
  287. }
  288. ctx()->privateState->usedTokens[] = $packageID;
  289. UserProc::updateUserInfo(); # 回存玩家数据
  290. $ret = array(# # 返回值
  291. "plat" => $codePlatStr,
  292. "packageId" => $packageID,
  293. "reward" => $packageInfo->reward,
  294. 'gold' => ctx()->base()->gold,
  295. 'cash' => ctx()->base()->cash,
  296. //'tili' => ctx()->base()->tili,
  297. 'store' => ctx()->store,
  298. //'hero' => ctx()->heros,
  299. );
  300. return Resp::ok($ret); # 返回成功信息
  301. }
  302. public static function PublicTokenCodeCheck($codestring) {
  303. $dic = GameConfig::token_PublicGift();
  304. if (StlUtil::dictHasProperty($dic, $codestring)) {
  305. return true;
  306. }
  307. return false;
  308. }
  309. /**
  310. * 检查兑换码是否已经使用过了
  311. * @param ActiveCode $activeCode
  312. * @return boolean true : 已经用过了, false : 激活码尚未使用过.
  313. */
  314. static function checkActiveCodeIsUsed($activeCode) {
  315. $sql = sprintf("`plat`='%d' and `package`='%d' and `number`='%d'", # # where 子句
  316. $activeCode->plat, $activeCode->package, $activeCode->number);
  317. $rows = daoInst()
  318. ->select()
  319. ->from(self::tab_token_gift) # 表名
  320. ->where($sql)
  321. ->count();
  322. return $rows > 0;
  323. }
  324. /**
  325. * 将兑换码添加到使用记录中
  326. * @param ActiveCode $actvieCode
  327. * @param string $uid
  328. * @return boolean true: 操作成功, false: 操作失败
  329. */
  330. static function setActiveCodeUserRecord($actvieCode, $uid) {
  331. $actvieCode->uid = $uid; # 添加uid
  332. $ret = daoInst()
  333. ->insert(self::tab_token_gift) # 表名
  334. ->data($actvieCode)
  335. ->exec();
  336. return $ret > 0;
  337. }
  338. /**
  339. * 7日签到 数据更新
  340. */
  341. public static function DailyResetDay7Task($unlock = false) {
  342. if (!$unlock && !FightProc::isFunUnlock(5)) {//之所以这有两个判断是因为这个 活动解锁的代码监测位置问题,fightProc 里解锁监测代码在 $gateInfo->tz_state = $index;之前了 这个位置没有办法解锁
  343. return;
  344. }
  345. if (count(ctx()->privateState->LoginDays) >= 7) {
  346. ctx()->privateState->LoginDays = array();
  347. ctx()->privateState->day7_drawed = array();
  348. }
  349. $index = count(ctx()->privateState->LoginDays) + 1;
  350. ctx()->privateState->LoginDays[] = $index;
  351. ctx()->privateState->day7_accumulate += 1;
  352. }
  353. /**
  354. * 6101 签到
  355. * @return type
  356. */
  357. public static function Day7_DrawReward() {
  358. list($day) = req()->paras; # 参数: 领取第x天的奖励
  359. my_Assert(in_array($day, ctx()->privateState->LoginDays), ErrCode::active_day7_expired);
  360. my_Assert(!in_array($day, ctx()->privateState->day7_drawed), ErrCode::active_hasgetted);
  361. $day_rwd = GameConfig::activity_day7_getItem($day); # 查询奖励数据
  362. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  363. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  364. ctx()->privateState->day7_drawed[] = $day; # 添加领取记录
  365. UserProc::updateUserInfo(); # 回存
  366. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  367. 'cash' => ctx()->baseInfo->cash,
  368. 'store' => ctx()->store,
  369. 'heros' => ctx()->heros,
  370. 'reward' => StoreProc::$reward,
  371. 'reward_Gem' => StoreProc::$reward_Gem,
  372. 'reward_equip' => StoreProc::$reward_equip,
  373. ));
  374. }
  375. /**
  376. * 6107 7日签到 累计天数宝箱奖励领取
  377. * @return type
  378. */
  379. public static function Day7_AccumulateDrawreward() {
  380. list($day) = req()->paras; # 参数: 领取第x天的奖励
  381. $yushu = $day % 10;
  382. if ($yushu == 0) {
  383. $num = $day / 10;
  384. if ($num > 6) {
  385. $n = $num % 6;
  386. $typeId = $n * 10;
  387. } else {
  388. $typeId = $day;
  389. }
  390. } else {
  391. $typeId = $yushu;
  392. }
  393. my_Assert(ctx()->privateState->day7_accumulate >= $day, ErrCode::active_day7_expired);
  394. my_Assert(!in_array($day, ctx()->privateState->day7_accumulateDrawed), ErrCode::active_hasgetted);
  395. $day_rwd = GameConfig::active_day7_accumulate_getItem($typeId); # 查询奖励数据
  396. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  397. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  398. ctx()->privateState->day7_accumulateDrawed[] = $day;
  399. $baseArr = array(2, 4, 6, 8, 10);
  400. $tag = true;
  401. $loopNum = ctx()->privateState->day7_accumulate_loopNum;
  402. foreach ($baseArr as $id) {//查看当前这组天奖励是否全部被领取
  403. $id += ($loopNum - 1) * 10;
  404. // if(ctx()->privateState->day7_accumulate < $id){
  405. // $tag = false;
  406. // break;
  407. // }
  408. if (!in_array($id, ctx()->privateState->day7_accumulateDrawed)) {
  409. $tag = false;
  410. }
  411. }
  412. if ($tag) {//$typeId % 10 == 0
  413. ctx()->privateState->day7_accumulate_loopNum += 1;
  414. }
  415. UserProc::updateUserInfo(); # 回存
  416. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  417. 'cash' => ctx()->baseInfo->cash,
  418. 'store' => ctx()->store,
  419. 'privateState' => ctx()->privateState,
  420. 'reward' => StoreProc::$reward,
  421. 'reward_Gem' => StoreProc::$reward_Gem,
  422. 'reward_equip' => StoreProc::$reward_equip,
  423. ));
  424. }
  425. /**
  426. * 限时贩卖 2天一刷
  427. */
  428. public static function ResetLimitTsBuy() {
  429. ctx()->privateState->limitTsBuy_RewardRecord = array();
  430. $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::LimitTsSale);
  431. $day = $mo->ts;
  432. $startDay = TimeUtil::totalDays($mo->startTs);
  433. $nextDay = TimeUtil::totalDays();
  434. $num = $nextDay - $startDay;
  435. $refershType = $num % $day; //day 2天一刷新 余数只会是0 或 1; 0:两天后在刷新,1就是已经过了一天了,在过一天就刷新,当前时间减一天
  436. ctx()->privateState->nextDayLogin = now() - 86400 * $refershType;
  437. // if ($refershType == 1) {
  438. // ctx()->privateState->nextDayLogin = now() - 86400;
  439. // }
  440. $val = intval($num / $day);
  441. $yushu = $val % glc()->activity_limitTsBuy_giftTypeNum;
  442. $type = $yushu + 1;
  443. $arr = GameConfig::activity_promopackinfo_type_getItemArray($type);
  444. $count = count($arr);
  445. $ret = array();
  446. if ($count == 6) {
  447. $ret = $arr;
  448. } else {
  449. for ($i = 0; $i < 6; $i++) {
  450. $count = count($arr);
  451. $rand = rand(0, $count - 1);
  452. $ret[] = $arr[$rand];
  453. StlUtil::arrayRemoveAt($arr, $rand);
  454. if (count($arr) == 0) {
  455. break;
  456. }
  457. }
  458. }
  459. ctx()->privateState->limitTsBuy_RandIds = array();
  460. foreach ($ret as $mo) {
  461. ctx()->privateState->limitTsBuy_RandIds[] = $mo->typeId;
  462. }
  463. }
  464. /**
  465. * 6108 限时贩售
  466. */
  467. public static function LimitTsBuy_Drawreward() {
  468. list($typeId) = req()->paras; # 参数: 领取第x天的奖励
  469. my_Assert(in_array($typeId, ctx()->privateState->limitTsBuy_RandIds), ErrCode::active_const_no_err);
  470. $mo = GameConfig::activity_promopackinfo_getItem($typeId); # 查询奖励数据
  471. my_Assert(null != $mo, ErrCode::err_const_no); # 防御找不到配置
  472. my_Assert(ctx()->baseInfo->cash >= explode(',', $mo->cost)[1], ErrCode::notenough_cash_msg);
  473. ctx()->baseInfo->Consume_Cash(explode(',', $mo->cost)[1]);
  474. $rewardArr = ctx()->privateState->limitTsBuy_RewardRecord;
  475. $count = array_count_values($rewardArr)[$typeId];
  476. my_Assert($count < $mo->limitNum, ErrCode::user_shop_LimitNum);
  477. StoreProc::AddMultiItemInStore($mo->reward); # 发放奖励
  478. ctx()->privateState->limitTsBuy_RewardRecord[] = $typeId;
  479. UserProc::updateUserInfo(); # 回存
  480. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  481. 'cash' => ctx()->baseInfo->cash,
  482. 'store' => ctx()->store,
  483. 'heros' => ctx()->heros,
  484. 'privateState' => ctx()->privateState,
  485. 'reward' => StoreProc::$reward,
  486. 'reward_Gem' => StoreProc::$reward_Gem,
  487. 'reward_equip' => StoreProc::$reward_equip,
  488. ));
  489. }
  490. /**
  491. * 6109 战令奖励领取
  492. */
  493. public static function BattlePassDrawReward() {
  494. list($id) = req()->paras;
  495. $mo = GameConfig::activity_battlepass_getItem($id); # 查询奖励数据
  496. my_Assert(null != $mo, ErrCode::err_const_no); # 防御找不到配置
  497. $subFunType = $mo->type;
  498. $typeId = $mo->typeId;
  499. $str_1 = $subFunType . '-1-' . $typeId;
  500. $str_2 = $subFunType . '-2-' . $typeId;
  501. $isHasBuy_high = false;
  502. switch ($subFunType) {
  503. case Enum_SubFunType::ActivePoint_BattlePass:
  504. $point = ctx()->privateState->battlePass_taskPoint;
  505. my_Assert($point >= $typeId, ErrCode::active_pointNotEnough);
  506. if (ctx()->privateState->battlePass_activePoint_cost_ts > 0 && now() < ctx()->privateState->battlePass_activePoint_cost_ts + 30 * 24 * 60 * 60) {
  507. $isHasBuy_high = true;
  508. }
  509. break;
  510. case Enum_SubFunType::Tili_BattleBass:
  511. my_Assert(ctx()->privateData()->battlePass_tili >= $typeId, ErrCode::active_costTiliNotEnough);
  512. if (ctx()->privateState->battlePass_tili_cost_ts > 0 && now() < ctx()->privateState->battlePass_tili_cost_ts + 30 * 24 * 60 * 60) {
  513. $isHasBuy_high = true;
  514. }
  515. break;
  516. case Enum_SubFunType::Gate_BattleBass:
  517. my_Assert(StlUtil::dictHasProperty(ctx()->gates->GateList, $typeId), ErrCode::gate_GateNoUnlock);
  518. my_Assert(ctx()->gates->GateList->$typeId->pass > 0, ErrCode::evolve_GateNoPass);
  519. if (ctx()->privateState->battlePass_gate_cost_ts > 0 && now() < ctx()->privateState->battlePass_gate_cost_ts + 30 * 24 * 60 * 60) {
  520. $isHasBuy_high = true;
  521. }
  522. break;
  523. default:
  524. break;
  525. }
  526. if (!in_array($str_1, ctx()->privateState->battlePassRewardReceived)) {
  527. StoreProc::AddMultiItemInStore($mo->rewards_1); # 发放奖励
  528. ctx()->privateData(true)->battlePassRewardReceived[] = $str_1;
  529. }
  530. //my_Assert(!in_array($str_1, ctx()->privateState->battlePassRewardReceived), ErrCode::active_hasgetted);
  531. if ($isHasBuy_high && !in_array($str_2, ctx()->privateState->battlePassRewardReceived)) {
  532. StoreProc::AddMultiItemInStore($mo->rewards_2); # 发放奖励
  533. ctx()->privateData(true)->battlePassRewardReceived[] = $str_2;
  534. }
  535. UserProc::updateUserInfo(); # 回存
  536. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  537. 'cash' => ctx()->baseInfo->cash,
  538. 'store' => ctx()->store,
  539. 'heros' => ctx()->heros,
  540. 'privateState' => ctx()->privateState,
  541. 'reward' => StoreProc::$reward,
  542. 'reward_Gem' => StoreProc::$reward_Gem,
  543. 'reward_equip' => StoreProc::$reward_equip,
  544. "tili" => ctx()->baseInfo->tili,
  545. "tili_ts" => ctx()->baseInfo->tili_ts,
  546. ));
  547. }
  548. /**
  549. * 重置战令奖励信息 一个月一清理但是不同战令 开始时间不同所以 清理时间也不同
  550. * @param type $type
  551. */
  552. public static function ResetBattlePassReward($type) {
  553. $list = ctx()->privateState->battlePassRewardReceived;
  554. $rmArr = array();
  555. foreach ($list as $str) {
  556. $arr = explode('-', $str);
  557. if ($arr[0] == $type) {
  558. $rmArr[] = $str;
  559. }
  560. }
  561. foreach ($rmArr as $k) {
  562. StlUtil::arrayRemove(ctx()->privateData(true)->battlePassRewardReceived, $k);
  563. }
  564. }
  565. /**
  566. * 7日签到 数据更新
  567. */
  568. public static function InitDay7_Sign_NewPlayer($unlock = false) {
  569. if (!$unlock && !FightProc::isFunUnlock(21)) {//之所以这有两个判断是因为这个 活动解锁的代码监测位置问题,fightProc 里解锁监测代码在 $gateInfo->tz_state = $index;之前了 这个位置没有办法解锁
  570. return;
  571. }
  572. $index = count(ctx()->privateState->day7_drawed_newPlayer_LoginDays) + 1;
  573. if (count(ctx()->privateState->day7_drawed_newPlayer_LoginDays) < 7) {
  574. ctx()->privateState->day7_drawed_newPlayer_LoginDays[] = $index;
  575. }
  576. }
  577. /**
  578. * 6110 新手7日签到
  579. * @return type
  580. */
  581. public static function Day7_Drawreward_NewPlayer() {
  582. list($day) = req()->paras; # 参数: 领取第x天的奖励
  583. my_Assert(in_array($day, ctx()->privateState->day7_drawed_newPlayer_LoginDays), ErrCode::active_day7_expired);
  584. my_Assert(!in_array($day, ctx()->privateState->day7_drawed_newPlayer), ErrCode::active_hasgetted);
  585. $day_rwd = GameConfig::activity_day7sign_newplayer_getItem($day); # 查询奖励数据
  586. my_Assert(null != $day_rwd, ErrCode::err_const_no); # 防御找不到配置
  587. StoreProc::AddMultiItemInStore($day_rwd->reward); # 发放奖励
  588. ctx()->privateState->day7_drawed_newPlayer[] = $day; # 添加领取记录
  589. UserProc::updateUserInfo(); # 回存
  590. return Resp::ok(array('gold' => ctx()->baseInfo->gold,
  591. 'cash' => ctx()->baseInfo->cash,
  592. 'store' => ctx()->store,
  593. 'heros' => ctx()->heros,
  594. 'reward' => StoreProc::$reward,
  595. 'reward_Gem' => StoreProc::$reward_Gem,
  596. 'reward_equip' => StoreProc::$reward_equip,
  597. ));
  598. }
  599. }