cyzhao 11 місяців тому
батько
коміт
180e72fea3

+ 1 - 0
Gameserver/App/AutoLoad.php

@@ -21,6 +21,7 @@ class AutoLoad {
                 ROOTDIR . '/util/', #                                           # 常用辅助代码
                 ROOTDIR . '/process/', #                                        # 逻辑处理代码
                 ROOTDIR . '/model/User/', #                                     # 数据结构定义
+                ROOTDIR . '/process/ActiveProc/',
             );
             if (defined("CodeGen_Folder")) {
                 $incs[] = CodeGen_Folder;

+ 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-20 16:05:22
+ // 日期: 2024-06-20 17:10:35
 ////////////////////
 
 namespace loyalsoft;
@@ -735,6 +735,22 @@ class GameConfig {
         return self::get_hash_item('token_gift', $itemid);
     }
     /**
+    * 公共兑换码
+    * @return \token_publicgift
+    */
+    public static function token_publicgift()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'token_publicgift');
+    }
+    /**
+    * @return \sm_token_publicgift token_publicgift item数据 
+    */
+    public static function token_publicgift_getItem($itemid)
+    { 
+        return self::get_hash_item('token_publicgift', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 1 - 1
Gameserver/App/configs/GameConstants.php

@@ -28,7 +28,7 @@ class GameConstants {
                 return "zgyqfmpav4whex9td7nu2kj8b5ris36c";
             case 'ios':                                                         # ios平台
                 return "m8hsn46efyuatvp972cdgz3qrxj5wibk";
-            case 'and_hw':                                                         # android平台 20171101110403
+            case 'dev':                                                         # android平台 20171101110403
                 return "qh6jid4g598rfnwp37xyb2vetzuskcam";
             default :                                                           # 默认采用原文密码本
                 return "abcdefghijkmnpqrstuvwxyz23456789";

+ 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-20 16:05:22
+ // 日期: 2024-06-20 17:10:35
 ////////////////////
 
 /**
@@ -733,6 +733,22 @@ class GameConfig {
         return self::get_hash_item('token_gift', $itemid);
     }
     /**
+    * 公共兑换码
+    * @return \token_publicgift
+    */
+    public static function token_publicgift()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'token_publicgift');
+    }
+    /**
+    * @return \sm_token_publicgift token_publicgift item数据 
+    */
+    public static function token_publicgift_getItem($itemid)
+    { 
+        return self::get_hash_item('token_publicgift', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 3 - 3
Gameserver/App/model/Const/sm_token_PublicGift.php

@@ -3,14 +3,14 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2024-03-20 15:21:24
+ // 日期: 2024-06-20 17:00:35
 ////////////////////
 
 
 /**
- * Static Model token_PublicGift 公共兑换码
+ * Static Model token_publicgift 公共兑换码
  */
-class sm_token_PublicGift
+class sm_token_publicgift
 {
 
     /**

+ 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-20 16:05:46
+ // 日期: 2024-06-20 17:11:02
 ////////////////////
 
 

+ 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-20 16:05:46
+ // 日期: 2024-06-20 17:11:02
 ////////////////////
 
 

+ 78 - 30
Gameserver/App/process/ActiveProc.php

@@ -40,35 +40,44 @@ class ActiveProc {
         $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);                                        # 数据库操作失败- 重试
-
+        if (self::PublicTokenCodeCheck($codestring)) {
+            $packageInfo = GameConfig::token_PublicGift_getItem($codestring);
+            my_Assert($packageInfo->expirets >= now() && $packageInfo->startTs <= now(),
+                    ErrCode::active_activecode_outtime);
+            my_Assert(!in_array($codestring, ctx()->privateState->usedTokens), ErrCode::active_hasgetted); # 已经领取过该礼包了
+            $packageID = $codestring;
+            $err = StoreProc::AddMultiItemInStore($packageInfo->reward);            # 发放礼包
+            my_Assert(ErrCode::ok == $err, $err);
+        } else {
+            $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();                                             # 回存玩家数据     
@@ -80,10 +89,49 @@ class ActiveProc {
             'cash' => ctx()->base()->cash,
             'tili' => ctx()->base()->tili,
             'store' => ctx()->store,
-            'hero' => ctx()->heros,        
+            'hero' => ctx()->heros,
         );
         return Resp::ok($ret);                                                  # 返回成功信息
     }
+    
+    public static function PublicTokenCodeCheck($codestring) {
+        $dic = GameConfig::token_PublicGift();
+        if (StlUtil::dictHasProperty($dic, $codestring)) {
+            return true;
+        }
+        return false;
+    }
+    
+    /**
+     * 检查兑换码是否已经使用过了
+     * @param ActiveCode $activeCode
+     * @return boolean true : 已经用过了, false : 激活码尚未使用过.
+     */
+    static function checkActiveCodeIsUsed($activeCode) {
+        $sql = sprintf("`plat`='%d' and `package`='%d' and `number`='%d'", #       # where 子句
+                $activeCode->plat, $activeCode->package, $activeCode->number);
+        $rows = daoInst()
+                ->select()
+                ->from(self::tab_toke_gift)                                     # 表名
+                ->where($sql)
+                ->count();
+        return $rows > 0;
+    }
+
+    /**
+     * 将兑换码添加到使用记录中
+     * @param ActiveCode $actvieCode
+     * @param string $uid
+     * @return boolean true: 操作成功, false: 操作失败
+     */
+    static function setActiveCodeUserRecord($actvieCode, $uid) {
+        $actvieCode->uid = $uid;                                                # 添加uid
+        $ret = daoInst()
+                ->insert(self::tab_toke_gift)                                   # 表名
+                ->data($actvieCode)
+                ->exec();
+        return $ret > 0;
+    }
 
     /**
      * 7日签到 数据更新