Procházet zdrojové kódy

fix: 登录时数据回存漏掉字段

wanggangzero před 7 měsíci
rodič
revize
c3168cd316

+ 9 - 8
Gameserver/App/base/HashSaver.php

@@ -53,11 +53,16 @@ class HashSaver extends Object_ext {
     }
 
     /**
-     * 存储数据到redis
+     * 全量存储数据到redis
      * @return boolean 是否成功
      */
     function updateDataFull($mem_key) {
         $this->stVer++;
+        foreach ($this as $k => $v) {
+            if ($k != 'save_tag') {
+                $this->save_tag[] = $k;
+            }
+        }
         return gMem()->hmset_Cas($mem_key, $this);
 //        return true;
 //        return gMem()->hmset($mem_key, $this);
@@ -94,16 +99,12 @@ class HashSaver extends Object_ext {
 
     /**
      * 存储数据到redis(这个设计目的是只保存改变的部分)
-     * @deprecated since version 0 加入lua cas机制之后, 这个版本就已经弃用了. --gwang
+     * @version 2024.10.14 修复部分保存机制 --gwang
+     * @version 2022.2.22 加入lua cas机制之后, 这个版本就已经弃用了. --gwang
      */
     function updateDataByTag($mem_key) {
-        $data = array();
-        foreach ($this->save_tag as $k) {
-            $data[$k] = $this->$k;
-        }
         $this->stVer++;
-        $data['stVer'] = $this->stVer;
-        return gMem()->hmset($mem_key, $data);
+        return gMem()->hmset_Cas($mem_key, $this);
     }
 
     // </editor-fold>

+ 6 - 6
Gameserver/App/model/User/Data_UserGame.php

@@ -62,12 +62,12 @@ class Data_UserGame extends HashSaver {
      * @return \UserGameModel
      */
     public function initialize() {
-        $this->baseInfo->initialize();
-//        $this->store->initialize();
-        $this->gates->initialize();
-        $this->heros->initialize();
-        $this->privateState->initialize();
-//        $this->task->initialize();
+        $this->base(true)->initialize();
+        $this->store(true)->initialize();
+        $this->gates(true)->initialize();
+        $this->heros(true)->initialize();
+        $this->privateData(true)->initialize();
+        $this->task(true)->initialize();
     }
 
     /**

+ 2 - 2
Gameserver/App/process/UserProc.php

@@ -492,7 +492,7 @@ class UserProc {
         //2天一刷 
         $curDay = TimeUtil::totalDays();
         $nextDay = TimeUtil::totalDays(ctx()->privateState->nextDayLogin);
-        
+
         $mo = GameConfig::subfun_unlock_getItem(Enum_SubFunType::LimitTsSale);
         $day = $mo->ts;
         if (ctx()->privateState->nextDayLogin > 0 && $curDay - $nextDay >= $day) {
@@ -627,7 +627,7 @@ class UserProc {
             $uid = req()->uid;
             $game->baseInfo->lastSaveTs = now();
             $key = MemKey_User::Info_hash($zoneid, $uid);
-            $OK = $game->updateDataFull($key);                                  # 向Redis回写玩家数据
+            $OK = $game->updateDataByTag($key);                                  # 向Redis回写玩家数据
             if ($OK) {
 //                CLog::info($msg);
                 self::backupUserInfoMongo();                                    # 向MongoDB备份数据