From bf720cd643e9dfc7bfbe522e78da624a6f00c4c6 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 29 十月 2024 17:44:46 +0800 Subject: [PATCH] 10275 【越南】【英语】【砍树】【tqxbqy】仙盟珍宝阁-后端 --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 644 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 533 insertions(+), 111 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py index aeca269..aca9647 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py @@ -29,16 +29,25 @@ import DataRecordPack import PlayerFamilyBoss import IpyGameDataPY +import PlayerFamilyZhenbaoge import PlayerFamilyRedPacket import GameWorldFamilyWar import ChPyNetSendPack import NetPackCommon import PyDataManager import PyGameData +import PlayerBillboard +import PlayerActBossTrial import PlayerCompensation +import PlayerFamilyEmblem import PlayerFamilyParty import PlayerFamilySWRH +import PlayerViewCache +import GameWorldBoss +import AuctionHouse +import PlayerAssist import PlayerTalk +import PlayerTeam import copy import random @@ -68,6 +77,9 @@ if not family: return 0 return GetFamilyTotalFightPower(family) +# 徽章ID +def GetFamilyEmblemID(curFamily): return curFamily.GetExtra6() +def SetFamilyEmblemID(curFamily, emblemID): return curFamily.SetExtra6(emblemID) # 公告修改次数 def GetFamilyBroadcastCnt(curFamily): return curFamily.GetExtra3() @@ -80,13 +92,66 @@ def GetCurWeekMissionMoney(curFamily): return curFamily.GetExtra2() def SetCurWeekMissionMoney(curFamily, value): return curFamily.SetExtra2(min(value, ChConfig.Def_UpperLimit_DWord)) +# 仙盟上次处理的合服天 +def GetFamilyMixServerDay(curFamily): return curFamily.GetExtra1() +def SetFamilyMixServerDay(curFamily, value): return curFamily.SetExtra1(value) ## ------------------ 成员 ---------------------- -def GetMemberFightPower(curMember): return curMember.GetExattr3() -def SetMemberFightPower(curMember, fightPower): return curMember.SetExattr3(fightPower) +def GetMemberFightPower(curMember): return curMember.GetExattr3() + curMember.GetExattr5() * ChConfig.Def_PerPointValue +def SetMemberFightPower(curMember, fightPower): + curMember.SetExattr5(fightPower / ChConfig.Def_PerPointValue) + curMember.SetExattr3(fightPower % ChConfig.Def_PerPointValue) + return def GetMemberJoinTime(curMember): return curMember.GetExattr4() def SetMemberJoinTime(curMember, joinTime): return curMember.SetExattr4(joinTime) #---------------------------------------------------------------------- + +def OnGameServerInitOK(): + ## 服务器启动成功处理 + DoFamilySort() + return + +def OnMixServerInit(): + ## 合服后首次启动成功处理 + + # 仙盟联赛重置 + GameWorldFamilyWar.DoFamilyWarReset() + # 重置所有仙盟联赛评级 + familyManager = GameWorld.GetFamilyManager() + for i in xrange(familyManager.GetCount()): + family = familyManager.GetAt(i) + SetFamilyWarRank(family, 0) + + # 仙盟榜相关榜单重新上榜 + familyID = family.GetID() + familyBillInfo = GetFamilyBillboardInfo(family) + + familySubmitTotal = PlayerActBossTrial.GetFamilySubmitTotalByID(familyID) + PlayerBillboard.UpdateFamilyBillboard(ShareDefine.Def_BT_BossTrialSubmitFamily, familyBillInfo, familySubmitTotal) + + DoFamilySort() + return + +def OnLoadDBPlayerOK(): + ## 服务器启动加载DB玩家成功处理 + + # 检查仙盟ServerID + familyManager = GameWorld.GetFamilyManager() + for i in xrange(familyManager.GetCount()): + family = familyManager.GetAt(i) + if family.GetServerID(): + continue + familyID = family.GetID() + # 没有则默认取盟主的 + leaderID = family.GetLeaderID() + leaderAccID = PlayerControl.GetDBPlayerAccIDByID(leaderID) + if not leaderAccID: + continue + serverID = GameWorld.GetAccIDServerID(leaderAccID) + family.SetServerID(serverID) + GameWorld.Log("启动更新仙盟所属服务器ID: familyID=%s,serverID=%s,leaderID=%s,%s" % (familyID, serverID, leaderID, leaderAccID)) + + return def RandomFakeFamily(): '''随机3个假仙盟''' @@ -125,9 +190,25 @@ if not lackCnt: break elif lackCnt < 0: - GameWorld.ErrLog(' 随机假仙盟异常 已存在的随机数大于还需要的随机个数lackFakeCnt=%s,fakeIDList=%s'%(lackFakeCnt, fakeIDList)) + #GameWorld.DebugLog(' 随机假仙盟异常 已存在的随机数大于还需要的随机个数lackFakeCnt=%s,fakeIDList=%s'%(lackFakeCnt, fakeIDList)) return [] return fakeIDList + +def GetFamilyNameFakeIndex(familyName): + ## 获取仙盟名是否是系统随机出来的假仙盟名 + # @return: 0-不是, >0 对应的 fakeIndex + fakeFamilyNameList = IpyGameDataPY.GetFuncEvalCfg('FakeFamilyName') + randomCnt = IpyGameDataPY.GetFuncCfg('FakeFamilyName', 2) + for i in xrange(randomCnt): + fakeID = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FakeFamilyIndex % i) + if not fakeID: + continue + nameIndex = fakeID - 1 + if nameIndex >=0 and nameIndex < len(fakeFamilyNameList): + fakeName = GameWorld.GbkToCode(fakeFamilyNameList[nameIndex]) + if familyName == fakeName: + return fakeID + return 0 def SyncFakeFamilyInfo(curPlayer=None): '''通知假仙盟信息''' @@ -155,6 +236,28 @@ NetPackCommon.SendFakePack(curPlayer, fakeFamilyPack) return +def SyncCreatFamilyTimes(curPlayer=None): + # 通知建盟次数 + packData = ChPyNetSendPack.tagGCServerCreatFamilyTimes() + packData.Clear() + packData.Times = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerCreatFamilyTimes) + if not curPlayer: + # 全服广播在线玩家 + playerManager = GameWorld.GetPlayerManager() + for i in range(0, playerManager.GetPlayerCount()): + curPlayer = playerManager.GetPlayerByIndex(i) + if curPlayer == None or not curPlayer.GetInitOK(): + continue + + if PlayerControl.GetIsTJG(curPlayer): + continue + NetPackCommon.SendFakePack(curPlayer, packData) + else: + if PlayerControl.GetIsTJG(curPlayer): + return + NetPackCommon.SendFakePack(curPlayer, packData) + return + #输入家族名称 #class IPY_CInputFamilyName #{ @@ -169,7 +272,7 @@ # @param tick 当前时间 # @return None # @remarks 函数详细说明. -def DoCreateFamily(curPlayer, familyName, fakeIndex, tick): +def DoCreateFamily(curPlayer, familyName, fakeIndex, tick, emblemID=0): #---验证玩家属性--- curPlayerID = curPlayer.GetPlayerID() @@ -226,20 +329,36 @@ if curFamily == None: GameWorld.ErrLog("家族创建数目已满, 创建家族失败", curPlayerID) return - GameWorld.Log("创建仙盟: familyID=%s,playerID=%s" % (curFamily.GetID(), curPlayerID)) + emblemIDList = PlayerFamilyEmblem.GetDefaultFamilyEmblemIDList() + if not emblemID or emblemID not in emblemIDList: + emblemID = random.choice(emblemIDList) # 从默认徽章中随机选择一个 + GameWorld.Log("创建仙盟: familyID=%s,playerID=%s,emblemID=%s" % (curFamily.GetID(), curPlayerID, emblemID)) #---创建家族--- + curFamily.SetServerID(GameWorld.GetAccIDServerID(curPlayer.GetAccID())) curFamily.SetCreateTime(GameWorld.GetCurrentDataTimeStr()) curFamily.SetLV(1) curFamily.SetAcceptJoin(ShareDefine.FamilyAcceptJoin_Agree) #设置收人方式为直接通过申请 + SetFamilyEmblemID(curFamily, emblemID) PyDataManager.GetFamilyStoreItemManager().DelFamilyStoreItemAll(curFamily.GetID()) + + #新创建的仙盟默认设置已处理过合服 + SetFamilyMixServerDay(curFamily, PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerDay)) #-设置家族成员属性 DoPlayerJionFamily(curFamily, curPlayer, IPY_GameServer.fmlLeader) - + creatFamilyTimes = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerCreatFamilyTimes) + # 如果是手动指定仙盟名创建的,判断是否在系统随机的假仙盟里,如果是的话就当做创建系统分配的假仙盟处理 + if familyName and not fakeIndex: + fakeIndex = GetFamilyNameFakeIndex(familyName) + GameWorld.DebugLog(" 玩家手动输入创建仙盟名与系统随机的假仙盟名相同,默认当做创建假仙盟!fakeIndexID=%s" % (fakeIndex)) #扣道具(前N个战盟并且假编号在随机编号里不要钱) if fakeIndex and fakeIndex in fakeIndexList: PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FakeFamilyIndex % fakeIndexList.index(fakeIndex), 0) - GameWorld.DebugLog(' 创建前3个仙盟不扣钱! 假仙盟索引%s'%fakeIndexList.index(fakeIndex)) + GameWorld.Log(' 创建前n个假仙盟不扣钱! 假仙盟索引%s'%fakeIndexList.index(fakeIndex)) + fakeAwardItemList = IpyGameDataPY.GetFuncEvalCfg("FakeFamilyName", 3) + PlayerCompensation.SendMailByKey("FackFamilyNotice", [curPlayerID], fakeAwardItemList) + elif creatFamilyTimes < IpyGameDataPY.GetFuncCfg('CreateFamilyNeedMoney', 3): + GameWorld.Log(' 创建前n个仙盟不扣钱! creatFamilyTimes=%s' % creatFamilyTimes) else: for i, findex in enumerate(fakeIndexList): if findex: @@ -249,7 +368,9 @@ needMoney = IpyGameDataPY.GetFuncCfg('CreateFamilyNeedMoney') if needMoney: moneyType = IpyGameDataPY.GetFuncCfg('CreateFamilyNeedMoney', 2) - curPlayer.MapServer_PayMoney(moneyType, needMoney) + sendMsg = str([moneyType, needMoney]) + curPlayer.MapServer_QueryPlayerResult(0, 0, "CreateFamilyPayMoney", sendMsg, len(sendMsg)) + #curPlayer.MapServer_PayMoney(moneyType, needMoney) #玩家创建家族费用转化为家族初始资金 #PlayerAddFamilyMoney(curPlayer, curFamily, needMoney) @@ -275,12 +396,13 @@ #XW_JZ_EstablishSud <n color="255,255,0">恭喜您,家族建立成功!</n> 25 - - PlayerControl.NotifyCode(curPlayer, "XW_JZ_EstablishSud") - + PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerCreatFamilyTimes, min(creatFamilyTimes + 1, ShareDefine.Def_UpperLimit_DWord)) + SyncCreatFamilyTimes() #帮会创建流向 DataRecordPack.DR_CreateFamily(curPlayer.GetAccID(), curPlayerID, curPlayer.GetName(), - fullFamilyName, curFamily.GetID()) + fullFamilyName, curFamily.GetID(), creatFamilyTimes+1) - GameWorld.Log('创建家族 : %s(%s), fakeIndex=%s' % (fullFamilyName, curFamily.GetID(), fakeIndex), curPlayerID) + GameWorld.Log('创建家族 : %s(%s), fakeIndex=%s, creatFamilyTimes=%s' % (fullFamilyName, curFamily.GetID(), fakeIndex, creatFamilyTimes+1), curPlayerID) PlayerControl.WorldNotify(0, "jiazu_liubo_671654", [curPlayer.GetName(), fullFamilyName, curFamily.GetID()]) return @@ -346,25 +468,30 @@ # 玩家战盟名变更处理 __OnFamilyNameChange(jionPlayer.GetPlayerID(), curFamily.GetName()) - + #玩家缓存 + PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName()) + PlayerTeam.OnTeamMemFamilyRefresh(jionPlayer, curFamily.GetID()) #加入仙盟联赛成员 GameWorldFamilyWar.AddFamilyWarMem(jionPlayer.GetPlayerID(), curFamily.GetID()) GameWorldFamilyWar.CheckPlayerJoinFamilyWarInfo(jionPlayer) #通知战盟红包信息 PlayerFamilyRedPacket.NotifyRedPacketInfo(jionPlayer) - #通知战盟BOSS开启信息 - PlayerFamilyBoss.NotifyFamilyBossFBInfo(jionPlayer) + #通知战盟BOSS + PlayerFamilyBoss.OnPlayerJionFamily(curFamily, jionPlayer) #通知家族仓库 PyDataManager.GetFamilyStoreItemManager().SyncFamilyStoreItem(jionPlayer, curFamily.GetID()) - - SetMemberFightPower(familyMember, jionPlayer.GetFightPower()) + #仙盟拍品 + AuctionHouse.Sync_FamilyAuctionItemInfo(jionPlayer, curFamily.GetID()) + SetMemberFightPower(familyMember, PlayerControl.GetFightPower(jionPlayer)) AddFamilyIDToFightPowerChangeList(curFamily.GetID()) #通知仙盟盛宴题目 PlayerFamilyParty.NotifyFamilyPartyQuestion(jionPlayer) #通知守卫人皇信息 PlayerFamilySWRH.NotifySWRHInfo(jionPlayer, curFamily.GetID()) + #通知仙盟协助信息 + PlayerAssist.SyncFamilyAssist(jionPlayer) #oss记录加入家族信息 DataRecordPack.DR_PlayerJoinFamily(jionPlayer, curFamily.GetID(), curFamily.GetName(), curFamily.GetCount()) return @@ -374,8 +501,6 @@ GameWorld.DebugLog(' 玩家战盟名变更处理, newFamilyName=%s' % familyName, playerID) #不处理排行榜 needChangeFamilyBillboardList = [ - #ShareDefine.Def_BT_MixCampaign_Recharge, # 累计充值(合服活动) - #ShareDefine.Def_BT_RechargeTeHui, # 充值特惠活动排行榜-当前期记录 ] billboardMgr = GameWorld.GetBillboard() for billboardIndex in needChangeFamilyBillboardList: @@ -478,6 +603,7 @@ # tagHead Head; # char Name[33]; # WORD FakeID; +# BYTE EmblemID; //选择徽章ID,解锁仙盟等级为1级的均为可选ID #}; ## 查看申请帮会的成员信息 # @param index 玩家索引 @@ -488,8 +614,9 @@ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) inputName = clientPack.Name fakeIndex = clientPack.FakeID + emblemID = clientPack.EmblemID #执行创建家族逻辑 - DoCreateFamily(curPlayer, inputName, fakeIndex, tick) + DoCreateFamily(curPlayer, inputName, fakeIndex, tick, emblemID) #重置查看家族状态(仅创建家族时候重置, 其余状态由MapServer退出事件时重置) __ClearViewFamilyState(curPlayer) #玩家离开事件 @@ -570,7 +697,7 @@ #=============================================================================================== return -def SendFamilyFakePack(familyID, clientPack): +def SendFamilyFakePack(familyID, clientPack, excludePlayerIDList=[]): ## 广播家族成员PY封包 family = GameWorld.GetFamilyManager().FindFamily(familyID) if not family: @@ -579,8 +706,11 @@ for index in xrange(family.GetCount()): member = family.GetAt(index) memPlayer = member.GetPlayer() - if memPlayer: - NetPackCommon.SendFakePack(memPlayer, clientPack) + if not memPlayer: + continue + if excludePlayerIDList and memPlayer.GetPlayerID() in excludePlayerIDList: + continue + NetPackCommon.SendFakePack(memPlayer, clientPack) return def Sync_PyAllFamilyInfo(curPlayer, allPageCnt, viewPage, startIndex, endIndex): @@ -622,6 +752,7 @@ totalFightPower = GetFamilyTotalFightPower(family) familyView.TotalFightPower = totalFightPower % ChConfig.Def_PerPointValue familyView.TotalFightPowerEx = totalFightPower / ChConfig.Def_PerPointValue + familyView.EmblemID = GetFamilyEmblemID(family) return familyView ## 玩家模糊查询家族,0F 0D封包 @@ -661,6 +792,60 @@ familyViewPack.Family.append(__GetFamilyView(i, family)) familyViewPack.PageCount = len(familyViewPack.Family) NetPackCommon.SendFakePack(curPlayer, familyViewPack) + return + +#// A4 12 搜索家族 #tagCGPySearchFamily +# +#struct tagCGPySearchFamily +#{ +# tagHead Head; +# BYTE MsgLen; //模糊搜索家族,如果输入为空,则为不限制该条件 +# char Msg[MsgLen]; //size = MsgLen +# BYTE LV; //最低家族等级,如果为0,则不限制该条件 +# BYTE MaxCount; //搜索结果所需最大条数,后端限制最多返回20条 +# BYTE IsSearching; //默认1,如果有指定其他值,则返回指定值 +#}; +def PySearchFamily(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + + msg = clientData.Msg + minFamilyLV = clientData.LV + maxCount = min(20, clientData.MaxCount) + IsSearching = clientData.IsSearching + + familyMgr = GameWorld.GetFamilyManager() + familyViewPack = ChPyNetSendPack.tagGCPyAllFamilyView() + familyViewPack.Clear() + familyViewPack.IsSearching = IsSearching + familyViewPack.TotalCount = 1 + #familyViewPack.CurPage = viewPage + familyViewPack.Family = [] + for i, familyID in enumerate(PyGameData.g_sortFamilyIDList): + family = familyMgr.FindFamily(familyID) + if not family: + continue + if msg not in family.GetName(): + continue + if minFamilyLV and family.GetLV() < minFamilyLV: + continue + familyViewPack.Family.append(__GetFamilyView(i, family)) + if len(familyViewPack.Family) >= maxCount: + break + familyViewPack.PageCount = len(familyViewPack.Family) + NetPackCommon.SendFakePack(curPlayer, familyViewPack) + return + +#// A4 13 修改家族徽章 #tagCGChangeFamilyEmblem +# +#struct tagCGChangeFamilyEmblem +#{ +# tagHead Head; +# BYTE EmblemID; // 更换的徽章ID +#}; +def OnChangeFamilyEmblem(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + changeEmblemID = clientData.EmblemID + PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID) return #class IPY_CFamilyChangeBroadcast @@ -706,7 +891,7 @@ pack = IPY_GameServer.IPY_CFamilyChangeBroadcast() #更改家族公告 curFamily.SetBroadcast(pack.GetMsg()) - + GameWorld.Log('更改仙盟公告 Family=%s,公告=%s'%(GameWorld.CodeToGBK(curFamily.GetName()), GameWorld.CodeToGBK(pack.GetMsg())), curPlayerID) #通知客户端家族信息改变 curFamily.Broadcast_FamilyChange() playerManager = GameWorld.GetPlayerManager() @@ -1151,10 +1336,11 @@ if pack_FamilyLv not in ChConfig.Def_Family_MemberLVList: GameWorld.Log("更改家族成员等级->封包异常->等级 = %s不存在" % (pack_FamilyLv), curPlayerID) return - if curMember.GetFamilyLV() != IPY_GameServer.fmlLeader: - if tagMember.GetFamilyLV() >= curMember.GetFamilyLV() or pack_FamilyLv >= curMember.GetFamilyLV(): - GameWorld.Log("更改家族成员等级->目标职位比自己的高或者对方的当前职位比自己高", curPlayerID) - return + if not isGMOP: + if curMember.GetFamilyLV() != IPY_GameServer.fmlLeader: + if tagMember.GetFamilyLV() >= curMember.GetFamilyLV() or pack_FamilyLv >= curMember.GetFamilyLV(): + GameWorld.Log("更改家族成员等级->目标职位比自己的高或者对方的当前职位比自己高", curPlayerID) + return familyID = curFamily.GetID() # 家族ID familyName = curFamily.GetName() # 家族名字 @@ -1203,7 +1389,10 @@ if tagMember.GetFamilyLV() != pack_FamilyLv: #XW_JZ_AppointFamily <n color="255,255,0">恭喜</n><n color="0,190,255">{%S1%}</n><n color="255,255,0">,被任命为{%S2%}!</n> 25 - - NotifyAllFamilyMemberMsg(curFamily, curPlayer, "XW_JZ_AppointFamily", [tagMember.GetName(), pack_FamilyLv]) - + if tagMember.GetFamilyLV() == IPY_GameServer.fmlViceLeader and tagMember.GetPlayerID() in PyGameData.g_autoViceleaderDict.get(familyID, []): + #自动安排的副盟主被撤职则该盟不再自动安排 + if familyID not in PyGameData.g_forbidAutoViceleaderFamily: + PyGameData.g_forbidAutoViceleaderFamily.append(familyID) #更改家族等级 ChangeFamilyMemberLv(tagMember, pack_FamilyLv) @@ -1221,7 +1410,8 @@ if GetFamilyMemberHasPow(tagMember, ChConfig.Def_PurviewDictKey_CanCall): tagPlayer.Sync_FamilyInfo() PlayerFamilyAction.ViewFamilyRequestInfo(tagPlayer) - + if isGMOP: + curFamily.SetBroadcast('') curFamily.Broadcast_FamilyChange() return True #--------------------------------------------------------------------- @@ -1362,6 +1552,15 @@ PlayerControl.NotifyCode(curPlayer, "DungeonGuardSkyText2") return + if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss): + PlayerControl.NotifyCode(curPlayer, "FairyGrabBossExitError") + return + if PlayerFamilyBoss.IsInAllFamilyBoss(): + PlayerControl.NotifyCode(curPlayer, "LeagueBOSSExitError1") + return + if AuctionHouse.IsFamilyMemberBiddingAuctionItem(curFamily.GetID(), tagMemberID): + PlayerControl.NotifyCode(curPlayer, "Paimai7") + return tagPlayerName = curTagMember.GetName() # 被踢玩家名 tagPlayerID = curTagMember.GetPlayerID() # 被踢玩家ID tagFamilyLV = curTagMember.GetFamilyLV() # 被踢玩家职位 @@ -1372,10 +1571,10 @@ PlayerFamilyAction.AddFamilyActionNote(tagPlayerName, curFamily.GetID(), ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_KickOut], tick) #删除玩家 - curFamily.DeleteMember(tagPlayerID) - __DoPlayerLeaveFamilyByID(curFamily, tagPlayerID) - + curFamily.DeleteMember(tagPlayerID) tagPlayer = playerManager.FindPlayerByID(tagMemberID) + + __DoPlayerLeaveFamilyByID(curFamily, tagPlayerID, tagPlayer) #玩家在线, 设置这个玩家的属性 PlayerForceLeaveFamily(tagPlayer, tick) @@ -1436,6 +1635,31 @@ if PlayerFamilySWRH.IsInFamilySWRH(): PlayerControl.NotifyCode(curPlayer, "DungeonGuardSkyText1") return + + if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss): + PlayerControl.NotifyCode(curPlayer, "FairyGrabBossExitError") + return + if PlayerFamilyBoss.IsInAllFamilyBoss(): + PlayerControl.NotifyCode(curPlayer, "LeagueBOSSExitError1") + return + if AuctionHouse.IsFamilyMemberBiddingAuctionItem(curFamily.GetID(), curMember.GetPlayerID()): + PlayerControl.NotifyCode(curPlayer, "Paimai8") + return + #判断退出时间间隔 + curTime = int(time.time()) + lastLeaveFamilyTime = PlayerControl.GetLeaveFamilyTime(curPlayer) + if lastLeaveFamilyTime > 100: + remainTime = IpyGameDataPY.GetFuncCfg('ExitFairyTime', 2) - (curTime - lastLeaveFamilyTime) + if remainTime > 0: + PlayerControl.NotifyCode(curPlayer, "ExitFairyTime", [remainTime*1000]) + return + updTime = 1 if IpyGameDataPY.GetFuncCfg('ExitFairyTime') > 1 else curTime + elif lastLeaveFamilyTime >= IpyGameDataPY.GetFuncCfg('ExitFairyTime')-1: + updTime = curTime + else: + updTime = lastLeaveFamilyTime+1 + PlayerControl.SetLeaveFamilyTime(curPlayer, updTime) + #XW_JZ_LeaveFamily <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n> 25 - - NotifyAllFamilyMemberMsg(curFamily, curPlayer, "XW_JZ_LeaveFamily", [curPlayer.GetName()]) @@ -1447,10 +1671,10 @@ curFamily.DeleteMember(curMember.GetPlayerID()) #玩家在线, 设置这个玩家的属性 PlayerForceLeaveFamily(curPlayer, tick) - __DoPlayerLeaveFamilyByID(curFamily, curPlayerID) + __DoPlayerLeaveFamilyByID(curFamily, curPlayerID, curPlayer) DataRecordPack.DR_PlayerLeaveFamily(curPlayer, curFamily.GetID(), curFamily.GetName(), curFamily.GetCount(), - familyLV, curPlayer.GetPlayerID(), curPlayer.GetName(), familyLV) + familyLV, curPlayer.GetPlayerID(), curPlayer.GetName(), familyLV, updTime) if curFamily.GetCount() == 0: #玩家离开后, 家族没有人了 , 删除这个家族 @@ -1465,11 +1689,16 @@ # @param curFamily 离开的家族 # @param leavePlayerID 离开的玩家ID # @return None -def __DoPlayerLeaveFamilyByID(curFamily, leavePlayerID): +def __DoPlayerLeaveFamilyByID(curFamily, leavePlayerID, tagPlayer=None): + PlayerCompensation.SendMailByKey("LeaveFamilyNotice", [leavePlayerID], []) PlayerFamilyAction.DelFamilyOfficerModelEquip(curFamily.GetID(), leavePlayerID) # 玩家战盟名变更处理 __OnFamilyNameChange(leavePlayerID, '') AddFamilyIDToFightPowerChangeList(curFamily.GetID()) + PlayerViewCache.OnPlayerFamilyChange(leavePlayerID, 0, "") + PlayerAssist.OnPlayerLeaveFamily(curFamily.GetID(), leavePlayerID, tagPlayer) + if leavePlayerID in PyGameData.g_autoViceleaderDict.get(curFamily.GetID(),[]): + PyGameData.g_autoViceleaderDict[curFamily.GetID()].remove(leavePlayerID) return #////////////////////////////////////////////////////////////// @@ -1588,8 +1817,10 @@ addFamilyMoney, curFamily.GetFamilyActiveValue(), addFamilyActiveValue) #通知客户端 - #curFamily.Broadcast_FamilyChange() - curPlayer.Sync_FamilyInfo() + if addFamilyHornor: + curFamily.Broadcast_FamilyChange() + else: + curPlayer.Sync_FamilyInfo() #金钱变更时才通知 if addFamilyMoney != 0: @@ -1732,7 +1963,6 @@ def PlayerForceLeaveFamily(curPlayer, tick): if curPlayer == None: return - #设置当天加入家族 GameWorld.GetPlayerManager().SetForbiddenEnterFamily(curPlayer.GetPlayerID(), True) # 通知map玩家不能参加家族活动 @@ -1747,6 +1977,8 @@ #弹劾信息封包 SendPackClientImpeachMsg(curPlayer, 0, 0) + PlayerTeam.OnTeamMemFamilyRefresh(curPlayer, 0) + return #--------------------------------------------------------------------- @@ -1779,6 +2011,7 @@ # @remarks 函数详细说明. def PlayerLoginRefreshFamily(curPlayer, tick): SyncFakeFamilyInfo(curPlayer) + SyncCreatFamilyTimes(curPlayer) familyID = curPlayer.GetFamilyID() curFamily = None @@ -1832,8 +2065,10 @@ if not PlayerControl.GetIsTJG(curPlayer): #上线重置离线时间为0, 非脱机挂才设置 - curMember.SetExattr2(0) + curMember.SetExattr2(0) # 在线0,脱机1,>1离线时间 curPlayer.Sync_FamilyInfo() + else: + curMember.SetExattr2(1) # 脱机1 curPlayer.MapServer_FamilyRefresh() curMember = GetPlayerFamilyMember(curPlayer) @@ -1849,6 +2084,37 @@ PlayerRefresh(curPlayer, tick) GameWorldFamilyWar.OnPlayerLogin(curFamily, curPlayer) + + # 盟主上线处理 + if curMember.GetFamilyLV() == IPY_GameServer.fmlLeader: + OnFamilyLeaderLogin(curPlayer, curFamily) + return + +def OnFamilyLeaderLogin(curPlayer, curFamily): + ## 盟主登录处理 + __DoFamilyMixServerLogicOnLeaderLogin(curPlayer, curFamily) + return + +def __DoFamilyMixServerLogicOnLeaderLogin(curPlayer, curFamily): + ## 合服仙盟盟主登录处理 + + isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) + if not isMixServer: + return + lastMixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_LastMixServerDay) + familyID = curFamily.GetID() + familyMixServerDay = GetFamilyMixServerDay(curFamily) + if familyMixServerDay == lastMixServerDay: + GameWorld.DebugLog("已经处理过仙盟盟主合服登录逻辑! lastMixServerDay=%s" % (lastMixServerDay), familyID) + return + SetFamilyMixServerDay(curFamily, lastMixServerDay) + GameWorld.Log("处理合服仙盟盟主登录! lastMixServerDay=%s" % (lastMixServerDay), familyID) + + mailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 4) + playerID = curPlayer.GetPlayerID() + detailDict = {} + GameWorld.Log(" 发送合服盟主专属补偿邮件! familyID=%s,mailItemList=%s" % (familyID, mailItemList), playerID) + PlayerCompensation.SendMailByKey("MixServer2", [playerID], mailItemList, detail=detailDict) return #--------------------------------------------------------------------- ## 玩家下线家族刷新逻辑 @@ -1890,6 +2156,8 @@ curMember.SetJob(curPlayer.GetJob()) curMember.SetOperateInfo(curPlayer.GetOperateInfo()) curMember.SetOfficialRank(curPlayer.GetOfficialRank()) + curMember.SetFace(curPlayer.GetFace()) + curMember.SetFacePic(curPlayer.GetFacePic()) return #--------------------------------------------------------------------- ## 玩家刷新 @@ -2243,6 +2511,7 @@ #上面已经验证过了,家族肯定存在的 curFamily = curPlayer.GetFamily() curFamilyID = curFamily.GetID() + curPlayerID = curPlayer.GetID() # curFamilyTrig = PlayerDBGSEvent.FindDBGSTrig_ByEventID(curFamilyID , PlayerDBGSEvent.Def_Key_RenameFamily) # # if not curFamilyTrig: @@ -2277,20 +2546,20 @@ curMemberID = curMember.GetPlayerID() __OnFamilyNameChange(curMemberID, familyName) memberIDList.append(curMemberID) - curPlayer = playerManager.FindPlayerByID(curMemberID) + player = playerManager.FindPlayerByID(curMemberID) #玩家不在线 - if not curPlayer: + if not player: continue - curPlayerMapID = GameWorld.GetQueryPlayerMapID(curPlayer) + curPlayerMapID = GameWorld.GetQueryPlayerMapID(player) if not curPlayerMapID: continue - msgStr = str([curPlayer.GetPlayerID(), familyName]) + msgStr = str([curPlayerID, familyName]) playerManager.MapServer_QueryPlayer(0, 0, curMemberID, curPlayerMapID, 'FamilyNameRefresh', msgStr, len(msgStr), - curPlayer.GetRouteServerIndex()) + player.GetRouteServerIndex()) PlayerCompensation.SendMailByKey('FamilyNameChange', memberIDList, [], [oldName, familyName]) PlayerControl.WorldNotify(0, 'Family_ChangeName', [oldName, familyName]) @@ -2452,13 +2721,13 @@ familyMoney = family.GetMoney() - useMoney = GetFamilySetting(family, ChConfig.Def_FamilySetting_SystemLostMoney) - - #家族资金不足, 解散 - if familyMoney < useMoney: - family.SetMoney(0) - delFamilyList.append(family) - continue +# useMoney = GetFamilySetting(family, ChConfig.Def_FamilySetting_SystemLostMoney) +# +# #家族资金不足, 解散 +# if familyMoney < useMoney: +# family.SetMoney(0) +# delFamilyList.append(family) +# continue #多久没人上线,解散 offlineDay = GetLastOnlineMemberOfflineTime(family) GameWorld.DebugLog(' 仙盟%s %s天没人上线了'%(family.GetID(), offlineDay)) @@ -2474,12 +2743,10 @@ ChConfig.Def_Family_ClearRequestAddNote_Day) #此处不通知地图服务器家族资金变更 - family.SetMoney(familyMoney - useMoney) - if useMoney > 0: - #帮会日常维持消耗{%S1%}银两帮会资金 - PlayerControl.FamilyNotify(family.GetID(), 'jiazu_lhs_272921', [useMoney]) - #自动传位 - __AutoChangeLeader(family) +# family.SetMoney(familyMoney - useMoney) +# if useMoney > 0: +# #帮会日常维持消耗{%S1%}银两帮会资金 +# PlayerControl.FamilyNotify(family.GetID(), 'jiazu_lhs_272921', [useMoney]) #通知客户端刷新 family.Broadcast_FamilyChange() @@ -2499,6 +2766,15 @@ __SetFamilyActivityDayStateValue(0) return +def FamilyOnDayEx(tick): + familyManager = GameWorld.GetFamilyManager() + for i in range(0, familyManager.GetCount()): + family = familyManager.GetAt(i) + #仙盟boss + PlayerFamilyBoss.FamilyBossFBOnDayEx(family) + #珍宝阁 + PlayerFamilyZhenbaoge.OnDayEx(family) + return #--------------------------------------------------------------------- ##家族过周 @@ -2520,6 +2796,12 @@ SetFamilyBroadcastCnt(family, 0) #清除本周任务已获得资金数量 SetCurWeekMissionMoney(family, 0) + for j in xrange(family.GetCount()): + member = family.GetAt(j) + #原先是地图玩家上线后重置,导致玩家不上线周贡献显示之前的,固在此重置 + member.SetFamilyActiveValue(0) + + #通知地图服务器刷新家族属性 SendPack_MapServer_PlayerFamilyRefresh(family) #oss记录上周家族信息 @@ -2527,9 +2809,79 @@ DataRecordPack.DR_FamilyActiveValueByOnWeek(familyID, family.GetName(), familyActiveValue) #清除家族boss副本信息 - PlayerFamilyBoss.FamilyBossFBOnWeek(familyID) + PlayerFamilyBoss.FamilyBossFBOnWeek(family) return + +def FamilyOnHour(): + familyManager = GameWorld.GetFamilyManager() + for i in xrange(familyManager.GetCount()): + family = familyManager.GetAt(i) + #自动传位 + __AutoChangeLeader(family) + + __AutoChangeFamilyJobLV(family) + return + +def __AutoChangeFamilyJobLV(family): + ##开服2天内新创建的仙盟,系统自动为仙盟安排两位副盟主 + familyID = family.GetID() + openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + if openServerDay >= IpyGameDataPY.GetFuncCfg('FairyFMZ'): + #GameWorld.DebugLog('自动为仙盟安排两位副盟主 开服天超过 familyID=%s'%familyID) + return + + if familyID in PyGameData.g_forbidAutoViceleaderFamily: + #GameWorld.DebugLog('自动为仙盟安排两位副盟主 被禁止 familyID=%s'%familyID) + return + createTime = family.GetCreateTime() + pastHour = GameWorld.GetPastHour(createTime) + if pastHour < IpyGameDataPY.GetFuncCfg('FairyFMZ', 2): + #GameWorld.DebugLog('自动为仙盟安排两位副盟主 建盟未超过X小时 familyID=%s,pastHour=%s'%(familyID, pastHour)) + return + if (pastHour - IpyGameDataPY.GetFuncCfg('FairyFMZ', 2)) % IpyGameDataPY.GetFuncCfg('FairyFMZ', 3) != 0: + GameWorld.DebugLog('自动为仙盟安排两位副盟主 间隔没到 familyID=%s,pastHour=%s'%(familyID, pastHour)) + return + + tofmlv = IPY_GameServer.fmlViceLeader + viceLeaderCnt = 0 #副盟主数量 + changeMemberList = [] + for i in xrange(family.GetCount()): + familyMember = family.GetAt(i) + if familyMember.GetFamilyLV() == tofmlv: + viceLeaderCnt += 1 + continue + if familyMember.GetFamilyLV() < tofmlv: + changeMemberList.append(familyMember) + + maxCnt = GetFamilySetting(family, ChConfig.Def_FamilyPowLvChangeFamilySettingDict[tofmlv]) + #GameWorld.DebugLog('自动为仙盟安排两位副盟主 familyID=%s,viceLeaderCnt=%s,changeMemberList=%s'%(familyID, viceLeaderCnt, changeMemberList)) + if viceLeaderCnt >= maxCnt or not changeMemberList: + return + + if familyID not in PyGameData.g_autoViceleaderDict: + PyGameData.g_autoViceleaderDict[familyID] = [] + + changeMemberList.sort(cmp=CmpAutoMemberSort) + for i, member in enumerate(changeMemberList): + if viceLeaderCnt + i >= maxCnt: + break + ChangeFamilyMemberLv(member, tofmlv) + playerID = member.GetPlayerID() + if playerID not in PyGameData.g_autoViceleaderDict[familyID]: + PyGameData.g_autoViceleaderDict[familyID].append(playerID) + GameWorld.Log('自动为仙盟安排副盟主 familyID=%s,playerID=%s'%(familyID, playerID)) + + return + +def CmpAutoMemberSort(member1, member2): + ## 排序规则: 等级>战力>入盟先后 + ret = -cmp(member1.GetLV(), member2.GetLV()) + if ret == 0: + ret = -cmp(GetMemberFightPower(member1), GetMemberFightPower(member2)) + if ret == 0: + return cmp(GetMemberJoinTime(member1), GetMemberJoinTime(member2)) + return ret #--------------------------------------------------------------------- ##通知地图服务器, 玩家家族属性刷新 @@ -2575,7 +2927,7 @@ GameWorld.ErrLog("key = %s not in tagFamily.txt" % familyLv) return 0 keyStr = ChConfig.FamilySettingDict[index] - return getattr(curFamilyLvSetting, keyStr) + return getattr(curFamilyLvSetting, "Get%s" % keyStr)() #=============================================================================== @@ -2649,16 +3001,15 @@ return 0 leaderID = curFamily.GetLeaderID() - # 帮主在线 - if GameWorld.GetPlayerManager().FindPlayerByID(leaderID) != None: - return 0 curMember = curFamily.FindMember(leaderID) if curMember == None: GameWorld.Log("GetLeaderOfflineTime->FindMember, None;%s" % leaderID) return 0 - - offLineTime = GameWorld.ChangeTimeNumToStr(curMember.GetExattr2()) + offLineTimeNum = curMember.GetExattr2() + if not offLineTimeNum or offLineTimeNum == 1: + return 0 + offLineTime = GameWorld.ChangeTimeNumToStr(offLineTimeNum) return GameWorld.GetPastHour(offLineTime) def GetLastOnlineMemberOfflineTime(family): @@ -2666,17 +3017,14 @@ offLineTime = 0 for i in range(0, family.GetCount()): member = family.GetAt(i) - playerID = member.GetPlayerID() - tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) - if tagPlayer: - return 0 - if not member.GetExattr2(): + offLineTimeNum = member.GetExattr2() + if not offLineTimeNum or offLineTimeNum == 1: #有人在线直接返回 return 0 if not offLineTime: - offLineTime = member.GetExattr2() + offLineTime = offLineTimeNum else: - offLineTime = max(offLineTime, member.GetExattr2()) + offLineTime = max(offLineTime, offLineTimeNum) if not offLineTime: return 0 offLineTime = GameWorld.ChangeTimeNumToStr(offLineTime) @@ -2686,7 +3034,7 @@ '''自动传位''' # 获得帮主下线了多久(小时) leaderOffLineTime = GetLeaderOfflineTime(curFamily) - GameWorld.DebugLog('帮主下线了%s小时'%leaderOffLineTime) + GameWorld.DebugLog('帮主下线了%s小时'%leaderOffLineTime, curFamily.GetID()) if leaderOffLineTime < IpyGameDataPY.GetFuncCfg('AutoChangeLeader'): return @@ -2705,7 +3053,7 @@ elif toMember2.GetExattr1() < member.GetExattr1(): toMember2 = member - offLineHour = GameWorld.GetPastHour(GameWorld.ChangeTimeNumToStr(member.GetExattr2())) if member.GetExattr2() else 0 + offLineHour = GameWorld.GetPastHour(GameWorld.ChangeTimeNumToStr(member.GetExattr2())) if member.GetExattr2() > 1 else 0 #GameWorld.DebugLog('memberID=%s 离线%s小时,历史贡献度%s'%(member.GetPlayerID(), offLineHour, member.GetExattr1())) if offLineHour < 48: if not toMember1: @@ -3073,17 +3421,6 @@ PlayerFamilyAction.ViewFamilyRequestInfo(curPlayer) return - -## 开启家族boss副本 -# @param index 玩家索引 -# @param clientData 封包数据结构体 -# @param tick 时间戳 -# @return None -def OpenFamilyBossFB(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - fbMapID = clientData.MapID - PlayerFamilyBoss.OpenFamilyBossFB(curPlayer, tick) - return #=============================================================================== # //A4 06 变更家族成员加入审核方式#tagCGChangeFamilyAcceptJoinType #struct tagCGChangeFamilyAcceptJoinType @@ -3290,32 +3627,6 @@ return 0 -def UpdFamilyWarRank(): - '''更新仙盟联赛排名 - 注意:该逻辑在仙盟联赛周期中不可执行,仅在下周分组定级状态下可更新 - 仙盟联赛新一周期开始时、仙盟解散时 会触发该逻辑 - ''' - gameWorld = GameWorld.GetGameWorld() - state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar) - if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank: - GameWorld.DebugLog("非下周分组定级阶段不可更新仙盟联赛排名!") - return - - familyMgr = GameWorld.GetFamilyManager() - sortFamilyIDList = GetSortFamilyIDList() - for rank, familyID in enumerate(sortFamilyIDList, 1): - family = familyMgr.FindFamily(familyID) - if not family: - continue - curRank = GetFamilyWarRank(family) - if not curRank: - break - if curRank != rank: - SetFamilyWarRank(family, rank) - GameWorld.Log("更新仙盟联赛仙盟排名: familyID=%s,rank=%s" % (family.GetID(), rank)) - - return - #// A4 11 一键申请入盟 #tagCGOneKeyJoinFamily # #struct tagCGOneKeyJoinFamily @@ -3331,7 +3642,8 @@ requestPlayerName = curPlayer.GetName() playerLV = curPlayer.GetLV() #玩家Id, 等级,职业,战斗力 - actionDataList = [curPlayer.GetID(), playerLV, curPlayer.GetJob(), curPlayer.GetFightPower()] + fightPower = PlayerControl.GetFightPower(curPlayer) + actionDataList = [curPlayer.GetID(), playerLV, curPlayer.GetJob(), fightPower % ChConfig.Def_PerPointValue, fightPower / ChConfig.Def_PerPointValue] allFamilyActionManager = GameWorld.GetFamilyActionManager() familyManager = GameWorld.GetFamilyManager() indexList = range(familyManager.GetCount()) @@ -3386,3 +3698,113 @@ PlayerControl.NotifyCode(curPlayer, "jiazu_pan_500807") return + +##--------------------------------------- 仙盟传功 -------------------------------------------------- +def MapServer_FamilyChuangong(curPlayer, msgList): + msgType, msgData = msgList + + if msgType == "Invite": + tagPlayerID = msgData[0] + __DoChuangong_Invite(curPlayer, tagPlayerID) + return + + if msgType == "Response": + tagPlayerID, isOK = msgData + __DoChuangong_Response(curPlayer, tagPlayerID, isOK) + return + + return + +def __CheckChuangongPlayer(curPlayer, tagPlayerID): + curFamily = curPlayer.GetFamily() + if not curFamily: + return + tagMember = curFamily.FindMember(tagPlayerID) + if not tagMember: + GameWorld.DebugLog("非盟友无法传功! tagPlayerID=%s" % tagPlayerID, curPlayer.GetPlayerID()) + return + tagPlayer = tagMember.GetPlayer() + if not tagPlayer: + PlayerControl.NotifyCode(curPlayer, "FairyFeastPlayerOffline") + return + return tagPlayer + +def __DoChuangong_Invite(curPlayer, tagPlayerID): + ## 邀请 + playerID = curPlayer.GetPlayerID() + tagPlayer = __CheckChuangongPlayer(curPlayer, tagPlayerID) + if not tagPlayer: + return + invitePlayerIDList = PyGameData.g_chuangongPlayerDict.get(playerID, []) + if tagPlayerID not in invitePlayerIDList: + invitePlayerIDList.append(tagPlayerID) + PyGameData.g_chuangongPlayerDict[playerID] = invitePlayerIDList + clientPack = ChPyNetSendPack.tagGCChuangongInviteInfo() + clientPack.Clear() + clientPack.PlayerID = curPlayer.GetPlayerID() + clientPack.Name = curPlayer.GetName() + clientPack.NameLen = len(clientPack.Name) + clientPack.LV = curPlayer.GetLV() + clientPack.Job = curPlayer.GetJob() + clientPack.RealmLV = curPlayer.GetOfficialRank() + clientPack.Face = curPlayer.GetFace() + clientPack.FacePic = curPlayer.GetFacePic() + NetPackCommon.SendFakePack(tagPlayer, clientPack) + GameWorld.DebugLog("邀请传功: tagPlayerID=%s, %s" % (tagPlayerID, PyGameData.g_chuangongPlayerDict), playerID) + return + +def __DoChuangong_Response(curPlayer, tagPlayerID, isOK): + ## 相应 + playerID = curPlayer.GetPlayerID() + tagPlayer = __CheckChuangongPlayer(curPlayer, tagPlayerID) + if not tagPlayer: + return + invitePlayerIDList = PyGameData.g_chuangongPlayerDict.get(tagPlayerID, []) + if not isOK: + if playerID in invitePlayerIDList: + invitePlayerIDList.remove(playerID) + PyGameData.g_chuangongPlayerDict[tagPlayerID] = invitePlayerIDList + GameWorld.DebugLog("拒绝传功: tagPlayerID=%s, %s" % (tagPlayerID, PyGameData.g_chuangongPlayerDict), playerID) + return + if not invitePlayerIDList: + PlayerControl.NotifyCode(curPlayer, "TagHadFinishChuangong") + return + if playerID not in invitePlayerIDList: + GameWorld.DebugLog("不在对方邀请列表了,无法传功: tagPlayerID=%s, %s" % (tagPlayerID, invitePlayerIDList), playerID) + return + PyGameData.g_chuangongPlayerDict.pop(tagPlayerID) + + # 通知双方开始传功 + __NotifyChuangongStart(curPlayer, tagPlayer) + __NotifyChuangongStart(tagPlayer, curPlayer) + return + +def __NotifyChuangongStart(curPlayer, tagPlayer): + clientPack = ChPyNetSendPack.tagGCChuangongStart() + clientPack.Clear() + clientPack.PlayerID = tagPlayer.GetPlayerID() + clientPack.Name = tagPlayer.GetName() + clientPack.NameLen = len(clientPack.Name) + clientPack.LV = tagPlayer.GetLV() + clientPack.Job = tagPlayer.GetJob() + clientPack.RealmLV = tagPlayer.GetOfficialRank() + NetPackCommon.SendFakePack(curPlayer, clientPack) + return + +##-------------------------------------------------------------------------------------------------- + +def GetFamilyBillboardInfo(curFamily): + ## 获取仙盟榜单信息 区服ID、徽章、仙盟名、盟主名、仙盟总战力、仙盟等级 + familyID = curFamily.GetID() + name = curFamily.GetName() + id2 = curFamily.GetLeaderID() + name2 = curFamily.GetLeaderName() + fightPower = GetFamilyTotalFightPower(curFamily) + value1 = fightPower / ChConfig.Def_PerPointValue + value2 = fightPower % ChConfig.Def_PerPointValue + value3 = GetFamilyEmblemID(curFamily) + value4 = curFamily.GetLV() + value5 = curFamily.GetServerID() + return {"id":familyID, "name":name, "id2":id2, "name2":name2, "value1":value1, "value2":value2, + "value3":value3, "value4":value4, "value5":value5} + -- Gitblit v1.8.0