From dc0b92c1e2fe9f3d24c183b325dad54d088735c1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 10 七月 2025 17:01:24 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py |  165 +++++++++++++++++++-----------------------------------
 1 files changed, 58 insertions(+), 107 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 1678a8b..1b2a70b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -55,7 +55,6 @@
 import PlayerGoldInvest
 import PlayerActivity
 import FBCommon
-import PlayerBindJadeWheel
 import BossHurtMng
 import PlayerWishingWell
 import PlayerAttrFruit
@@ -95,7 +94,6 @@
 import PlayerVip
 import PlayerRefineStove
 import PassiveBuffEffMng
-import PlayerDiceEx
 import GameLogic_XMZZ
 import PlayerFlashSale
 import PlayerFlashGiftbag
@@ -174,7 +172,11 @@
 import IPY_ServerDefine
 import CommFunc
 from PyMongoDB import RecvPackToMapDB
+import PyMongoMain
 import PlayerTalk
+import PlayerHero
+import PlayerOnline
+import TurnAttack
 
 import datetime
 import time
@@ -216,37 +218,6 @@
     #刷新人物日期状态
     #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
     PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
-    return
-
-##非同一天二次登陆
-# @param curPlayer 玩家实例
-# @return None
-def NoteOtherDayLogin(curPlayer):
-    #记录过或者未登陆过 不记录
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_OtherDayLogin) != 1:
-        return
-    
-    logoffTimeStr = curPlayer.GetLogoffTime().strip()
-    loginTimeStr = curPlayer.GetLoginTime().strip()
-    #curTimeStr = GameWorld.GetCurrentDataTimeStr()
-    
-    #防范外部逻辑错误,或异常情况
-    if logoffTimeStr in ['', '0'] or loginTimeStr in ['', '0']:
-        return
-    
-    logoffTimeDate = GameWorld.GetDateTimeByStr(logoffTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day)
-    
-    #同一天不记录
-    if logoffTimeDate == GameWorld.GetDateTimeByStr(loginTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day):
-        return
-    
-    #GameWorld.Log("OtherDayLogin offtime = %s" % logoffTimeDate)
-    
-    DataRecordPack.DR_OtherDayLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
-    
-    #标记为已记录
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 2)
-    
     return
 
 #// A1 20 货币兑换 #tagCMMoneyExchange
@@ -480,7 +451,6 @@
 def DoPlayerLogin(curPlayer, tick):
     #这里只做初始化逻辑
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置
     
     #通知时间
     Sync_PyServerDataTimeToClient(curPlayer)
@@ -541,6 +511,8 @@
         if PlayerControl.GetCrossMapID(curPlayer):
             PlayerControl.SetCrossMapID(curPlayer, 0)
         
+    PlayerOnline.OnPlayerLogin(curPlayer)
+    TurnAttack.OnPlayerLogin(curPlayer)
     SyncGuideState(curPlayer)
     
     #上线检查一次装备属性
@@ -556,8 +528,6 @@
     
     #通知玩家技能信息
     __Sync_ClientSkill(curPlayer)
-    #清除国家答题Buff
-    #PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False)
     #清除VIPbuff
     #BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick)
     
@@ -577,14 +547,13 @@
     PlayerPrestigeSys.OnLogin(curPlayer)
     #DataRecordPack.DR_PlayerLogin(curPlayer)
     EventReport.WriteEvent_login(curPlayer)
-            
+    
+    __FirstLoginOnEnter(curPlayer)
+    
     # 合服首登处理
     __DoMixServerFirstLogin(curPlayer)
     PlayerBillboard.BillboardOnLogin(curPlayer)
     
-    #非同一天二次登陆, 应该放在该函数中的SetLoginTime之后
-    NoteOtherDayLogin(curPlayer)
-        
     #上线时通知脱机挂时被击杀的离线时间
     __Sync_PlayerOffline(curPlayer, tick)
     
@@ -612,8 +581,6 @@
     #---玩家上线, 宠物逻辑处理---
     PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
     PlayerPet.OnPlayerPetLogin(curPlayer)
-    
-    __FirstLoginOnEnter(curPlayer)
     
     #清空玩家万能背包中的任务物品
     ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
@@ -773,8 +740,6 @@
     FunctionNPCCommon.ShopItemOnLogin(curPlayer)
     # 通知设置的被动功法
     #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
-    #我要太极
-    PlayerDiceEx.DiceExOnLogin(curPlayer)
     #仙魔之争
     GameLogic_XMZZ.OnXMZZLogin(curPlayer)
     PlayerOnlinePrize.OnPlayerLogin(curPlayer)
@@ -844,8 +809,6 @@
     PlayerDogz.OnPlayerLogin(curPlayer)
     # 骑宠
     FamilyRobBoss.OnPlayerLogin(curPlayer)
-    # 绑玉转盘
-    PlayerBindJadeWheel.OnLogin(curPlayer)
     # 许愿池
     PlayerWishingWell.OnLogin(curPlayer)
     #幸运鉴宝
