| | |
| | | import PlayerTravel
|
| | | import TurnAttack
|
| | | import PlayerHJG
|
| | | import ObjPool
|
| | | import ChEquip
|
| | |
|
| | | import datetime
|
| | | import time
|
| | |
| | | curPlayer.SetState(0) # 脱机挂恢复为正常上线
|
| | | curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
|
| | |
|
| | | PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
|
| | | PlayerControl.OnPlayerLogin(curPlayer)
|
| | | DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
|
| | | return
|
| | |
|
| | |
| | | PlayerTravel.OnPlayerLogin(curPlayer)
|
| | | OpenServerActivity.OnPlayerLogin(curPlayer)
|
| | |
|
| | | __OnFixVersion(curPlayer) # 修正线上玩家数据用,暂时放最后
|
| | | # 上线查询一次充值订单
|
| | | # curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
|
| | |
|
| | |
| | | isMixServerFirstLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MixServerFirstLogin)
|
| | | msg = str([isMixServerFirstLogin])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "PlayerRealLoginOK", msg, len(msg))
|
| | | return
|
| | |
|
| | | def __OnFixVersion(curPlayer):
|
| | | ''' 修正线上玩家数据内容
|
| | | 每次有需要修正时,只要定义一个新的系统内容版本号 sysFixVersion , 然后玩家根据自身版本号进行逐步修正即可
|
| | | 这样只用到一个key即可,不需要每次都定义新的key
|
| | | '''
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | sysFixVersion = 2025123012 # 系统定义的最后一次修正版本号,一般以 yyyyMMddhh 定义为版本号
|
| | | playerVersion = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FixVersion)
|
| | | if not playerVersion:
|
| | | createRoleTime = curPlayer.GetCreateRoleTime() # 按创角
|
| | | ymd = createRoleTime.split(" ")[0]
|
| | | playerVersion = GameWorld.ToIntDef("%s00" % ymd.replace("-", ""))
|
| | | GameWorld.DebugLog("默认数据版本为创角日期: %s, %s" % (createRoleTime, playerVersion), playerID)
|
| | | |
| | | if playerVersion == sysFixVersion:
|
| | | GameWorld.DebugLog("玩家当前数据版本号已是最新版本! playerVersion=%s" % (playerVersion), playerID)
|
| | | return
|
| | | GameWorld.Log("玩家当前数据版本号不等于系统版本号,开始修正! playerVersion=%s != %s" % (playerVersion, sysFixVersion), playerID)
|
| | | |
| | | # 修正玩家装备生命数值: 策划调整了生命占比,同步修改了生命战力,故需修正线上玩家装备生命,防止战力下降
|
| | | fixVersion = 2025123012
|
| | | if playerVersion < fixVersion:
|
| | | ChEquip.FixRoleEquipHP(curPlayer, fixVersion)
|
| | | # 每个版本修正完需要立即更新到对应的版本号值,防止中间某个版本修正失败,导致重登后重复修正已经处理的版本
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FixVersion, fixVersion)
|
| | | |
| | | # 其他
|
| | | # 需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!
|
| | | |
| | | |
| | | # 最终强制设置为最新版本号
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FixVersion, sysFixVersion)
|
| | | return
|
| | |
|
| | | ## 玩家扩展信息同步
|
| | |
| | | # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
|
| | | # 那么在DoPlayerLogin 中设置的数据将不会被保存, 如会导致第一个任务重复触发问题,记录多次发送
|
| | | EventReport.WriteEvent_Entry(curPlayer, 4)
|
| | | #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)
|
| | | |
| | | |
| | | curPlayer.SetFightPoint(1) # 初始化为1倍消耗
|
| | |
|
| | | #---补满血满魔---
|
| | |
| | |
|
| | | #检查更新总战斗力
|
| | | #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer, True)
|
| | | EventReport.WriteEvent_FightPower(curPlayer)
|
| | |
|
| | | #清除在本地图离线记录信息
|
| | | PlayerControl.RemoveLeaveServerPlayerInfo(curPlayer.GetPlayerID())
|
| | |
| | | adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
|
| | | if not adCnt and syncADIDList == None:
|
| | | continue
|
| | | adInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfo)
|
| | | adInfo = ChPyNetSendPack.tagSCADInfo()
|
| | | adInfo.ADID = adID
|
| | | adInfo.ADCnt = adCnt
|
| | | adInfoList.append(adInfo)
|
| | |
| | | if not adInfoList:
|
| | | return
|
| | |
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfoList)
|
| | | clientPack = ChPyNetSendPack.tagSCADInfoList()
|
| | | clientPack.ADInfoList = adInfoList[:255]
|
| | | clientPack.Count = len(clientPack.ADInfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|