405 【公会】自动转让会长规则调整(优化优先传位配置;优化跨服邮件发送;)
| | |
| | | callFunc = GameWorld.GetExecFunc(Commands, "%s.%s"%(callFunName, "GetGMServerIDList"))
|
| | | if callFunc != None:
|
| | | gmServerIDList = callFunc(curPlayer)
|
| | | pack = ChServerToServerPyPack.tagSSGMCMD()
|
| | | pack.FromServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | pack.ServerType = GameWorld.GetServerType()
|
| | | pack.PlayerID = curPlayer.GetPlayerID()
|
| | | pack.CMDStr = str(inputList)
|
| | | pack.CMDLen = len(pack.CMDStr)
|
| | | NetPackCommon.SendCrossServerToServerPack(pack, gmServerIDList, dirType=ShareDefine.dirType_Cross)
|
| | | if gmServerIDList:
|
| | | pack = ChServerToServerPyPack.tagSSGMCMD()
|
| | | pack.FromServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | pack.ServerType = GameWorld.GetServerType()
|
| | | pack.PlayerID = curPlayer.GetPlayerID()
|
| | | pack.CMDStr = str(inputList)
|
| | | pack.CMDLen = len(pack.CMDStr)
|
| | | NetPackCommon.SendCrossServerToServerPack(pack, gmServerIDList, dirType=ShareDefine.dirType_Cross)
|
| | | return
|
| | |
|
| | | # GameObj 的 Get、Set函数
|
| | |
| | | import CrossMsg
|
| | | CrossMsg.SendToClientServer(ShareDefine.C2S_GMDebugAnswer, {"text":text}, [mainServerID], playerID)
|
| | | return
|
| | | if hasattr(curPlayer, "GetPlayer"):
|
| | | curPlayer = curPlayer.GetPlayer()
|
| | | DebugLog(text, playerID)
|
| | | text = text.decode(ShareDefine.Def_Game_Character_Encoding).encode(GetCharacterEncoding())
|
| | | curPlayer.DebugAnswer(text)
|
| | |
| | | def __doFamilyOnHour():
|
| | |
|
| | | needHours = IpyGameDataPY.GetFuncCfg("FamilyLeaderAutoChange", 1)
|
| | | priorityHours = IpyGameDataPY.GetFuncCfg("FamilyLeaderAutoChange", 2) # 优先传给离线不超过x小时的成员,一样按优先级
|
| | | if GameWorld.IsMainServer() and not DBFamily.IsFamilyCross():
|
| | | # 开服前X天会长离线Y小时触发自动转让,优先级高于数值1,格式 X|Y
|
| | | befServerDay, needHours2 = IpyGameDataPY.GetFuncEvalCfg("FamilyLeaderAutoChange", 3)
|
| | | openServerSet = IpyGameDataPY.GetFuncEvalCfg("FamilyLeaderAutoChange", 3)
|
| | | befServerDay = openServerSet[0]
|
| | | serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
|
| | | if serverDay <= befServerDay:
|
| | | needHours = needHours2
|
| | | needHours = openServerSet[1]
|
| | | priorityHours = openServerSet[2]
|
| | |
|
| | | #GameWorld.DebugLog("自动传位时长设定: needHours=%s" % needHours)
|
| | | GameWorld.DebugLog("自动传位时长设定: needHours=%s,priorityHours=%s" % (needHours, priorityHours))
|
| | | familyManager = DBDataMgr.GetFamilyMgr()
|
| | | for zoneID in familyManager.GetZoneIDListThisServer():
|
| | | zoneMgr = familyManager.GetZoneFamilyMgr(zoneID)
|
| | | for i in range(0, zoneMgr.GetCount()):
|
| | | family = zoneMgr.GetAt(i)
|
| | | #自动传位
|
| | | __AutoChangeLeader(family, needHours)
|
| | | __AutoChangeLeader(family, needHours, priorityHours)
|
| | | return
|
| | |
|
| | | def FamilyCrossCenterOnDay():
|
| | |
| | | CrossPlayer.FamilyNotify(familyID, "XW_JZ_AppointFamily", [memName, changeFamilyLV])
|
| | | return
|
| | |
|
| | | def __AutoChangeLeader(curFamily, needHours):
|
| | | def __AutoChangeLeader(curFamily, needHours, priorityHours):
|
| | | ## 自动传位
|
| | | leaderID = curFamily.GetLeaderID()
|
| | | leaderMem = curFamily.FindMember(leaderID)
|
| | |
| | | GameWorld.DebugLogEx("盟主离线未超过限制小时,不处理自动传位!familyID=%s,leaderID=%s,offTime=%s,passHours=%s < %s",
|
| | | familyID, leaderID, GameWorld.ChangeTimeNumToStr(offTime), passHours, needHours)
|
| | | return
|
| | | |
| | | priorityHours = IpyGameDataPY.GetFuncCfg("FamilyLeaderAutoChange", 2) # 优先传给离线不超过x小时的成员,一样按优先级
|
| | |
|
| | | priorityList = []
|
| | | for i in range(0, curFamily.GetCount()):
|
| | |
| | | def SendMailByKey(mailTypeKey, playerID, itemList, paramList=[], limitDays=7, toServerID=0):
|
| | | ## 发送个人邮件魔板
|
| | | # @param itemList: 元素支持字典{itemID:itemCount, ...} 或列表 [itemID, itemCount, 可选是否拍品, 物品UserData]
|
| | | # @param toServerID: 向其他服玩家发送邮件时需指定玩家所在服务器
|
| | | if toServerID > 0:
|
| | | if not GameWorld.IsCrossServer():
|
| | | GameWorld.ErrLog("非跨服服务器不能向其他服务器发送个人邮件! %s,playerID=%s" % (mailTypeKey, playerID))
|
| | | return
|
| | | # @param toServerID: 向其他服玩家发送邮件时需指定玩家所在服务器,仅跨服服务器时有效
|
| | | if toServerID > 0 and GameWorld.IsCrossServer():
|
| | | dataMsg = {"mailTypeKey":mailTypeKey, "itemList":itemList, "paramList":paramList, "limitDays":limitDays}
|
| | | mainServerID = GameWorld.GetMainServerID(toServerID)
|
| | | CrossMsg.SendToClientServer(ShareDefine.C2S_SendPlayerMail, dataMsg, [mainServerID], playerID)
|