#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_FamilyTransfer # # @todo:GM¹¤¾ßÃüÁî - תÈû᳤ # @author hxp # @date 2025-12-21 # @version 1.0 # # ÏêϸÃèÊö: GM¹¤¾ßÃüÁî - תÈû᳤ # #------------------------------------------------------------------------------- #"""Version = 2025-12-21 17:30""" #------------------------------------------------------------------------------- import GMCommon import GameWorld import PlayerFamily import CrossPlayer import PlayerMail import DBDataMgr ## ÊÕµ½gmÃüÁîÖ´ÐÐ # @param gmCmdDict:gmÃüÁî×Öµä # @return None def OnExec(gmCmdDict): queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '') familyName = gmCmdDict.get(GMCommon.Def_GMKey_FamilyName, '') if familyName == '': return GMCommon.Def_ParamErr if GameWorld.IsMainServer(): crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID() if crossServerID: return GMCommon.Def_ParamErr, "¹«»áÒѾ­¿ç·þÁË£¬¿ç·þID=%s" % crossServerID familyMgr = DBDataMgr.GetFamilyMgr() if queryType == "FamilyID": familyID = GameWorld.ToIntDef(familyName) if not familyID: return GMCommon.Def_ParamErr curFamily = familyMgr.FindFamily(familyID) else: curFamily = None for zoneID in familyMgr.GetZoneIDListThisServer(): zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID) curFamily = zoneMgr.FindFamilyByName(familyName) if curFamily: break if not curFamily: GameWorld.DebugLogEx("Ä¿±ê¹¤»á²»´æÔÚ") return GMCommon.Def_NoTag, "no tag family" familyID = curFamily.GetID() tagCrossPlayer = None queryTagType = gmCmdDict.get("queryTagType", '') queryTag = gmCmdDict.get("queryTag", '') if queryTagType == "PlayerName": tagCrossPlayer = None #GameWorld.GetPlayerManager().FindPlayerByName(queryTag) else: tagCrossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(GameWorld.ToIntDef(queryTag)) if not tagCrossPlayer: GameWorld.DebugLogEx("Ä¿±êÍæ¼Ò²»ÔÚÏß") return GMCommon.Def_NoTag, "tagPlayer is offLine" leaderID = curFamily.GetLeaderID() tagPlayerID = tagCrossPlayer.GetPlayerID() toMember = curFamily.FindMember(tagPlayerID) if not toMember: GameWorld.DebugLogEx("Ä¿±êÍæ¼Ò·Ç¸Ã¹¤»á³ÉÔ±: tagPlayerID=%s", tagPlayerID) return GMCommon.Def_NoTag, "tagPlayer is not this family member" PlayerFamily.ChangeFamilyLeader(curFamily, toMember) PlayerFamily.Broadcast_FamilyInfo(familyID, changeMemIDList=[leaderID, tagPlayerID]) # Óʼþ֪ͨ toServerID = 0 if GameWorld.IsCrossServer(): toServerID = toMember.GetServerID() PlayerMail.SendMailByKey("FamilyLeaderAutoChange", tagPlayerID, [], [curFamily.GetName()], toServerID=toServerID) return GMCommon.Def_Success