| | |
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import PlayerBillboard
|
| | | import PlayerLVAward
|
| | | import PlayerGoldGift
|
| | | import PlayerSignDay
|
| | | import PlayerPrestigeSys
|
| | | import PlayerFamily
|
| | | import PlayerLoginDayAward
|
| | | import PlayerGoldInvest
|
| | | import PlayerActivity
|
| | | import FBCommon
|
| | | import PlayerWishingWell
|
| | | import PlayerSuccess
|
| | | import PlayerFreeGoods
|
| | | import GameFuncComm
|
| | | import PlayerFamilyTaofa
|
| | | import PlayerFeastLogin
|
| | | import PlayerFeastWish
|
| | | import PlayerActLogin
|
| | | import PlayerTreasure
|
| | | import IpyGameDataPY
|
| | | import EventReport
|
| | | import PassiveBuffEffMng
|
| | | import PlayerFlashSale
|
| | | import PlayerFlashGiftbag
|
| | | import PlayerDailyGiftbag
|
| | | import PlayerActBuyOne
|
| | | import PlayerActGrowupBuy
|
| | | import PlayerActCollectWords
|
| | | import PlayerActTotalRecharge
|
| | | import PlayerActLianqi
|
| | | import PlayerActGodGift
|
| | | import PlayerActFamilyCTGAssist
|
| | | import PlayerActManyDayRecharge
|
| | | import PlayerActSingleRecharge
|
| | | import PlayerSpringSale
|
| | | import PlayerLuckyTreasure
|
| | | import PlayerFuncSysPrivilege
|
| | | import PlayerActTurntable
|
| | | import OpenServerActivity
|
| | | import ChNetSendPack
|
| | | import PlayerArena
|
| | |
| | | import PlayerActBuyCountGift
|
| | | import PlayerActLunhuidian
|
| | | import PlayerActFamilyGCZ
|
| | | import PlayerActYunshi
|
| | | import PlayerActTask
|
| | | import PlayerMail
|
| | | import DBDataMgr
|
| | |
| | | if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
|
| | | #玩家是第一次登录, 并且玩家需要踢回原来地图
|
| | | return
|
| | | |
| | | #刷新人物日期状态
|
| | | #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
|
| | | PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
|
| | | return
|
| | |
|
| | | #// A1 20 货币兑换 #tagCMMoneyExchange
|
| | |
| | | Sync_OpenServerDay(curPlayer)
|
| | | #通知玩家基本信息
|
| | | curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
|
| | | SyncSettingData(curPlayer)
|
| | |
|
| | | # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
|
| | | # !!!必要发送的数据要注意位置
|
| | | if GameWorld.IsCrossServer():
|
| | | curPlayer.SetForbiddenSyncClientState(True)
|
| | | |
| | | # !!!先处理检查OnDay,再处理玩家登录的功能数据,防止某些功能login处理数据后又被onday重置
|
| | | PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
|
| | |
|
| | | __DoPlayerLoginServer(curPlayer, tick)
|
| | |
|
| | |
| | | EventReport.WriteEvent_login(curPlayer)
|
| | |
|
| | | # 合服首登处理
|
| | | __DoMixServerFirstLogin(curPlayer)
|
| | | #__DoMixServerFirstLogin(curPlayer)
|
| | | PlayerBillboard.BillboardOnLogin(curPlayer)
|
| | |
|
| | | #玩家扩展信息
|
| | |
| | |
|
| | | #PKģʽ
|
| | | #SyncPKModel(curPlayer)
|
| | | |
| | | # 通知等级奖励领取记录
|
| | | PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer)
|
| | |
|
| | | PlayerCoin.OnLogin(curPlayer)
|
| | | # 首充/天天首充/充值豪礼
|
| | |
| | |
|
| | | PlayerTreasure.OnTreasureLogin(curPlayer)
|
| | |
|
| | | # 通知累计登陆礼
|
| | | PlayerLoginDayAward.OnLoginNotifyLoginDayAward(curPlayer)
|
| | | |
| | | # 副本进入时间
|
| | | FBCommon.FBOnLogin(curPlayer)
|
| | |
|
| | |
| | | #同步自动战斗配置记录
|
| | | # Sync_AutoFightSetting(curPlayer)
|
| | |
|
| | | PlayerFamily.OnPlayerLogin(curPlayer, tick)
|
| | | |
| | | # 竞技场
|
| | | PlayerArena.OnLogin(curPlayer)
|
| | |
|
| | |
| | | #NotifyPlayerBasePoint(curPlayer)
|
| | | #累计充值
|
| | | PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
|
| | | #成长必买
|
| | | PlayerActGrowupBuy.OnPlayerLogin(curPlayer)
|
| | | #限时特惠
|
| | | PlayerSpringSale.OnPlayerLogin(curPlayer)
|
| | | #限时礼包
|
| | | PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
|
| | | #每日礼包
|
| | | PlayerDailyGiftbag.OnPlayerLogin(curPlayer)
|
| | | #限时抢购
|
| | | PlayerFlashSale.OnPlayerLogin(curPlayer)
|
| | | #买一送多活动
|
| | | PlayerActBuyOne.OnPlayerLogin(curPlayer)
|
| | | #仙盟充值互助
|
| | |
| | | FunctionNPCCommon.ShopItemOnLogin(curPlayer)
|
| | | # 通知设置的被动功法
|
| | | #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
|
| | | # 极品白拿
|
| | | PlayerFreeGoods.OnLogin(curPlayer)
|
| | | # 购买次数礼包活动
|
| | | PlayerActBuyCountGift.OnPlayerLogin(curPlayer)
|
| | | # 任务活动
|
| | | PlayerActTask.OnPlayerLogin(curPlayer)
|
| | | # 运势活动
|
| | | PlayerActYunshi.OnPlayerLogin(curPlayer)
|
| | | # 轮回殿活动
|
| | | PlayerActLunhuidian.OnPlayerLogin(curPlayer)
|
| | | # 登录活动
|
| | | PlayerActLoginNew.OnPlayerLogin(curPlayer)
|
| | | # 节日登录活动
|
| | | PlayerFeastLogin.OnPlayerLogin(curPlayer)
|
| | | # 节日祝福活动
|
| | | PlayerFeastWish.OnPlayerLogin(curPlayer)
|
| | | # 登录奖励活动
|
| | | PlayerActLogin.OnLogin(curPlayer)
|
| | | # 炼器活动
|
| | | PlayerActLianqi.OnPlayerLogin(curPlayer)
|
| | | # 天帝礼包活动
|
| | | PlayerActGodGift.OnPlayerLogin(curPlayer)
|
| | | # 多日连充活动
|
| | | PlayerActManyDayRecharge.OnPlayerLogin(curPlayer)
|
| | | # 单笔累充活动
|
| | | PlayerActSingleRecharge.OnPlayerLogin(curPlayer)
|
| | | # 转盘活动
|
| | | PlayerActTurntable.OnPlayerLogin(curPlayer)
|
| | | # 分支下载奖励记录通知
|
| | | SyncPackDownloadAward(curPlayer)
|
| | | # 登录触发功能开启(老号处理)
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | # 神兽
|
| | | PlayerDogz.OnPlayerLogin(curPlayer)
|
| | | # 许愿池
|
| | | PlayerWishingWell.OnLogin(curPlayer)
|
| | | #幸运鉴宝
|
| | | PlayerLuckyTreasure.OnLogin(curPlayer)
|
| | | # 小助手
|
| | | SyncLittleHelper(curPlayer)
|
| | | PlayerFB.OnLogin(curPlayer)
|
| | |
| | | else:
|
| | | PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
|
| | | GMT_BroadCast.OnPlayerLogin(curPlayer)
|
| | | PlayerFamily.OnPlayerLogin(curPlayer, tick)
|
| | | PlayerHero.OnPlayerLogin(curPlayer)
|
| | | PlayerMail.OnPlayerLogin(curPlayer)
|
| | | PlayerHJG.OnPlayerLogin(curPlayer)
|
| | |
| | | OpenServerActivity.OnPlayerLogin(curPlayer)
|
| | | PlayerPreset.OnPlayerLogin(curPlayer)
|
| | | CrossPlayer.OnPlayerLogin(curPlayer)
|
| | | PlayerActLunhuidian.OnPlayerLogin(curPlayer)
|
| | |
|
| | | __OnFixVersion(curPlayer) # 修正线上玩家数据用,暂时放最后
|
| | | # 上线查询一次充值订单
|
| | |
| | |
|
| | | # --------------------------------------------------------------
|
| | |
|
| | | syncCD = 2000
|
| | | if refreshType == IPY_PlayerDefine.CDBPlayerRefresh_FightPower:
|
| | | syncCD = 60 * 1000
|
| | | |
| | | # 同步给相关跨服
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | lastSyncTick = curPlayer.GetDictByKey("S2C_PlayerBaseInfo")
|
| | | if lastSyncTick and (tick - lastSyncTick) <= 2000:
|
| | | if lastSyncTick and (tick - lastSyncTick) <= syncCD:
|
| | | # 短时间内只同步一次
|
| | | #GameWorld.DebugLog("同步基础属性CD中! refreshType=%s,syncCD=%s,pass=%s" % (refreshType, syncCD, tick - lastSyncTick))
|
| | | return
|
| | | curPlayer.SetDict("S2C_PlayerBaseInfo", tick)
|
| | |
|
| | |
| | | return
|
| | |
|
| | | def S2C_OnlineState(dataMsg, fromServerID, playerID):
|
| | | ## 收到游戏服玩家在线状态同步
|
| | | '''收到游戏服玩家在线状态同步
|
| | | 跨服收到在线状态同步时都视为在跨服上线,需要处理跨服在线/上线的逻辑
|
| | | 不然在跨服维护游戏服不维护的情况下,等跨服重开后,游戏服重新同步在线玩家,此时如果跨服不处理登录逻辑,会少同步封包
|
| | | 如公会,跨服维护之后登录的玩家会取不到公会数据,等跨服重开后,需视为登录重新同步
|
| | | 与跨服重连一样的道理,都是重新同步所有信息
|
| | | '''
|
| | | isOnline = dataMsg["isOnline"]
|
| | | isLoginout = dataMsg["isLoginout"]
|
| | | #isLoginout = dataMsg["isLoginout"] # 如果个别跨服功能有需要对真实上下线做特殊处理的可使用该参数判断
|
| | | baseInfo = dataMsg["baseInfo"]
|
| | |
|
| | | crossPlayer = UpdCrossPlayerFromMainServer(fromServerID, playerID, baseInfo, isOnline)
|
| | |
|
| | | # 其他跨服功能处理,暂时仅上下线时处理
|
| | | curServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | if isLoginout:
|
| | | # 公会
|
| | | if "crossFamilyServerID" in dataMsg:
|
| | | crossFamilyServerID = dataMsg["crossFamilyServerID"]
|
| | | if curServerID == crossFamilyServerID:
|
| | | if isOnline:
|
| | | PlayerFamily.OnCrossPlayerLogin(crossPlayer)
|
| | | else:
|
| | | PlayerFamily.OnCrossPlayerLogout(crossPlayer)
|
| | | |
| | | # 最后处理缓存,先放在更新中处理删除,有问题再放后面
|
| | | #if not isOnline:
|
| | | # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
|
| | | # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
|
| | | #if isLoginout:
|
| | | # 公会
|
| | | if "crossFamilyServerID" in dataMsg:
|
| | | crossFamilyServerID = dataMsg["crossFamilyServerID"]
|
| | | if curServerID == crossFamilyServerID:
|
| | | if isOnline:
|
| | | PlayerFamily.OnCrossPlayerLogin(crossPlayer)
|
| | | else:
|
| | | PlayerFamily.OnCrossPlayerLogout(crossPlayer)
|
| | | |
| | | # 最后处理缓存,先放在更新中处理删除,有问题再放后面
|
| | | #if not isOnline:
|
| | | # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
|
| | | # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
|
| | |
|
| | | # 最后同步处理跨服登录成功
|
| | | #if isLoginout and isOnline:
|
| | |
| | | #到此处已经可以保存数据,即使客户端不回包断线
|
| | | #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
|
| | | __Func_LoadMapOK(index, tick)
|
| | | GameServerRefresh.GameSever_PlayerInitOK(index, tick)
|
| | | DoPlayerRealLoginOK(curPlayer, tick)
|
| | | #GameServerRefresh.GameSever_PlayerInitOK(index, tick) GameServer已废弃,不再执行该逻辑
|
| | | except:
|
| | | curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
|
| | | import traceback
|
| | |
| | |
|
| | | #申请得到奖励物品
|
| | | #curPlayer.DataServer_CheckPrizeItem()
|
| | | |
| | | #防止玩家读取地图时未触发OnDay,读取地图后再次验证(2009.9.11)
|
| | | PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
|
| | |
|
| | | #设置阵营
|
| | | if curPlayer.GetFaction() != ChConfig.CampType_Neutral \
|
| | |
| | | return
|
| | |
|
| | | curPlayer.SetSetting(setting)
|
| | | return
|
| | |
|
| | | #// A1 31 前端自定义保存设置内容 #tagCSSettingData
|
| | | #
|
| | | #struct tagCSSettingData
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE KeyNum; // 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
|
| | | # BYTE DataLen; |
| | | # char SetData[DataLen]; //自定义保存的内容
|
| | | #};
|
| | | def OnSettingData(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | keyNum = clientData.KeyNum
|
| | | setData = clientData.SetData
|
| | | setData = setData.replace(" ", "") # 去空格
|
| | | keyStr = str(keyNum)
|
| | | |
| | | gameRecMgr = DBDataMgr.GetGameRecMgr()
|
| | | preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID) |
| | | recData = preSetRecMgr.GetOneRecData(True)
|
| | | if not recData:
|
| | | return
|
| | | dataDict = recData.GetUserDict()
|
| | | |
| | | if not setData:
|
| | | dataDict.pop(keyStr, None)
|
| | | else:
|
| | | keyMax = 100
|
| | | if keyStr not in dataDict:
|
| | | if len(dataDict) >= keyMax:
|
| | | GameWorld.ErrLog("存储个数达到上限! keyMax=%s" % keyMax)
|
| | | return
|
| | | dataDict[keyStr] = setData
|
| | | |
| | | SyncSettingData(curPlayer, keyStr)
|
| | | return
|
| | |
|
| | | def SyncSettingData(curPlayer, keyStr=""):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | gameRecMgr = DBDataMgr.GetGameRecMgr()
|
| | | preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID) |
| | | recData = preSetRecMgr.GetOneRecData()
|
| | | if not recData:
|
| | | return
|
| | | dataDict = recData.GetUserDict()
|
| | | |
| | | settingDataList = []
|
| | | syncKeyList = [keyStr] if keyStr else dataDict.keys()
|
| | | for keyStr in syncKeyList:
|
| | | if keyStr in dataDict:
|
| | | setData = dataDict[keyStr]
|
| | | else:
|
| | | setData = ""
|
| | | keyNum = GameWorld.ToIntDef(keyStr, None)
|
| | | if keyNum == None:
|
| | | continue
|
| | | sData = ChPyNetSendPack.tagSCSettingData()
|
| | | sData.KeyNum = keyNum
|
| | | sData.SetData = setData
|
| | | sData.DataLen = len(sData.SetData)
|
| | | settingDataList.append(sData)
|
| | | if not settingDataList:
|
| | | return
|
| | | clientPack = ChPyNetSendPack.tagSCSettingDataInfo()
|
| | | clientPack.SettingDataList = settingDataList
|
| | | clientPack.DataCnt = len(clientPack.SettingDataList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | #// A2 29 设置小助手 #tagCMSetLittleHelper
|
| | |
| | | # 开服庆典积分阶段奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_OSACelebrationPointAward:
|
| | | OpenServerActivity.GetOSACelebrationPointAward(curPlayer, dataEx)
|
| | | # 轮回殿奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
|
| | | PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
|
| | |
|
| | | |
| | | # 每日免费直购礼包
|
| | | elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
|
| | | PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
|
| | | # 玩家等级奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_LVAward:
|
| | | PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
|
| | | |
| | | # 首充礼包奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FirstCharge:
|
| | | PlayerGoldGift.GetPlayerFirstCharge(curPlayer, dataEx, dataExStr)
|
| | | # 领取极品白拿
|
| | | elif rewardType == ChConfig.Def_RewardType_FreeGoods:
|
| | | PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
|
| | | # 领取累计充值奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
|
| | | PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx, dataExStr)
|
| | |
| | | # 领取单笔累充领取
|
| | | elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
|
| | | PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
|
| | | # 领取许愿池奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_WishingWell:
|
| | | PlayerWishingWell.DoGetWishingAward(curPlayer)
|
| | | # 领取登录奖励活动奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_ActLoginAwardAct:
|
| | | PlayerActLogin.GetLoginAwardActionAward(curPlayer, dataEx, dataExStr)
|
| | | # 领取节日登录奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FeastLogin:
|
| | | PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
|
| | | # 领取登录活动奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_ActLoginAwardNew:
|
| | | PlayerActLoginNew.OnGetActLoginAward(curPlayer, dataEx, dataExStr)
|
| | |
| | | # 寻宝累计次数奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_TreasureCntAward:
|
| | | PlayerTreasure.GetTreasureCntAward(curPlayer, dataEx, dataExStr)
|
| | | # 轮回殿奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
|
| | | PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
|
| | | #历史累计充值领取
|
| | | elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
|
| | | PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
|