5424 【后端】【1.4】跨服竞技场开发(删除旧跨服代码)
| | |
| | | PacketSubCMD_2=0x08
|
| | | PacketCallFunc_2=QueryFamilyActionInfo
|
| | |
|
| | |
|
| | | ;跨服报名(上传数据)
|
| | | [MergeRegister]
|
| | | ScriptName = Player\PlayerMergeRegister.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xC0
|
| | | PacketSubCMD_1=0x11
|
| | | PacketCallFunc_1=MergeWarRegisterPack
|
| | |
|
| | | PacketCMD_2=0xC0
|
| | | PacketSubCMD_2=0x12
|
| | | PacketCallFunc_2=MergeWarAccQueryPack
|
| | |
|
| | | ;跨服玩家
|
| | | [MergePlayer]
|
| | | ScriptName = Player\MergePlayer.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xC0
|
| | | PacketSubCMD_1=0x15
|
| | | PacketCallFunc_1=OnGotoMergeServer
|
| | |
|
| | |
|
| | | ;排行榜
|
| | | [PlayerBillboard]
|
| | | ScriptName = Player\PlayerBillboard.py
|
| | |
| | | # @change: "2015-02-03 14:30" xmnathan 添加补偿时增加流向
|
| | | # @change: "2015-06-17 14:30" hxp 排行榜流向增加比较值信息
|
| | | # @change: "2015-07-13 14:00" hxp 增加pid信息
|
| | | # @change: "2015-10-25 17:00" hxp 增加DR_SendMergePKRewardMail
|
| | | # @change: "2015-11-05 12:00" hxp 增加恢复跨服连胜流向
|
| | | #------------------------------------------------------------------------------
|
| | | """Version = 2016-09-12 16:00"""
|
| | |
| | |
|
| | | #发送封包
|
| | | SendEventPack("SendCostRankTeHuiRewardMail", dataDict)
|
| | | return
|
| | |
|
| | | ## 发送跨服PK奖励邮件记录流向
|
| | | # @param playerIdList 玩家ID列表
|
| | | # @param GUID 邮件标识
|
| | | # @param actionKey 活动Key
|
| | | # @param order 奖励排名
|
| | | # @param rewardItemList 奖励物品列表
|
| | | # @param addDataDict 附加属性
|
| | | # @return None
|
| | | def DR_SendMergePKRewardMail(playerIdList, guid, actionKey, rewardItemList, addDataDict={}):
|
| | | dataDict = {'PlayerIDList':playerIdList, 'GUID':guid, 'ItemList':rewardItemList}
|
| | |
|
| | | dataDict.update(addDataDict)
|
| | | |
| | | #发送封包
|
| | | SendEventPack("SendMergePKRewardMail_%s" % actionKey, dataDict)
|
| | | return
|
| | |
|
| | | ## 恢复跨服PK连胜次数
|
| | | def DR_RecoverMergePKWin(accID, cWin, maxCWin):
|
| | | dataDict = {'AccID':accID, 'cWin':cWin, 'maxCWin':maxCWin}
|
| | | #发送封包
|
| | | SendEventPack("RecoverMergePKWin", dataDict)
|
| | | return
|
| | |
|
| | |
| | | # @param eventClass
|
| | | # @return None
|
| | | def WriteEvent(eventClass):
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | if eventClass.GetScribeEventName() not in ReadChConfig.GetEvalChConfig("EventReportID"):
|
| | |
| | | import GameWorld
|
| | | import Commands
|
| | | import IPY_GameServer
|
| | | import MergeChildMsg
|
| | | import PyGameData
|
| | | import traceback
|
| | | import GMCommon
|
| | |
| | | return
|
| | |
|
| | | #非跨服服务器下使用跨服专属GM命令,则发送到跨服
|
| | | if not GameWorld.IsMergeServer():
|
| | | if not GameWorld.IsCrossServer():
|
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnGetMergeParam"))
|
| | | if callFunc != None:
|
| | | extendParamList = callFunc(curPlayer)
|
| | | alist.extend(extendParamList)
|
| | | MergeChildMsg.SendMergerChildToCenterStringData(ShareDefine.ClientServerMsg_GMCMD, alist)
|
| | | #MergeChildMsg.SendMergerChildToCenterStringData(ShareDefine.ClientServerMsg_GMCMD, alist)
|
| | | return
|
| | |
|
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "OnExec"))
|
| | |
| | | GameWorld.Log("MapServer_CrossPKRoomOpen => roomID=%s" % roomID)
|
| | | return
|
| | |
|
| | | def MapServer_MergePKOver(infoList):
|
| | | def MapServer_CrossPKOver(infoList):
|
| | | ## 收到MapServer副本跨服PK结果同步
|
| | |
|
| | | GameWorld.Log("收到MapServer_跨服PK战斗结果: %s" % str(infoList))
|
| | |
| | | NetPackCommon.SendFakePack(player, matchOKPack)
|
| | | GameWorld.Log(" 通知玩家进入跨服PK对战房间! roomID=%s,playerID=%s,matchPlayerID=%s" % (roomID, playerID, matchPlayer.PlayerID))
|
| | |
|
| | | # 到这里默认认为一定会有结果的,所以本服直接增加次数
|
| | | #player.MapServer_QueryPlayerResult(0, 0, 'MergePKAddCnt', "", 0)
|
| | | return
|
| | |
|
| | | def CrossServerMsg_PKTimeoutRoomList(timeoutRoomDict):
|
| | |
| | | #import GameWorldShopItem
|
| | | #import GameWorldActionTeHui
|
| | | import GameWorldAverageLv
|
| | | #import GameWorldMergeBoss
|
| | | #import GameWorldMergeKing
|
| | | import CrossRealmPK
|
| | | import GameWorldFamilyWar
|
| | | import PlayerFamilyParty
|
| | |
| | | # #间隔未到
|
| | | # return
|
| | |
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | Dispose_ActionGoOnByDayKey()
|
| | |
| | | def DoLogic_ServerLastOpenActionDay():
|
| | |
|
| | | #是跨服服务器
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | if not PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MergeServerOpenActionDay):
|
| | | return
|
| | |
|
| | |
| | | #def __CheckIsProcessDictName(dictName):
|
| | | #
|
| | | # # 非跨服服务器不处理某些key
|
| | | # if dictName in [ShareDefine.Def_Notify_WorldKey_Merge_King] and not GameWorld.IsMergeServer():
|
| | | # if dictName in [ShareDefine.Def_Notify_WorldKey_Merge_King] and not GameWorld.IsCrossServer():
|
| | | # return False
|
| | | #
|
| | | # return True
|
| | |
| | | # #领地争夺战
|
| | | # if dictName == ShareDefine.Def_Notify_WorldKey_ManorWar:
|
| | | # PlayerManorWar.ManorWar_ChangeState(isOpen)
|
| | | # #跨服boss
|
| | | # elif dictName == ShareDefine.Def_Notify_WorldKey_MergeBoss:
|
| | | # GameWorldMergeBoss.MergeBoss_ChangeState(isOpen)
|
| | | # #跨服PK
|
| | | # elif dictName == ShareDefine.Def_Notify_WorldKey_Merge_PK:
|
| | | # GameWorldMergePK.OnMergePKMatchStateChange(isOpen)
|
| | | # #跨服王者争霸
|
| | | # elif dictName == ShareDefine.Def_Notify_WorldKey_Merge_King:
|
| | | # GameWorldMergeKing.OnMergeKingStateChange(isOpen)
|
| | | # #答题活动
|
| | | # elif dictName == ShareDefine.Def_Notify_WorldKey_Game_EXAM:
|
| | | # PlayerExam.Exam_ChangeState(isOpen)
|
| | |
| | | # @param None
|
| | | # @return None
|
| | | def Dispose_ActionGoOnByDayKey():
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | GameWorld.DebugLog("处理特惠状态信息...")
|
| | | openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
|
| | |
| | | # @return:
|
| | | def __IsWorldAverageLv():
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | return True
|
| | |
|
| | |
| | | def MixServerOnDay():
|
| | |
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) # 是否合服
|
| | |
| | | import PlayerGeTui
|
| | | #import MergeBroadcast
|
| | | #import GameWorldMixServerCampaign
|
| | | #import GameWorldMergeKing
|
| | | #import PlayerManorWar
|
| | | import GameWorldBoss
|
| | | #import GameWorldActionTeHui
|
| | |
| | | #MergeBroadcast.OnBroadcastProccee(tick)
|
| | | #跨服PK匹配
|
| | | CrossRealmPK.OnPKMatchProcess(tick)
|
| | | #跨服王者争霸
|
| | | #GameWorldMergeKing.OnMergeKingProcess(tick)
|
| | |
|
| | | GameWorldBoss.DoCheckWorldBossReborn(tick)
|
| | | GameWorldBoss.ProcessBossGeTui(tick)
|
| | |
| | |
|
| | | # 跨服PK
|
| | | CrossRealmPK.OnMapServerInitOK()
|
| | | #GameWorldMergeKing.OnMapServerInitOK()
|
| | |
|
| | | SendAllMapGlobalDropInfo() # 全局掉落控制
|
| | |
|
| | |
| | | import GameWorldActionTeHui
|
| | | import PlayerXMZZ
|
| | | import GameWorldShopItem
|
| | | import MergeChildMsg
|
| | | import PlayerTruck
|
| | | import PlayerMergeEvent
|
| | | import HighLadder
|
| | | import EventReport
|
| | | import MergePlayer
|
| | |
| | | # 通知广播信息
|
| | | GMCommon.SendBroadCastToClient(curPlayer)
|
| | |
|
| | | |
| | | # 在非跨服服务器上线时,在跨服PK赛期间如果roomID不为0则重置
|
| | | #if not GameWorld.IsMergeServer() and GameWorldMergePK.IsMergePKMatchOpen() \
|
| | | # and curPlayer.GetVsRoomId() != 0:
|
| | | # PlayerControl.SetVsRoomId(curPlayer, 0)
|
| | | |
| | | PlayerTruck.SyncPlayerTruckStartTime(curPlayer)
|
| | | #通知玩家交易所挂单情况
|
| | | PlayerBourse.OnPlayerLogin(curPlayer)
|
| | |
|
| | | #上线广播
|
| | | __CheckWorldNotifyOnLogin(curPlayer, tick)
|
| | | #上线奖励处理
|
| | | #PlayerMergeEvent.MergeEventOnPlayerLogin(curPlayer)
|
| | | #MergePlayer.OnPlayerLogin(curPlayer)
|
| | |
|
| | | #仙盟红包
|
| | | PlayerFamilyRedPacket.OnPlayerLogin(curPlayer)
|
| | |
| | | # @return None
|
| | | def __CheckWorldNotifyOnLogin(curPlayer, tick):
|
| | | # 跨服服务器不广播
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | limitLV = IpyGameDataPY.GetFuncCfg("BillBoardPlayerLoginNotify", 2) # 最低等级限制
|
| | |
| | | diff_Time = loginTime - logoffTime
|
| | | #天数 * 24小时 * 60 分钟 + 秒
|
| | | return diff_Time.days * 24 * 60 * 60 + diff_Time.seconds
|
| | |
|
| | | ## 统计客户端跨服赛激活时间
|
| | | # @param index 玩家索引
|
| | | # @return None
|
| | | def SendMergeWarOpen(curPlayer):
|
| | | # 发送跨服赛服务器信息
|
| | | mapConfig = GameConfig.GetConfig()
|
| | | mergeServerIP = mapConfig.get("MergeServerIP")
|
| | | mergeServerPort = mapConfig.get("MergeServerPort")
|
| | | if not mergeServerIP:
|
| | | return
|
| | | mergeServerInfo = ChPyNetSendPack.tagMergeServerInfo()
|
| | | mergeServerInfo.ServerIPLen = len(mergeServerIP)
|
| | | mergeServerInfo.ServerIP = mergeServerIP
|
| | | mergeServerInfo.Port = mergeServerPort
|
| | | mergeServerInfo.IsMergeServer = GameWorld.IsMergeServer()
|
| | | NetPackCommon.SendFakePack(curPlayer, mergeServerInfo)
|
| | | return
|
| | |
|
| | | ## 跨服赛通知奖励
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return: None
|
| | | def MSGetReward(curPlayer):
|
| | | #PlayerCanGetReward.SynClient_CanGetRewardList(curPlayer)
|
| | | return
|
| | |
|
| | | ## 运营登陆信息处理
|
| | | # @param curPlayer
|
| | |
| | | # @param sourceType 查看 Mail_Type_Default 相关定义
|
| | | # @return None
|
| | | def SendPersonalAsTextMail(PlayerID, title, content, limitTime, sourceType = ChConfig.Mail_Type_Default):
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | GUID = str(uuid.uuid1())
|
| | | PyAddPersonalCompensation(GUID, PlayerID, GameWorld.GetCurrentDataTimeStr(), limitTime,
|
| | |
| | | '''
|
| | | @param mailInfo: GetEntireCompensationInfo 的返回值, 目前暂存字段 PlayerLV 中
|
| | | '''
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | #GameWorld.DebugLog("Compensation### AddEntireItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList))
|
| | |
|
| | |
| | | # @return None
|
| | | def AddPersonalItem(GUID, addItemDictList, PlayerIDList, LimitTime, Text,
|
| | | gold = 0, goldPaper = 0, silver = 0, sourceType = ChConfig.Mail_Type_Default, detail=""):
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | GameWorld.DebugLog("Compensation### AddPersonalItem GUID:%s ItemDict:\n%s "%(GUID, addItemDictList))
|
| | |
|
| | |
| | | # @return 无返回值
|
| | | # @remarks
|
| | | def WorldNotify(country, msgMark, msgParamList=[]):
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | MergeWorldNotify(country, msgMark, msgParamList)
|
| | | else:
|
| | | GameWorld.GetPlayerManager().CountryNotifyCode(country, msgMark, __GetNotifyCodeList(msgParamList))
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------------------------------
|
| | | ## 设置玩家跨服预赛排位
|
| | | # @param curPlayer: 玩家实例
|
| | | # @param value: 威望值
|
| | | # @return: |
| | | def SetMergeWarRank(curPlayer, value):
|
| | | return
|
| | |
|
| | |
|
| | | ## 获取玩家跨服预赛排位
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return: 威望值
|
| | | def GetMergeWarRank(curPlayer):
|
| | | return 0
|
| | |
|
| | | ## 职业阶数
|
| | | def GetJobRank(curPlayer): return curPlayer.GetExAttr1()
|
| | |
| | | # @remarks
|
| | | def Exam_ChangeState(state):
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | if state == 0:
|
| | |
| | | PlayerTeam.OnEnterFBTeamAsk(curPlayer, PlayerTeam.TeamFBAskType_Enter, tagMapID, tagLineID, tick)
|
| | | return
|
| | |
|
| | | # # 如果是进入跨服PK地图的
|
| | | # if GameWorldMergePK.OnRequestEnterMergePKMap(curPlayer, mapInfo[0], mapInfo[1]):
|
| | | # return
|
| | | # |
| | | #封魔坛副本判断里面的BOSS是否到了刷新时间
|
| | | if tagMapID == ChConfig.Def_FBMapID_SealDemon:
|
| | | bossID = mapInfo[2]
|
| | |
| | | import ShareDefine
|
| | | import GameDataRecord
|
| | | import GameWorldShopItem
|
| | | import PlayerMergeRegister
|
| | | import PlayerCompensation
|
| | | import PlayerFB
|
| | | import UpdatePlayerName
|
| | |
| | | import GameWorldBoss
|
| | | import MergeBroadcast
|
| | | import GameWorldFamilyWar
|
| | | import GameWorldMergeKing
|
| | | import GameWorldMergePK
|
| | | #import PlayerFamilyTech
|
| | | import MergeChildMsg
|
| | | import PlayerFamilyRedPacket
|
| | | import PlayerFBHelpBattle
|
| | | import PlayerFamilyStore
|
| | |
| | | operType, mapID, dataDict, isRepeat = eval(resultName)
|
| | | MergeBroadcast.SendBroadcastMerge(operType, mapID, dataDict, isRepeat)
|
| | | return
|
| | |
|
| | | #跨服赛报名获得新账号
|
| | | #if callName == 'MergeRegister':
|
| | | # PlayerMergeRegister.MergeWarRegisterNewAcc(srcPlayerID, eval(resultName), tick)
|
| | | # return |
| | | |
| | | #跨服王者争霸
|
| | | if callName == 'MergeKingFB':
|
| | | GameWorldMergeKing.MapServer_MergeKingFB(eval(resultName))
|
| | | return
|
| | |
|
| | | #跨服匹配PK战斗结算
|
| | | if callName == "CrossPKOver":
|
| | | CrossRealmPK.MapServer_MergePKOver(eval(resultName))
|
| | | CrossRealmPK.MapServer_CrossPKOver(eval(resultName))
|
| | | return
|
| | |
|
| | | #跨服匹配房间开启
|
| | |
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
| | | resultName = '%s' % GameWorldOpenServerCampaign.CanGiveCampaignAward(curPlayer, eval(resultName))
|
| | |
|
| | | # 跨服PK奖励
|
| | | if callName == 'MergePKAward':
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
| | | resultName = '%s' % GameWorldMergePK.MapServer_QueryMergePKAward(curPlayer, eval(resultName))
|
| | | |
| | | # 跨服王者争霸
|
| | | if callName == 'MergeKing':
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
| | | resultName = '%s' % GameWorldMergeKing.MapServer_MergeKingQuery(curPlayer, eval(resultName))
|
| | |
|
| | | # 玩家自身战盟科技等级提升, 改为地图直接处理, 暂屏蔽
|
| | | # if callName == 'PlayerFamilyTechLVUP':
|
| | |
| | | # 跨服喇叭
|
| | | if SpeakerType == 2:
|
| | | pass
|
| | | #=======================================================================
|
| | | # playerName = PlayerControl.GetMergePlayerName(accID, playerName) # 转化为跨服的名字
|
| | | # dataMsg = [accID, 0, playerName, SpeakerType, Text, extraValue, extras]
|
| | | # MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_SendMergeLoudspeaker, dataMsg)
|
| | | # GameWorld.Log("发送跨服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
|
| | | #=======================================================================
|
| | |
|
| | | else:
|
| | | #GameWorld.DebugLog("发送本服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
|
| | |
| | | Def_UniversalGameRecType_40,
|
| | | Def_UniversalGameRecType_RedPacketRecord, # 红包产出结果记录41
|
| | | Def_UniversalGameRecType_42,
|
| | | Def_UniversalGameRecType_MergeEvent, # 跨服玩家数据变更事件信息43
|
| | | Def_UniversalGameRecType_43,
|
| | | Def_UniversalGameRecType_MergePKAwardRecord, # 跨服PK奖励领取记录44
|
| | | Def_UniversalGameRecType_MergePKTopPlayerEquip, # 跨服PK赛高手玩家装备预览信息45
|
| | | Def_UniversalGameRecType_MergePKScoreAward, # 跨服PK积分领奖记录46
|
| | |
| | | PacketSubCMD_1=0x04
|
| | | PacketCallFunc_1=OnExitCrossRealm
|
| | |
|
| | | ;王者争霸
|
| | | [PlayerMergeKing]
|
| | | ScriptName = Player\PlayerMergeKing.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xC1
|
| | | PacketSubCMD_1=0x11
|
| | | PacketCallFunc_1=Client_MergeKingSupport
|
| | |
|
| | | PacketCMD_2=0xC1
|
| | | PacketSubCMD_2=0x08
|
| | | PacketCallFunc_2=Client_MergeKingWorship
|
| | |
|
| | |
|
| | | ;改名功能
|
| | | [UpdatePlayerName]
|
| | | ScriptName = Player\UpdatePlayerName.py
|
| | |
| | | # @return None
|
| | | def WriteEvent(eventClass):
|
| | | return
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | if eventClass.GetScribeEventName() not in ReadChConfig.GetEvalChConfig("EventReportID"):
|
| | |
| | | import IPY_GameWorld
|
| | | import PlayerControl
|
| | | import GameWorldProcess
|
| | | import PlayerMergeEvent
|
| | | import ReadChConfig
|
| | | import ShareDefine
|
| | | import FBCommon
|
| | |
| | | if callFunc:
|
| | | #GameWorld.Log("副本逻辑不可使用 GameLogic_%d"%(mapID))
|
| | | callFunc(curPlayer , tick)
|
| | | |
| | | #有玩家离开副本广播一次
|
| | | PlayerMergeEvent.BroadcastMergePlayerEvent()
|
| | |
|
| | | #如果是最后一个人离开副本, 那么设置副本的离开时间, 5分钟后副本关闭
|
| | | __PlayerLeaveSetPlayerLogoffTick(curPlayer, tick)
|
| | |
| | | singItem.Clear()
|
| | | #===============================================================================================
|
| | | # # (跨服掉落功勋物品, 不给实际物品,转化为功勋值)
|
| | | # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsMergeServer():
|
| | | # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsCrossServer():
|
| | | # #=======================================================================
|
| | | # # # 不需要队伍提示
|
| | | # # if not isTeamNotify:
|
| | |
| | | import DataRecordPack
|
| | | import EventReport
|
| | | import ChItem
|
| | | import PlayerMergeEvent
|
| | | import IpyGameDataPY
|
| | | import Operate_EquipStone
|
| | | import PlayerViewCacheTube
|
| | |
| | | #系统提示 LostRes 失去物品
|
| | | #if needSysmsg:
|
| | | # PlayerControl.NotifyCode(curPlayer, 'LostRes', [itemTypeID, totalUseCnt])
|
| | | |
| | | #添加跨服服务器中使用物品事件
|
| | | if itemTypeID in ReadChConfig.GetEvalChConfig("MergeServerCanUseItemID"):
|
| | | eventInfo = [itemTypeID, totalUseCnt, makeItemBind, eventName, saveDataDict]
|
| | | PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_DelItem, eventInfo)
|
| | | return makeItemBind
|
| | |
|
| | | def GetCostItemIndexList(costItemInfo, itemPack, bindFirst=True):
|
| | |
| | | ItemControler.SetItemCount(curItem, curItemCnt - delCnt,
|
| | | curPlayer.GetPlayerID(), curPlayer.GetAccID(),
|
| | | curPlayer.GetPlayerName())
|
| | | |
| | | #添加跨服服务器中使用物品事件
|
| | | if curItemTypeID in ReadChConfig.GetEvalChConfig("MergeServerCanUseItemID"):
|
| | | eventInfo = [curItemTypeID, delCnt, curItemBind, recordName, saveDataDict]
|
| | | PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_DelItem, eventInfo)
|
| | | return
|
| | |
|
| | | def DelVPackItem(curPlayer, packIndex, placeList, eventName=""):
|
| | |
| | | import PlayerBossReborn
|
| | | import Operate_EquipWash
|
| | | import PlayerTreasure
|
| | | import PlayerMergeEvent
|
| | | import GameLogic_GodArea
|
| | | import PlayerRune
|
| | | import PlayerFamilyRedPacket
|
| | |
| | | #
|
| | | # # ʱװ
|
| | | # PlayerCoat.OnLogin_Coat(curPlayer)
|
| | | #
|
| | | # # 跨服匹配
|
| | | # PlayerMergePK.MergePKOnLogin(curPlayer)
|
| | | # PlayerMergeKing.MergePKOnLogin(curPlayer)
|
| | | |
| | | # 跨服PK
|
| | | PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
|
| | |
|
| | |
| | | # @remarks 上线时通知离线时间(离线挂机功能)
|
| | | def __Sync_PlayerOffline(curPlayer, tick):
|
| | | #---等级限制---
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | PlayerTJG.TJGDeadOffline(curPlayer)
|
| | |
|
| | |
| | | # if curPlayer.GetLV() < lvLimit:
|
| | | # return
|
| | | #
|
| | | # if GameWorld.IsMergeServer():
|
| | | # if GameWorld.IsCrossServer():
|
| | | # return
|
| | | #
|
| | | # #当前离线时间(分)
|
| | |
| | |
|
| | | GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID())
|
| | |
|
| | | PlayerMergeEvent.BroadcastMergePlayerEvent()
|
| | | #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储
|
| | | #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
|
| | | #######################################################################
|
| | |
| | | #@remarks 离线经验兑换
|
| | | def PlayerExpExchange(index, curPackData, tick):
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | #兑换公式字典
|
| | |
| | | # 冰晶矿脉星级奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_IceLodeStar:
|
| | | GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx)
|
| | | |
| | | #
|
| | | # # 充值豪礼奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_GoldGift:
|
| | | # PlayerGoldGift.GetPlayerGoldGift(curPlayer, dataEx)
|
| | | #
|
| | | # # 累计签到奖励
|
| | | # #elif rewardType == ShareDefine.Def_RewardType_DaySign:
|
| | | # # PlayerSignDay.GiveSignCntAward(curPlayer, dataEx)
|
| | | #
|
| | | # # 天天首充奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_DailyGold:
|
| | | # PlayerGoldGift.GetPlayerDailyGoldChargeGift(curPlayer)
|
| | | #
|
| | | # # 单日充值多选一礼包
|
| | | # elif rewardType == ShareDefine.Def_RewardType_SingleGoldGift:
|
| | | # giftLV = 0 # 默认第一档0
|
| | | # if dataExStr:
|
| | | # try:
|
| | | # giftLV = int(dataExStr)
|
| | | # except:
|
| | | # GameWorld.ErrLog("单日充值多选一礼包奖励档错误!%s" % dataExStr)
|
| | | # PlayerGoldGift.GetSingleGoldGift(curPlayer, dataEx, giftLV, 0)
|
| | | # |
| | | # # 当日充值无限领取礼包
|
| | | # elif rewardType == ShareDefine.Def_RewardType_UnlimitedGoldGift:
|
| | | # PlayerGoldGift.GetSingleGoldGift(curPlayer, 0, 0, 1) |
| | | # |
| | | # # 登陆签到奖励
|
| | | # #elif rewardType == ShareDefine.Def_RewardType_DayLoginSign:
|
| | | # # PlayerSignDay.GetDaySignAward(curPlayer, dataEx)
|
| | | # |
| | | # # 跨服PK奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_MergePKAward:
|
| | | # PlayerMergePK.OnQueryMergePKAward(curPlayer, dataEx, GameWorld.ToIntDef(dataExStr), tick)
|
| | | # |
| | | # # 王者争霸全服荣耀奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_ServerHonour:
|
| | | # PlayerMergeKing.GetMergeKingAward_ServerHonour(curPlayer)
|
| | | # |
| | | # # 王者争霸晋级排名奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_MergeKingRank:
|
| | | # PlayerMergeKing.GetMergeKingAward_Rank(curPlayer)
|
| | | # |
| | | # # 王者争霸竞猜积分奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_MergeKingSupport:
|
| | | # PlayerMergeKing.GetMergeKingAward_Support(curPlayer, dataEx, tick)
|
| | | # |
| | | # # QQ成长礼包奖励
|
| | | # elif rewardType in [ShareDefine.Def_RewardType_QQUpYellow, ShareDefine.Def_RewardType_QQUpBlue]:
|
| | | # PlayerQQ.GetQQUpReward(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # QQ新手礼包奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_QQNewMan:
|
| | | # PlayerQQ.GetQQNewManAward(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # QQ每日礼包奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_QQDayGift:
|
| | | # PlayerQQ.GetQQDayGift(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # Qzone成长礼包奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_QzoneUp:
|
| | | # PlayerQQ.GetQzoneUpReward(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # Qzone新手礼包奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_QzoneNewMan:
|
| | | # PlayerQQ.GetQzoneNewManAward(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # Qzone每日礼包奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_QzoneDayGift:
|
| | | # PlayerQQ.GetQzoneDayGift(curPlayer, rewardType, dataEx)
|
| | | # |
| | | # # 消费VIP等级奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_CostVIPLV:
|
| | | # PlayerCostVIP.GetCostVIPAward(curPlayer, dataEx)
|
| | | # |
| | | # # 消费VIP成长奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_CostVIPGrowUp:
|
| | | # PlayerCostVIP.GetVIPGrowUpAward(curPlayer, dataEx)
|
| | | # # 转生领奖
|
| | | # elif rewardType == ShareDefine.Def_RewardType_Reincarnation:
|
| | | # PlayerReincarnation.GetReincarnationAward(curPlayer, dataEx)
|
| | | # # 跨服boss首次参与奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_MergeBossFirstJoinAward:
|
| | | # GameLogic_MergeBoss.OnGetMergeBossFirstJoinAward(curPlayer)
|
| | | # # 悬赏任务积分奖励
|
| | | # elif rewardType == ShareDefine.Def_RewardType_ArrestTaskAward:
|
| | | # PlayerArrestTask.OnGetArrestPointAward(curPlayer, dataEx)
|
| | | |
| | | return
|
| | |
|
| | |
|
| | |
| | | sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList])
|
| | | curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCCnt, 0,
|
| | | 'NPCCnt', sendMsg, len(sendMsg))
|
| | | return
|
| | |
|
| | |
|
| | | ## 跨服赛报名状态
|
| | | # @param index 玩家索引
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def SendRegisterState(curPlayer, state):
|
| | | resultPack = ChPyNetSendPack.tagMergeWarRegisterState()
|
| | | resultPack.Clear()
|
| | | |
| | | resultPack.RegisterState = state
|
| | | NetPackCommon.SendFakePack(curPlayer, resultPack)
|
| | | return
|
| | |
|
| | |
|
| | |
| | |
|
| | | ## 刷新悬赏任务
|
| | | def OnRefreshArrestTask(index, clientData, tick):
|
| | | GameWorld.Log('1111111111111刷新悬赏任务')
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
| | | ## 接悬赏任务
|
| | | def OnAcceptArrestTask(curPlayer):
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | if not __IsArrestTaskFuncOpen(curPlayer):
|
| | | GameWorld.DebugLog("OnRefreshArrestTask() 功能未开启")
|
| | |
| | | import PlayerGreatMaster
|
| | | import ItemControler
|
| | | import GameFuncComm
|
| | | import PlayerMergeEvent
|
| | | import IpyGameDataPY
|
| | | import PlayerRune
|
| | | import GameLogic_DuJie
|
| | |
| | | # @return 无返回值
|
| | | def WorldNotify(country, msgMark, msgParamList=[], lineID=0, mergeMinOSD=-1, mergeMaxOSD=-1, mergeMapInfo=[]):
|
| | | # 如果是跨服服务器,则广播子服
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | sendMsg = str([country, msgMark, msgParamList, lineID, mergeMinOSD, mergeMaxOSD, mergeMapInfo])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'MergeWorldNotify',
|
| | | sendMsg, len(sendMsg))
|
| | |
| | | return
|
| | |
|
| | | # 跨服服务器不允许发送邮件
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | itemCountDict = {}
|
| | |
| | | # return
|
| | |
|
| | | #跨服活动人数分流处理
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | reqMapID = mapID
|
| | | mapID = __GetMergeFBPlayerMapID(curPlayer, reqMapID)
|
| | | if not mapID:
|
| | |
| | | SetPlayerCurrency(curPlayer, type_Price, curCurrency - price)
|
| | | else:
|
| | | GameWorld.Log("付费金钱异常 type_Price = %s" % (type_Price), curPlayer.GetPlayerID())
|
| | | return False |
| | | |
| | | #添加跨服操作事件
|
| | | if costType in ChConfig.MergeServerCanCostType:
|
| | | eventInfo = [type_Price, price, costType, infoDict, quantity, costVIPGold]
|
| | | PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_PayMoney, eventInfo)
|
| | | return False
|
| | |
|
| | | #付款以后后续操作
|
| | | __PayMoneyAfter(curPlayer, type_Price, price, costType, infoDict, quantity, costVIPGold)
|
| | |
| | | #副本获得经验, 无论获得多少经验均需通知, 有些副本逻辑需要通过获得经验时机处理
|
| | | if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
|
| | | FBLogic.OnGetExp(curPlayer, finalAddExp, expViewType)
|
| | | |
| | | # 跨服中获得经验
|
| | | if finalAddExp and GameWorld.IsMergeServer():
|
| | | PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_AddExp, finalAddExp)
|
| | |
|
| | | return finalAddExp
|
| | |
|
| | |
| | |
|
| | | SetZhenQi(curPlayer, value)
|
| | | #EventReport.WriteEvent_add_zhenqi(curPlayer, eventName, eventData, addValue, value)
|
| | |
|
| | | if GameWorld.IsMergeServer():
|
| | | eventInfo = [addValue, eventName, eventData]
|
| | | PlayerMergeEvent.AddMSPlayerEvent(curPlayer.GetPlayerID(), PlayerMergeEvent.Def_MSPEvent_AddZhenQi, eventInfo)
|
| | | return True
|
| | |
|
| | |
|
| | |
| | | def SetLongMaiLV(curPlayer, value):
|
| | | return
|
| | | #---------------------------------------------------------------------------
|
| | | ## 设置玩家跨服预赛排位
|
| | | # @param curPlayer: 玩家实例
|
| | | # @param value: 威望值
|
| | | # @return: |
| | | def SetMergeWarRank(curPlayer, value):
|
| | | return
|
| | |
|
| | | |
| | | ## 获取玩家跨服预赛排位
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return: 威望值
|
| | | def GetMergeWarRank(curPlayer):
|
| | | return 0
|
| | |
|
| | | ##获取可免费开启的格子数
|
| | | # @param curPlayer 玩家对象
|
| | |
| | | return
|
| | |
|
| | | if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState) != 1:
|
| | | GameWorld.DebugLog("OnRequestMergePK 跨服赛季未开启,不可进行匹配!", playerID)
|
| | | GameWorld.DebugLog("OnCrossRealmPKMatch 跨服赛季未开启,不可进行匹配!", playerID)
|
| | | PlayerControl.NotifyCode(curPlayer, "SeasonIsNotOpen")
|
| | | return
|
| | |
|
| | | if not IsCrossRealmPKMatchState():
|
| | | GameWorld.DebugLog("OnRequestMergePK 跨服匹配未开启,不可进行匹配!", playerID)
|
| | | GameWorld.DebugLog("OnCrossRealmPKMatch 跨服匹配未开启,不可进行匹配!", playerID)
|
| | | PlayerControl.NotifyCode(curPlayer, "MatchIsNotOpen")
|
| | | return
|
| | |
|
| | |
| | | #定时商店刷新
|
| | | elif key.startswith(ShareDefine.Def_Notify_WorldKey_TimeShopRefreshTime[:-2]):
|
| | | ShopItemManage.OnTimeShopRefresh(key, value, tick)
|
| | | |
| | | #跨服boss
|
| | | #elif key == ShareDefine.Def_Notify_WorldKey_MergeBoss:
|
| | | # GameLogic_MergeBoss.OnMergeBossStateChange(value, tick)
|
| | | |
| | | # 跨服PK, 赛季开始时间不用处理,仅存储即可
|
| | | #elif key in [ShareDefine.Def_Notify_WorldKey_MergePKDayID, ShareDefine.Def_Notify_WorldKey_MergePKSeasonID]:
|
| | | # PlayerMergePK.OnMergePKActionChange(key, value)
|
| | | |
| | | # 跨服王者争霸
|
| | | #elif key in [ShareDefine.Def_Notify_WorldKey_Merge_KingStartID, ShareDefine.Def_Notify_WorldKey_Merge_KingOverID]:
|
| | | # PlayerMergeKing.OnMergeKingActionChange(key, value)
|
| | |
|
| | | # 跨服PK
|
| | | elif key == ShareDefine.Def_Notify_WorldKey_CrossPKSeasonID:
|
| | |
| | | def __OnFamilyLVBuffChange(curPlayer, tick):
|
| | | return
|
| | | # 跨服服务器不处理,防止登录跨服服务器后无战盟导致战力下降
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | familyLVBuffSkillTypeID = ReadChConfig.GetEvalChConfig("FamilyLVBuff")
|
| | |
| | | def UpdateFamilyName(index, clientData, tick):
|
| | |
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | #itemuse_lzxkoy_0:不可在跨服环境下使用改名功能。
|
| | | PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0")
|
| | | return
|
| | |
| | | # @return: None
|
| | | def OnSignDay(index, clientData, tick):
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | #功能开启判断
|
| | |
| | | vipLv = objTalk.GetVIPLv() # 玩家vip等级
|
| | | GMLevel = objTalk.GetGMLevel()
|
| | | job = objTalk.GetJob()
|
| | | #mergeWarRank = PlayerControl.GetMergeWarRank(objTalk) |
| | | #freshmanGuiderDay = PlayerFreshmanGuide.GetFreshmanGuiderDay(objTalk)
|
| | |
|
| | | extraValueStr = ""
|
| | | # vip等级
|
| | |
| | | # 气泡框
|
| | | extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(objTalk)
|
| | |
|
| | | # 跨服预选赛排位(称呼)
|
| | | #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_MergeWarRank)%mergeWarRank
|
| | | # 新手指导员
|
| | | #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_NewGuider)% (freshmanGuiderDay > 0)
|
| | | # QQ会员
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def CreateTruck(curPlayer,truckMoney, money_type,summonID, eventID, tick):
|
| | | # 跨服服务器功能限制
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | |
|
| | | #判断是否已经存在镖车,存在消失
|
| | |
| | | def OnWingJingLian(index, clientData, tick):
|
| | |
|
| | | # 根据策划需要,可以选择是否跨服服务器功能限制
|
| | | # if GameWorld.IsMergeServer():
|
| | | # if GameWorld.IsCrossServer():
|
| | | # return
|
| | |
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
| | | # gongXun = rewardValueDict.get(ChConfig.Def_RewardType_GongXun, 0)
|
| | | # PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongXun, gongXun, ChConfig.Def_GiveMoney_Unknown, addDataDict)
|
| | | #
|
| | | # if actionType == ChConfig.Def_RewardAction_MergeBoss:
|
| | | # PlayerControl.NotifyCode(curPlayer, "Campaign_liubo_115113", [gongXun])
|
| | | # |
| | | # DataRecordPack.DR_PlayerGetRewardOnLogin(curPlayer, actionType, rewardValueDict)
|
| | |
|
| | | return
|
| | |
| | | def UpdatePlayerName(index, clientData, tick):
|
| | |
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | if GameWorld.IsMergeServer():
|
| | | if GameWorld.IsCrossServer():
|
| | | #itemuse_lzxkoy_0:不可在跨服环境下使用改名功能。
|
| | | PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0")
|
| | | return
|
| | |
| | | Def_UniversalGameRecType_40,
|
| | | Def_UniversalGameRecType_RedPacketRecord, # 红包产出结果记录41
|
| | | Def_UniversalGameRecType_42,
|
| | | Def_UniversalGameRecType_MergeEvent, # 跨服玩家数据变更事件信息43
|
| | | Def_UniversalGameRecType_43,
|
| | | Def_UniversalGameRecType_MergePKAwardRecord, # 跨服PK奖励领取记录44
|
| | | Def_UniversalGameRecType_MergePKTopPlayerEquip, # 跨服PK赛高手玩家装备预览信息45
|
| | | Def_UniversalGameRecType_MergePKScoreAward, # 跨服PK积分领奖记录46
|
| | |
| | | def PlayerLoginMergeServerSkillLogic(curPlayer, tick):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | if not GameWorld.IsMergeServer():
|
| | | if not GameWorld.IsCrossServer():
|
| | | GameWorld.DebugLog("非跨服服务器上线不清除buff...", playerID)
|
| | | return
|
| | |
|
| | |
| | | PacketSubCMD_1=0x6
|
| | | PacketCallFunc_1=GameSever_PlayerCountByCountry
|
| | |
|
| | | [PlayerMergeWar]
|
| | | [GY_Query_CrossRealmReg]
|
| | | ScriptName = Player\RemoteQuery\GY_Query_CrossRealmReg.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|