cmd) { case CmdCode::shop_limit_maininfo: return self::GetLimitMainInfo(); case CmdCode::shop_limit_buy: return self::BuyLimitPackage(); case CmdCode::shop_monthlyVIP_Info: return self::GetMonthlyVipInfo(); case CmdCode::shop_monthlyVIP_Buy: return self::BuyMonthlyVip(); case CmdCode::shop_getDaliySpecial: return self::GetDaliySpecial(); case CmdCode::shop_getRechargeRebate: return self::GetRechargeRebate(); default: Err(ErrCode::cmd_err); } } /** * 限购礼包触发条件检测 */ public function checkLimitTsRandGiftTrigger($typeId, $para) { $arr = GameConfig::shop_limitTs_Type_getItemArray($typeId); my_Assert($arr != null, ErrCode::err_const_no); $giftId = 0; $giftArr = array(); foreach ($arr as $item) { if ($item->para <= $para) { if (!in_array($item->giftId, ctx()->shopdata->limitTsRewardsList)) { $giftId = $item->giftId; //$giftArr[] = $giftId; //没有触发对应的礼包条件 if ($giftId == 0) { continue; } //已经触发过了但是礼包还没有被领取 if (count(ctx()->store->triggerLimitTsGift) != 0) { foreach (ctx()->store->triggerLimitTsGift as $val) { if ($val->giftId == $giftId) { continue; } } } //触发对应的礼包条件。则将礼包id存储在 $gift = new Ins_Gift(); $gift->giftId = $giftId; $gift->startTs = now(); $gift->endTs = now() + GameConfig::shop_limit_getItem($giftId)->limit_ts; ctx()->store->triggerLimitTsGift[] = $gift; } } } } public static function GetRechargeRebate() { return Resp::ok(array( "shopdata" => ctx()->shopdata )); } // public static function GetDaliySpecial() { return Resp::ok(array( "shopdata" => ctx()->shopdata )); } /* * 重置每日特惠信息 */ static function resetDaliySpecialPackages() { if (ctx()->shopdata->daliySpecialClear_ts == 0) { ctx()->shopdata->daliySpecialClear_ts = now(); } $curDay = TimeUtil::totalDays(); $lastDay = TimeUtil::totalDays(ctx()->shopdata->daliySpecialClear_ts); if ($curDay - $lastDay == 1 && TimeUtil::Hour(now()) > 5) {//TimeUtil::Hour(ctx()->shopdata->daliySpecialClear_ts) < 5 ctx()->shopdata->daliySpecialClear_ts = now(); ctx()->shopdata->daliySpecialPackages = array(); } else if ($curDay - $lastDay > 1) { ctx()->shopdata->daliySpecialClear_ts = now(); ctx()->shopdata->daliySpecialPackages = array(); } if (TimeUtil::totalDays(ctx()->shopdata->daliySpecialClear_ts) == TimeUtil::totalDays() # && TimeUtil::Hour(ctx()->shopdata->daliySpecialClear_ts) < 5 && TimeUtil::Hour(now()) > 5) { ctx()->shopdata->daliySpecialClear_ts = now(); ctx()->shopdata->daliySpecialPackages = array(); } } /** * 获取月卡信息 * @return type */ public static function GetMonthlyVipInfo() { return Resp::ok(array( "shopdata" => ctx()->shopdata )); } /** * 购买月卡 * @return type */ public static function BuyMonthlyVip() { $packageId = req()->paras[0]; # 参数; 礼包id $shopdata = new Info_UserShop(ctx()->shopdata); $packageCfg = GameConfig::shop_monthVIP_getItem($packageId); my_Assert(null != $packageCfg, ErrCode::err_const_no); if ($packageCfg->subType == 4) { my_Assert($shopdata->monthlyVIP1_ts + $packageCfg->ExpireTs * 3600 * 24 < now(), ErrCode::shop_monthlyvip_buyed); } elseif ($packageCfg->subType == 5) { my_Assert($shopdata->monthlyVIP2_ts + $packageCfg->ExpireTs * 3600 * 24 < now(), ErrCode::shop_monthlyvip_buyed); } $err = StoreProc::AddMultiItemInStore($packageCfg->pri_reward); # 发放一次性奖励 my_Assert(ErrCode::ok == $err, $err); if ($packageCfg->subType == 4) { $shopdata->monthlyVIP1_ts = 3600 * 24 * (totalDays() + 1) - 1; } elseif ($packageCfg->subType == 5) { $shopdata->monthlyVIP2_ts = 3600 * 24 * (totalDays() + 1) - 1; } EmailProc::SendMonthlyVIPDailyReward(req()->zoneid, req()->uid, $packageCfg->name, $packageCfg->daily_reward); ctx()->shopdata = $shopdata; # 回写数据 UserProc::updateUserInfo(); $user = ctx(); return Resp::ok(array( "reward" => $packageCfg->pri_reward, "shopdata" => $shopdata, 'gold' => $user->baseInfo->gold, 'cash' => $user->baseInfo->cash, 'tili' => $user->baseInfo->tili, 'store' => $user->store, 'hero' => $user->heros )); } /** * 【7101】限购礼包主界面 */ public static function GetLimitMainInfo() { return Resp::ok(array( "shopdata" => ctx()->shopdata )); } /** * 【7102】 购买限购礼包 */ public static function BuyLimitPackage() { $packageId = req()->paras[0]; # 参数; 礼包id $shopdata = new Info_UserShop(ctx()->shopdata); $packageCfg = GameConfig::shop_limit_getItem($packageId); my_Assert(null != $packageCfg, ErrCode::err_const_no); $arr = array(); switch ((int) $packageCfg->subType) { case 1: $shopdata->purchasedDailyLimitPackages[] = $packageId; $arr = $shopdata->purchasedDailyLimitPackages; break; case 2: $shopdata->purchasedWeeklyLimitPackages[] = $packageId; $arr = $shopdata->purchasedWeeklyLimitPackages; break; case 3: $shopdata->purchasedMonthlyLimitPackages[] = $packageId; $arr = $shopdata->purchasedMonthlyLimitPackages; break; default: Err(ErrCode::err_innerfault); } $hasN = count(array_filter($arr, function ($val)use ($packageId) { return $val == $packageId; })); my_Assert($hasN <= $packageCfg->limit_num, ErrCode::shop_limit_max); $itemid = explode(',', $packageCfg->reward)[0]; # 奖励礼包Id $itemMO = GameConfig::item_package_getItem($itemid); my_Assert(null != $itemMO, ErrCode::err_const_no); $err = StoreProc::AddMultiItemInStore($itemMO->contents); # 发放奖励 my_Assert(ErrCode::ok == $err, $err); ctx()->shopdata = $shopdata; # 回写数据 UserProc::updateUserInfo(); $user = ctx(); return Resp::ok(array( "reward" => $itemMO->contents, "shopdata" => $shopdata, 'gold' => $user->baseInfo->gold, 'cash' => $user->baseInfo->cash, 'tili' => $user->baseInfo->tili, 'store' => $user->store, 'hero' => $user->heros )); } /** * 每日检查 */ static function DailyCheck() { CLog::info("shop-每日检查-清除每日/周限量礼包购买记录"); $zoneid = req()->zoneid; $uid = req()->uid; $shopdata = new Info_UserShop(ctx()->shopdata); $shopdata->purchasedDailyLimitPackages = array(); # 每天重置 if (date("N") == 1) { # 周一重置 $shopdata->purchasedWeeklyLimitPackages = array(); } if (date("d") == 1) { # 1号重置 $shopdata->purchasedMonthlyLimitPackages = array(); } if ($shopdata->monthlyVIP1_ts + 30 * 24 * 3600 > now()) { $id = 901001; $card1 = GameConfig::shop_monthVIP_getItem($id); my_Assert(null != $card1, ErrCode::err_const_no); EmailProc::SendMonthlyVIPDailyReward($zoneid, $uid, $card1->name, $card1->daily_reward); } if ($shopdata->monthlyVIP2_ts + 30 * 24 * 3600 > now()) { $id = 901002; $card2 = GameConfig::shop_monthVIP_getItem($id); my_Assert(null != $card2, ErrCode::err_const_no); EmailProc::SendMonthlyVIPDailyReward($zoneid, $uid, $card2->name, $card2->daily_reward); } } }