| | |
| | | import PlayerActFamilyGCZ
|
| | | import PlayerActYunshi
|
| | | import PlayerActTask
|
| | | import PlayerMail
|
| | | import DBDataMgr
|
| | | import GameServerRefresh
|
| | | import IPY_ServerDefine
|
| | | import CommFunc
|
| | | from PyMongoDB import RecvPackToMapDB
|
| | |
|
| | | import datetime
|
| | | import time
|
| | | import math
|
| | | import re
|
| | | import base64
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | |
|
| | | #---------------------------------------------------------------------
|
| | | '''
|
| | | 登录流程
|
| | | 旧登录流程 -- 留着对比
|
| | | MapServer
|
| | | ChPlayer:def PlayerLogin(index, tick)
|
| | | DoPlayerLogin
|
| | |
| | | Sync_PyServerDataTimeToClient(curPlayer)
|
| | | Sync_OpenServerDay(curPlayer)
|
| | | #通知玩家基本信息
|
| | | curPlayer.Sync_ClientPlayerLogin()
|
| | | |
| | | #同步GameServer自己的地图ID
|
| | | curPlayer.Sync_GameServer_MapID()
|
| | | curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
|
| | |
|
| | | # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
|
| | | # !!!必要发送的数据要注意位置
|
| | |
| | | PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
|
| | |
|
| | | #通知运行成功
|
| | | curPlayer.BalanceServer_PlayerLoginInitOK()
|
| | | curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
|
| | | return
|
| | |
|
| | | def __DoPlayerLoginServer(curPlayer, tick):
|
| | |
| | | EventReport.WriteEvent_login(curPlayer)
|
| | | #---玩家上线, 宠物逻辑处理---
|
| | | PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
|
| | | |
| | | PlayerFamily.FamilyPlayerOnLoginCross(curPlayer)
|
| | |
|
| | | PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
|
| | | return
|
| | |
| | | #充值活动玩家登入处理
|
| | | #PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer)
|
| | |
|
| | | # 通知玩家是否可以参加家族活动
|
| | | #PlayerFamily.SendClientForbidFamilyAction(curPlayer)
|
| | | # 提示贵宾俱乐部信息
|
| | | #PlayerVip.NoteVIPClubInfo(curPlayer)
|
| | |
|
| | |
| | | #同步自动战斗配置记录
|
| | | # Sync_AutoFightSetting(curPlayer)
|
| | |
|
| | | PlayerFamily.FamilyPlayerOnLogin(curPlayer, tick)
|
| | | PlayerFamily.OnPlayerLogin(curPlayer, tick)
|
| | | #改到 GameServerRefresh GameSever_PlayerInitOK后处理才能保证玩家已经在Gameserver注册
|
| | | #PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
|
| | | # 称号
|
| | |
| | | pass
|
| | |
|
| | | else:
|
| | | PlayerMail.OnPlayerLogin(curPlayer)
|
| | | PlayerChatBox.OnPlayerLogin(curPlayer)
|
| | | PlayerFace.OnPlayerLogin(curPlayer)
|
| | | PlayerXiangong.OnPlayerLogin(curPlayer)
|
| | |
| | | #@remarks 玩家在地图服务器中登录ok,初始化自己
|
| | | def DoPlayerLoginInMap(curPlayer, tick):
|
| | | #通知GameServer切换地图开始
|
| | | curPlayer.GameServer_SetLoadMapState(0)
|
| | | #curPlayer.GameServer_SetLoadMapState(0)
|
| | | #在玩家切换场景的时候, 不会调用到这里
|
| | | curPlayer.SetCanMove(False)
|
| | | curPlayer.SetInitOK(False)
|
| | |
| | |
|
| | | #锁住玩家, 等到读取地图成功, 再解锁
|
| | | curPlayer.SetCanMove(False)
|
| | | |
| | | #登陆发图形验证码
|
| | | PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
|
| | |
|
| | | curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送0109包
|
| | | OnAllServerInitOK(curPlayer, tick)
|
| | | #到此处已经可以保存数据,即使客户端不回包断线
|
| | | #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK
|
| | | except:
|
| | | curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
|
| | | import traceback
|
| | | GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
|
| | | |
| | | return
|
| | |
|
| | |
|
| | |
| | | #更改镖车记录的部分主人信息
|
| | | PlayerTruck.ChangeTruckNoteInfo(curPlayer)
|
| | |
|
| | | #更新镖车进排行榜
|
| | | PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),
|
| | | curPlayer.GetLV(), truckLv, curPlayer.GetMapID())
|
| | |
|
| | | #---初始化自己的召唤兽---
|
| | | #===========================================================================
|
| | |
| | | #@remarks C++封包触发, 切换地图成功( 目标地图 )
|
| | | def LoadMapOK(index, tick):
|
| | | GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
|
| | | GameServerRefresh.GameSever_PlayerInitOK(index, tick)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | GameWorld.Log("地图读取成功" , curPlayer.GetPlayerID())
|
| | |
|
| | | #通知GameServer切换地图停止
|
| | | curPlayer.GameServer_SetLoadMapState(1)
|
| | | #curPlayer.GameServer_SetLoadMapState(1)
|
| | | curPlayer.SetMapLoadOK(True)
|
| | |
|
| | | #将玩家放置在这个地图上
|
| | |
| | | except:
|
| | | import traceback
|
| | | GameWorld.RaiseException("玩家下线逻辑错误\r\n%s" % traceback.format_exc())
|
| | | |
| | | RecvPackToMapDB.MapCallDB(GetPackSaveData(curPlayer))
|
| | | #调用底层使玩家下线
|
| | | curPlayer.DoDisconnect(tick)
|
| | |
|
| | | # 简化c++的保存数据封包
|
| | | def GetPackSaveData(curPlayer):
|
| | | roleSaveData = base64.b64decode(curPlayer.GetPackData()) # base64加密了
|
| | | allData = ""
|
| | | allData = CommFunc.WriteBYTE(allData, IPY_ServerDefine.gstUpdate)
|
| | | allData = CommFunc.WriteString(allData, len(roleSaveData), roleSaveData)
|
| | | return allData
|
| | |
|
| | |
|
| | | ##玩家正常下线
|
| | | #@param curPlayer 玩家索引
|
| | | #@param tick 时间戳
|
| | |
| | | # 每日免费直购礼包
|
| | | elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
|
| | | PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
|
| | | # 仙盟活跃度奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FamilyActivity:
|
| | | PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx)
|
| | | # 仙盟联赛冠军仙盟每日俸禄奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward:
|
| | | GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer)
|
| | |
| | | serverTime = GameWorld.GetCurrentTime()
|
| | | if not serverTime:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagMCOpenServerDay()
|
| | | clientPack.Day = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay)
|
| | | clientPack.IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
|
| | | clientPack.MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay)
|
| | | clientPack.OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
|
| | | clientPack.NowYear = serverTime.year
|
| | | clientPack.NowMonth = serverTime.month
|
| | | clientPack.NowDay = serverTime.day
|
| | | clientPack.NowHour = serverTime.hour
|
| | | clientPack.NowMinute = serverTime.minute
|
| | | clientPack.NowSecond = serverTime.second
|
| | | clientPack.NowMicSecond = serverTime.microsecond
|
| | | clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | |
| | | #旧包先保留,之后删除
|
| | | gw = GameWorld.GetGameWorld()
|
| | | packData = ChPyNetSendPack.tagOpenServerDay()
|
| | | packData.Clear()
|