| | |
| | | BYTE ShowType; //0-服务端通知,>0前端处理
|
| | | };
|
| | |
|
| | | //副本鼓舞表
|
| | |
|
| | | struct tagFbEncourage
|
| | | {
|
| | | DWORD _DataMapID; //地图ID
|
| | | BYTE _InspireType; //鼓舞类型
|
| | | WORD InspireMaxLV; //鼓舞等级限制
|
| | | char MoneyCount; //单次消耗金钱数量
|
| | | };
|
| | |
|
| | | //地图标试点NPC刷新
|
| | |
|
| | | struct tagMapRefreshNPC
|
| | |
| | | BYTE _Type; //按装备位对应类型查找
|
| | | BYTE _Star; // 装备星数
|
| | | WORD LevelMax; //洗练等级上限
|
| | | };
|
| | |
|
| | | //副本Buff表
|
| | |
|
| | | struct tagFBBuyBuff
|
| | | {
|
| | | DWORD _MapId; //
|
| | | WORD _MoneyCnt; //仙玉数量
|
| | | DWORD BuffID; //BuffID
|
| | | WORD BuffCD; //间隔时间s
|
| | | };
|
| | |
|
| | | //技能升级表
|
| | |
| | | PacketSubCMD_10=
|
| | | PacketCallFunc_10=
|
| | |
|
| | | PacketCMD_11=0xB1
|
| | | PacketSubCMD_11=0x0A
|
| | | PacketCallFunc_11=OnFBBuyBuff
|
| | | PacketCMD_11=
|
| | | PacketSubCMD_11=
|
| | | PacketCallFunc_11=
|
| | |
|
| | | PacketCMD_12=0xA2
|
| | | PacketSubCMD_12=0x31
|
| | |
| | | Def_SkillID_Teleport = 1400 #瞬间移动 用于不影响攻击间隔
|
| | | Def_SkillID_VipBuff = 11500 # VIPbuff
|
| | | Def_SkillID_TeamVIPBuff = 22000 # VIP队伍buff, 攻守同盟
|
| | | Def_SkillID_FBEncourageBuff = 20051 # 副本鼓舞buff
|
| | | Def_SkillID_PoisonAtkBuff = 25180 # 毒攻buff
|
| | | Def_SkillID_DropOwnerBuff = 20040 # 掉落归属buff
|
| | | Def_SkillID_TianxuanBuff = 5100 # 天玄丹特殊掉落buff
|
| | |
| | | Def_Cost_BuyPack, # 购买背包格子
|
| | | Def_Cost_UseSpeaker, # 喇叭发言
|
| | | Def_Cost_Revive, # 复活
|
| | | Def_Cost_FBEncourage, # 副本鼓舞 5
|
| | | Def_Cost_5, # 副本鼓舞 5
|
| | | Def_Cost_GoldInvest, # 理财投资
|
| | | Def_Cost_Pray, # 祈祷
|
| | | Def_Cost_RecoverGain, # 资源找回
|
| | |
| | | Def_Cost_MysteryShopRefresh, # 神秘商店刷新
|
| | | Def_Cost_AuctionBid, # 拍卖行竞价
|
| | | Def_Cost_BuyDailyActionCnt, # 购买活动次数 45
|
| | | Def_Cost_FBBuyBuff, # 副本买buff
|
| | | Def_Cost_46, # 副本买buff
|
| | | Def_Cost_CreatFamily, # 创建仙盟
|
| | | Def_Cost_BuyKillBossCnt, #购买boss次数
|
| | | Def_Cost_EquipStar, #装备升星
|
| | |
| | | Def_Cost_Unknown, "GMSetMoney", "Warehouse", Def_Cost_AuctionBid]
|
| | |
|
| | | # 可在跨服中消费的类型列表
|
| | | MergeServerCanCostType = [Def_Cost_UseSpeaker, Def_Cost_Revive, Def_Cost_FBEncourage]
|
| | | MergeServerCanCostType = [Def_Cost_UseSpeaker, Def_Cost_Revive]
|
| | | #内部仙玉不能用的消费类型列表
|
| | | UnUseInner_CostType = [Def_Cost_BourseBuy, Def_Cost_FamilyRedPacket, Def_Cost_AuctionBid]
|
| | | # 消费类型对应信息字典{消费类型:[eventName, 中文说明reason_name, 发送给9377的数据是否分消费子类], }
|
| | |
| | | Def_Cost_BuyPack:"BuyPack",
|
| | | Def_Cost_UseSpeaker:"UseSpeaker",
|
| | | Def_Cost_Revive:"Revive",
|
| | | Def_Cost_FBEncourage:"FBEncourage",
|
| | | Def_Cost_RefreshArrestTask:"RefreshArrestTask",
|
| | | Def_Cost_RefreshTimeShop:"RefreshTimeShop",
|
| | | Def_Cost_ResetGreatMasterSkill:"ResetTalentSkill",
|
| | |
| | | Def_Cost_MysteryShopRefresh:"MysteryShopRefresh",
|
| | | Def_Cost_AuctionBid:"AuctionBid",
|
| | | Def_Cost_BuyDailyActionCnt:"BuyDailyActionCnt",
|
| | | Def_Cost_FBBuyBuff:"FBBuyBuff",
|
| | | Def_Cost_CreatFamily:"CreatFamily",
|
| | | Def_Cost_BuyKillBossCnt:"BuyKillBossCnt",
|
| | | Def_Cost_EquipStar:"EquipStar",
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 0A 副本购买buff #tagCMFBBuyBuff
|
| | |
|
| | | class tagCMFBBuyBuff(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("MapID", c_int), |
| | | ("MoneyCnt", c_ushort), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x0A
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x0A
|
| | | self.MapID = 0
|
| | | self.MoneyCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCMFBBuyBuff)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 0A 副本购买buff //tagCMFBBuyBuff:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | MapID:%d,
|
| | | MoneyCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.MapID,
|
| | | self.MoneyCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMFBBuyBuff=tagCMFBBuyBuff()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFBBuyBuff.Cmd,m_NAtagCMFBBuyBuff.SubCmd))] = m_NAtagCMFBBuyBuff
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 08 快速一键过关副本 #tagCMFBQuickPass
|
| | |
|
| | | class tagCMFBQuickPass(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
|
| | |
|
| | | class tagMCFBEncourageCnt(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MoneyType", c_ubyte), # 金钱类型
|
| | | ("EncourageCnt", c_ubyte), # 当前鼓舞次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.MoneyType = 0
|
| | | self.EncourageCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFBEncourageCnt)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//A3 0A 副本鼓舞信息通知 //tagMCFBEncourageInfo:
|
| | | MoneyType:%d,
|
| | | EncourageCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.MoneyType,
|
| | | self.EncourageCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCFBEncourageInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)// |
| | | InfoList = list() #(vector<tagMCFBEncourageCnt> InfoList)// 次数信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x0A
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Cnt):
|
| | | temInfoList = tagMCFBEncourageCnt()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x0A
|
| | | self.Cnt = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Cnt)
|
| | | for i in range(self.Cnt):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Cnt:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFBEncourageInfo=tagMCFBEncourageInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBEncourageInfo.Head.Cmd,m_NAtagMCFBEncourageInfo.Head.SubCmd))] = m_NAtagMCFBEncourageInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 04 玩家扫荡信息 #tagMCFBWipeOutData
|
| | |
|
| | | class tagMCFBData(Structure):
|
| | |
| | |
|
| | | m_NAtagMCAddXianyuanCoinMsg=tagMCAddXianyuanCoinMsg()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCAddXianyuanCoinMsg.Head.Cmd,m_NAtagMCAddXianyuanCoinMsg.Head.SubCmd))] = m_NAtagMCAddXianyuanCoinMsg
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B2 15 副本买buff信息通知 #tagMCFBBuyBuffInfo
|
| | |
|
| | | class tagMCFBBuyBuffTime(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MapID", c_int), |
| | | ("MoneyCnt", c_ushort), |
| | | ("BuyTime", c_int), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.MapID = 0
|
| | | self.MoneyCnt = 0
|
| | | self.BuyTime = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCFBBuyBuffTime)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B2 15 副本买buff信息通知 //tagMCFBBuyBuffInfo:
|
| | | MapID:%d,
|
| | | MoneyCnt:%d,
|
| | | BuyTime:%d
|
| | | '''\
|
| | | %(
|
| | | self.MapID,
|
| | | self.MoneyCnt,
|
| | | self.BuyTime
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCFBBuyBuffInfo(Structure):
|
| | | Head = tagHead()
|
| | | Cnt = 0 #(BYTE Cnt)
|
| | | InfoList = list() #(vector<tagMCFBBuyBuffTime> InfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x15
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Cnt):
|
| | | temInfoList = tagMCFBBuyBuffTime()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB2
|
| | | self.Head.SubCmd = 0x15
|
| | | self.Cnt = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Cnt):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Cnt)
|
| | | for i in range(self.Cnt):
|
| | | data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Cnt:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Cnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCFBBuyBuffInfo=tagMCFBBuyBuffInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFBBuyBuffInfo.Head.Cmd,m_NAtagMCFBBuyBuffInfo.Head.SubCmd))] = m_NAtagMCFBBuyBuffInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | return False
|
| | |
|
| | |
|
| | | ## 副本行为 - 鼓舞buff
|
| | | # @param curPlayer 玩家
|
| | | # @param key 副本玩家字典key
|
| | | # @param encourageType 金钱类型
|
| | | # @param tick 当前时间
|
| | | # @param isMaxlv 是否直接满级
|
| | | # @return None
|
| | | def FbEncourageBuff(curPlayer, key, encourageType, tick, ownerID=0):
|
| | | #GameWorld.Log("FbEncourageBuff moneyType=%s" % (moneyType))
|
| | | curMapID = curPlayer.GetMapID()
|
| | | curMapID = GetRecordMapID(curMapID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('FbEncourage', curMapID, encourageType)
|
| | | if not ipyData:
|
| | | return
|
| | | maxCnt = ipyData.GetInspireMaxLV()
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | ownerID = ownerID or curPlayer.GetID()
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
|
| | | encourageCntKey = 'FbEncourageCnt_%s' % encourageType
|
| | | encourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey)
|
| | | maxLV = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 2, {}).get(curMapID, 0)
|
| | | if encourageLV >= maxLV:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_93643")
|
| | | return
|
| | | if encourageCnt >= maxCnt:
|
| | | if encourageType == IPY_GameWorld.TYPE_Price_Silver_Money:
|
| | | PlayerControl.NotifyCode(curPlayer, "Xjmj_CopperInspireFull")
|
| | | else:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_93643")
|
| | | return
|
| | | |
| | | encourageCost = eval(ipyData.GetMoneyCount())
|
| | | |
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, encourageType, encourageCost)
|
| | | if not costMoneyList:
|
| | | return
|
| | | |
| | | # 扣除鼓舞消耗
|
| | | infoDict = {"MapID":curMapID}
|
| | | for moneyType, moneyCnt in costMoneyList:
|
| | | if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_FBEncourage, infoDict):
|
| | | return
|
| | | buffTypeID = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 1, {}).get(curMapID, ChConfig.Def_SkillID_FBEncourageBuff)
|
| | | skillBuffID = buffTypeID + encourageLV
|
| | | skillBuff = GameWorld.GetGameData().GetSkillBySkillID(skillBuffID)
|
| | | if not skillBuff:
|
| | | GameWorld.Log("FbEncourageBuff 找不到技能%s" % skillBuffID)
|
| | | return
|
| | | |
| | | buffType = SkillCommon.GetBuffType(skillBuff)
|
| | | |
| | | gameFB.SetPlayerGameFBDict(ownerID, key, encourageLV+1)
|
| | | gameFB.SetPlayerGameFBDict(ownerID, encourageCntKey, encourageCnt+1)
|
| | | #GameWorld.Log("FbEncourageBuff encourage nextLV=%s success" % encourageLV)
|
| | | addHurtNum = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 3, {}).get(curMapID, 0)
|
| | | if curMapID == ChConfig.Def_FBMapID_AllFamilyBoss:
|
| | | #给副本里所有盟成员提示
|
| | | playerManager = GameWorld.GetMapCopyPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | player = playerManager.GetPlayerByIndex(index)
|
| | | if not player:
|
| | | continue
|
| | | if player.GetFamilyID() != ownerID:
|
| | | continue
|
| | | BuffSkill.DoAddBuff(player, buffType, skillBuff, tick)
|
| | | PlayerControl.NotifyCode(player, "AllianceBossText2", [curPlayer.GetName(), encourageLV+1])
|
| | | SendFBEncourageInfo(player, encourageLV+1, ownerID)
|
| | | if player.GetID() == curPlayer.GetID():
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
|
| | | |
| | | else:
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_628920", [(encourageLV+1)*addHurtNum])
|
| | | SendFBEncourageInfo(curPlayer, encourageLV+1, ownerID)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
|
| | | return True
|
| | |
|
| | | ## 添加副本鼓舞buff,一般用于玩家掉线后,在规定时间内重新上线回到副本时重新上buff
|
| | | # @param curPlayer 玩家
|
| | | # @param key 副本玩家字典key
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def AddFbEncourageBuff(curPlayer, key, tick, ownerID=0):
|
| | | curPlayerID = curPlayer.GetID()
|
| | | GameWorld.Log("AddFbEncourageBuff() curPlayerID=%s" % curPlayerID)
|
| | | ownerID = ownerID or curPlayer.GetID()
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
|
| | | if not encourageLV:
|
| | | return
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | mapID = GetRecordMapID(mapID)
|
| | | buffTypeID = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 1, {}).get(mapID, ChConfig.Def_SkillID_FBEncourageBuff)
|
| | | skillBuffID = buffTypeID + encourageLV -1
|
| | | skillBuff = GameWorld.GetGameData().GetSkillBySkillID(skillBuffID)
|
| | | if not skillBuff:
|
| | | GameWorld.Log("FbEncourageBuff 找不到技能%s" % skillBuffID)
|
| | | return
|
| | | |
| | | buffType = SkillCommon.GetBuffType(skillBuff)
|
| | | BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
|
| | | |
| | | SendFBEncourageInfo(curPlayer, encourageLV, ownerID)
|
| | | return
|
| | |
|
| | | ## 清除鼓舞buff
|
| | | # @param curPlayer 玩家
|
| | | # @param tick 当前时间
|
| | | # @return True - 清除成功 ; False - 无该buff
|
| | | def ClearEncourageBuff(curPlayer, tick):
|
| | | for buffTypeID in list(set(IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 1, {}).values())):
|
| | | if BuffSkill.DelBuffBySkillID(curPlayer, buffTypeID, tick):
|
| | | playerControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playerControl.RefreshPlayerAttrByBuff()
|
| | | GameWorld.Log("ClearEncourageBuff() True")
|
| | | return True
|
| | | GameWorld.Log("ClearEncourageBuff() False")
|
| | | return False
|
| | |
|
| | | ## 发送副本鼓舞信息
|
| | | # @param curPlayer 玩家
|
| | | # @return None
|
| | | def SendFBEncourageInfo(curPlayer, lv, ownerID=0):
|
| | | #//A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
|
| | | curMapID = curPlayer.GetMapID()
|
| | | curMapID = GetRecordMapID(curMapID)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('FbEncourage', {'DataMapID':curMapID}, True)
|
| | | if not ipyDataList:
|
| | | return
|
| | | encourageInfo = ChPyNetSendPack.tagMCFBEncourageInfo()
|
| | | encourageInfo.Clear()
|
| | | encourageInfo.InfoList = []
|
| | | encourageCntKey = 'FbEncourageCnt_%s'
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | ownerID = ownerID or curPlayer.GetID()
|
| | | for ipyData in ipyDataList:
|
| | | inspireType = ipyData.GetInspireType()
|
| | | packData = ChPyNetSendPack.tagMCFBEncourageCnt()
|
| | | packData.MoneyType = inspireType
|
| | | packData.EncourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey % inspireType)
|
| | | encourageInfo.InfoList.append(packData)
|
| | | encourageInfo.Cnt = len(encourageInfo.InfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, encourageInfo)
|
| | | return
|
| | |
|
| | | ## 获取玩家所在副本区域福利倍值
|
| | | # @param curPlayer 玩家
|
| | | # @return 倍值-默认为1
|
| | |
| | | ("BYTE", "ShowType", 0),
|
| | | ),
|
| | |
|
| | | "FbEncourage":(
|
| | | ("DWORD", "DataMapID", 1),
|
| | | ("BYTE", "InspireType", 1),
|
| | | ("WORD", "InspireMaxLV", 0),
|
| | | ("char", "MoneyCount", 0),
|
| | | ),
|
| | |
|
| | | "MapRefreshNPC":(
|
| | | ("DWORD", "MapID", 1),
|
| | | ("BYTE", "RefreshNum", 0),
|
| | |
| | | ("BYTE", "Type", 1),
|
| | | ("BYTE", "Star", 1),
|
| | | ("WORD", "LevelMax", 0),
|
| | | ),
|
| | |
|
| | | "FBBuyBuff":(
|
| | | ("DWORD", "MapId", 1),
|
| | | ("WORD", "MoneyCnt", 1),
|
| | | ("DWORD", "BuffID", 0),
|
| | | ("WORD", "BuffCD", 0),
|
| | | ),
|
| | |
|
| | | "SkillElement":(
|
| | |
| | | def GetBindMissionID(self): return self.attrTuple[4] # 绑定的任务ID DWORD
|
| | | def GetShowType(self): return self.attrTuple[5] # 0-服务端通知,>0前端处理 BYTE |
| | | |
| | | # 副本鼓舞表 |
| | | class IPY_FbEncourage(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetDataMapID(self): return self.attrTuple[0] # 地图ID DWORD
|
| | | def GetInspireType(self): return self.attrTuple[1] # 鼓舞类型 BYTE
|
| | | def GetInspireMaxLV(self): return self.attrTuple[2] # 鼓舞等级限制 WORD
|
| | | def GetMoneyCount(self): return self.attrTuple[3] # 单次消耗金钱数量 char |
| | | |
| | | # 地图标试点NPC刷新 |
| | | class IPY_MapRefreshNPC(): |
| | | |
| | |
| | | def GetStar(self): return self.attrTuple[1] # 装备星数 BYTE
|
| | | def GetLevelMax(self): return self.attrTuple[2] # 洗练等级上限 WORD |
| | | |
| | | # 副本Buff表 |
| | | class IPY_FBBuyBuff(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetMapId(self): return self.attrTuple[0] # DWORD
|
| | | def GetMoneyCnt(self): return self.attrTuple[1] # 仙玉数量 WORD
|
| | | def GetBuffID(self): return self.attrTuple[2] # BuffID DWORD
|
| | | def GetBuffCD(self): return self.attrTuple[3] # 间隔时间s WORD |
| | | |
| | | # 技能升级表 |
| | | class IPY_SkillElement(): |
| | | |
| | |
| | | self.__LoadFileData("FamilyRedPack", onlyCheck)
|
| | | self.__LoadFileData("ActFeastRedPacketSucc", onlyCheck)
|
| | | self.__LoadFileData("NPCShow", onlyCheck)
|
| | | self.__LoadFileData("FbEncourage", onlyCheck)
|
| | | self.__LoadFileData("MapRefreshNPC", onlyCheck)
|
| | | self.__LoadFileData("RuneCompound", onlyCheck)
|
| | | self.__LoadFileData("ResourcesBack", onlyCheck)
|
| | |
| | | self.__LoadFileData("FamilyZhenbaogeItem", onlyCheck)
|
| | | self.__LoadFileData("FamilyZhenfa", onlyCheck)
|
| | | self.__LoadFileData("ItemWashMax", onlyCheck)
|
| | | self.__LoadFileData("FBBuyBuff", onlyCheck)
|
| | | self.__LoadFileData("SkillElement", onlyCheck)
|
| | | self.__LoadFileData("LingGenEffect", onlyCheck)
|
| | | self.__LoadFileData("LoveGift", onlyCheck)
|
| | |
| | | self.CheckLoadData("NPCShow") |
| | | return self.ipyNPCShowCache[index]
|
| | | |
| | | def GetFbEncourageCount(self): |
| | | self.CheckLoadData("FbEncourage") |
| | | return self.ipyFbEncourageLen
|
| | | def GetFbEncourageByIndex(self, index): |
| | | self.CheckLoadData("FbEncourage") |
| | | return self.ipyFbEncourageCache[index]
|
| | | |
| | | def GetMapRefreshNPCCount(self): |
| | | self.CheckLoadData("MapRefreshNPC") |
| | | return self.ipyMapRefreshNPCLen
|
| | |
| | | def GetItemWashMaxByIndex(self, index): |
| | | self.CheckLoadData("ItemWashMax") |
| | | return self.ipyItemWashMaxCache[index]
|
| | | |
| | | def GetFBBuyBuffCount(self): |
| | | self.CheckLoadData("FBBuyBuff") |
| | | return self.ipyFBBuyBuffLen
|
| | | def GetFBBuyBuffByIndex(self, index): |
| | | self.CheckLoadData("FBBuyBuff") |
| | | return self.ipyFBBuyBuffCache[index]
|
| | | |
| | | def GetSkillElementCount(self): |
| | | self.CheckLoadData("SkillElement") |
| | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | if not isDisconnect:
|
| | | CrossPlayerData.ClearCrossSyncDataCache(curPlayer)
|
| | | PyGameData.g_fbBuyBuffTimeDict.pop(playerID, None)
|
| | | #清除地图玩家缓存
|
| | | PyGameData.g_playerReqEnterFBEx.pop(playerID, None)
|
| | | NPCCommon.ClearPriWoodPile(curPlayer)
|
| | |
| | | import math
|
| | | #---------------------------------------------------------------------
|
| | | def OnLogin(curPlayer):
|
| | | NotifyBuyFBBuffInfo(curPlayer)
|
| | | return
|
| | |
|
| | | ## 玩家副本行为封包 A5 08
|
| | |
| | | GameObj.SetHPFull(curPlayer)
|
| | |
|
| | | GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | #// B1 0A 副本购买buff #tagCMFBBuyBuff
|
| | | #struct tagCMFBBuyBuff
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD MapID;
|
| | | # WORD MoneyCnt;
|
| | | #};
|
| | | def OnFBBuyBuff(playerIndex, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | mapID = clientData.MapID
|
| | | moneyCnt = clientData.MoneyCnt
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('FBBuyBuff', mapID, moneyCnt)
|
| | | if not ipyData:
|
| | | return
|
| | | addBuffID = ipyData.GetBuffID()
|
| | | curSkill = GameWorld.GetGameData().GetSkillBySkillID(addBuffID)
|
| | | if not curSkill:
|
| | | return
|
| | | crossMapID = PlayerControl.GetCrossMapID(curPlayer)
|
| | | if crossMapID and mapID !=crossMapID:
|
| | | return
|
| | | if not crossMapID and mapID != GameWorld.GetMap().GetMapID():
|
| | | return
|
| | | |
| | | curTime = int(time.time())
|
| | | #判断CD |
| | | timeKey = (mapID, moneyCnt)
|
| | | lastTime = PyGameData.g_fbBuyBuffTimeDict.get(playerID, {}).get(timeKey, 0)
|
| | | if lastTime and curTime - lastTime < ipyData.GetBuffCD():
|
| | | GameWorld.DebugLog('副本购买buff CD未到 ')
|
| | | return
|
| | |
|
| | | #扣钱
|
| | | infoDict = {"MapID":mapID, "addBuffID":addBuffID}
|
| | | if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, moneyCnt, ChConfig.Def_Cost_FBBuyBuff, infoDict):
|
| | | return
|
| | | if playerID not in PyGameData.g_fbBuyBuffTimeDict:
|
| | | PyGameData.g_fbBuyBuffTimeDict[playerID] = {}
|
| | | PyGameData.g_fbBuyBuffTimeDict[playerID][timeKey] = curTime
|
| | | NotifyBuyFBBuffInfo(curPlayer)
|
| | | if crossMapID:
|
| | | msgDict = {"PlayerID":curPlayer.GetPlayerID(), "buffID":addBuffID}
|
| | | GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_AddBuff, msgDict)
|
| | | GameWorld.DebugLog("跨服中请求复活, crossMapID=%s,msgDict=%s" % (crossMapID, msgDict), playerID)
|
| | | return
|
| | |
|
| | | SkillShell.__DoLogic_AddBuff(curPlayer, curPlayer, curSkill, False, tick, 0, 0)
|
| | | #SkillCommon.AddBuffBySkillType(curPlayer, addBuffID, tick)
|
| | | return
|
| | |
|
| | | def NotifyBuyFBBuffInfo(curPlayer):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | buffTimeDict = PyGameData.g_fbBuyBuffTimeDict.get(playerID, {})
|
| | | if not buffTimeDict:
|
| | | return
|
| | | packData = ChPyNetSendPack.tagMCFBBuyBuffInfo()
|
| | | packData.InfoList = []
|
| | | for timeKey, buyTime in buffTimeDict.items():
|
| | | mapID, moneyCnt = timeKey
|
| | | timeInfo = ChPyNetSendPack.tagMCFBBuyBuffTime()
|
| | | timeInfo.MapID = mapID
|
| | | timeInfo.MoneyCnt = moneyCnt
|
| | | timeInfo.BuyTime = buyTime
|
| | | packData.InfoList.append(timeInfo)
|
| | | packData.Cnt = len(packData.InfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | | #// B1 08 快速一键过关副本 #tagCMFBQuickPass
|
| | |
| | |
|
| | | g_crossFuncLineDataCache = {} # 动态分配的跨服虚拟分线数据缓存 {(mapID, copyMapID):funcLineDataCache, ...}
|
| | | g_crossPlayerServerGroupIDInfo = {} #跨服玩家服务器组ID缓存,副本线路关闭时才释放,所以支持离线跨服玩家 {copyMapID:{playerID:serverGroupID, ...}, ...}
|
| | | g_fbBuyBuffTimeDict = {} # 副本购买buff时间缓存{playerID:{moneyCnt:time}}
|
| | | g_elemntSkillDict = {} #{skillID:[attrID*100000+needValue,..]}
|
| | |
|
| | | g_coupleInfo = {} # {playerID:[coupleID, coupleName], ...}
|
| | |
| | | SuccType_DujieFBHelp, #渡劫护法成功X次 78
|
| | | SuccType_DujieFBHelpPass, #渡劫助战成功X次 79
|
| | | SuccType_XXX80, #废弃 80
|
| | | SuccType_FBEncourage, #x副本累计鼓舞X次 81
|
| | | SuccType_81, #x副本累计鼓舞X次 81
|
| | | SuccType_EquipStar, #x件x阶x星 82
|
| | | SuccType_XXX83, #废弃 83
|
| | | SuccType_XXX84, #废弃 84
|
| | |
| | | SuccType_QueenRelics,SuccType_XMZZConWin,
|
| | | SuccType_Collect,SuccType_DogzBattle,
|
| | | SuccType_UseItem,SuccType_FamilyTechLV,
|
| | | SuccType_GetSpecialItem,SuccType_GetMagicWeapon,SuccType_FBEncourage,SuccType_XBXZ,
|
| | | SuccType_GetSpecialItem,SuccType_GetMagicWeapon,SuccType_XBXZ,
|
| | | SuccType_FeastRedPack_KillSpecificNPC,SuccType_FeastRedPack_KillBoss,
|
| | | SuccType_FeastRedPack_EnterMap, SuccType_FeastRedPack_FBSweep,
|
| | | ]
|