@@ -909,17 +872,14 @@
         该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
         旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
     '''
-    
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealLoginOK):
-        #切地图的不处理,切地图的也会触发该函数
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 1)
     GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
     
     if GameWorld.IsCrossServer():
         pass
     
     else:
+        PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
+        PlayerHero.OnPlayerLogin(curPlayer)
         PlayerMail.OnPlayerLogin(curPlayer)
         PlayerChatBox.OnPlayerLogin(curPlayer)
         PlayerFace.OnPlayerLogin(curPlayer)
@@ -956,9 +916,11 @@
     return
 
 def __FirstLoginOnEnter(curPlayer):
-    ## 首登处理,先return
-    return
+    ## 首登处理
+    
     playerID = curPlayer.GetID()
+    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin):
+        return
     
     GameWorld.Log('玩家是第一次进入游戏', playerID)
     # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
@@ -969,8 +931,6 @@
     #---补满血满魔---
     GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
     curPlayer.SetMP(curPlayer.GetMaxMP())
-    
-    #---给予玩家新手物品---
     
     #默认触发一次功能开启
     if curPlayer.GetLV() == 1:
@@ -984,9 +944,6 @@
     #玩家默认恶名值
     curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
     
-    #标记已登陆过,用于非同一天二次登陆
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 1)
-    
     #curPlayer.SetDict("ThunderLogin", 1)
     #记录第一次登陆
     DataRecordPack.DR_FirstLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
@@ -995,12 +952,12 @@
     mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2)
     for mailTypeKey, mailItemList in mailList:
         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
     return
 
-## 合服首登处理
-#  @param curPlayer
-#  @return None
 def __DoMixServerFirstLogin(curPlayer):
+    ## 合服首登处理
     isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
     if not isMixServer:
         return
@@ -1315,17 +1272,22 @@
     if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
         #副本地图上线切换才加无敌buff
         SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
-            
-    #刷新玩家的视野
-    if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)):
-        GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID())
+        
+    #卡牌改为0视野            
+    if curPlayer.GetSightLevel() != curPlayer.GetID():
         PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
-    elif not GameWorld.IsCrossServer():
-        realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
-        if realmDifficulty:
-            GameWorld.DebugLog("===登录本服地图时,处于境界难度地图,自动设置难度! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
-            PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
-            
+    if curPlayer.GetSight() != 0:
+        PlayerControl.SetSight(curPlayer, 0)
+    #刷新玩家的视野
+    #if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)):
+    #    GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID())
+    #    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
+    #elif not GameWorld.IsCrossServer():
+    #    realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
+    #    if realmDifficulty:
+    #        GameWorld.DebugLog("===登录本服地图时,处于境界难度地图,自动设置难度! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
+    #        PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
+    
     PlayerState.ChangePlayerSigh(curPlayer, tick)
     
     if GameWorld.IsCrossServer():
@@ -1530,6 +1492,14 @@
     #初始化寻宝背包
     PlayerControl.Init_TreasurePack(curPlayer)
     
+    #初始化鉴定背包
+    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
+    curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptIdentify))
+    curPack.Sync_PackCanUseCount()
+    
+    #初始化英雄背包
+    PlayerControl.Init_HeroPack(curPlayer)
+    
     #初始化神兽物品背包
     curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
     curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
@@ -1655,16 +1625,21 @@
     #将玩家放置在这个地图上
     curPlayer.InitPos(curPlayer.GetPosX(), curPlayer.GetPosY())
     
-    #刷新自己的视野
-    if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
-        GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID())
+    #卡牌改为0视野
+    if curPlayer.GetSightLevel() != curPlayer.GetID():
         PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
-    elif not GameWorld.IsCrossServer():
-        realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
-        if realmDifficulty:
-            GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
-            PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
-            
+    if curPlayer.GetSight() != 0:
+        PlayerControl.SetSight(curPlayer, 0)
+    #刷新自己的视野
+    #if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
+    #    GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID())
+    #    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
+    #elif not GameWorld.IsCrossServer():
+    #    realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
+    #    if realmDifficulty:
+    #        GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
+    #        PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
+    
     curPlayer.RefreshView()
     curPlayer.SetVisible(True)
         
@@ -2392,28 +2367,6 @@
 def PlayerDisconnect(index, tick):
     GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
     return
-#---------------------------------------------------------------------
-
-##记录新增有效登陆玩家,登陆10分钟以上玩家才算有效
-# @param curPlayer 玩家实例
-# @return None
-def NoteLoginValid(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LoginValid) == 1:
-        #已记录
-        return
-    
-    #计算时间, 当前减去登陆时间
-    diffTime = GameWorld.GetCurrentTime() - GameWorld.GetDateTimeByStr(curPlayer.GetLoginTime().strip())
-    
-    #10分钟以上才算有效玩家
-    if diffTime.days == 0 and diffTime.seconds < 10 * 60:
-        return
-    
-    DataRecordPack.DR_LoginValid(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LoginValid, 1)
-    return
-
 
 ##C++封包触发, 玩家下线
 #@param index 玩家索引
@@ -2453,6 +2406,7 @@
     #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储
     #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
     #######################################################################
+    PlayerOnline.OnPlayerLogoff(curPlayer)
     #下线逻辑
     PlayerControl.PlayerLeaveServer(curPlayer, tick)
     
@@ -2462,9 +2416,6 @@
     
     #流向记录玩家下线
     DataRecordPack.DR_PlayerDisconnect(curPlayer)
-    
-    #记录新增有效登陆玩家
-    NoteLoginValid(curPlayer)
     
     #VIP时间
     #PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False)
@@ -4440,7 +4391,7 @@
 #    WORD        RealmDifficulty;    //境界难度 = 1000 + 所选境界等级,如境界13,则发1013
 #};
 def OnSelectRealmDifficulty(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty)
+    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    #PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty)
     return
 

--
Gitblit v1.8.0