| | |
| | | BYTE SkillResist; //是否技能抵抗
|
| | | };
|
| | |
|
| | | //Boss首杀
|
| | |
|
| | | struct tagBOSSFirstKill
|
| | | {
|
| | | DWORD _NPCID; //ID
|
| | | WORD PerPlayerMoneyAward; // 首杀全服玩家奖励灵石额度/人
|
| | | list PersonFirstKillAward; // 个人首次击杀奖励 [[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //NPC秀表
|
| | |
|
| | | struct tagNPCShow
|
| | |
| | | BYTE ChooseItemCount; //选择个数
|
| | | dict LibItemInfo; //物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...} 0不限次数
|
| | | list NotifyItemNumList; //需要广播的编号列表
|
| | | };
|
| | |
|
| | | //BOSS复活活动时间表
|
| | |
|
| | | struct tagActBossReborn
|
| | | {
|
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | BYTE ResetType; //重置类型,0-0点重置;1-5点重置
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE TemplateID; //模板编号
|
| | | };
|
| | |
|
| | | //BOSS复活表
|
| | |
|
| | | struct tagBossReborn
|
| | | {
|
| | | BYTE _TemplateID; //模板ID
|
| | | BYTE _ID; //活动条目ID
|
| | | DWORD TotalTimes; //可完成的总次数,0表示不限次数
|
| | | WORD SingleTimes; //单次领奖需要的次数
|
| | | dict Reward; //奖励物品ID1
|
| | | };
|
| | |
|
| | | //多倍修行点活动时间表
|
| | |
| | | import PlayerLLMJ
|
| | | import PlayerPrestigeSys
|
| | | import CrossServerPackLogic
|
| | | import PlayerSuccess
|
| | | import IpyGameDataPY
|
| | | import PlayerOnline
|
| | | import NPCCommon
|
| | |
| | | PlayerLLMJ.AddUseZhanchui(curPlayer, useZhanchui)
|
| | | PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, useZhanchui)
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, useZhanchui)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSACutTree, useZhanchui)
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_CutTree, useZhanchui)
|
| | |
|
| | | # 历练秘境额外经验
|
| | |
| | | if killNPCCnt > 0:
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_KillNPC, killNPCCnt)
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_KillNPC, killNPCCnt)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAKillNPC, killNPCCnt)
|
| | |
|
| | | # 结算逻辑最后重置数据
|
| | | mainFightMgr.resetMainFightExDataRec()
|
| | |
| | | Def_PDict_CollectWordsExchangeCount = "CollectWordsCount_%s_%s" # 兑换编号对应已兑换次数,参数(活动编号, 兑换编号)
|
| | | Def_PDict_CollectWordsGJSeconds = "CollectWordsGJSeconds_%s" # 挂机未处理收益的秒数,参数(活动编号)
|
| | |
|
| | | #BOSS复活
|
| | | Def_PDict_BossRebornID = "BossRebornID" # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_BossRebornTemplateID = "BossRebornTemplateID" # 玩家身上的BOSS复活模板ID
|
| | | Def_PDict_BRActionCurTimes = "BRActionCurTimes_%s" #当前完成次数 参数BOSS复活活动ID
|
| | | Def_PDict_BRActionGotTimes = "BRActionGotTimes_%s" #当前已领次数 参数BOSS复活活动ID
|
| | | Def_PDict_BRActionWorldLV = "BRActionWorldLV" #BOSS复活活动开启时世界等级
|
| | |
|
| | | #Boss首杀
|
| | | Def_PDict_BossFirstKillState = "BossFirstKillState_%s" # boss首杀相关状态记录
|
| | |
|
| | | #限时抢购活动
|
| | | Def_PDict_FlashSaleID = "FlashSaleID_%s" # 玩家身上的限时抢购活动ID,唯一标识,取活动开始日期time,参数(活动编号)
|
| | | Def_PDict_FlashSaleState = "FlashSaleState_%s" # 玩家身上的限时抢购活动state,参数(活动编号)
|
| | |
| | | # 成就 Def_PDictType_Success
|
| | | Def_PDict_SuccessValue = "Succ_%s_%s" # 当前次数值,参数(成就类型、条件)
|
| | | Def_PDict_SuccessAward = "Succ_Award_%s" # 成就领奖记录,按成就ID位存储0-未领,1-已领,参数(key编号)
|
| | |
|
| | | # 开服庆典
|
| | | Def_PDict_OSACelebrationPoint = "OSACelebrationPoint" # 开服庆典累计积分
|
| | | Def_PDict_OSACelebrationAward = "OSACelebrationAward" # 开服庆典累计积分阶段奖励领奖状态,按积分排序后的索引位记录是否已领取
|
| | |
|
| | | # 通天令
|
| | | Def_PDict_TTL_StartTime = "TTL_StartTime" # 本轮通天令开始时间戳
|
| | |
| | | Def_GiveMoney_Warehouse, # 仓库
|
| | | Def_GiveMoney_SellPackItem, # 出售背包物品
|
| | | Def_GiveMoney_CollectNPC, # 采集NPC
|
| | | Def_GiveMoney_BossFirstKill, # Boss首杀
|
| | | Def_GiveMoney_20,
|
| | | Def_GiveMoney_21,
|
| | | Def_GiveMoney_Trade, # 交易
|
| | | Def_GiveMoney_23,
|
| | |
| | | Def_GiveMoney_Warehouse:"Warehouse",
|
| | | Def_GiveMoney_SellPackItem:"SellPackItem",
|
| | | Def_GiveMoney_CollectNPC:"CollectNPC",
|
| | | Def_GiveMoney_BossFirstKill:"BossFirstKill",
|
| | | Def_GiveMoney_Trade:"Trade",
|
| | | Def_GiveMoney_FreeGoods:"FreeGoods",
|
| | | Def_GiveMoney_BindJadeWheel:"BindJadeWheel",
|
| | |
| | | Def_RewardType_BeautyLVAward, # 红颜等级奖励 6
|
| | | Def_RewardType_DayRealmPoint, # 每日任务修行点奖励7
|
| | | Def_RewardType_FirstCharge, # 首充礼包奖励8
|
| | | Def_RewardType_MWSoulAward, # 法宝之魂奖励9 -废弃
|
| | | Def_RewardType_OSACelebrationPointAward, # 开服庆典积分阶段奖励 9
|
| | | Def_RewardType_FreeGoods, # 极品白拿10
|
| | | Def_RewardType_CostRebate, # 消费返利11
|
| | | Def_RewardType_BossReborn, # BOSS复活12
|
| | |
| | | Def_RewardType_ADAward, # 广告奖励 81
|
| | | Def_RewardType_TreeFreeTime, # 仙树免费减时 82
|
| | | )= range(83)
|
| | |
|
| | | #boss复活相关活动定义
|
| | | BossRebornActIDList = (
|
| | | Def_BRAct_VIPBOSS, #进入VIPboss副本 1
|
| | | Def_BRAct_GodArea, #进入古神禁地副本 2
|
| | | Def_BRAct_MoneyPray, #铜钱祈愿 3
|
| | | Def_BRAct_ExpPray, #经验祈愿 4
|
| | | Def_BRAct_Treasure, #极品寻宝 5
|
| | | Def_BRAct_WorldBOSS, #击杀世界boss获得掉落归属 6
|
| | | Def_BRAct_BOSSHome, #击杀boss之家获得掉落归属 7
|
| | | Def_BRAct_FMT, #挑战封魔坛BOSS 8
|
| | | Def_BRAct_RunTask, #完成仙盟跑环 9
|
| | | Def_BRAct_XJMJ, #完成仙界秘境 10
|
| | | Def_BRAct_KirinHome, #完成麒麟之府 11
|
| | | Def_BRAct_TowerSweep, #符印塔扫荡 12
|
| | | Def_BRAct_RuneTreasure, #符印寻宝 13
|
| | | Def_BRAct_FairyDomain, #缥缈仙域 14
|
| | | Def_BRAct_FamilyBoss, #仙盟BOSS 15
|
| | | Def_BRAct_ActivityPlace, #活跃放置 16
|
| | | Def_BRAct_JSTreasure, #绝世寻宝 17
|
| | | ) = range(1, 17+1)
|
| | |
|
| | | #全民来嗨活动定义(仙界盛典)
|
| | | PeoplePartyActIDList = (
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 01 获取Boss首杀奖励 #tagCGGetBossFirstKillAward
|
| | |
|
| | | class tagCGGetBossFirstKillAward(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("NPCID", c_int), |
| | | ("AwardType", c_ubyte), # 0-首杀红包奖励;1-个人首杀奖励
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xA9
|
| | | self.SubCmd = 0x01
|
| | | 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 = 0xA9
|
| | | self.SubCmd = 0x01
|
| | | self.NPCID = 0
|
| | | self.AwardType = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGGetBossFirstKillAward)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A9 01 获取Boss首杀奖励 //tagCGGetBossFirstKillAward:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | NPCID:%d,
|
| | | AwardType:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.NPCID,
|
| | | self.AwardType
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGGetBossFirstKillAward=tagCGGetBossFirstKillAward()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetBossFirstKillAward.Cmd,m_NAtagCGGetBossFirstKillAward.SubCmd))] = m_NAtagCGGetBossFirstKillAward
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A9 07 点赞仙宫 #tagCGLikeXiangong
|
| | |
|
| | | class tagCGLikeXiangong(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 01 Boss首杀玩家奖励信息 #tagMCBossFirstKillStateInfo
|
| | | # AB 05 开服庆典信息 #tagSCOSACelebrationInfo
|
| | |
|
| | | class tagMCBossFirstKillState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("NPCID", c_int), |
| | | ("FKState", c_int), # 玩家该boss首杀相关状态,按位存:个位-玩家是否击杀过,十位-是否已领取首杀全服奖励,百位-是否已领取个人首杀奖励
|
| | | ]
|
| | |
|
| | | 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.NPCID = 0
|
| | | self.FKState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCBossFirstKillState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 01 Boss首杀玩家奖励信息 //tagMCBossFirstKillStateInfo:
|
| | | NPCID:%d,
|
| | | FKState:%d
|
| | | '''\
|
| | | %(
|
| | | self.NPCID,
|
| | | self.FKState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossFirstKillStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | BossCount = 0 #(BYTE BossCount)
|
| | | FirstKillStateList = list() #(vector<tagMCBossFirstKillState> FirstKillStateList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.BossCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.BossCount):
|
| | | temFirstKillStateList = tagMCBossFirstKillState()
|
| | | _pos = temFirstKillStateList.ReadData(_lpData, _pos)
|
| | | self.FirstKillStateList.append(temFirstKillStateList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x01
|
| | | self.BossCount = 0
|
| | | self.FirstKillStateList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.BossCount):
|
| | | length += self.FirstKillStateList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.BossCount)
|
| | | for i in range(self.BossCount):
|
| | | data = CommFunc.WriteString(data, self.FirstKillStateList[i].GetLength(), self.FirstKillStateList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | BossCount:%d,
|
| | | FirstKillStateList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.BossCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossFirstKillStateInfo=tagMCBossFirstKillStateInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossFirstKillStateInfo.Head.Cmd,m_NAtagMCBossFirstKillStateInfo.Head.SubCmd))] = m_NAtagMCBossFirstKillStateInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 03 Boss复活玩家活动信息 #tagMCBossRebornPlayerInfo
|
| | |
|
| | | class tagMCBossRebornData(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ActID", c_ubyte), #活动ID
|
| | | ("CurTimes", c_ushort), #已完成次数
|
| | | ("GotTimes", c_ushort), #已领取次数
|
| | | ]
|
| | |
|
| | | 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.ActID = 0
|
| | | self.CurTimes = 0
|
| | | self.GotTimes = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCBossRebornData)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 03 Boss复活玩家活动信息 //tagMCBossRebornPlayerInfo:
|
| | | ActID:%d,
|
| | | CurTimes:%d,
|
| | | GotTimes:%d
|
| | | '''\
|
| | | %(
|
| | | self.ActID,
|
| | | self.CurTimes,
|
| | | self.GotTimes
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornPlayerInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)//活动个数
|
| | | DataList = list() #(vector<tagMCBossRebornData> DataList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x03
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temDataList = tagMCBossRebornData()
|
| | | _pos = temDataList.ReadData(_lpData, _pos)
|
| | | self.DataList.append(temDataList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x03
|
| | | self.Count = 0
|
| | | self.DataList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.DataList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.DataList[i].GetLength(), self.DataList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | DataList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossRebornPlayerInfo=tagMCBossRebornPlayerInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornPlayerInfo.Head.Cmd,m_NAtagMCBossRebornPlayerInfo.Head.SubCmd))] = m_NAtagMCBossRebornPlayerInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 04 Boss复活活动信息 #tagMCBossRebornInfo
|
| | |
|
| | | class tagMCBossRebornAwardItem(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("ItemID", c_int), |
| | | ("ItemCount", c_ushort), |
| | | ("IsBind", 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.ItemID = 0
|
| | | self.ItemCount = 0
|
| | | self.IsBind = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCBossRebornAwardItem)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 04 Boss复活活动信息 //tagMCBossRebornInfo:
|
| | | ItemID:%d,
|
| | | ItemCount:%d,
|
| | | IsBind:%d
|
| | | '''\
|
| | | %(
|
| | | self.ItemID,
|
| | | self.ItemCount,
|
| | | self.IsBind
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornTaskInfo(Structure):
|
| | | TaskID = 0 #(BYTE TaskID)// id
|
| | | TotalTimes = 0 #(BYTE TotalTimes)// 可完成总次数,0表示不限次数
|
| | | SingleTimes = 0 #(BYTE SingleTimes)// 单次领奖需要次数
|
| | | AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
|
| | | AwardItem = list() #(vector<tagMCBossRebornAwardItem> AwardItem)// 奖励物品信息
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.TaskID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.TotalTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SingleTimes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AwardItemCount):
|
| | | temAwardItem = tagMCBossRebornAwardItem()
|
| | | _pos = temAwardItem.ReadData(_lpData, _pos)
|
| | | self.AwardItem.append(temAwardItem)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.TaskID = 0
|
| | | self.TotalTimes = 0
|
| | | self.SingleTimes = 0
|
| | | self.AwardItemCount = 0
|
| | | self.AwardItem = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.AwardItemCount):
|
| | | length += self.AwardItem[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.TaskID)
|
| | | data = CommFunc.WriteBYTE(data, self.TotalTimes)
|
| | | data = CommFunc.WriteBYTE(data, self.SingleTimes)
|
| | | data = CommFunc.WriteBYTE(data, self.AwardItemCount)
|
| | | for i in range(self.AwardItemCount):
|
| | | data = CommFunc.WriteString(data, self.AwardItem[i].GetLength(), self.AwardItem[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | TaskID:%d,
|
| | | TotalTimes:%d,
|
| | | SingleTimes:%d,
|
| | | AwardItemCount:%d,
|
| | | AwardItem:%s
|
| | | '''\
|
| | | %(
|
| | | self.TaskID,
|
| | | self.TotalTimes,
|
| | | self.SingleTimes,
|
| | | self.AwardItemCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCBossRebornInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
|
| | | EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
|
| | | ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
|
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | TaskCnt = 0 #(BYTE TaskCnt)
|
| | | TaskInfo = list() #(vector<tagMCBossRebornTaskInfo> TaskInfo)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
|
| | | self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TaskCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TaskCnt):
|
| | | temTaskInfo = tagMCBossRebornTaskInfo()
|
| | | _pos = temTaskInfo.ReadData(_lpData, _pos)
|
| | | self.TaskInfo.append(temTaskInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xAB
|
| | | self.Head.SubCmd = 0x04
|
| | | self.StartDate = ""
|
| | | self.EndtDate = ""
|
| | | self.ResetType = 0
|
| | | self.LimitLV = 0
|
| | | self.TaskCnt = 0
|
| | | self.TaskInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 10
|
| | | length += 10
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.TaskCnt):
|
| | | length += self.TaskInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 10, self.StartDate)
|
| | | data = CommFunc.WriteString(data, 10, self.EndtDate)
|
| | | data = CommFunc.WriteBYTE(data, self.ResetType)
|
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.TaskCnt)
|
| | | for i in range(self.TaskCnt):
|
| | | data = CommFunc.WriteString(data, self.TaskInfo[i].GetLength(), self.TaskInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartDate:%s,
|
| | | EndtDate:%s,
|
| | | ResetType:%d,
|
| | | LimitLV:%d,
|
| | | TaskCnt:%d,
|
| | | TaskInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartDate,
|
| | | self.EndtDate,
|
| | | self.ResetType,
|
| | | self.LimitLV,
|
| | | self.TaskCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCBossRebornInfo=tagMCBossRebornInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBossRebornInfo.Head.Cmd,m_NAtagMCBossRebornInfo.Head.SubCmd))] = m_NAtagMCBossRebornInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AB 19 炼制奖励信息 #tagMCRefineGiftInfo
|
| | |
|
| | | class tagMCRefineGiftInfo(Structure):
|
| | | class tagSCOSACelebrationInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ExpRefineStartTime", c_int), # 经验炼制活动开始时间
|
| | | ("MoneyRefineStartTime", c_int), # 金币炼制活动开始时间
|
| | | ("ExpRefineCnt", c_ubyte), # 经验已炼制次数
|
| | | ("MoneyRefineCnt", c_ubyte), # 金币已炼制次数
|
| | | ("PointTotal", c_int), # 累计庆典积分
|
| | | ("PointAward", c_int), # 积分阶段奖励记录,按阶段积分排序后索引二进制存储是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAB
|
| | | self.SubCmd = 0x19
|
| | | self.SubCmd = 0x05
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xAB
|
| | | self.SubCmd = 0x19
|
| | | self.ExpRefineStartTime = 0
|
| | | self.MoneyRefineStartTime = 0
|
| | | self.ExpRefineCnt = 0
|
| | | self.MoneyRefineCnt = 0
|
| | | self.SubCmd = 0x05
|
| | | self.PointTotal = 0
|
| | | self.PointAward = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCRefineGiftInfo)
|
| | | return sizeof(tagSCOSACelebrationInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AB 19 炼制奖励信息 //tagMCRefineGiftInfo:
|
| | | DumpString = '''// AB 05 开服庆典信息 //tagSCOSACelebrationInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ExpRefineStartTime:%d,
|
| | | MoneyRefineStartTime:%d,
|
| | | ExpRefineCnt:%d,
|
| | | MoneyRefineCnt:%d
|
| | | PointTotal:%d,
|
| | | PointAward:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ExpRefineStartTime,
|
| | | self.MoneyRefineStartTime,
|
| | | self.ExpRefineCnt,
|
| | | self.MoneyRefineCnt
|
| | | self.PointTotal,
|
| | | self.PointAward
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCRefineGiftInfo=tagMCRefineGiftInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRefineGiftInfo.Cmd,m_NAtagMCRefineGiftInfo.SubCmd))] = m_NAtagMCRefineGiftInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # AC 08 boss复活点数通知 #tagGCBossRebornPoint
|
| | |
|
| | | class tagGCBossRebornPoint(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Point", c_int), # 复活点数
|
| | | ("TotalPoint", c_int), # 复活总点数
|
| | | ("RebornCnt", c_ushort), # 今日已复活次数
|
| | | ("TotalRebornCnt", c_ushort), # 每日可复活总次数,0为不限制
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xAC
|
| | | self.SubCmd = 0x08
|
| | | 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 = 0xAC
|
| | | self.SubCmd = 0x08
|
| | | self.Point = 0
|
| | | self.TotalPoint = 0
|
| | | self.RebornCnt = 0
|
| | | self.TotalRebornCnt = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCBossRebornPoint)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// AC 08 boss复活点数通知 //tagGCBossRebornPoint:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Point:%d,
|
| | | TotalPoint:%d,
|
| | | RebornCnt:%d,
|
| | | TotalRebornCnt:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Point,
|
| | | self.TotalPoint,
|
| | | self.RebornCnt,
|
| | | self.TotalRebornCnt
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCBossRebornPoint=tagGCBossRebornPoint()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCBossRebornPoint.Cmd,m_NAtagGCBossRebornPoint.SubCmd))] = m_NAtagGCBossRebornPoint
|
| | | m_NAtagSCOSACelebrationInfo=tagSCOSACelebrationInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCOSACelebrationInfo.Cmd,m_NAtagSCOSACelebrationInfo.SubCmd))] = m_NAtagSCOSACelebrationInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | #"""Version = 2025-11-25 19:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import GameWorld
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import OpenServerActivity
|
| | | import GameWorldEvent
|
| | | import PlayerSignDay
|
| | | import GameFuncComm
|
| | |
| | | if not cmdList:
|
| | | GameWorld.DebugAnswer(curPlayer, "设置开服天: ServerDay 第几天")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置开服天: ServerDay 1")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置庆典奖: ServerDay osa")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置庆典分: ServerDay osa 累计积分")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置开服天时会重置开服冲榜、庆典奖励")
|
| | | __printServerDay(curPlayer)
|
| | | return
|
| | |
|
| | | value = cmdList[0]
|
| | |
|
| | | if value <= 1:
|
| | | if value == "osa":
|
| | | point = cmdList[1] if len(cmdList) > 1 else 0
|
| | | if point <= 0:
|
| | | __clearOSACelebration(curPlayer)
|
| | | else:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, point)
|
| | | OpenServerActivity.SyncOSACelebrationInfo(curPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "开服庆典累计积分: %s" % point)
|
| | | return
|
| | | elif value <= 1:
|
| | | __clearOpenServerDay(curPlayer)
|
| | | elif value > 1:
|
| | | __setOpenServerDay(curPlayer, value)
|
| | |
| | | DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
|
| | | DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
|
| | | DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_OSAAwardState, 0)
|
| | | __clearOSACelebration(curPlayer)
|
| | |
|
| | | curTime = int(time.time())
|
| | | GameWorldEvent.SetInitOpenServerTime(curTime)
|
| | |
| | | PlayerSignDay.ResetDaySign(curPlayer)
|
| | | return
|
| | |
|
| | | def __clearOSACelebration(curPlayer):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationAward, 0)
|
| | | OpenServerActivity.SyncOSACelebrationInfo(curPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置开服庆典")
|
| | | return
|
| | |
|
| | | def __setOpenServerDay(curPlayer, serverDay):
|
| | | DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, serverDay - 1)
|
| | | return
|
| | |
| | | succType = msgList[1] if len(msgList) > 1 else 0
|
| | | addValue = msgList[2] if len(msgList) > 2 else 1
|
| | | conds = msgList[3:]
|
| | | GameWorld.DebugAnswer(curPlayer, "增加成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, addValue, conds)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, addValue, conds, delayCalc=False)
|
| | | curValue = PlayerSuccess.GetSuccValue(curPlayer, succType, conds)
|
| | | GameWorld.DebugAnswer(curPlayer, "增加成就进度: T:%s,A:%s,V:%s,C:%s," % (succType, addValue, curValue, conds))
|
| | | # 更新进度
|
| | | elif cmdType == "u":
|
| | | succType = msgList[1] if len(msgList) > 1 else 0
|
| | | newCnt = msgList[2] if len(msgList) > 2 else 1
|
| | | conds = msgList[3:]
|
| | | GameWorld.DebugAnswer(curPlayer, "更新成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, succType, newCnt, conds)
|
| | | curValue = PlayerSuccess.GetSuccValue(curPlayer, succType, conds)
|
| | | GameWorld.DebugAnswer(curPlayer, "更新成就进度: T:%s,V:%s,C:%s" % (succType, curValue, conds))
|
| | | return
|
| | |
|
| | | def __DoResetSuccess(curPlayer, msgList, resetValue=True):
|
| | |
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import PlayerSuccess
|
| | | import PlayerActivity
|
| | | import PlayerBillboard
|
| | | import PlayerViewCache
|
| | |
| | | return
|
| | |
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_ArenaBattle)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAArenaBattle, 1)
|
| | |
|
| | | return True, funcLineID
|
| | |
|
| | |
| | | import TurnAttack
|
| | | import ShareDefine
|
| | | import IpyGameDataPY
|
| | | import PlayerSuccess
|
| | | import PlayerControl
|
| | | import PlayerActivity
|
| | | import ChPyNetSendPack
|
| | |
| | | ChEquip.RefreshRoleEquipAttr(curPlayer)
|
| | |
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_EquipColor)
|
| | | PlayerSuccess.UpdateEquipSuccess(curPlayer)
|
| | | return
|
| | |
|
| | | def __doDecomposeMainEquip(curPlayer, itemIndexList):
|
| | |
| | | PlayerLLMJ.AddExpDecompose(curPlayer, mjExTotal)
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_EquipDecompose, decomposeCnt)
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_EquipDecompose, decomposeCnt)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAEquipDecompose, decomposeCnt)
|
| | | return
|
| | |
|
| | | def __doPickupMainItem(curPlayer, itemIndexList):
|
| | |
| | | import GameWorld
|
| | | import ItemControler
|
| | | import PlayerControl
|
| | | import PlayerSuccess
|
| | | import PlayerBillboard
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | |
| | | GameWorld.DebugLog("非今日天子考验! mapID=%s,funcLineID=%s != %s,bossID=%s" % (mapID, funcLineID, lineID, bossID))
|
| | | return
|
| | |
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBTianzi)
|
| | | return True, funcLineID
|
| | |
|
| | | def GetFBNPCInitAttr(turnFight, npcObj):
|
| | |
| | | FBCommon.AddEnterFBCount(curPlayer, mapID)
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Tianzi", False, {}], isNotifyAward=False)
|
| | | SyncTianziInfo(curPlayer, lineID, bossID)
|
| | | __onFBTianzi(curPlayer)
|
| | | return
|
| | |
|
| | | def __getTianziAwardList(todayHurt, bossID, sweepCnt=1):
|
| | |
| | | overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_isSweep:1,
|
| | | "totalHurt":todayHurtTotal, "todayHurtTotal":todayHurtTotal}
|
| | | FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
|
| | | __onFBTianzi(curPlayer)
|
| | | return True
|
| | |
|
| | | def __onFBTianzi(curPlayer):
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBTianzi)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAFBTianzi, 1)
|
| | | return
|
| | |
|
| | | def SyncTianziInfo(curPlayer, lineID=None, bossID=None):
|
| | | if lineID == None:
|
| | | lineID, bossID = GetTianziTodayInfo(curPlayer)
|
| | |
| | | import ItemControler
|
| | | import PlayerBeauty
|
| | | import FBCommon
|
| | | import PlayerSuccess
|
| | | import ShareDefine
|
| | | import PlayerTask
|
| | | import ChConfig
|
| | |
|
| | |
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
|
| | |
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBZhanchui)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAFBZhanchui, funcLineID)
|
| | | return
|
| | |
|
| | | def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, dataEx):
|
| | |
| | | ("BYTE", "SkillResist", 0),
|
| | | ),
|
| | |
|
| | | "BOSSFirstKill":(
|
| | | ("DWORD", "NPCID", 1),
|
| | | ("WORD", "PerPlayerMoneyAward", 0),
|
| | | ("list", "PersonFirstKillAward", 0),
|
| | | ),
|
| | |
|
| | | "NPCShow":(
|
| | | ("DWORD", "NPCID", 1),
|
| | | ("DWORD", "MapID", 1),
|
| | |
| | | ("BYTE", "ChooseItemCount", 0),
|
| | | ("dict", "LibItemInfo", 0),
|
| | | ("list", "NotifyItemNumList", 0),
|
| | | ),
|
| | |
|
| | | "ActBossReborn":(
|
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("BYTE", "ResetType", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "TemplateID", 0),
|
| | | ),
|
| | |
|
| | | "BossReborn":(
|
| | | ("BYTE", "TemplateID", 1),
|
| | | ("BYTE", "ID", 1),
|
| | | ("DWORD", "TotalTimes", 0),
|
| | | ("WORD", "SingleTimes", 0),
|
| | | ("dict", "Reward", 0),
|
| | | ),
|
| | |
|
| | | "ActRealmPoint":(
|
| | |
| | | def GetCanAssist(self): return self.attrTuple[8] # 是否可协助 BYTE
|
| | | def GetSkillResist(self): return self.attrTuple[9] # 是否技能抵抗 BYTE |
| | | |
| | | # Boss首杀 |
| | | class IPY_BOSSFirstKill(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetNPCID(self): return self.attrTuple[0] # ID DWORD
|
| | | def GetPerPlayerMoneyAward(self): return self.attrTuple[1] # 首杀全服玩家奖励灵石额度/人 WORD
|
| | | def GetPersonFirstKillAward(self): return self.attrTuple[2] # 个人首次击杀奖励 [[物品ID,个数,是否拍品], ...] list |
| | | |
| | | # NPC秀表 |
| | | class IPY_NPCShow(): |
| | | |
| | |
| | | def GetChooseItemCount(self): return self.attrTuple[3] # 选择个数 BYTE
|
| | | def GetLibItemInfo(self): return self.attrTuple[4] # 物品编号对应物品信息 {物品编号:[物品ID,个数,是否拍品,可选次数], ...} 0不限次数 dict
|
| | | def GetNotifyItemNumList(self): return self.attrTuple[5] # 需要广播的编号列表 list |
| | | |
| | | # BOSS复活活动时间表 |
| | | class IPY_ActBossReborn(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
|
| | | def GetStartDate(self): return self.attrTuple[1] # 开启日期 char
|
| | | def GetEndDate(self): return self.attrTuple[2] # 结束日期 char
|
| | | def GetResetType(self): return self.attrTuple[3] # 重置类型,0-0点重置;1-5点重置 BYTE
|
| | | def GetLVLimit(self): return self.attrTuple[4] # 限制等级 WORD
|
| | | def GetTemplateID(self): return self.attrTuple[5] # 模板编号 BYTE |
| | | |
| | | # BOSS复活表 |
| | | class IPY_BossReborn(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
|
| | | def GetID(self): return self.attrTuple[1] # 活动条目ID BYTE
|
| | | def GetTotalTimes(self): return self.attrTuple[2] # 可完成的总次数,0表示不限次数 DWORD
|
| | | def GetSingleTimes(self): return self.attrTuple[3] # 单次领奖需要的次数 WORD
|
| | | def GetReward(self): return self.attrTuple[4] # 奖励物品ID1 dict |
| | | |
| | | # 多倍修行点活动时间表 |
| | | class IPY_ActRealmPoint(): |
| | |
| | | self.__LoadFileData("DailyTask", onlyCheck)
|
| | | self.__LoadFileData("DailyLivenessReward", onlyCheck)
|
| | | self.__LoadFileData("BOSSInfo", onlyCheck)
|
| | | self.__LoadFileData("BOSSFirstKill", onlyCheck)
|
| | | self.__LoadFileData("NPCShow", onlyCheck)
|
| | | self.__LoadFileData("MapRefreshNPC", onlyCheck)
|
| | | self.__LoadFileData("RuneCompound", onlyCheck)
|
| | |
| | | self.__LoadFileData("CrossActFamilyGCZSQ", onlyCheck)
|
| | | self.__LoadFileData("ActGodGift", onlyCheck)
|
| | | self.__LoadFileData("ActGodGiftAward", onlyCheck)
|
| | | self.__LoadFileData("ActBossReborn", onlyCheck)
|
| | | self.__LoadFileData("BossReborn", onlyCheck)
|
| | | self.__LoadFileData("ActRealmPoint", onlyCheck)
|
| | | self.__LoadFileData("TrialExchange", onlyCheck)
|
| | | self.__LoadFileData("AllPeopleParty", onlyCheck)
|
| | |
| | | self.CheckLoadData("BOSSInfo") |
| | | return self.ipyBOSSInfoCache[index]
|
| | | |
| | | def GetBOSSFirstKillCount(self): |
| | | self.CheckLoadData("BOSSFirstKill") |
| | | return self.ipyBOSSFirstKillLen
|
| | | def GetBOSSFirstKillByIndex(self, index): |
| | | self.CheckLoadData("BOSSFirstKill") |
| | | return self.ipyBOSSFirstKillCache[index]
|
| | | |
| | | def GetNPCShowCount(self): |
| | | self.CheckLoadData("NPCShow") |
| | | return self.ipyNPCShowLen
|
| | |
| | | def GetActGodGiftAwardByIndex(self, index): |
| | | self.CheckLoadData("ActGodGiftAward") |
| | | return self.ipyActGodGiftAwardCache[index]
|
| | | |
| | | def GetActBossRebornCount(self): |
| | | self.CheckLoadData("ActBossReborn") |
| | | return self.ipyActBossRebornLen
|
| | | def GetActBossRebornByIndex(self, index): |
| | | self.CheckLoadData("ActBossReborn") |
| | | return self.ipyActBossRebornCache[index]
|
| | | |
| | | def GetBossRebornCount(self): |
| | | self.CheckLoadData("BossReborn") |
| | | return self.ipyBossRebornLen
|
| | | def GetBossRebornByIndex(self, index): |
| | | self.CheckLoadData("BossReborn") |
| | | return self.ipyBossRebornCache[index]
|
| | | |
| | | def GetActRealmPointCount(self): |
| | | self.CheckLoadData("ActRealmPoint") |
| | |
| | | import NetPackCommon
|
| | | import FBCommon
|
| | | import PlayerPrestigeSys
|
| | | import GY_Query_BossFirstKill
|
| | | import FormulaControl
|
| | | import PlayerBossReborn
|
| | | import PlayerCrossYaomoBoss
|
| | | import PlayerActCollectWords
|
| | | import PlayerTongTianLing
|
| | |
| | | import PlayerCrossChampionship
|
| | | import GameFuncComm
|
| | | import PlayerFamilyTaofa
|
| | | import PlayerBossReborn
|
| | | import PlayerWeekParty
|
| | | import PlayerFeastWeekParty
|
| | | import PlayerFeastLogin
|
| | |
| | | import PlayerActManyDayRecharge
|
| | | import PlayerActSingleRecharge
|
| | | import PlayerSpringSale
|
| | | import GY_Query_BossFirstKill
|
| | | import PlayerCrossYaomoBoss
|
| | | import PlayerLuckyCloudBuy
|
| | | import PlayerLuckyTreasure
|
| | |
| | | import PlayerFuncSysPrivilege
|
| | | import PlayerActTurntable
|
| | | import PlayerTongTianLing
|
| | | import OpenServerActivity
|
| | | import CrossRealmPlayer
|
| | | import ChNetSendPack
|
| | | import PlayerArena
|
| | |
| | | #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
|
| | | # 极品白拿
|
| | | PlayerFreeGoods.OnLogin(curPlayer)
|
| | | # BOSS复活活动
|
| | | PlayerBossReborn.OnLogin(curPlayer)
|
| | | # 周狂欢活动
|
| | | PlayerWeekParty.OnLogin(curPlayer)
|
| | | # 购买次数礼包活动
|
| | |
| | | PlayerFB.OnLogin(curPlayer)
|
| | | #技能专精信息
|
| | | #SkillShell.NotifyElementSkillInfo(curPlayer)
|
| | | #Boss首杀
|
| | | GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
|
| | | #通天令
|
| | | PlayerTongTianLing.OnPlayerLogin(curPlayer)
|
| | | #创角奖励
|
| | |
| | | PlayerLLMJ.OnPlayerLogin(curPlayer)
|
| | | PlayerBeauty.OnPlayerLogin(curPlayer)
|
| | | PlayerTravel.OnPlayerLogin(curPlayer)
|
| | | OpenServerActivity.OnPlayerLogin(curPlayer)
|
| | |
|
| | | # 上线查询一次充值订单
|
| | | # curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
|
| | |
| | | # 领取分包下载奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_DownLoad:
|
| | | GetDownloadAward(curPlayer, dataEx)
|
| | | # 开服庆典积分阶段奖励 |
| | | elif rewardType == ChConfig.Def_RewardType_OSACelebrationPointAward:
|
| | | OpenServerActivity.GetOSACelebrationPointAward(curPlayer, dataEx)
|
| | |
|
| | |
|
| | | # 每日免费直购礼包
|
| | |
| | | # 领取单笔累充领取
|
| | | elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
|
| | | PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
|
| | | # 领取boss复活活动奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_BossReborn:
|
| | | PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx)
|
| | | # 领取许愿池奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_WishingWell:
|
| | | PlayerWishingWell.DoGetWishingAward(curPlayer)
|
| | |
| | | import ShareDefine
|
| | | import GameFuncComm
|
| | | import IpyGameDataPY
|
| | | import PlayerBillboard
|
| | | import PlayerTreasure
|
| | | import PlayerBillboard
|
| | | import ChPyNetSendPack
|
| | | import PlayerControl
|
| | | import NetPackCommon
|
| | | import ItemControler
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import ObjPool
|
| | |
|
| | | # 开服冲榜类型对应功能ID
|
| | | OSAFuncIDDict = {
|
| | |
| | | PlayerBillboard.DoGiveBillboardAwardByMail(osaType, "OSAHeroCall", billboardAwardDict, "OSAHeroCall")
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ## ------------------------------------------- 开服庆典 ---------------------------------------------
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | SyncOSACelebrationInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def GetOSACelebrationState(curPlayer):
|
| | | ## 玩家是否在开服庆典活动中
|
| | | # @return: 0-未开启;1-活动中;2-结束显示期;3-结束关闭期
|
| | | funcID = ShareDefine.GameFuncID_OSA_Celebration
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
|
| | | #GameWorld.DebugLog("开服庆典功能未开启! funcID=%s" % (funcID))
|
| | | return 0
|
| | | endDay = IpyGameDataPY.GetFuncCfg("OSACelebration", 1)
|
| | | serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
|
| | | if serverDay <= endDay:
|
| | | #GameWorld.DebugLog("开服庆典活动中! serverDay=%s,endDay=%s" % (serverDay, endDay))
|
| | | return 1
|
| | | if serverDay == (endDay + 1):
|
| | | #GameWorld.DebugLog("开服庆典结算中! serverDay=%s,endDay=%s" % (serverDay, endDay))
|
| | | return 2
|
| | | #GameWorld.DebugLog("开服庆典已结束! serverDay=%s,endDay=%s" % (serverDay, endDay))
|
| | | return 3
|
| | |
|
| | | def AddOSACelebrationPoint(curPlayer, addPoint):
|
| | | ## 庆典累计积分
|
| | | curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
|
| | | updPoint = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationPoint, curPoint + addPoint)
|
| | | GameWorld.DebugLog("增加开服庆典积分: addPoint=%s,curPoint=%s,updPoint=%s" % (addPoint, curPoint, updPoint))
|
| | | SyncOSACelebrationInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def GetOSACelebrationPointAward(curPlayer, awardPoint):
|
| | | ## 领取开服庆典累计积分阶段奖励
|
| | | curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
|
| | | if curPoint < awardPoint:
|
| | | GameWorld.DebugLog("累计开服庆典积分不足: curPoint=%s < %s" % (curPoint, awardPoint))
|
| | | return
|
| | | awardDict = IpyGameDataPY.GetFuncEvalCfg("OSACelebration", 2, {}) # {"累计积分":[[物品ID,个数], ...], ...}
|
| | | pointKeyList = [int(p) for p in awardDict.keys()]
|
| | | pointKeyList.sort()
|
| | | if awardPoint not in pointKeyList:
|
| | | GameWorld.DebugLog("不存在该开服庆典积分阶段奖励: awardPoint=%s not in %s" % (awardPoint, pointKeyList))
|
| | | return
|
| | | index = pointKeyList.index(awardPoint)
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
|
| | | if awardState&pow(2, index):
|
| | | GameWorld.DebugLog("该开服庆典积分阶段奖励已领取: awardPoint=%s,index=%s,awardState=%s" % (awardPoint, index, awardState))
|
| | | return
|
| | | updState = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSACelebrationAward, awardState|pow(2, index))
|
| | | itemList = awardDict[str(awardPoint)]
|
| | | GameWorld.DebugLog("领取开服庆典积分阶段奖励: awardPoint=%s,index=%s,awardState=%s,updState=%s,itemList=%s" % (awardPoint, index, awardState, updState, itemList))
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["OSACelebration", False, {}])
|
| | | SyncOSACelebrationInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def SyncOSACelebrationInfo(curPlayer):
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCOSACelebrationInfo)
|
| | | clientPack.PointTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationPoint)
|
| | | clientPack.PointAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSACelebrationAward)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
| | |
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_GetMoney, value, [priceType])
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_GetMoney, value, [priceType])
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGetMoney, value, [priceType])
|
| | |
|
| | | if priceType == ShareDefine.TYPE_Price_FamilyCoin:
|
| | | PlayerFamily.AddFamilyContrib(curPlayer, value) # 公会币同步增加公会贡献
|
| | | elif priceType == ShareDefine.TYPE_Price_OSAPoint:
|
| | | OpenServerActivity.AddOSACelebrationPoint(curPlayer, value)
|
| | |
|
| | | if priceType not in [IPY_GameWorld.TYPE_Price_Gold_Money, IPY_GameWorld.TYPE_Price_Gold_Paper, ShareDefine.TYPE_Price_PayCoin] \
|
| | | and giveType == ChConfig.Def_GiveMoney_Unknown:
|
| | |
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID)
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAMainLevel, lvID)
|
| | | if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_MainLevel) == 1:
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_MainLevel, lvID)
|
| | | return value
|
| | |
| | | import PlayerActTurntable
|
| | | import PlayerActBuyOne
|
| | | import PlayerSpringSale
|
| | | import PlayerBossReborn
|
| | | import PlayerWeekParty
|
| | | import PlayerFeastWeekParty
|
| | | import PlayerFeastLogin
|
| | |
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_SpringSale:
|
| | | PlayerSpringSale.RefreshSpringSaleActionInfo(actNum)
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_BossReborn:
|
| | | PlayerBossReborn.RefreshOperationAction_BossReborn()
|
| | |
|
| | | elif actionName == ShareDefine.OperationActionName_FlashGiftbag:
|
| | | PlayerFlashGiftbag.RefreshFlashGiftbagActionInfo(actNum)
|
| | |
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import ItemControler
|
| | | import PlayerSuccess
|
| | | import ChPyNetSendPack
|
| | | import PlayerActivity
|
| | | import PlayerControl
|
| | |
| | | % (updWorkerCnt, realNeedSeconds, GameWorld.ChangeTimeNumToStr(endTime), campInfo))
|
| | |
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_GoldRush, 1)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGoldRush, 1)
|
| | | return
|
| | |
|
| | | def GetWorkerTotal(curPlayer):
|
| | |
| | | SyncGoldRushInfo(curPlayer)
|
| | |
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_GoldRushWorkers)
|
| | | workersTotal = GetWorkerTotal(curPlayer)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAGoldRushWorkers, workersTotal)
|
| | | return
|
| | |
|
| | | #// B0 38 淘金仓库领奖 #tagCSGoldRushWarehouseAward
|
| | |
| | | import IpyGameDataPY
|
| | | import IPY_GameWorld
|
| | | import ItemControler
|
| | | import PlayerSuccess
|
| | | import ChPyNetSendPack
|
| | | import PlayerActivity
|
| | | import NetPackCommon
|
| | |
| | |
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroLVUP, 1)
|
| | | return
|
| | |
|
| | | def GetHeroLVMax(heroItem):
|
| | |
| | | __DoHeroStarTalentUp(item, addStar)
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroStarUP, addStar)
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroStarUP, addStar)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroStarUP, addStar)
|
| | |
|
| | | if isSync:
|
| | | heroItem.Sync_Item()
|
| | |
| | |
|
| | | RefreshLordAttr(curPlayer)
|
| | |
|
| | | bookCnt = GetHeroBookActCnt(curPlayer)
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_HeroBook)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroBook, bookCnt)
|
| | | return
|
| | |
|
| | | def __doHeroBookStarLVUP(curPlayer, heroID):
|
| | |
| | | import ShareDefine
|
| | | import NetPackCommon
|
| | | import PlayerControl
|
| | | import PlayerSuccess
|
| | | import ChPyNetSendPack
|
| | | import IPY_GameWorld
|
| | | import IpyGameDataPY
|
| | |
| | | RefreshHorseAttr(curPlayer)
|
| | |
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HorseLVUP, costItemCount)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHorseLVUP, costItemCount)
|
| | | return
|
| | |
|
| | | #// B2 02 坐骑进阶 #tagCSHorseClassUP
|
| | |
| | | import PlayerTongTianLing
|
| | | import PlayerTask
|
| | | import PlayerOnline
|
| | | import PlayerSuccess
|
| | |
|
| | | #------------------------------------------------------------------------------
|
| | |
|
| | |
| | | SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSARealmLV, nextRealmLv)
|
| | | #更新排行榜
|
| | | PlayerBillboard.UpdateRealmBillboard(curPlayer)
|
| | | return True
|
| | |
| | | import ShareDefine
|
| | | import NetPackCommon
|
| | | import PlayerControl
|
| | | import OpenServerActivity
|
| | | import ChPyNetSendPack
|
| | | import IPY_GameWorld
|
| | | import ItemControler
|
| | | import IpyGameDataPY
|
| | | import PyGameData
|
| | |
| | | SyncSuccessAwardRecord(curPlayer)
|
| | | return
|
| | |
|
| | | def ResetSuccessByType(curPlayer, succType, ignoreFinish=True):
|
| | | def ResetSuccessByTypes(curPlayer, succTypeList, ignoreFinish=True, isNotify=True):
|
| | | ## 重置成就
|
| | | for succType in succTypeList:
|
| | | ResetSuccessByType(curPlayer, succType, ignoreFinish, isNotify)
|
| | | return
|
| | |
|
| | | def ResetSuccessByType(curPlayer, succType, ignoreFinish=True, isNotify=True):
|
| | | #重置某类型成就进度,一般用于先重置次数再重新计数,或者活动类
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", succType)
|
| | | if not ipyDataList:
|
| | | return
|
| | | succIDList = []
|
| | | syncTypeCondList = []
|
| | | for ipyData in ipyDataList:
|
| | | succID = ipyData.GetSuccID()
|
| | | if ignoreFinish and GetSuccHasGot(curPlayer, succID):
|
| | | continue
|
| | | conds = ipyData.GetCondition()
|
| | | SetSuccValue(curPlayer, succType, conds, 0)
|
| | | SetSuccHasGot(curPlayer, succID, 0)
|
| | | succIDList.append(succID)
|
| | | if [succType, conds] not in syncTypeCondList:
|
| | | syncTypeCondList.append([succType, conds])
|
| | | if isNotify:
|
| | | succIDList and SyncSuccessAwardRecord(curPlayer, succIDList, True)
|
| | | syncTypeCondList and SyncSuccessInfo(curPlayer, syncTypeCondList, True)
|
| | | return
|
| | |
|
| | | #def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
|
| | | # ## 根据多种条件更新进度,如装备多品质的
|
| | | # ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
|
| | | # if not ipyDataList:
|
| | | # return
|
| | | # updIDList = []
|
| | | # updsuccDataList = []
|
| | | # updConditionDict = {}
|
| | | # |
| | | # for condition, newCount in conditionCountDict.items():
|
| | | # addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
|
| | | # for ipyData in ipyDataList:
|
| | | # succID = ipyData.GetSuccID()
|
| | | # conds = ipyData.GetCondition()
|
| | | # needCnt = ipyData.GetNeedCnt()
|
| | | # |
| | | # tupleCond = tuple(conds) # 作为字典key用
|
| | | # |
| | | # if tupleCond not in updConditionDict:
|
| | | # updConditionDict[tupleCond] = [conds, 0, 0] # [条件, 更新值, 最大进度值]
|
| | | # updInfo = updConditionDict[tupleCond]
|
| | | # if updInfo[2] < needCnt:
|
| | | # updInfo[2] = needCnt
|
| | | # |
| | | # if not __CheckCanAddSuccess(curPlayer, ipyData, list(condition)):
|
| | | # continue
|
| | | # |
| | | # if succID not in updIDList:
|
| | | # updIDList.append(succID)
|
| | | # updsuccDataList.append(ipyData)
|
| | | # |
| | | # if tupleCond not in addCondList:
|
| | | # addCondList.append(tupleCond)
|
| | | # updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
|
| | | # |
| | | # # 没有找到更新目标不处理
|
| | | # #GameWorld.DebugLog(" updConditionDict=%s" % updConditionDict)
|
| | | # #GameWorld.DebugLog(" updIDList=%s" % updIDList)
|
| | | # if not updIDList:
|
| | | # return
|
| | | # |
| | | # # 先更新成就记录值后再判断完成与否
|
| | | # for cond, updCnt, maxCnt in updConditionDict.values():
|
| | | # if not updCnt:
|
| | | # continue
|
| | | # updCnt = min(maxCnt, updCnt)
|
| | | # if GetSuccValue(curPlayer, successType, cond) == updCnt:
|
| | | # continue
|
| | | # SetSuccValue(curPlayer, successType, cond, updCnt)
|
| | | # SyncSuccessInfo(curPlayer, syncTypeCondList)
|
| | | # return
|
| | | def UpdateEquipSuccess(curPlayer):
|
| | | # 装备相关成就
|
| | | |
| | | colorCountDict = {}
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | for equipPlace in ChConfig.Def_MainEquipPlaces:
|
| | | equipIndex = equipPlace - 1
|
| | | if equipIndex < 0 or equipIndex >= equipPack.GetCount():
|
| | | continue
|
| | | curEquip = equipPack.GetAt(equipIndex)
|
| | | if not curEquip or curEquip.IsEmpty():
|
| | | continue
|
| | | itemColor = curEquip.GetItemColor()
|
| | | condKey = (itemColor, )
|
| | | colorCountDict[condKey] = colorCountDict.get(condKey, 0) + 1
|
| | | |
| | | UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_OSAEquipColor, colorCountDict)
|
| | | return
|
| | |
|
| | | def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
|
| | | ## 根据多种条件更新进度,如装备多品质的
|
| | | # @param conditionCountDict: 条件对应件数,条件需用元组为key {(c, ...):cnt, ..}
|
| | | if successType in ShareDefine.OSASuccTypeList:
|
| | | if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
|
| | | return
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
|
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | updIDList = []
|
| | | updsuccDataList = []
|
| | | updConditionDict = {}
|
| | | |
| | | for condition, newCount in conditionCountDict.items():
|
| | | addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
|
| | | for ipyData in ipyDataList:
|
| | | succID = ipyData.GetSuccID()
|
| | | conds = ipyData.GetCondition()
|
| | | needCnt = ipyData.GetNeedCnt()
|
| | | |
| | | tupleCond = tuple(conds) # 作为字典key用
|
| | | |
| | | if tupleCond not in updConditionDict:
|
| | | updConditionDict[tupleCond] = [conds, 0, 0] # [条件, 更新值, 最大进度值]
|
| | | updInfo = updConditionDict[tupleCond]
|
| | | if updInfo[2] < needCnt:
|
| | | updInfo[2] = needCnt
|
| | | |
| | | if not __CheckCanAddSuccess(curPlayer, ipyData, list(condition)):
|
| | | continue
|
| | | |
| | | if succID not in updIDList:
|
| | | updIDList.append(succID)
|
| | | updsuccDataList.append(ipyData)
|
| | | |
| | | if tupleCond not in addCondList:
|
| | | addCondList.append(tupleCond)
|
| | | updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
|
| | | |
| | | # 没有找到更新目标不处理
|
| | | #GameWorld.DebugLog(" conditionCountDict=%s" % conditionCountDict)
|
| | | #GameWorld.DebugLog(" updConditionDict=%s" % updConditionDict)
|
| | | #GameWorld.DebugLog(" updIDList=%s" % updIDList)
|
| | | if not updIDList:
|
| | | return
|
| | | |
| | | # 先更新成就记录值后再判断完成与否
|
| | | syncTypeCondList = []
|
| | | for conds, updCnt, maxCnt in updConditionDict.values():
|
| | | if not updCnt:
|
| | | continue
|
| | | updCnt = min(maxCnt, updCnt)
|
| | | if GetSuccValue(curPlayer, successType, conds) == updCnt:
|
| | | continue
|
| | | SetSuccValue(curPlayer, successType, conds, updCnt)
|
| | | if [successType, conds] not in syncTypeCondList:
|
| | | syncTypeCondList.append([successType, conds])
|
| | | #GameWorld.DebugLog(" syncTypeCondList=%s" % syncTypeCondList)
|
| | | syncTypeCondList and SyncSuccessInfo(curPlayer, syncTypeCondList, True)
|
| | | return
|
| | |
|
| | | def UptateSuccessProgress(curPlayer, successType, newCnt, condition=[]):
|
| | | if successType in ShareDefine.OSASuccTypeList:
|
| | | if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
|
| | | return
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
|
| | | if not ipyDataList:
|
| | | return
|
| | |
| | | return
|
| | | if successType not in ShareDefine.SuccessTypeList:
|
| | | return
|
| | | |
| | | if successType in ShareDefine.OSASuccTypeList:
|
| | | if OpenServerActivity.GetOSACelebrationState(curPlayer) != 1:
|
| | | return
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
|
| | | if not ipyDataList:
|
| | | GameWorld.DebugLog("找不到成就数据successType=%s" % successType)
|
| | |
| | | needCnt = ipyData.GetNeedCnt()
|
| | | curValue = GetSuccValue(curPlayer, succType, conds)
|
| | | if curValue < needCnt:
|
| | | GameWorld.DebugLog("该成就未完成! succID=%s,curValue=%s < %s" % (succID, curValue, needCnt))
|
| | | GameWorld.DebugLog("该成就未完成! succID=%s,succType=%s,conds=%s,curValue=%s < %s" % (succID, succType, conds, curValue, needCnt))
|
| | | return
|
| | |
|
| | | SetSuccHasGot(curPlayer, succID)
|
| | |
| | | import PlayerActLunhuidian
|
| | | import PlayerActYunshi
|
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import OpenServerActivity
|
| | | import PlayerBillboard
|
| | | import ShareDefine
|
| | |
| | |
|
| | | if treasureType in TreasureType_HeroCallList:
|
| | | PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroCall, treasureCount)
|
| | | heroCallCnt = GetHeroCallCnt(curPlayer)
|
| | | if OpenServerActivity.GetOSAState(curPlayer, ShareDefine.Def_BT_OSA_HeroCall) == 1:
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, GetHeroCallCnt(curPlayer))
|
| | | |
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OSA_HeroCall, heroCallCnt)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSAHeroCall, heroCallCnt)
|
| | | |
| | | PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_Treasure, treasureType, treasureCount)
|
| | |
|
| | | # 给物品
|
| | |
| | | import PlayerGoldInvest
|
| | | import PlayerControl
|
| | | import IPY_GameWorld
|
| | | import PlayerSuccess
|
| | | import ShareDefine
|
| | | import PlayerTask
|
| | | import ChConfig
|
| | |
|
| | |
| | | SyncTreeInfo(curPlayer)
|
| | |
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_OSATreeLV, updTreeLV)
|
| | | return True
|
| | |
|
| | | def SyncTreeInfo(curPlayer):
|
| | |
| | | OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
|
| | | OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
|
| | | OperationActionName_SpringSale = "ActSpringSale" # 限时特惠活动
|
| | | OperationActionName_BossReborn = "ActBossReborn" # BOSS复活活动
|
| | | OperationActionName_FlashGiftbag = "ActFlashGiftbag" # 限时礼包活动
|
| | | OperationActionName_DailyGiftbag = "ActDailyGiftbag" # 每日礼包活动
|
| | | OperationActionName_FairyCeremony = "ActFairyCeremony" # 仙界盛典活动
|
| | |
| | | ]
|
| | | #所有的运营活动列表,含节日活动
|
| | | OperationActionNameList = [OperationActionName_ExpRate, OperationActionName_CostRebate,
|
| | | OperationActionName_BossReborn,OperationActionName_SpringSale, |
| | | OperationActionName_SpringSale, |
| | | OperationActionName_FlashGiftbag, OperationActionName_FairyCeremony,
|
| | | OperationActionName_RealmPoint, OperationActionName_FlashSale,
|
| | | OperationActionName_WishingWell, OperationActionName_TotalRecharge,
|
| | |
| | | #需要记录开启活动时的世界等级的运营活动
|
| | | NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
|
| | | OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
|
| | | OperationActionName_BossReborn, OperationActionName_TotalRecharge,
|
| | | OperationActionName_TotalRecharge,
|
| | | OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
|
| | | OperationActionName_SpringSale, OperationActionName_LuckyTreasure,
|
| | | OperationActionName_DailyGiftbag, OperationActionName_GrowupBuy,
|
| | |
| | | CDBPlayerRefresh_GoldRushEnergy, # 淘金令 285
|
| | | CDBPlayerRefresh_ArenaTicket, # 挑战券 286
|
| | | CDBPlayerRefresh_TehuiPoint, # 特惠印绶 287
|
| | | ) = range(146, 288)
|
| | | CDBPlayerRefresh_OSAPoint, # 开服庆典积分 288
|
| | | ) = range(146, 289)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_FamilyExp = 6 # 战盟经验
|
| | |
| | | TYPE_Price_GoldRushEnergy = 52 # 淘金令体力
|
| | | TYPE_Price_ArenaTicket = 53 # 演武场挑战券
|
| | | TYPE_Price_TehuiPoint = 54 # 特惠印绶
|
| | | TYPE_Price_OSAPoint = 55 # 开服庆典积分
|
| | | TYPE_Price_PayCoinDay = 98 # 代币时效,每日过天重置
|
| | | TYPE_Price_PayCoin = 99 # 代币
|
| | |
|
| | | #key可用于遍历所有货币,value仅GM相关会用到
|
| | | MoneyNameDict = {
|
| | | 1:"金币", 15:"公会贡献币", 41:"战锤", 42:"将星玉髓", 43:"将魂", 51:"招募积分", 52:"淘金令", 53:"挑战券", 54:"特惠印绶",
|
| | | 1:"金币", 15:"公会贡献币", 41:"战锤", 42:"将星玉髓", 43:"将魂", 51:"招募积分", 52:"淘金令", 53:"挑战券", 54:"特惠印绶", |
| | | 55:"可用开服庆典积分",
|
| | | 98:"代币时效", 99:"代币"
|
| | | }
|
| | | #MoneyNameDict = {
|
| | |
| | | TYPE_Price_GoldRushEnergy:CDBPlayerRefresh_GoldRushEnergy,
|
| | | TYPE_Price_ArenaTicket:CDBPlayerRefresh_ArenaTicket,
|
| | | TYPE_Price_TehuiPoint:CDBPlayerRefresh_TehuiPoint,
|
| | | TYPE_Price_OSAPoint:CDBPlayerRefresh_OSAPoint,
|
| | | TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
|
| | | #TYPE_Price_Rune:CDBPlayerRefresh_Rune,
|
| | | #TYPE_Price_RuneSplinters:CDBPlayerRefresh_RuneSplinters,
|
| | |
| | | GameFuncID_Travel = 44 # 游历
|
| | | GameFuncID_OSA_MainLevel = 45 # 开服关卡榜
|
| | | GameFuncID_OSA_HeroCall = 46 # 开服招募榜
|
| | | GameFuncID_OSA_Celebration = 47 # 开服庆典
|
| | |
|
| | | # 以下为暂时无用的
|
| | | GameFuncID_Pet = -1 # 宠物,灵宠 6
|
| | |
| | | Def_UniversalGameRecType_28,
|
| | | Def_UniversalGameRecType_BossInfo, # boss信息29
|
| | | Def_UniversalGameRecType_CrossBossInfo, # 跨服boss信息 30
|
| | | Def_UniversalGameRecType_BossFirstKill, # boss首杀 31
|
| | | Def_UniversalGameRecType_31,
|
| | | Def_UniversalGameRecType_CrossCollect, # 跨服采集记录信息 32
|
| | | Def_UniversalGameRecType_CrossChampionshipGroup, # 跨服排位争霸赛分组信息 33
|
| | | Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
|
| | |
| | | # 成就类型定义
|
| | | SuccessTypeList = (
|
| | | SuccType_MainLevel, # 通过主线关卡xxx 1
|
| | | ) = range(1, 1 + 1)
|
| | | SuccType_OSAMainLevel, # 开服庆典 - 通过主线关卡xxx 2
|
| | | SuccType_OSACutTree, # 消耗X个战锤 3
|
| | | SuccType_OSARealmLV, # 官职达到X级 4
|
| | | SuccType_OSATreeLV, # 仙树达到X级 5
|
| | | SuccType_OSAEquipColor, # 穿戴x件x品质及以上装备 6
|
| | | SuccType_OSAHorseLVUP, # 坐骑升级x次 7
|
| | | SuccType_OSAHeroLVUP, # 武将升级X次 8
|
| | | SuccType_OSAHeroStarUP, # 武将升星x次 9
|
| | | SuccType_OSAHeroCall, # 武将招募x次 10
|
| | | SuccType_OSAHeroBook, # 武将图鉴激活x个 11
|
| | | SuccType_OSAArenaBattle, # 演武场战斗x次 12
|
| | | SuccType_OSAFBZhanchui, # 白骨盈野击败xx 13
|
| | | SuccType_OSAFBTianzi, # 挑战天子的考验x次 14
|
| | | SuccType_OSAGoldRush, # 淘金采集x次 15
|
| | | SuccType_OSAGoldRushWorkers, # 拥有x名监工 16
|
| | | SuccType_OSAKillNPC, # 击败X只怪物 17
|
| | | SuccType_OSAEquipDecompose, # 分解装备x次 18
|
| | | SuccType_OSAGetMoney, # 累计获得xx货币 19
|
| | | ) = range(1, 1 + 19)
|
| | |
|
| | | # 开服庆典成就类型
|
| | | OSASuccTypeList = range(SuccType_OSAMainLevel, SuccType_OSAGetMoney + 1)
|
| | |
|
| | | # 不向下适配检查的成就类型(指相对较高成就条件不会增加较低成就条件的进度)
|
| | | UnDownCheckSuccessTypeList = []
|