From fd85134c0d4ac18f7286d1d92eb84fa64c8defc5 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 30 五月 2025 10:23:20 +0800 Subject: [PATCH] 16 卡牌服务端(首登修改) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 88 +++++--------------------------------------- 1 files changed, 10 insertions(+), 78 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..61daa51 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -218,37 +218,6 @@ 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 # #struct tagCMMoneyExchange @@ -480,7 +449,6 @@ def DoPlayerLogin(curPlayer, tick): #这里只做初始化逻辑 curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置 #通知时间 Sync_PyServerDataTimeToClient(curPlayer) @@ -577,14 +545,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 +579,6 @@ #---玩家上线, 宠物逻辑处理--- PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick) PlayerPet.OnPlayerPetLogin(curPlayer) - - __FirstLoginOnEnter(curPlayer) #清空玩家万能背包中的任务物品 ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere) @@ -909,11 +874,6 @@ 该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里 旧的功能先不动( __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(): @@ -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 @@ -2392,28 +2349,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 玩家索引 @@ -2462,9 +2397,6 @@ #流向记录玩家下线 DataRecordPack.DR_PlayerDisconnect(curPlayer) - - #记录新增有效登陆玩家 - NoteLoginValid(curPlayer) #VIP时间 #PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False) -- Gitblit v1.8.0