| | |
| | | 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
|
| | |
| | | def DoPlayerLogin(curPlayer, tick):
|
| | | #这里只做初始化逻辑
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置
|
| | |
|
| | | #通知时间
|
| | | Sync_PyServerDataTimeToClient(curPlayer)
|
| | |
| | | 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)
|
| | |
|
| | |
| | | #---玩家上线, 宠物逻辑处理---
|
| | | PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
|
| | | PlayerPet.OnPlayerPetLogin(curPlayer)
|
| | | |
| | | __FirstLoginOnEnter(curPlayer)
|
| | |
|
| | | #清空玩家万能背包中的任务物品
|
| | | ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
|
| | |
| | | 该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
|
| | | 旧的功能先不动( __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():
|
| | |
| | | return
|
| | |
|
| | | def __FirstLoginOnEnter(curPlayer):
|
| | | ## 首登处理,先return
|
| | | return
|
| | | ## 首登处理
|
| | | |
| | | playerID = curPlayer.GetID()
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin):
|
| | | return
|
| | |
|
| | | GameWorld.Log('玩家是第一次进入游戏', playerID)
|
| | | # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
|
| | |
| | | #---补满血满魔---
|
| | | GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
|
| | | curPlayer.SetMP(curPlayer.GetMaxMP())
|
| | | |
| | | #---给予玩家新手物品---
|
| | |
|
| | | #默认触发一次功能开启
|
| | | if curPlayer.GetLV() == 1:
|
| | |
| | | #玩家默认恶名值
|
| | | 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)
|
| | |
| | | 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
|
| | |
| | | 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 玩家索引
|
| | |
| | |
|
| | | #流向记录玩家下线
|
| | | DataRecordPack.DR_PlayerDisconnect(curPlayer)
|
| | | |
| | | #记录新增有效登陆玩家
|
| | | NoteLoginValid(curPlayer)
|
| | |
|
| | | #VIP时间
|
| | | #PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False)
|