#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerAssist # # @todo:ЭÖúϵͳ # @author hxp # @date 2019-12-06 # @version 1.0 # # ÏêϸÃèÊö: ЭÖúϵͳ # #------------------------------------------------------------------------------- #"""Version = 2019-12-06 21:00""" #------------------------------------------------------------------------------- import PyDataManager import NetPackCommon import PyGameDataStruct import ChPyNetSendPack import PlayerControl import PlayerFamily import ShareDefine import PlayerTeam import GameWorld import ChConfig import uuid # ЭÖúÀàÐÍ ( AssistType_Unknown, AssistType_Boss, # boss AssistType_TeamFB, # ×é¶Ó¸±±¾ ) = range(3) def OnPlayerLogin(curPlayer, isTJ=False): ## Íæ¼ÒÉÏÏß # @param isTJ: ÊÇ·ñÍÑ»úÉÏÏß familyID = curPlayer.GetFamilyID() playerID = curPlayer.GetPlayerID() if not familyID: return assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID in assistMgr.playerNoSaveDBAssistDict: playerNoSaveList = assistMgr.playerNoSaveDBAssistDict[playerID] # ·ÇÍÑ»úÉÏÏß if not isTJ: GameWorld.DebugLog("Íæ¼ÒÉÏÏߣ¬»Ö¸´Ð­Öú·¢²¼µ½ÏÉÃËÁбí!", playerID) if familyID not in assistMgr.familyAssistDict: assistMgr.familyAssistDict[familyID] = [] recoverList = [] familyAssistList = assistMgr.familyAssistDict[familyID] for assistObj in playerNoSaveList: familyAssistList.append(assistObj) recoverList.append(assistObj) GameWorld.DebugLog(" »Ö¸´: %s" % assistObj.GUID) if recoverList: # ֪ͨ±¾ÃËÆäËûÍæ¼Ò PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack(recoverList), [playerID]) # ÍÑ»úÉÏÏß else: GameWorld.DebugLog("Íæ¼ÒÍÑ»úÉÏÏߣ¬Ç¿ÖÆÈ¡Ïû·¢²¼µÄ·Ç´æ¿âЭÖú!", playerID) for assistObj in playerNoSaveList: OnCancelPlayerRequestAssist(assistObj, "TJGLogin", True) if not isTJ: SyncFamilyAssist(curPlayer) # ûÓÐЭÖúÖеÄÐÅÏ¢ if playerID in assistMgr.playerAssistingDict: assistObj = assistMgr.playerAssistingDict[playerID] if not isTJ: tagPlayerID = assistObj.PlayerID GameWorld.DebugLog("·ÇÍÑ»úÉÏÏߣ¬¼ÌÐøÐ­Öú!tagPlayerID=%s" % tagPlayerID, playerID) PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID) assistPack = ChPyNetSendPack.tagGCAssistingInfo() assistPack.AssistGUID = assistObj.GUID NetPackCommon.SendFakePack(curPlayer, assistPack) # ÍÑ»úÉÏÏß else: OnCancelPlayerAssist(curPlayer, playerID, assistObj, "TJGLogin", True) return def OnLeaveServer(curPlayer): ## Íæ¼ÒÀëÏß familyID = curPlayer.GetFamilyID() if not familyID: return if PlayerControl.GetAssistTagPlayerID(curPlayer): PlayerControl.SetAssistTagPlayerID(curPlayer, 0) assistMgr = PyDataManager.GetPlayerAssistPyManager() if familyID not in assistMgr.familyAssistDict: return playerID = curPlayer.GetPlayerID() if playerID not in assistMgr.playerNoSaveDBAssistDict: #GameWorld.DebugLog("Íæ¼ÒûÓз¢²¼¹ýЭÖú£¬ÀëÏß²»´¦Àí!", playerID) return playerNoSaveList = assistMgr.playerNoSaveDBAssistDict[playerID] familyAssistList = assistMgr.familyAssistDict[familyID] # ÔÝÊ±ÒÆ³ýÀëÏßÍæ¼Ò·¢²¼µÄ²»´æ¿âЭÖúÐÅÏ¢£¬²»ÔÙÈÃÆäËûÃËÓѼÌÐøÇ°ÍùЭÖú£¬ÒѾ­ÔÚЭÖúµÄ²»Ó°Ïì for assistObj in playerNoSaveList: if assistObj not in familyAssistList: continue familyAssistList.remove(assistObj) SyncFamilyClearAssist(familyID, assistObj.GUID) GameWorld.DebugLog("Íæ¼ÒÏÂÏߣ¬ÔÝʱ´ÓÏÉÃËЭÖúÁбíÒÆ³ýÍæ¼Ò·¢²¼µÄЭÖú: %s" % assistObj.GUID) return def OnPlayerLeaveFamily(familyID, leavePlayerID, leavePlayer): ## Íæ¼ÒÀ뿪ÏÉÃË ## @param leavePlayer: ¿ÉÄܲ»ÔÚÏßΪNone assistMgr = PyDataManager.GetPlayerAssistPyManager() # Íæ¼Ò·¢²¼µÄ if leavePlayerID in assistMgr.playerNoSaveDBAssistDict: playerAssistList = assistMgr.playerNoSaveDBAssistDict[leavePlayerID] for assistObj in playerAssistList[::-1]: OnCancelPlayerRequestAssist(assistObj, "LeaveFamily", True) # Íæ¼ÒЭÖúÖÐµÄ if leavePlayerID in assistMgr.playerAssistingDict: assistObj = assistMgr.playerAssistingDict[leavePlayerID] OnCancelPlayerAssist(leavePlayer, leavePlayerID, assistObj, "LeaveFamily", True) return def OnInitAssistData(dbData, isSaveDB): ## ¼ÓÔØÐ­ÖúÊý¾Ý¶îÍâ´¦Àí setattr(dbData, "IsSaveDB", isSaveDB) # ÊÇ·ñ±£´æÊý¾Ý¿â£¬ÀëÏß¿ÉЭÖúµÄÐèÒª´æ¿â£¬ÈçÍÚ¿óÀà setattr(dbData, "ObjID", 0) # NPCʵÀýID assistType = AssistType_Unknown if dbData.NPCID: assistType = AssistType_Boss else: assMapID = dbData.MapID gameMap = GameWorld.GetMap(assMapID) if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam: assistType = AssistType_TeamFB setattr(dbData, "AssistType", assistType) # ЭÖúÀàÐÍ setattr(dbData, "AssistPlayerIDList", []) # ЭÖúÖеÄÍæ¼ÒIDÁбí return #// B0 12 ¿ªÊ¼Ð­ÖúBoss #tagCGStartAssistBoss # #struct tagCGStartAssistBoss # #{ # tagHead Head; # char AssistGUID[40]; //ЭÖúGUID #}; def OnStartAssistBoss(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) assistGUID = clientData.AssistGUID assistMgr = PyDataManager.GetPlayerAssistPyManager() if assistGUID not in assistMgr.allAssistDict: GameWorld.DebugLog("²»´æÔÚ¸ÃЭÖú!assistGUID=%s" % assistGUID) return assistObj = assistMgr.allAssistDict[assistGUID] if assistObj.AssistType != AssistType_Boss: return if assistObj.PlayerID == curPlayer.GetPlayerID(): GameWorld.DebugLog("²»ÄÜЭÖú×Ô¼º!") return if assistObj.FamilyID != curPlayer.GetFamilyID(): GameWorld.DebugLog("·ÇͬÃËÍæ¼Ò²»ÄÜЭÖú!") return mapID = assistObj.MapID lineID = assistObj.LineID gameMap = GameWorld.GetMap(mapID) if not gameMap: return if gameMap.GetMapFBType() != ChConfig.fbtNull: playerMapID = curPlayer.GetMapID() playerLineID = PlayerControl.GetFBFuncLineID(curPlayer) if playerMapID != mapID or playerLineID != lineID: #¸±±¾ÖÐÎÞ·¨Ð­Öú PlayerControl.NotifyCode(curPlayer, "AssistFBLimit") return # É趨ЭÖú±ØÐëÀ뿪¶ÓÎé if gameMap.GetMapFBType() != ChConfig.fbtTeam: curTeam = curPlayer.GetTeam() if curTeam: PlayerTeam.DoPlayerLeaveTeam(curPlayer, curTeam, tick) SetPlayerStartAssistBoss(curPlayer, assistObj) return #// B0 13 È¡ÏûЭÖúBoss #tagCGCancelAssistBoss # #struct tagCGCancelAssistBoss # #{ # tagHead Head; # char AssistGUID[40]; //ЭÖúGUID #}; def OnCancelAssistBoss(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) assistGUID = clientData.AssistGUID playerID = curPlayer.GetPlayerID() assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID not in assistMgr.playerAssistingDict: GameWorld.DebugLog("ûÓÐÔÚЭÖúÖУ¬ÎÞÐèÈ¡Ïû!", playerID) return assistObj = assistMgr.playerAssistingDict[playerID] if assistGUID != assistObj.GUID: GameWorld.DebugLog("·ÇÕýÔÚЭÖúÖеÄGUID£¬²»ÄÜÈ¡Ïû!assistGUID=%s,assisting=%s" % (assistGUID, assistObj.GUID), playerID) return OnCancelPlayerAssist(curPlayer, curPlayer.GetPlayerID(), assistObj, "ClientCancel", True) return def SetPlayerStartAssistBoss(curPlayer, assistObj): ## Íæ¼Ò¿ªÊ¼Ð­Öú boss assistGUID = assistObj.GUID tagPlayerID = assistObj.PlayerID mapID = assistObj.MapID lineID = assistObj.LineID npcID = assistObj.NPCID objID = assistObj.ObjID tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) if not tagPlayer: GameWorld.DebugLog("Íæ¼ÒÒÑÀëÏߣ¬ÎÞ·¨Ð­Öú!tagPlayerID=%s" % (tagPlayerID)) return if tagPlayer.GetMapID() != mapID: GameWorld.DebugLog("Ä¿±êÍæ¼ÒÒѲ»ÔÚÇëÇóЭÖúµÄµØÍ¼£¬ÎÞ·¨Ð­Öú!tagPlayerID=%s" % (tagPlayerID)) return playerID = curPlayer.GetPlayerID() # ÉèÖÃÐÂЭÖú֮ǰÐèÒªÏÈÈ¡ÏûÕýÔÚ½øÐÐÖеÄЭÖú assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID in assistMgr.playerAssistingDict: assistingObj = assistMgr.playerAssistingDict[playerID] if assistGUID != assistingObj.GUID: OnCancelPlayerAssist(curPlayer, playerID, assistingObj, "StartNewAssistBoss", True) assistMgr.playerAssistingDict[playerID] = assistObj #if playerID in assistObj.AssistPlayerIDList: # GameWorld.DebugLog("ÒѾ­ÔÚЭÖúÖÐ!", playerID) # return if playerID not in assistObj.AssistPlayerIDList: assistObj.AssistPlayerIDList.append(playerID) GameWorld.DebugLog("¿ªÊ¼Ð­Öú: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s" % (tagPlayerID, mapID, lineID, npcID, objID), playerID) # ÉèÖÃЭÖú PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID) # ֪ͨĿ±êÍæ¼Ò assistPlayerID = curPlayer.GetPlayerID() assistPlayerName = curPlayer.GetName() # xxx¿ªÊ¼Ð­ÖúÄã PlayerControl.NotifyCode(tagPlayer, "AssistStart", [assistPlayerName]) tagPlayerName = tagPlayer.GetName() tagTeamID = tagPlayer.GetTeamID() assistData = [mapID, "Start", assistGUID, assistPlayerID, assistPlayerName, tagPlayerID, tagPlayerName, tagTeamID, lineID, objID, npcID] GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AssistBoss, assistData) return def OnAddAssistBossPlayerOK(queryData): ## Ìí¼ÓЭÖúBossµÄÍæ¼Ò³É¹¦£¬Í¨ÖªÐ­ÖúÍæ¼Ò¿ÉÒÔǰÍù assistGUID, assistPlayerID = queryData assistPlayer = GameWorld.GetPlayerManager().FindPlayerByID(assistPlayerID) if not assistPlayer: return assistPack = ChPyNetSendPack.tagGCAssistingInfo() assistPack.AssistGUID = assistGUID NetPackCommon.SendFakePack(assistPlayer, assistPack) return def SetPlayerStartAssistTeamFB(curPlayer, queryData): ## ¿ªÊ¼Ð­Öú×é¶Ó¸±±¾ - Íæ¼Ò½øÈ븱±¾ºó²ÅÕæÕý½øÈëЭÖú״̬ #mapID, lineID, tagPlayerID = queryData return def MapServer_PlayerAssistLogic(curPlayer, msgList, tick): ## µØÍ¼Í¬²½µÄЭÖúÐÅÏ¢Âß¼­´¦Àí playerID = 0 if not curPlayer else curPlayer.GetPlayerID() familyID = 0 if not curPlayer else curPlayer.GetFamilyID() queryType, queryData = msgList #result = [] GameWorld.Log("ÊÕµ½µØÍ¼Ð­ÖúÐÅÏ¢: familyID=%s,queryType=%s,queryData=%s" % (familyID, queryType, queryData), playerID) # ÇëÇóЭÖúboss if queryType == "RequestAssistBoss": __DoRequestAssistBoss(curPlayer, queryData) return # Ìí¼ÓЭÖúBossµÄÍæ¼Ò³É¹¦ elif queryType == "AddAssistBossPlayerOK": OnAddAssistBossPlayerOK(queryData) return # È¡ÏûbossЭÖú·¢²¼ elif queryType == "OnCancelBossRequestAssist": mapID, lineID, npcID, objID, reason, cancelPlayerIDList = queryData assistMgr = PyDataManager.GetPlayerAssistPyManager() for cancelPlayerID in cancelPlayerIDList: if cancelPlayerID in assistMgr.playerNoSaveDBAssistDict: playerAssistList = assistMgr.playerNoSaveDBAssistDict[cancelPlayerID] for assistObj in playerAssistList: if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID: OnCancelPlayerRequestAssist(assistObj, reason, False) break return # È¡ÏûЭÖúBoss elif queryType == "OnCancelBossAssist": mapID, lineID, npcID, objID, reason = queryData assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID in assistMgr.playerAssistingDict: assistObj = assistMgr.playerAssistingDict[playerID] if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID: OnCancelPlayerAssist(curPlayer, playerID, assistObj, reason, False) return ## ------------------------------------------------------------------------------------------- # ÇëÇóЭÖú×é¶Ó¸±±¾ elif queryType == "RequestAssistTeamFB": __DoRequestAssistTeamFB(curPlayer, queryData) return # ¿ªÊ¼Ð­Öú×é¶Ó¸±±¾ elif queryType == "OnStartAssistTeamFB": SetPlayerStartAssistTeamFB(curPlayer, queryData) return #QueryPlayerResult_PlayerAssist(curPlayer, queryType, queryData, result) return #def QueryPlayerResult_PlayerAssist(curPlayer, queryType, queryData, result=[]): # if not curPlayer: # return # resultMsg = str([queryType, queryData, result]) # curPlayer.MapServer_QueryPlayerResult(0, 0, "PlayerAssist", resultMsg, len(resultMsg)) # GameWorld.DebugLog("ЭÖúÐÅÏ¢·¢ËÍ MapServer: playerID=%s,queryType=%s,queryData=%s" % (curPlayer.GetPlayerID(), queryType, queryData)) # return def __DoRequestAssistBoss(curPlayer, queryData): ## ÇëÇóЭÖúBoss familyID = curPlayer.GetFamilyID() if not familyID: return mapID, lineID, npcID, objID = queryData playerID = curPlayer.GetPlayerID() assistObj = None addNewAssist = True assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID in assistMgr.playerNoSaveDBAssistDict: playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID] for assistObj in playerAssistList: if assistObj.AssistType != AssistType_Boss: continue if npcID != assistObj.NPCID or lineID != assistObj.LineID or objID != assistObj.ObjID: OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistBoss", True) else: addNewAssist = False break if addNewAssist: assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID) if not assistObj: return # ֪ͨ±¾ÏÉÃËÍæ¼Ò PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj])) # ÇóÖúÐÅÏ¢ÒÑ·¢ËÍ£¬ÇëµÈ´ýÃËÓÑÖ§Ô® PlayerControl.NotifyCode(curPlayer, "AssistRequestOK") return def __DoRequestAssistTeamFB(curPlayer, queryData): ## ÇëÇóЭÖú×é¶Ó¸±±¾ familyID = curPlayer.GetFamilyID() if not familyID: return mapID, lineID = queryData playerID = curPlayer.GetPlayerID() assistObj = None addNewAssist = False assistMgr = PyDataManager.GetPlayerAssistPyManager() if playerID in assistMgr.playerNoSaveDBAssistDict: playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID] for assistObj in playerAssistList: if assistObj.AssistType != AssistType_TeamFB: continue if mapID != assistObj.MapID or lineID != assistObj.LineID: OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistTeamFB", True) addNewAssist = True break else: addNewAssist = True if addNewAssist: assistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID) if not assistObj: return # ֪ͨ±¾ÏÉÃËÍæ¼Ò PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([assistObj])) # ÇóÖúÐÅÏ¢ÒÑ·¢ËÍ£¬ÇëµÈ´ýÃËÓÑÖ§Ô® PlayerControl.NotifyCode(curPlayer, "AssistRequestOK") return def __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID=0, objID=0, exData="", isSaveDB=0): ## Ìí¼ÓÐÂЭÖúÇëÇó assistGUID = str(uuid.uuid1()) familyID = curPlayer.GetFamilyID() playerID = curPlayer.GetPlayerID() assistObj = PyGameDataStruct.tagDBAssist() assistObj.GUID = assistGUID assistObj.FamilyID = familyID assistObj.PlayerID = playerID assistObj.PlayerName = curPlayer.GetName() assistObj.Job = curPlayer.GetJob() assistObj.LV = curPlayer.GetLV() assistObj.RealmLV = curPlayer.GetOfficialRank() assistObj.MapID = mapID assistObj.LineID = lineID assistObj.NPCID = npcID assistObj.ExData = exData assistObj.ExDataLen = len(exData) # ÒÔÏÂÊÇ·ÇDB×Ö¶ÎÊôÐÔ OnInitAssistData(assistObj, isSaveDB) assistObj.ObjID = objID #assistMgr = PyDataManager.GetPlayerAssistPyManager() assistMgr.allAssistDict[assistGUID] = assistObj if familyID not in assistMgr.familyAssistDict: assistMgr.familyAssistDict[familyID] = [] familyAssistList = assistMgr.familyAssistDict[familyID] familyAssistList.append(assistObj) if not isSaveDB: if playerID not in assistMgr.playerNoSaveDBAssistDict: assistMgr.playerNoSaveDBAssistDict[playerID] = [] playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID] playerAssistList.append(assistObj) GameWorld.DebugLog(" Ôö¼ÓÐÂЭÖúÇëÇó: familyID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s,exData=%s,assistGUID=%s" % (familyID, mapID, lineID, npcID, objID, exData, assistGUID), playerID) return assistObj def GetAssistInfoListPack(familyAssistList): ## ЭÖúÁбí·â°üÊý¾Ý assistList = [] for assistObj in familyAssistList: assistInfo = ChPyNetSendPack.tagGCAssistInfo() assistInfo.AssistGUID = assistObj.GUID assistInfo.PlayerName = assistObj.PlayerName assistInfo.Job = assistObj.Job assistInfo.LV = assistObj.LV assistInfo.RealmLV = assistObj.RealmLV assistInfo.MapID = assistObj.MapID assistInfo.LineID = assistObj.LineID assistInfo.NPCID = assistObj.NPCID assistInfo.ExData = assistObj.ExData assistInfo.ExDataLen = len(assistObj.ExData) assistList.append(assistInfo) infoListPack = ChPyNetSendPack.tagGCAssistInfoList() infoListPack.AssistInfoList = assistList infoListPack.Count = len(assistList) return infoListPack def OnCancelPlayerRequestAssist(assistObj, reason, isGameServer): '''È¡ÏûÍæ¼ÒЭÖú - ·¢²¼·½ MapServer ´¥·¢È¡Ïû 1. ¹¥»÷ÁËÁíÒ»Ö»boss 2. ÖØÐ·¢²¼ÁËÁíÒ»ÌõЭÖúboss/×é¶Ó¸±±¾ 3. ½øÈëЭÖú״̬£¬¼´±¾À´ÔÚ´òͬһֻboss£¬ºóÃæÖ±½Ó¸ÄΪЭÖú 4. Í˳öÁË·¢²¼Ð­ÖúµØÍ¼ GameServer ´¥·¢È¡Ïû 5. ±»Ìß/Í˳öÏÉÃË ''' assistGUID = assistObj.GUID playerID = assistObj.PlayerID familyID = assistObj.FamilyID assistType = assistObj.AssistType mapID = assistObj.MapID lineID = assistObj.LineID npcID = assistObj.NPCID objID = assistObj.ObjID GameWorld.DebugLog("È¡Ïû·¢²¼µÄЭÖúÇëÇó: mapID=%s,lineID=%s,npcID=%s,objID=%s,reason=%s,isGameServer=%s, %s" % (mapID, lineID, npcID, objID, reason, isGameServer, assistGUID)) assistMgr = PyDataManager.GetPlayerAssistPyManager() if assistGUID not in assistMgr.allAssistDict: return assistMgr.allAssistDict.pop(assistGUID) if familyID in assistMgr.familyAssistDict: familyAssistList = assistMgr.familyAssistDict[familyID] if assistObj in familyAssistList: familyAssistList.remove(assistObj) if playerID in assistMgr.playerNoSaveDBAssistDict: playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID] if assistObj in playerAssistList: playerAssistList.remove(assistObj) SyncFamilyClearAssist(familyID, assistGUID) # È¡ÏûbossЭÖú if assistType == AssistType_Boss: # Ç¿ÖÆÈ¡ÏûÕýÔÚЭÖúÖеÄÍæ¼Ò playerMgr = GameWorld.GetPlayerManager() for assPlayerID in assistObj.AssistPlayerIDList[::-1]: assistObj.AssistPlayerIDList.remove(assPlayerID) if assPlayerID in assistMgr.playerAssistingDict: assistingObj = assistMgr.playerAssistingDict[assPlayerID] if assistingObj.GUID == assistGUID: assPlayer = playerMgr.FindPlayerByID(assPlayerID) OnCancelPlayerAssist(assPlayer, assPlayerID, assistObj, reason, isGameServer, isNotify=False) # ·¢²¼·½È¡Ïû²»ÐèҪ֪ͨµØÍ¼£¬¶ÔµØÍ¼·¢²¼Íæ¼ÒûÓÐÓ°Ï죬¿É¼ÌÐø¹¥»÷boss # È¡Ïû¸±±¾Ð­Öú elif assistType == AssistType_TeamFB: # Ôݲ»ÐèÒª´¦Àí pass return def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True): '''È¡ÏûÍæ¼ÒЭÖú - ЭÖú·½ MapServer ´¥·¢È¡Ïû 1. ¹¥»÷ÁËÁíÒ»Ö»boss 2. Í˳öÁ˵±Ç°Ð­ÖúµÄЭÖúµØÍ¼ GameServer ´¥·¢È¡Ïû 3. ÖØÐÂЭÖúÁËÁíÒ»ÌõЭÖúboss/×é¶Ó¸±±¾ 4. ±»Ìß/Í˳öÏÉÃË 5. Ö÷¶¯µãÈ¡Ïû ÆäËû£¬·¢²¼·½È¡Ïû·½Ê½ 6. ·¢²¼·½È¡ÏûÁË·¢²¼µÄЭÖú ''' assistGUID = assistObj.GUID tagPlayerID = assistObj.PlayerID mapID = assistObj.MapID lineID = assistObj.LineID npcID = assistObj.NPCID objID = assistObj.ObjID GameWorld.DebugLog("È¡ÏûЭÖú: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s,reason=%s,isGameServer=%s, %s" % (tagPlayerID, mapID, lineID, npcID, objID, reason, isGameServer, assistGUID), cancelPlayerID) assistMgr = PyDataManager.GetPlayerAssistPyManager() if cancelPlayerID in assistMgr.playerAssistingDict: assistMgr.playerAssistingDict.pop(cancelPlayerID) if cancelPlayerID in assistObj.AssistPlayerIDList: assistObj.AssistPlayerIDList.remove(cancelPlayerID) if cancelPlayer: PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0) # È¡ÏûbossЭÖú if assistObj.AssistType == AssistType_Boss: # GameServerÈ¡ÏûµÄÐèҪ֪ͨЭÖúbossµØÍ¼£¬É¾³ýЭÖúÍæ¼Ò¼Ç¼ if isGameServer: assistData = [mapID, "Cancel", cancelPlayerID, lineID, objID, npcID] GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AssistBoss, assistData) if isNotify and cancelPlayer: tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID) if tagPlayer: # xxxÈ¡Ïû¶ÔÄãЭÖú PlayerControl.NotifyCode(tagPlayer, "AssistCancel", [cancelPlayer.GetName()]) # È¡Ïû¸±±¾Ð­Öú elif assistObj.AssistType == AssistType_TeamFB: pass return #// B0 14 ʹÓÃЭÖú¸ÐлÀñºÐ #tagCGUseAssistThanksGift # #struct tagCGUseAssistThanksGift # #{ # tagHead Head; # DWORD ItemID; # char GiftGUID[40]; //Ô¤ÀÀʱGUID²»·¢£¬È·ÈÏʹÓÃʱÐè·¢ËÍÔ¤ÀÀ·µ»ØµÄGUID #}; def OnUseAssistThanksGift(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) itemID = clientData.ItemID giftGUID = clientData.GiftGUID return #// B0 15 ÁìȡЭÖú¸ÐлÀñÎï #tagCGGetAssistThanksGift # #struct tagCGGetAssistThanksGift # #{ # tagHead Head; # char GiftGUID[40]; //ÀñºÐGUID #}; def OnGetAssistThanksGift(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) giftGUID = clientData.GiftGUID return def SyncFamilyAssist(curPlayer): ## ͬ²½µ±Ç°ÏÉÃËËùÓÐЭÖúÇëÇóÐÅÏ¢ familyID = curPlayer.GetFamilyID() if not familyID: return assistMgr = PyDataManager.GetPlayerAssistPyManager() familyAssistList = assistMgr.familyAssistDict.get(familyID, []) if not familyAssistList: return NetPackCommon.SendFakePack(curPlayer, GetAssistInfoListPack(familyAssistList)) return def SyncFamilyClearAssist(familyID, assistGUID): # ·â°ü֪ͨÏÉÃËÇå³ýЭÖú clearPack = ChPyNetSendPack.tagGCClearAssist() clearPack.AssistGUID = assistGUID PlayerFamily.SendFamilyFakePack(familyID, clearPack) return