Browse Source

激活码接口

cyzhao 11 months ago
parent
commit
4d9365f966

+ 6 - 1
Gameserver/App/base/CmdCode.php

@@ -108,7 +108,12 @@ class CmdCode {
     /**
      * 7日奖励领取
      */
-    const active_day7_drawreward = 6101;
+    const cmd_active_day7_drawreward = 6101;
+    
+    /**
+     * 
+     */
+    const cmd_active_drawPackageByCode = 6102;
 
     // </editor-fold>
     // <editor-fold defaultstate="collapsed" desc="任务操作码 - 62xx">

+ 25 - 0
Gameserver/App/base/ErrCode.php

@@ -483,7 +483,32 @@ class ErrCode {
      * 无效的时间内不能领取奖励
      */
     const active_day7_expired = 3502;
+    
+    /*
+     * 不存在活动配置信息
+     */
+    const active_const_no_err = 3503;
+    
+    /**
+     * 活动 - 激活码 无效
+     */
+    const active_activecode_format = 3504;
+    
+    /**
+     * 活动 - 激活码 渠道错误.
+     */
+    const active_activecode_plat = 3924;
+    
+    /**
+     * 激活码礼包已经过期
+     */
+    const active_activecode_outtime = 3937;
 
+    /**
+     * 活动 - 兑换码已经使用过了
+     */
+    const active_activecode_used = 3952;
+    
 // </editor-fold>
 //
 //   // <editor-fold defaultstate="collapsed" desc="    task 3600    ">

+ 17 - 1
Gameserver/App/configs/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-18 14:38:55
+ // 日期: 2024-06-20 16:05:22
 ////////////////////
 
 namespace loyalsoft;
@@ -719,6 +719,22 @@ class GameConfig {
         return self::get_hash_item('heroType_typeId', $key);
     }
     /**
+    * 激活码表
+    * @return \token_gift
+    */
+    public static function token_gift()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'token_gift');
+    }
+    /**
+    * @return \sm_token_gift token_gift item数据 
+    */
+    public static function token_gift_getItem($itemid)
+    { 
+        return self::get_hash_item('token_gift', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 17 - 1
Gameserver/App/model/Const/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-19 14:08:35
+ // 日期: 2024-06-20 16:05:22
 ////////////////////
 
 /**
@@ -717,6 +717,22 @@ class GameConfig {
         return self::get_hash_item('heroType_typeId', $key);
     }
     /**
+    * 激活码表
+    * @return \token_gift
+    */
+    public static function token_gift()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'token_gift');
+    }
+    /**
+    * @return \sm_token_gift token_gift item数据 
+    */
+    public static function token_gift_getItem($itemid)
+    { 
+        return self::get_hash_item('token_gift', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 2 - 2
Gameserver/App/model/Const/sm_globalsettings.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-19 09:35:46
+ // 日期: 2024-06-20 14:54:52
 ////////////////////
 
 
@@ -114,7 +114,7 @@ class sm_globalsettings
     public $DailyShopShowNum;
 
     /**
-    * @var string   
+    * @var string 宝石品阶  
     */
     public $GemQualName;
 

+ 1 - 1
Gameserver/App/model/Const/sm_hero.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-18 14:50:18
+ // 日期: 2024-06-20 11:05:46
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_heroType_typeId.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-18 14:50:18
+ // 日期: 2024-06-20 11:05:46
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_item.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-18 14:41:36
+ // 日期: 2024-06-20 11:33:01
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_predicate.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-19 11:35:46
+ // 日期: 2024-06-20 15:05:46
 ////////////////////
 
 

+ 52 - 0
Gameserver/App/model/Const/sm_token_gift.php

@@ -0,0 +1,52 @@
+<?php
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2024-06-07 18:24:37
+////////////////////
+
+
+/**
+ * Static Model token_gift 激活码表
+ */
+class sm_token_gift
+{
+
+    /**
+    * @var Int32 用途未知!!请到数据库中添加字段注释。  
+    */
+    public $id;
+
+    /**
+    * @var Int32 礼包id(最大255)  
+    */
+    public $typeId;
+
+    /**
+    * @var Int32 平台(0:all,1:腾讯,2:九游,...)  
+    */
+    public $plat;
+
+    /**
+    * @var Int32 开始生效时间戳  
+    */
+    public $startTs;
+
+    /**
+    * @var Int32 失效时间戳  
+    */
+    public $expirets;
+
+    /**
+    * @var String 礼包内容: itemid,num;itemid,num...  
+    */
+    public $reward;
+
+    /**
+    * @var String 备注  
+    */
+    public $desc;
+
+}
+

+ 1 - 1
Gameserver/App/model/Const/sm_waveItem.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-19 14:05:46
+ // 日期: 2024-06-20 16:05:46
 ////////////////////
 
 

+ 1 - 1
Gameserver/App/model/Const/sm_waves.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-06-19 14:05:46
+ // 日期: 2024-06-20 16:05:46
 ////////////////////
 
 

+ 6 - 0
Gameserver/App/model/User/Info_PrivateState.php

@@ -208,6 +208,12 @@ class Info_PrivateState extends Object_ext {
     #[ArrayType]
     public $rankReward_drawed_fightPower = array();
     
+    /**
+     * @var array[] 领取激活码记录
+     */
+    #[ArrayType]
+    public $usedTokens = array();
+    
     public function initialize() {
         $this->junbeiShopNumRecord = new \stdClass();
         $this->junbeiShop_AllNumRecord = new \stdClass();

+ 1 - 1
Gameserver/App/model/User/Info_UserBase.php

@@ -119,7 +119,7 @@ class Info_UserBase extends Object_ext {
         $this->gold = glc()->Init_Player_gold;
         $this->cash = glc()->Init_Player_cash;
         $this->xp = 0;
-        $this->tili = GameConfig::globalsettings()->tili_RecoverrMax;           # 恢复体力上限
+        $this->tili = GameConfig::globalsettings()->tili_RecoverrMax;           # 恢复体力上限        
         $this->maxXp = GameConfig::player_level_getItem(2)->xp_need;
 
         $this->level = 1;

+ 70 - 14
Gameserver/App/process/ActiveProc.php

@@ -14,6 +14,7 @@ namespace loyalsoft;
  * @author c'y'zhao
  */
 class ActiveProc {
+
     /**
      * 逻辑分发
      * 所有的Proc中必须有这样一个方法
@@ -21,25 +22,79 @@ class ActiveProc {
      */
     public static function procMain($req) {
         switch ($req->cmd) {
-            case CmdCode::active_day7_drawreward:                               # 6101 签到
-                return ActiveProc::Day7_DrawReward();        
-                                    
+            case CmdCode::cmd_active_day7_drawreward:                           # 6101 签到
+                return ActiveProc::Day7_DrawReward();
+            case CmdCode::cmd_active_drawPackageByCode:                         # 6102 兑换码礼包
+                return ActiveProc::drawPackageByCode();
             default:
                 Err(ErrCode::cmd_err);
         }
     }
-    
-    
+
+    /**
+     *  6102 兑换码礼包
+     */
+    static function drawPackageByCode() {
+        list($activeId, $codestring) = req()->paras;                            # 取参数 活动id, 兑换码
+
+        $codePlatStr = "";
+        $packageID = 0;
+
+        $active = GameConfig::activity_getItem($activeId);                      # 活动数据
+        my_Assert(null != $active, ErrCode::active_const_no_err);
+        my_Assert($active->startts <= now() && $active->endts >= now(), ErrCode::active_time); # 校验开放时间
+        my_Assert(preg_match("/^[a-kmnp-z2-9]{10}$/", $codestring), ErrCode::active_activecode_format); # 基础格式校验(10个特定字符)
+        $activeCode = CipheredBase32::Decode($codestring);                      # 解码
+        $codePlatStr = GameConstants::GetPlatStringByActivteCode($activeCode);  # platstr
+        my_Assert(GameConstants::AllPlatStr == $codePlatStr #                   # 忽略全平台礼包
+                || req()->getPlatStr() == $codePlatStr, #                       # 平台字符串必须相符
+                ErrCode::active_activecode_plat); #                             # 平台错误
+
+        my_Assert(is_int($activeCode->number) #                                 # 编号为int值
+                && $activeCode->number >= 1 && $activeCode->number <= 50000, #  # 检查 兑换码的编号范围0~50000
+                ErrCode::active_activecode_format);
+
+        $packageID = $activeCode->package;                                      # 礼包id
+        $packageInfo = GameConfig::token_gift_getItem($packageID);               # 礼包常量数据
+        my_Assert(null != $packageInfo, ErrCode::err_const_no);                 # 防御
+        my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
+                ErrCode::active_activecode_outtime);                            # 激活码已经失效,或者礼包尚未开启
+        
+        $privateState = new Info_PrivateState(ctx()->privateState);             # 快速访问
+        my_Assert(!in_array($packageID, $privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
+        //my_Assert(!self::checkActiveCodeIsUsed($activeCode), ErrCode::active_activecode_used);  # 检查 该激活码是否别人已经使用过了
+        $err = StoreProc::AddMultiItemInStore($packageInfo->reward);            # 发放礼包
+        my_Assert(ErrCode::ok == $err, $err);                                   # 防御发放礼包过程出错
+     
+        //$ok = self::setActiveCodeUserRecord($activeCode, req()->uid);           # 插入数据库
+        //my_Assert($ok, ErrCode::err_db);                                        # 数据库操作失败- 重试
+
+        ctx()->privateState->usedTokens[] = $packageID;
+
+        UserProc::updateUserInfo();                                             # 回存玩家数据     
+        $ret = array(#                                                          # 返回值
+            "plat" => $codePlatStr,
+            "packageId" => $packageID,
+            "reward" => $packageInfo->reward,
+            'gold' => ctx()->base()->gold,
+            'cash' => ctx()->base()->cash,
+            'tili' => ctx()->base()->tili,
+            'store' => ctx()->store,
+            'hero' => ctx()->heros,        
+        );
+        return Resp::ok($ret);                                                  # 返回成功信息
+    }
+
     /**
      * 7日签到 数据更新
      */
     public static function DailyResetDay7Task() {
-        if(count(ctx()->privateState->LoginDays) >= 7){
+        if (count(ctx()->privateState->LoginDays) >= 7) {
             ctx()->privateState->LoginDays = array();
             ctx()->privateState->day7_drawed = array();
         }
-        $index = count(ctx()->privateState->LoginDays)+1;       
-        ctx()->privateState->LoginDays[] = $index;       
+        $index = count(ctx()->privateState->LoginDays) + 1;
+        ctx()->privateState->LoginDays[] = $index;
         ctx()->privateState->day7_accumulate += 1;
     }
 
@@ -50,21 +105,22 @@ class ActiveProc {
     public static function Day7_DrawReward() {
         list($day) = req()->paras;                                              # 参数: 领取第x天的奖励
         $user = ctx();
-       
-        my_Assert(in_array($day,$user->privateState->LoginDays), ErrCode::active_day7_expired);
+
+        my_Assert(in_array($day, $user->privateState->LoginDays), ErrCode::active_day7_expired);
         my_Assert(!in_array($day, $user->privateState->day7_drawed), ErrCode::active_hasgetted);
         $day_rwd = GameConfig::activity_day7_getItem($day);                     # 查询奖励数据
         my_Assert(null != $day_rwd, ErrCode::err_const_no);                     # 防御找不到配置
         StoreProc::AddMultiItemInStore($day_rwd->reward);                       # 发放奖励
         $user->privateState->day7_drawed[] = $day;                              # 添加领取记录
-                 
+
         ctx($user);
         UserProc::updateUserInfo();                                             # 回存
         return Resp::ok(array(
                     'gold' => $user->baseInfo->gold,
                     'cash' => $user->baseInfo->cash,
                     'tili' => $user->baseInfo->tili,
-                    'store' => $user->store,                  
-        ));   
-    } 
+                    'store' => $user->store,
+        ));
+    }
+
 }