| | |
| | |
|
| | | return
|
| | |
|
| | | def OnPlayerTeamChange(curPlayer):
|
| | | ## 玩家队伍变更
|
| | | |
| | | if curPlayer.GetTeamID():
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
| | | if playerID not in assistMgr.playerNoSaveDBAssistDict:
|
| | | return
|
| | | playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
|
| | | |
| | | for assistObj in playerAssistList[::-1]:
|
| | | gameMap = GameWorld.GetMap(assistObj.MapID)
|
| | | if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
| | | OnCancelPlayerRequestAssist(assistObj, "LeaveTeam", True)
|
| | | |
| | | return
|
| | |
|
| | | def OnInitAssistData(dbData, isSaveDB):
|
| | | ## 加载协助数据额外处理
|
| | | setattr(dbData, "IsSaveDB", isSaveDB) # 是否保存数据库,离线可协助的需要存库,如挖矿类
|
| | |
| | | if not playerMap:
|
| | | return
|
| | | if playerMap.GetMapFBType() != ChConfig.fbtNull:
|
| | | playerLineID = curPlayer.GetFBID()
|
| | | if mapID == ChConfig.Def_FBMapID_SealDemon:
|
| | | playerLineID = PlayerControl.GetFBFuncLineID(curPlayer)
|
| | | else:
|
| | | playerLineID = curPlayer.GetFBID()
|
| | | if playerMapID != mapID or playerLineID != lineID:
|
| | | #副本中无法协助
|
| | | PlayerControl.NotifyCode(curPlayer, "AssistFBLimit")
|
| | |
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | assistObj = None
|
| | | addNewAssist = True
|
| | | reqAssistObj = None
|
| | | addNewAssist = False
|
| | | assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
| | | if playerID in assistMgr.playerNoSaveDBAssistDict:
|
| | | playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
|
| | |
| | | if npcID != assistObj.NPCID or lineID != assistObj.LineID or objID != assistObj.ObjID:
|
| | | OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistBoss", True)
|
| | | else:
|
| | | addNewAssist = False
|
| | | reqAssistObj = assistObj
|
| | | break
|
| | |
|
| | | if addNewAssist:
|
| | | assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID)
|
| | | if not reqAssistObj:
|
| | | addNewAssist = True
|
| | | reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID)
|
| | |
|
| | | if not assistObj:
|
| | | if not reqAssistObj:
|
| | | return
|
| | |
|
| | | # 通知本仙盟玩家
|
| | | PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
|
| | | PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
|
| | | # 求助信息已发送,请等待盟友支援
|
| | | PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
|
| | |
|
| | |
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | assistObj = None
|
| | | reqAssistObj = None
|
| | | addNewAssist = False
|
| | | assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
| | | if playerID in assistMgr.playerNoSaveDBAssistDict:
|
| | |
| | | continue
|
| | | if mapID != assistObj.MapID or lineID != assistObj.LineID:
|
| | | OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistTeamFB", True)
|
| | | addNewAssist = True
|
| | | break
|
| | | else:
|
| | | else:
|
| | | reqAssistObj = assistObj
|
| | | break
|
| | | |
| | | if not reqAssistObj:
|
| | | addNewAssist = True
|
| | | reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID)
|
| | |
|
| | | if addNewAssist:
|
| | | assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID)
|
| | | |
| | | if not assistObj:
|
| | | if not reqAssistObj:
|
| | | return
|
| | |
|
| | | # 通知本仙盟玩家
|
| | | PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj]))
|
| | | PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
|
| | | # 求助信息已发送,请等待盟友支援
|
| | | PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
|
| | | # 广播仙盟请求
|
| | |
| | | for assistObj in familyAssistList:
|
| | | assistInfo = ChPyNetSendPack.tagGCAssistInfo()
|
| | | assistInfo.AssistGUID = assistObj.GUID
|
| | | assistInfo.PlayerID = assistObj.PlayerID
|
| | | assistInfo.PlayerName = assistObj.PlayerName
|
| | | assistInfo.Job = assistObj.Job
|
| | | assistInfo.LV = assistObj.LV
|
| | |
| | | if assistObj in playerAssistList:
|
| | | playerAssistList.remove(assistObj)
|
| | |
|
| | | SyncFamilyClearAssist(familyID, assistGUID)
|
| | | |
| | | # 取消boss协助
|
| | | if assistType == AssistType_Boss:
|
| | |
|
| | |
| | | # 暂不需要处理
|
| | | pass
|
| | |
|
| | | # 放最后 |
| | | SyncFamilyClearAssist(familyID, assistGUID)
|
| | | return
|
| | |
|
| | | def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True):
|
| | |
| | | assistObj.AssistPlayerIDList.remove(cancelPlayerID)
|
| | |
|
| | | if cancelPlayer:
|
| | | isTagPlayerReason = reason.startswith("RequestPlayerCancel_")
|
| | | PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0)
|
| | | overPack = ChPyNetSendPack.tagGCAssistOver()
|
| | | overPack.IsTagPlayerReason = isTagPlayerReason
|
| | | overPack.Reason = reason[len("RequestPlayerCancel_"):] if isTagPlayerReason else reason |
| | | overPack.ReasonLen = len(overPack.Reason)
|
| | | overPack.AssistGUID = assistGUID
|
| | | NetPackCommon.SendFakePack(cancelPlayer, overPack)
|
| | |
|
| | | # 取消boss协助
|
| | | if assistObj.AssistType == AssistType_Boss:
|
| | |
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
| | | useThanks = None
|
| | | if playerID not in assistThanksMgr.playerThanksDict:
|
| | | GameWorld.ErrLog("玩家没有可使用的协助感谢礼盒!", playerID)
|
| | | return
|
| | | useThanks = None
|
| | | playerThanksList = assistThanksMgr.playerThanksDict[playerID]
|
| | | for thanks in playerThanksList:
|
| | | if itemID == thanks.ItemID:
|
| | | useThanks = thanks
|
| | | break
|
| | | else:
|
| | | playerThanksList = assistThanksMgr.playerThanksDict[playerID]
|
| | | for thanks in playerThanksList:
|
| | | if itemID == thanks.ItemID:
|
| | | useThanks = thanks
|
| | | break
|
| | | if not useThanks:
|
| | | GameWorld.ErrLog("玩家没有该协助感谢礼盒!itemID=%s" % (itemID), playerID)
|
| | | return
|
| | | #20210226 优化为找不到协助信息也可以使用,防止地图扣除物品失败导致协助礼盒一直留着而无法使用
|
| | | #return
|
| | |
|
| | | GameWorld.DebugLog("玩家使用协助感谢礼盒!itemID=%s,isPreview=%s" % (itemID, isPreview), playerID)
|
| | | # 预览
|
| | | if isPreview:
|
| | | previewPack = ChPyNetSendPack.tagGCUseAssistThanksGiftPreview()
|
| | | if not useThanks:
|
| | | previewPack.ItemID = itemID
|
| | | previewPack.MapID = 31140 # 暂随意给一个可协助的地图ID
|
| | | NetPackCommon.SendFakePack(curPlayer, previewPack)
|
| | | return
|
| | | previewPack.ItemID = useThanks.ItemID
|
| | | previewPack.MapID = useThanks.MapID
|
| | | previewPack.LineID = useThanks.LineID
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | useThanks.ThanksState = 1 # 设置为已感谢
|
| | | playerThanksList.remove(useThanks) # 移除已感谢
|
| | | |
| | | queryData = [itemID]
|
| | | QueryPlayerResult_PlayerAssist(curPlayer, "UseAssistThanksGift", queryData)
|
| | |
|
| | | if not useThanks:
|
| | | return
|
| | | useThanks.ThanksState = 1 # 设置为已感谢
|
| | | playerThanksList.remove(useThanks) # 移除已感谢
|
| | | |
| | | # 通知协助玩家可接收的感谢个数
|
| | | playerMgr = GameWorld.GetPlayerManager()
|
| | | for assistPlayerID in useThanks.AssistPlayerDict.keys():
|