10302 【越南】【英语】【砍树】【tqxbqy】【btgotq】仙缘-服务端
| | |
| | | BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | BYTE ResetType; //重置类型,0-0点重置;1-5点重置
|
| | | };
|
| | |
| | | BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | BYTE ResetType; //重置类型,0-0点重置;1-5点重置
|
| | | };
|
| | |
| | | BYTE ActNum; //活动分组编号, 活动类型 * 10 + 不同界面编号
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | dict NotifyInfoStart; //全服提示信息 - 相对开始时间
|
| | | dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
|
| | | list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
|
| | | };
|
| | |
|
| | | //登录奖励时间表
|
| | |
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | WORD RelateFuncID; //关联功能ID
|
| | | BYTE FuncActDays; //功能活动天数
|
| | | BYTE FuncLoop; //功能是否循环
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | BYTE ResetType; //重置类型,0-0点重置;1-5点重置
|
| | |
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | WORD RelateFuncID; //关联功能ID
|
| | | BYTE FuncActDays; //功能活动天数
|
| | | BYTE FuncLoop; //功能是否循环
|
| | | WORD LVLimit; //限制等级
|
| | | BYTE IsDayReset; //是否每天重置
|
| | | BYTE ResetType; //重置类型,0-0点重置;1-5点重置
|
| | |
| | | DWORD _CfgID; //配置ID
|
| | | char StartDate; //开启日期
|
| | | char EndDate; //结束日期
|
| | | WORD RelateFuncID; //关联功能ID
|
| | | BYTE FuncActDays; //功能活动天数
|
| | | BYTE FuncLoop; //功能是否循环
|
| | | WORD LVLimit; //限制等级
|
| | | list RepSignCostMoneyInfo; //补签消耗货币类型数量
|
| | | BYTE TemplateID; //登录奖励模板编号
|
| | | WORD AwardExCTGID; //扩展奖励礼包充值ID
|
| | | WORD ActZhanlingType; //关联活动战令类型
|
| | | };
|
| | |
|
| | | //登录活动奖励模板表新
|
| | |
| | | BYTE _TemplateID; //模板ID
|
| | | BYTE DayNum; //第X天从1开始
|
| | | list LoginAwardItemList; //奖励列表[[物品ID,个数,是否拍品], ...]
|
| | | list LoginAwardItemListEx; //扩展奖励列表[[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //登录奖励时间表
|
| | |
| | | DayNum = 0 #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
|
| | | Count = 0 #(BYTE Count)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
|
| | | CountEx = 0 #(BYTE CountEx)// 额外奖励物品数
|
| | | AwardItemListEx = list() #(vector<tagMCActLoginNewItem> AwardItemListEx)// 额外奖励物品列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | temAwardItemList = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CountEx):
|
| | | temAwardItemListEx = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemListEx.ReadData(_lpData, _pos)
|
| | | self.AwardItemListEx.append(temAwardItemListEx)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.DayNum = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | self.CountEx = 0
|
| | | self.AwardItemListEx = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.CountEx):
|
| | | length += self.AwardItemListEx[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.CountEx)
|
| | | for i in range(self.CountEx):
|
| | | data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | DayNum:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s
|
| | | AwardItemList:%s,
|
| | | CountEx:%d,
|
| | | AwardItemListEx:%s
|
| | | '''\
|
| | | %(
|
| | | self.DayNum,
|
| | | self.Count,
|
| | | "...",
|
| | | self.CountEx,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | RepSignMoneyType = 0 #(BYTE RepSignMoneyType)// 补签消耗货币类型
|
| | | RepSignMoneyValue = 0 #(DWORD RepSignMoneyValue)// 补签消耗货币值
|
| | | AwardExCTGID = 0 #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
|
| | | DayCount = 0 #(BYTE DayCount)
|
| | | AwardDayList = list() #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
|
| | | data = None
|
| | |
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.DayCount):
|
| | | temAwardDayList = tagMCActLoginNewDay()
|
| | |
| | | self.LimitLV = 0
|
| | | self.RepSignMoneyType = 0
|
| | | self.RepSignMoneyValue = 0
|
| | | self.AwardExCTGID = 0
|
| | | self.DayCount = 0
|
| | | self.AwardDayList = list()
|
| | | return
|
| | |
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.DayCount):
|
| | | length += self.AwardDayList[i].GetLength()
|
| | |
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
|
| | | data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
|
| | | data = CommFunc.WriteWORD(data, self.AwardExCTGID)
|
| | | data = CommFunc.WriteBYTE(data, self.DayCount)
|
| | | for i in range(self.DayCount):
|
| | | data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
|
| | |
| | | LimitLV:%d,
|
| | | RepSignMoneyType:%d,
|
| | | RepSignMoneyValue:%d,
|
| | | AwardExCTGID:%d,
|
| | | DayCount:%d,
|
| | | AwardDayList:%s
|
| | | '''\
|
| | |
| | | self.LimitLV,
|
| | | self.RepSignMoneyType,
|
| | | self.RepSignMoneyValue,
|
| | | self.AwardExCTGID,
|
| | | self.DayCount,
|
| | | "..."
|
| | | )
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActNum", c_ubyte), # 活动编号
|
| | | ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取
|
| | | ("LoginAward", c_int), # 普通奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ("LoginAwardEx", c_int), # 额外奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x70
|
| | | self.ActNum = 0
|
| | | self.LoginAward = 0
|
| | | self.LoginAwardEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActNum:%d,
|
| | | LoginAward:%d
|
| | | LoginAward:%d,
|
| | | LoginAwardEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActNum,
|
| | | self.LoginAward
|
| | | self.LoginAward,
|
| | | self.LoginAwardEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | robPlayerID = mineItemData.RobPlayerID
|
| | | # 赶走抢夺者
|
| | | if robPlayerID and robPlayerID == tagPlayerID:
|
| | | __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
|
| | | __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex, "out")
|
| | |
|
| | | # 帮助的发奖
|
| | | if funcLineID == 0:
|
| | |
| | | return
|
| | | if workerCount <= 0:
|
| | | if not isPreview:
|
| | | __DoCancelPull(playerID, areaPlayerID, itemIndex)
|
| | | __DoCancelPull(playerID, areaPlayerID, itemIndex, "cancel")
|
| | | return
|
| | | GameWorld.DebugLog("请求福地拉物品! areaPlayerID=%s,itemIndex=%s,workerCount=%s,workerState=%s,workerTotal=%s,isPreview=%s"
|
| | | % (areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview), playerID)
|
| | |
| | | SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
|
| | | return
|
| | |
|
| | | def __DoCancelPull(playerID, areaPlayerID, itemIndex):
|
| | | def __DoCancelPull(playerID, areaPlayerID, itemIndex, reason=""):
|
| | | ## 取消拉取
|
| | | mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
|
| | | mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
|
| | |
| | | __RefreshMineItemSpeed(mineItemData, True)
|
| | |
|
| | | SyncMineAreaItemInfo(areaPlayerID, [itemIndex], notifyPlayerIDListEx)
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
| | | if curPlayer:
|
| | | MapServer_QueryPlayerResult(curPlayer, "MineAreaCancelPull", [areaPlayerID, reason])
|
| | | return
|
| | |
|
| | | def __DoMineItemRefresh(areaPlayerID, areaPlayer=None, isSys=False, isSuper=False, isNotify=True, refreshIndexList=None, setPosition=None, setItemLV=None, setMineID=None):
|
| | |
| | | ("BYTE", "ActNum", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("BYTE", "ResetType", 0),
|
| | | ),
|
| | |
| | | ("BYTE", "ActNum", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("BYTE", "ResetType", 0),
|
| | | ),
|
| | |
| | | ("BYTE", "ActNum", 0),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("dict", "NotifyInfoStart", 0),
|
| | | ("dict", "NotifyInfoEnd", 0),
|
| | | ("list", "NotifyInfoLoop", 0),
|
| | | ),
|
| | |
|
| | | "ActLoginAward":(
|
| | |
| | | def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
|
| | | def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
|
| | | def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
|
| | | def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
|
| | | def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
|
| | | def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
|
| | | def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE |
| | | def GetIsDayReset(self): return self.attrTuple[6] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[7] # 重置类型,0-0点重置;1-5点重置 BYTE |
| | | |
| | | # 任务活动时间表 |
| | | class IPY_ActTask(): |
| | |
| | | def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
|
| | | def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
|
| | | def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
|
| | | def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
|
| | | def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
|
| | | def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
|
| | | def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE |
| | | def GetIsDayReset(self): return self.attrTuple[6] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[7] # 重置类型,0-0点重置;1-5点重置 BYTE |
| | | |
| | | # 登录活动奖励时间表新 |
| | | class IPY_ActLoginNew(): |
| | |
| | | def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
|
| | | def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
|
| | | def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
|
| | | def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
|
| | | def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
|
| | | def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
|
| | | def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list |
| | | def GetEndDate(self): return self.attrTuple[5] # 结束日期 char |
| | | |
| | | # 登录奖励时间表 |
| | | class IPY_ActLoginAward(): |
| | |
| | | CDBPlayerRefresh_TiandaoFruit, # 天道果 267
|
| | | CDBPlayerRefresh_Tuijinbi, # 推金币 268
|
| | | CDBPlayerRefresh_PayCoinDay, # 代币时效 269
|
| | | ) = range(146, 270)
|
| | | CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
|
| | | CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
|
| | | ) = range(146, 272)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | TYPE_Price_HorsePetTrainScore = 45 # 骑宠养成积分
|
| | | TYPE_Price_GubaoTrainScore = 46 # 古宝养成积分
|
| | | TYPE_Price_TiandaoFruit = 47 # 天道果
|
| | | TYPE_Price_Tuijinbi = 48 # 推金币
|
| | | TYPE_Price_XianyuanScore = 49 # 仙缘积分
|
| | | TYPE_Price_HuanjinggeScore = 50 # 幻境阁积分
|
| | | TYPE_Price_PayCoinDay = 98 # 代币时效,每日过天重置
|
| | | TYPE_Price_PayCoin = 99 # 代币
|
| | |
|
| | |
| | | 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘",
|
| | | 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点",
|
| | | 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果",
|
| | | 49:"仙缘积分", 50:"幻境阁积分",
|
| | | 98:"代币时效", 99:"代币"
|
| | | }
|
| | |
|
| | |
| | | TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
|
| | | TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
|
| | | TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
|
| | | TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
|
| | | TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
|
| | | TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
|
| | | }
|
| | |
|
| | |
| | | #登录活动新
|
| | | Def_PDict_ActLoginNewID = "ActLoginNewID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
|
| | | Def_PDict_ActLoginNewAward = "ActLoginNewAward_%s" # 登录活动奖励记录,按位记录登录天是否已领取,参数:(活动编号)
|
| | | Def_PDict_ActLoginNewAwardEx = "ActLoginNewAwardEx_%s" # 登录活动额外奖励记录,按位记录登录天是否已领取,参数:(活动编号)
|
| | |
|
| | | #任务活动
|
| | | Def_PDict_ActTaskID = "ActTaskID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
|
| | |
| | | ActTaskType_HorseTrainItem3, # 消耗X个坐骑培养3道具 13
|
| | | ActTaskType_PetTrainItem3, # 消耗X个灵宠培养3道具 14
|
| | | ActTaskType_HorsePetActScore, # 获得X点骑宠养成积分 15
|
| | | ) = range(1, 1 + 15)
|
| | | ActTaskType_KillNPC, # 杀怪x次 16
|
| | | ActTaskType_TreasureJipin, # 极品寻宝达到x次 17
|
| | | ActTaskType_TreasureRune, # 符印寻宝达到x次 18
|
| | | ActTaskType_TreasureJueshi, # 绝世寻宝达到x次 19
|
| | | ActTaskType_TreasureGatherTheSoul, # 猎魔寻宝达到x次 20
|
| | | ActTaskType_GubaoLVUp, # 古宝升级X次 21
|
| | | ActTaskType_GubaoStarUp, # 古宝升星X次 22
|
| | | ActTaskType_Sign, # 签到X次 23
|
| | | ActTaskType_MoneyPray, # 灵石祈愿X次 24
|
| | | ActTaskType_ExpPray, # 修为祈愿X次 25
|
| | | ActTaskType_Arena, # 竞技场挑战X次 26
|
| | | ActTaskType_MineAreaEndSelf, # 福地完成采集自己道具X次 27
|
| | | ActTaskType_MineAreaEndOther, # 福地完成采集他人道具X次 28
|
| | | ActTaskType_FruitStoveEatTimes, # 服用丹药X次 29
|
| | | ActTaskType_SkyTower, # 天星塔X次 30
|
| | | ActTaskType_FMT, # 封魔坛X次 31
|
| | | ActTaskType_EquipPlus, # 装备强化X次 32
|
| | | ActTaskType_EquipWash, # 装备洗炼X次 33
|
| | | ) = range(1, 1 + 33)
|
| | |
|
| | | # 套装枚举,普通套装,强化套装
|
| | | (EquipSuitType_Normal,
|
| | |
| | | DayNum = 0 #(BYTE DayNum)//天编号,从1开始,过期未签到领取的天可消耗货币补签领取
|
| | | Count = 0 #(BYTE Count)// 奖励物品数
|
| | | AwardItemList = list() #(vector<tagMCActLoginNewItem> AwardItemList)// 奖励物品列表
|
| | | CountEx = 0 #(BYTE CountEx)// 额外奖励物品数
|
| | | AwardItemListEx = list() #(vector<tagMCActLoginNewItem> AwardItemListEx)// 额外奖励物品列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | temAwardItemList = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemList.ReadData(_lpData, _pos)
|
| | | self.AwardItemList.append(temAwardItemList)
|
| | | self.CountEx,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CountEx):
|
| | | temAwardItemListEx = tagMCActLoginNewItem()
|
| | | _pos = temAwardItemListEx.ReadData(_lpData, _pos)
|
| | | self.AwardItemListEx.append(temAwardItemListEx)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.DayNum = 0
|
| | | self.Count = 0
|
| | | self.AwardItemList = list()
|
| | | self.CountEx = 0
|
| | | self.AwardItemListEx = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AwardItemList[i].GetLength()
|
| | | length += 1
|
| | | for i in range(self.CountEx):
|
| | | length += self.AwardItemListEx[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.CountEx)
|
| | | for i in range(self.CountEx):
|
| | | data = CommFunc.WriteString(data, self.AwardItemListEx[i].GetLength(), self.AwardItemListEx[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | DayNum:%d,
|
| | | Count:%d,
|
| | | AwardItemList:%s
|
| | | AwardItemList:%s,
|
| | | CountEx:%d,
|
| | | AwardItemListEx:%s
|
| | | '''\
|
| | | %(
|
| | | self.DayNum,
|
| | | self.Count,
|
| | | "...",
|
| | | self.CountEx,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | RepSignMoneyType = 0 #(BYTE RepSignMoneyType)// 补签消耗货币类型
|
| | | RepSignMoneyValue = 0 #(DWORD RepSignMoneyValue)// 补签消耗货币值
|
| | | AwardExCTGID = 0 #(WORD AwardExCTGID)// 扩展奖励礼包充值ID,大于0时代表可以购买礼包每日登录可领取额外奖励
|
| | | DayCount = 0 #(BYTE DayCount)
|
| | | AwardDayList = list() #(vector<tagMCActLoginNewDay> AwardDayList)// 奖励天列表
|
| | | data = None
|
| | |
| | | self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RepSignMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RepSignMoneyValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.AwardExCTGID,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.DayCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.DayCount):
|
| | | temAwardDayList = tagMCActLoginNewDay()
|
| | |
| | | self.LimitLV = 0
|
| | | self.RepSignMoneyType = 0
|
| | | self.RepSignMoneyValue = 0
|
| | | self.AwardExCTGID = 0
|
| | | self.DayCount = 0
|
| | | self.AwardDayList = list()
|
| | | return
|
| | |
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += 1
|
| | | for i in range(self.DayCount):
|
| | | length += self.AwardDayList[i].GetLength()
|
| | |
| | | data = CommFunc.WriteWORD(data, self.LimitLV)
|
| | | data = CommFunc.WriteBYTE(data, self.RepSignMoneyType)
|
| | | data = CommFunc.WriteDWORD(data, self.RepSignMoneyValue)
|
| | | data = CommFunc.WriteWORD(data, self.AwardExCTGID)
|
| | | data = CommFunc.WriteBYTE(data, self.DayCount)
|
| | | for i in range(self.DayCount):
|
| | | data = CommFunc.WriteString(data, self.AwardDayList[i].GetLength(), self.AwardDayList[i].GetBuffer())
|
| | |
| | | LimitLV:%d,
|
| | | RepSignMoneyType:%d,
|
| | | RepSignMoneyValue:%d,
|
| | | AwardExCTGID:%d,
|
| | | DayCount:%d,
|
| | | AwardDayList:%s
|
| | | '''\
|
| | |
| | | self.LimitLV,
|
| | | self.RepSignMoneyType,
|
| | | self.RepSignMoneyValue,
|
| | | self.AwardExCTGID,
|
| | | self.DayCount,
|
| | | "..."
|
| | | )
|
| | |
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ActNum", c_ubyte), # 活动编号
|
| | | ("LoginAward", c_int), # 是否已领取,按天索引0代表第1天记录当天是否已领取
|
| | | ("LoginAward", c_int), # 普通奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ("LoginAwardEx", c_int), # 额外奖励领取记录,按天对应二进制位记录是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x70
|
| | | self.ActNum = 0
|
| | | self.LoginAward = 0
|
| | | self.LoginAwardEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ActNum:%d,
|
| | | LoginAward:%d
|
| | | LoginAward:%d,
|
| | | LoginAwardEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ActNum,
|
| | | self.LoginAward
|
| | | self.LoginAward,
|
| | | self.LoginAwardEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | import PlayerSuccess
|
| | | import IpyGameDataPY
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import ChEquip
|
| | |
| | | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
|
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Plus, 1)
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Plus, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipPlus)
|
| | | return
|
| | |
|
| | | def __EquipMayaPlusChange(curPlayer, packType, curEquip, index, updPlusLV):
|
| | |
| | | import PlayerActGarbageSorting
|
| | | import DataRecordPack
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | import ShareDefine
|
| | | import ItemCommon
|
| | | import ChConfig
|
| | |
| | | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipWash, 1)
|
| | | PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_EquipWash)
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Wash, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_EquipWash)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | import PlayerNewFairyCeremony
|
| | | import PlayerFeastTravel
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | import PlayerWeekParty
|
| | | import EventShell
|
| | | #------------------------------------------------------------------------------
|
| | |
| | | PlayerControl.GiveMoney(curPlayer, giveMoneyType, addMoney, ChConfig.Def_GiveMoney_Pray, addDataDict, False)
|
| | | PlayerControl.NotifyCode(curPlayer, 'MoneyPray_HowMuch', [addMoney, giveMoneyType])
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_MoneyPray, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MoneyPray)
|
| | |
|
| | | #经验祈愿
|
| | | elif buyType == ChConfig.VIPPrivilege_ExpPray:
|
| | |
| | | if not isCostItem: #用物品不增加次数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasPrayCnt % buyType, curCnt + 1)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_ExpPray, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_ExpPray)
|
| | | else:
|
| | | return
|
| | | EventShell.EventRespons_Pray(curPlayer, buyType)
|
| | |
| | | if not msgList:
|
| | | GameWorld.DebugAnswer(curPlayer, "重置奖励: Zhanling 0 类型")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置战令: Zhanling 类型 是否激活普通 高级")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置进度: Zhanling v 类型 进度值")
|
| | | return
|
| | |
|
| | | value = msgList[0]
|
| | |
| | | PlayerZhanling.ResetZhanling(curPlayer, zhanlingType, backValue)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置战令(%s)!" % (zhanlingType))
|
| | |
|
| | | elif value == "v":
|
| | | zhanlingType = msgList[1] if len(msgList) > 1 else 0
|
| | | value1 = msgList[2] if len(msgList) > 2 else 0
|
| | | retValue = PlayerZhanling.SetZhanlingValue(curPlayer, zhanlingType, value1)
|
| | | if retValue == None:
|
| | | GameWorld.DebugAnswer(curPlayer, "该战令不用设置进度值! %s" % (zhanlingType))
|
| | | return
|
| | | GameWorld.DebugAnswer(curPlayer, "战令进度:Type=%s,V=%s" % (zhanlingType, retValue))
|
| | | else:
|
| | | zhanlingType = value
|
| | | activiteC = msgList[1] if len(msgList) > 1 else 0
|
| | |
| | | endDateStr = "%d-%d-%d" % (endDateTime.year, endDateTime.month, endDateTime.day)
|
| | | return startDateStr, endDateStr
|
| | |
|
| | | def GetActRelateFuncInfo(curPlayer, actName, actInfo, playerActID):
|
| | | ## 获取活动关联玩家功能开启信息
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | if not cfgID:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataNotLog(actName, cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | | if not hasattr(ipyData, "GetRelateFuncID"):
|
| | | return
|
| | | relateFuncID = ipyData.GetRelateFuncID()
|
| | | if not relateFuncID:
|
| | | return
|
| | | funcActDays = ipyData.GetFuncActDays()
|
| | | funcLoop = ipyData.GetFuncLoop()
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | isInAct = False # 是否活动中
|
| | | actID = playerActID # 玩家实际的活动ID
|
| | | if not actInfo.get(ShareDefine.ActKey_State, 0):
|
| | | #DebugLog("关联功能非活动中默认不开活动! actName=%s,cfgID=%s" % (actName, cfgID), playerID)
|
| | | return isInAct, actID
|
| | | isOpen = GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, relateFuncID, True)
|
| | | if not isOpen:
|
| | | DebugLog("关联功能未开启默认不开活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
|
| | | return isInAct, actID
|
| | | |
| | | isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum)
|
| | | serverTime = GetCurrentTime()
|
| | | newAct = False
|
| | | |
| | | if isDayRest:
|
| | | newAct = True
|
| | | DebugLog("关联功能活动,每日重置的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
|
| | | |
| | | elif not playerActID:
|
| | | newAct = True
|
| | | DebugLog("关联功能活动,玩家首次开启活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
|
| | | |
| | | # 有活动期限的
|
| | | elif funcActDays:
|
| | | startDayDate, endDayDate = GetActRelateFuncDate(ipyData, playerActID)
|
| | | if startDayDate <= serverTime < endDayDate:
|
| | | isInAct = True
|
| | | DebugLog("关联功能活动,正常活动中! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
|
| | | elif serverTime >= endDayDate:
|
| | | if funcLoop:
|
| | | newAct = True
|
| | | DebugLog("关联功能活动,活动结束,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
|
| | | else:
|
| | | DebugLog("关联功能活动,活动结束,不循环! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID) |
| | | else:
|
| | | DebugLog("关联功能活动,玩家活动ID超过当前时间,可能是调时间引起,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
|
| | | newAct = True
|
| | | |
| | | # 永久的,默认活动中
|
| | | else:
|
| | | isInAct = True
|
| | | DebugLog("关联功能活动,永久开放的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
|
| | | |
| | | if newAct:
|
| | | isInAct = True
|
| | | resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置 |
| | | startDateStr = "%d-%d-%d" % (serverTime.year, serverTime.month, serverTime.day)
|
| | | if resetType == 1:
|
| | | startDayDate = datetime.datetime.strptime("%s 05:00:00" % (startDateStr), ChConfig.TYPE_Time_Format) |
| | | else:
|
| | | startDayDate = datetime.datetime.strptime("%s 00:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
|
| | | actID = int(time.mktime(startDayDate.timetuple()))
|
| | | |
| | | DebugLog("关联功能活动! actName=%s,cfgID=%s,actNum=%s,relateFuncID=%s,playerActID=%s,actID=%s,isInAct=%s" |
| | | % (actName, cfgID, actNum, relateFuncID, playerActID, actID, isInAct), playerID)
|
| | | return isInAct, actID
|
| | |
|
| | | def GetActRelateFuncDate(ipyData, startTime, returnYmdStr=False):
|
| | | funcActDays = ipyData.GetFuncActDays()
|
| | | isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
|
| | | resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置
|
| | | if isDayRest:
|
| | | funcActDays = 1
|
| | | |
| | | startDayDate = ChangeTimeNumToDatetime(startTime, ChConfig.TYPE_Time_Format)
|
| | | if funcActDays:
|
| | | startDayStr = str(startDayDate)[:10]
|
| | | if resetType == 1:
|
| | | endDayDate = datetime.datetime.strptime("%s 04:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=funcActDays)
|
| | | elif resetType == 2: |
| | | endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
|
| | | else:
|
| | | endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
|
| | | else:
|
| | | endDateStr = ipyData.GetEndDate()
|
| | | if resetType == 1:
|
| | | endDayDate = datetime.datetime.strptime("%s 04:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
|
| | | elif resetType == 2: |
| | | endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
|
| | | else:
|
| | | endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
|
| | | |
| | | if returnYmdStr:
|
| | | startDateStr = "%d-%d-%d" % (startDayDate.year, startDayDate.month, startDayDate.day)
|
| | | endDateStr = "%d-%d-%d" % (endDayDate.year, endDayDate.month, endDayDate.day)
|
| | | return startDateStr, endDateStr
|
| | | return startDayDate, endDayDate
|
| | |
|
| | | ##获得服务器系统时间
|
| | | # @param 无
|
| | | # @return 返回值. 时间Data格式
|
| | |
| | | import PlayerFeastTravel
|
| | | import PlayerWeekParty
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | import EventReport
|
| | | import PlayerTeam
|
| | | import NPCHurtManager
|
| | |
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FMT, addCnt)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_FMT, addCnt)
|
| | | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_FMT, addCnt)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_FMT, addCnt)
|
| | | return prizeItemList
|
| | |
|
| | | def OnPickUpItem(curPlayer, curItem, tick):
|
| | |
| | | import PlayerActivity
|
| | | import PlayerBillboard
|
| | | import PlayerSuccess
|
| | | import PlayerActTask
|
| | | import GameObj
|
| | | import GameWorldProcess
|
| | |
|
| | |
| | | elif fbStep > FB_State_Fighting:
|
| | | PlayerControl.PlayerLeaveFB(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | |
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_SkyTower)
|
| | | |
| | | # 不做处理,有副本行为客户端发包选择挑战关卡
|
| | | #EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_SkyTower, 0, ChConfig.CME_Log_Start)
|
| | | return
|
| | |
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("WORD", "RelateFuncID", 0),
|
| | | ("BYTE", "FuncActDays", 0),
|
| | | ("BYTE", "FuncLoop", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("BYTE", "ResetType", 0),
|
| | |
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("WORD", "RelateFuncID", 0),
|
| | | ("BYTE", "FuncActDays", 0),
|
| | | ("BYTE", "FuncLoop", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("BYTE", "ResetType", 0),
|
| | |
| | | ("DWORD", "CfgID", 1),
|
| | | ("char", "StartDate", 0),
|
| | | ("char", "EndDate", 0),
|
| | | ("WORD", "RelateFuncID", 0),
|
| | | ("BYTE", "FuncActDays", 0),
|
| | | ("BYTE", "FuncLoop", 0),
|
| | | ("WORD", "LVLimit", 0),
|
| | | ("list", "RepSignCostMoneyInfo", 0),
|
| | | ("BYTE", "TemplateID", 0),
|
| | | ("WORD", "AwardExCTGID", 0),
|
| | | ("WORD", "ActZhanlingType", 0),
|
| | | ),
|
| | |
|
| | | "ActLoginNewAward":(
|
| | | ("BYTE", "TemplateID", 1),
|
| | | ("BYTE", "DayNum", 0),
|
| | | ("list", "LoginAwardItemList", 0),
|
| | | ("list", "LoginAwardItemListEx", 0),
|
| | | ),
|
| | |
|
| | | "ActLoginAward":(
|
| | |
| | | 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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
|
| | | def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
|
| | | def GetCTGIDList(self): return self.attrTuple[6] # 充值ID列表 [ctgID, ...] list
|
| | | def GetCTGCountAwardInfo(self): return self.attrTuple[7] # 累计充值次数额外奖励 dict
|
| | | def GetCTGCountDayResetList(self): return self.attrTuple[8] # 每日重置累充次数列表 list
|
| | | def GetActShopType(self): return self.attrTuple[9] # 商城类型 DWORD |
| | | def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
|
| | | def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
|
| | | def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
|
| | | def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
|
| | | def GetIsDayReset(self): return self.attrTuple[7] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[8] # 重置类型,0-0点重置;1-5点重置 BYTE
|
| | | def GetCTGIDList(self): return self.attrTuple[9] # 充值ID列表 [ctgID, ...] list
|
| | | def GetCTGCountAwardInfo(self): return self.attrTuple[10] # 累计充值次数额外奖励 dict
|
| | | def GetCTGCountDayResetList(self): return self.attrTuple[11] # 每日重置累充次数列表 list
|
| | | def GetActShopType(self): return self.attrTuple[12] # 商城类型 DWORD |
| | | |
| | | # 任务活动时间表 |
| | | class IPY_ActTask(): |
| | |
| | | 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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
|
| | | def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE
|
| | | def GetTemplateID(self): return self.attrTuple[6] # 登录奖励模板编号 BYTE
|
| | | def GetRoundMax(self): return self.attrTuple[7] # 任务最大轮次 BYTE |
| | | def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
|
| | | def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
|
| | | def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
|
| | | def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
|
| | | def GetIsDayReset(self): return self.attrTuple[7] # 是否每天重置 BYTE
|
| | | def GetResetType(self): return self.attrTuple[8] # 重置类型,0-0点重置;1-5点重置 BYTE
|
| | | def GetTemplateID(self): return self.attrTuple[9] # 登录奖励模板编号 BYTE
|
| | | def GetRoundMax(self): return self.attrTuple[10] # 任务最大轮次 BYTE |
| | | |
| | | # 任务活动模板表 |
| | | class IPY_ActTaskTemp(): |
| | |
| | | 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 GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD
|
| | | def GetRepSignCostMoneyInfo(self): return self.attrTuple[4] # 补签消耗货币类型数量 list
|
| | | def GetTemplateID(self): return self.attrTuple[5] # 登录奖励模板编号 BYTE |
| | | def GetRelateFuncID(self): return self.attrTuple[3] # 关联功能ID WORD
|
| | | def GetFuncActDays(self): return self.attrTuple[4] # 功能活动天数 BYTE
|
| | | def GetFuncLoop(self): return self.attrTuple[5] # 功能是否循环 BYTE
|
| | | def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
|
| | | def GetRepSignCostMoneyInfo(self): return self.attrTuple[7] # 补签消耗货币类型数量 list
|
| | | def GetTemplateID(self): return self.attrTuple[8] # 登录奖励模板编号 BYTE
|
| | | def GetAwardExCTGID(self): return self.attrTuple[9] # 扩展奖励礼包充值ID WORD
|
| | | def GetActZhanlingType(self): return self.attrTuple[10] # 关联活动战令类型 WORD |
| | | |
| | | # 登录活动奖励模板表新 |
| | | class IPY_ActLoginNewAward(): |
| | |
| | | |
| | | def GetTemplateID(self): return self.attrTuple[0] # 模板ID BYTE
|
| | | def GetDayNum(self): return self.attrTuple[1] # 第X天从1开始 BYTE
|
| | | def GetLoginAwardItemList(self): return self.attrTuple[2] # 奖励列表[[物品ID,个数,是否拍品], ...] list |
| | | def GetLoginAwardItemList(self): return self.attrTuple[2] # 奖励列表[[物品ID,个数,是否拍品], ...] list
|
| | | def GetLoginAwardItemListEx(self): return self.attrTuple[3] # 扩展奖励列表[[物品ID,个数,是否拍品], ...] list |
| | | |
| | | # 登录奖励时间表 |
| | | class IPY_ActLoginAward(): |
| | |
| | | import NPCHurtManager
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | import PlayerZhanling
|
| | | import FamilyRobBoss
|
| | | import IpyGameDataPY
|
| | | import PlayerGubao
|
| | |
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_WorldBoss, 1)
|
| | | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_WorldBOSS, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_WorldBoss, 1)
|
| | | PlayerZhanling.AddZhanlingValue(curPlayer, PlayerZhanling.ZhanlingType_Huanjingge, 1)
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_WorldBoss, 1)
|
| | |
|
| | | elif limitIndex == ShareDefine.Def_Boss_Func_Home:
|
| | |
| | | if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'):
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_KillNPC)
|
| | | PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_KillNPC)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_KillSpecificNPC, 1, [npcID])
|
| | |
|
| | | if ChConfig.IsGameBoss(curNPC):
|
| | |
| | | import PlayerFreeGoods
|
| | | import FunctionNPCCommon
|
| | | import PlayerGreatMaster
|
| | | import PlayerActBuyCountGift
|
| | | import PlayerActLoginNew
|
| | | import PlayerActTask
|
| | | import IPY_GameWorld
|
| | | import ItemCommon
|
| | | import ItemControler
|
| | |
| | | GameWorld.DebugLog("notifyGameServerFuncIDList=%s" % notifyGameServerFuncIDList)
|
| | | msgInfo = str(notifyGameServerFuncIDList)
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FuncOpen", msgInfo, len(msgInfo))
|
| | | |
| | | PlayerActTask.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
|
| | | PlayerActLoginNew.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
|
| | | PlayerActBuyCountGift.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
|
| | | |
| | | return
|
| | |
|
| | | ## 功能是否可用
|
| | |
| | | import GameWorld |
| | | import ChConfig |
| | | |
| | | def OnDay(curPlayer): |
| | | def OnDay(curPlayer, onEventType): |
| | | OnCheckRelateFuncAct(curPlayer) |
| | | if onEventType != ShareDefine.Def_OnEventType: |
| | | return |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BuyCountGift, {}).values(): |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | continue |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum): |
| | | continue |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) |
| | | if not ipyData: |
| | | continue |
| | |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) |
| | | isReset = __CheckPlayerBuyCountGiftAction(curPlayer, actNum) |
| | | # 活动中同步活动信息 |
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State): |
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum): |
| | | Sync_BuyCountGiftActionInfo(curPlayer, actNum) |
| | | Sync_BuyCountGiftPlayerInfo(curPlayer, actNum) |
| | | |
| | | return |
| | | |
| | | def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None): |
| | | ## 检查关联功能ID开启的活动 |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BuyCountGift, {}).values(): |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | continue |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) |
| | | if not ipyData: |
| | | continue |
| | | if not hasattr(ipyData, "GetRelateFuncID"): |
| | | continue |
| | | relateFuncID = ipyData.GetRelateFuncID() |
| | | if not relateFuncID: |
| | | continue |
| | | if openFuncIDList and relateFuncID not in openFuncIDList: |
| | | continue |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) |
| | | __CheckPlayerBuyCountGiftAction(curPlayer, actNum) |
| | | |
| | | return |
| | | |
| | | def RefreshBuyCountGiftActionInfo(actNum): |
| | |
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum) # 玩家身上的活动ID |
| | | |
| | | funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActBuyCountGift", actInfo, playerActID) |
| | | if funcActInfo: |
| | | isInAct, actID = funcActInfo |
| | | if not isInAct: |
| | | return |
| | | |
| | | # 活动ID 相同的话不处理 |
| | | if actID == playerActID: |
| | | GameWorld.DebugLog("购买次数礼包活动ID不变,不处理! actNum=%s,cfgID=%s,actID=%s" % (actNum, cfgID, actID), curPlayer.GetPlayerID()) |
| | |
| | | |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | GameWorld.DebugLog("购买次数礼包非活动中无法领取奖励! actNum=%s" % actNum, playerID) |
| | | return |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum): |
| | | return |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | |
| | |
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BuyCountGift, actNum) |
| | | if not actInfo.get(ShareDefine.ActKey_State): |
| | | return |
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BuyCountGiftID % actNum) |
| | | if not playerActID: |
| | | return |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID) |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) |
| | | if not ipyData: |
| | | return |
| | | CTGCountAwardInfo = ipyData.GetCTGCountAwardInfo() |
| | | |
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) |
| | | if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID(): |
| | | startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True) |
| | | else: |
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) |
| | | startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr) |
| | | actInfo = ChPyNetSendPack.tagMCActBuyCountGiftInfo() |
| | | actInfo.ActNum = actNum |
| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import PyGameData
|
| | | import PlayerCoin
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import PlayerZhanling
|
| | | import ChPyNetSendPack
|
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | | import NetPackCommon
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import time
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | |
|
| | |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | isReset = __CheckPlayerActLoginAction(curPlayer, actNum)
|
| | | # 活动中同步活动信息
|
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State):
|
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum):
|
| | | Sync_ActLoginActionInfo(curPlayer, actNum)
|
| | | Sync_ActLoginPlayerInfo(curPlayer, actNum)
|
| | |
|
| | | return
|
| | |
|
| | | def OnDay(curPlayer):
|
| | | OnCheckRelateFuncAct(curPlayer)
|
| | | return
|
| | |
|
| | | def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None):
|
| | | ## 检查关联功能ID开启的活动
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActLoginNew, {}).values():
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | continue
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
|
| | | if not ipyData:
|
| | | continue
|
| | | if not hasattr(ipyData, "GetRelateFuncID"):
|
| | | continue
|
| | | relateFuncID = ipyData.GetRelateFuncID()
|
| | | if not relateFuncID:
|
| | | continue
|
| | | if openFuncIDList and relateFuncID not in openFuncIDList:
|
| | | continue
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | __CheckPlayerActLoginAction(curPlayer, actNum)
|
| | | |
| | | return
|
| | |
|
| | | def RefreshActLoginActionInfo(actNum):
|
| | |
| | |
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) # 玩家身上的活动ID
|
| | |
|
| | | funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActLoginNew", actInfo, playerActID)
|
| | | if funcActInfo:
|
| | | isInAct, actID = funcActInfo
|
| | | if not isInAct:
|
| | | return
|
| | | |
| | | # 活动ID 相同的话不处理
|
| | | if actID == playerActID:
|
| | | GameWorld.DebugLog("新登录活动ID不变,不处理! actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID())
|
| | |
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewID % actNum, actID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAwardEx % actNum, 0)
|
| | |
|
| | | if state:
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
|
| | | if ipyData:
|
| | | if ipyData.GetAwardExCTGID():
|
| | | PlayerCoin.DoResetCTGCountByIDList(curPlayer, "ActLoginNew", [ipyData.GetAwardExCTGID()])
|
| | | if ipyData.GetActZhanlingType():
|
| | | PlayerZhanling.ResetZhanling(curPlayer, ipyData.GetActZhanlingType())
|
| | | Sync_ActLoginActionInfo(curPlayer, actNum)
|
| | | Sync_ActLoginPlayerInfo(curPlayer, actNum)
|
| | | return True
|
| | |
| | | def OnGetActLoginAward(curPlayer, dayNum, actNum):
|
| | | ## 领取活动奖励
|
| | |
|
| | | isAwardEx = dayNum / 1000
|
| | | dayNum = dayNum % 1000
|
| | | actNum = GameWorld.ToIntDef(actNum)
|
| | |
|
| | | actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum)
|
| | |
| | | GameWorld.DebugLog("非登录活动中! actNum=%s" % actNum)
|
| | | return
|
| | |
|
| | | curDayNum = actInfo.get(ShareDefine.ActKey_DayIndex) + 1
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum)
|
| | | if not playerActID:
|
| | | return
|
| | | |
| | | curDayNum = GameWorld.GetDiff_Day(int(time.time()), playerActID) + 1
|
| | | if curDayNum < dayNum:
|
| | | GameWorld.DebugLog("未到可领取的登录天,无法领取! actNum=%s,curDayNum=%s < %s" % (actNum, curDayNum, dayNum))
|
| | | return
|
| | |
| | | if not findIpyData:
|
| | | GameWorld.DebugLog("找不到对应登录天奖励! actNum=%s,cfgID=%s,templateID=%s,dayNum=%s" % (actNum, cfgID, templateID, dayNum))
|
| | | return
|
| | | awardItemList = findIpyData.GetLoginAwardItemList()
|
| | | |
| | | if isAwardEx:
|
| | | awardExCTGID = ipyData.GetAwardExCTGID()
|
| | | if not awardExCTGID:
|
| | | GameWorld.DebugLog("该登录活动没有扩展奖励! actNum=%s,cfgID=%s" % (actNum, cfgID))
|
| | | return
|
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % awardExCTGID):
|
| | | GameWorld.DebugLog("该登录活动扩展奖励礼包未购买,无法领取! actNum=%s,cfgID=%s,awardExCTGID=%s" % (actNum, cfgID, awardExCTGID))
|
| | | return
|
| | | stateKey = ChConfig.Def_PDict_ActLoginNewAwardEx
|
| | | awardItemList = findIpyData.GetLoginAwardItemListEx()
|
| | | else:
|
| | | stateKey = ChConfig.Def_PDict_ActLoginNewAward
|
| | | awardItemList = findIpyData.GetLoginAwardItemList()
|
| | |
|
| | | awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum)
|
| | | if not awardItemList:
|
| | | return
|
| | | |
| | | awardRecord = curPlayer.NomalDictGetProperty(stateKey % actNum)
|
| | | if awardRecord & pow(2, dayNum):
|
| | | GameWorld.DebugLog("登录活动该天已领奖! actNum=%s,dayNum=%s,awardRecord=%s" % (actNum, dayNum, awardRecord))
|
| | | return
|
| | |
| | | return
|
| | |
|
| | | if costMoneyType and costMoneyValue:
|
| | | PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum})
|
| | | PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum, "isAwardEx":isAwardEx})
|
| | |
|
| | | updAwardRecord = awardRecord | pow(2, dayNum)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, updAwardRecord)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, stateKey % actNum, updAwardRecord)
|
| | | Sync_ActLoginPlayerInfo(curPlayer, actNum)
|
| | |
|
| | | GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,awardItemList=%s" % (actNum, dayNum, awardItemList))
|
| | | GameWorld.DebugLog("领取登录活动奖励! actNum=%s,dayNum=%s,isAwardEx=%s,awardItemList=%s,curDayNum=%s" % (actNum, dayNum, isAwardEx, awardItemList, curDayNum))
|
| | |
|
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActLoginNew", False, {}])
|
| | |
| | | clientPack = ChPyNetSendPack.tagMCActLoginPlayerInfoNew()
|
| | | clientPack.ActNum = actNum
|
| | | clientPack.LoginAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum)
|
| | | clientPack.LoginAwardEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAwardEx % actNum)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | |
| | | if not actInfo:
|
| | | return
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum)
|
| | | if not playerActID:
|
| | | return
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID)
|
| | |
| | | if not dayIpyDataList:
|
| | | return
|
| | |
|
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
| | | if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID():
|
| | | startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True)
|
| | | else:
|
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
| | | actPack = ChPyNetSendPack.tagMCActLoginNew()
|
| | | actPack.Clear()
|
| | | actPack.ActNum = actNum
|
| | |
| | | actPack.LimitLV = ipyData.GetLVLimit()
|
| | | actPack.RepSignMoneyType = moneyType
|
| | | actPack.RepSignMoneyValue = moneyValue
|
| | | actPack.AwardExCTGID = ipyData.GetAwardExCTGID()
|
| | |
|
| | | actPack.AwardDayList = []
|
| | | for dayIpyData in dayIpyDataList:
|
| | |
| | | dayInfo.AwardItemList.append(itemInfo)
|
| | | dayInfo.Count = len(dayInfo.AwardItemList)
|
| | |
|
| | | dayInfo.AwardItemListEx = []
|
| | | for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemListEx():
|
| | | itemInfo = ChPyNetSendPack.tagMCActLoginNewItem()
|
| | | itemInfo.ItemID = itemID
|
| | | itemInfo.ItemCount = itemCount
|
| | | itemInfo.IsBind = isAuctionItem
|
| | | dayInfo.AwardItemListEx.append(itemInfo)
|
| | | dayInfo.CountEx = len(dayInfo.AwardItemListEx)
|
| | | |
| | | actPack.AwardDayList.append(dayInfo)
|
| | | actPack.DayCount = len(actPack.AwardDayList)
|
| | | NetPackCommon.SendFakePack(curPlayer, actPack)
|
| | |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | isReset = __CheckPlayerActTaskAction(curPlayer, actNum)
|
| | | # 活动中同步活动信息
|
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State):
|
| | | if not isReset and actInfo.get(ShareDefine.ActKey_State) and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
|
| | | Sync_ActTaskActionInfo(curPlayer, actNum)
|
| | | Sync_ActTaskPlayerValueInfo(curPlayer, actNum)
|
| | | Sync_ActTaskPlayerInfo(curPlayer, actNum)
|
| | |
|
| | | return
|
| | |
|
| | | def OnDay(curPlayer):
|
| | | OnCheckRelateFuncAct(curPlayer)
|
| | | return
|
| | |
|
| | | def OnCheckRelateFuncAct(curPlayer, openFuncIDList=None):
|
| | | ## 检查关联功能ID开启的活动
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActTask, {}).values():
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | continue
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
|
| | | if not ipyData:
|
| | | continue
|
| | | if not hasattr(ipyData, "GetRelateFuncID"):
|
| | | continue
|
| | | relateFuncID = ipyData.GetRelateFuncID()
|
| | | if not relateFuncID:
|
| | | continue
|
| | | if openFuncIDList and relateFuncID not in openFuncIDList:
|
| | | continue
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | __CheckPlayerActTaskAction(curPlayer, actNum)
|
| | | |
| | | return
|
| | |
|
| | | def RefreshActTaskActionInfo(actNum):
|
| | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum) # 玩家身上的活动ID
|
| | | lastTempID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskTempID % actNum)
|
| | |
|
| | | funcActInfo = GameWorld.GetActRelateFuncInfo(curPlayer, "ActTask", actInfo, playerActID)
|
| | | if funcActInfo:
|
| | | isInAct, actID = funcActInfo
|
| | | if not isInAct:
|
| | | return
|
| | | |
| | | # 活动ID 相同的话不处理
|
| | | if actID == playerActID:
|
| | | GameWorld.DebugLog("任务活动ID不变,不处理! actNum=%s,actID=%s" % (actNum, actID), playerID)
|
| | |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | continue
|
| | | |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
|
| | | continue
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
|
| | | if not ipyData:
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def AddActTaskValue(curPlayer, taskType, addValue):
|
| | | def AddActTaskValue(curPlayer, taskType, addValue=1):
|
| | | ## 增加任务活动进度值
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | continue
|
| | | |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum):
|
| | | continue
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
|
| | | if not ipyData:
|
| | |
| | | return
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskID % actNum) # 玩家身上的活动ID
|
| | | if not playerActID:
|
| | | return
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
|
| | | if not ipyData:
|
| | |
| | | if not taskIpyDataList:
|
| | | return
|
| | |
|
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
| | | if hasattr(ipyData, "GetRelateFuncID") and ipyData.GetRelateFuncID():
|
| | | startDateStr, endDateStr = GameWorld.GetActRelateFuncDate(ipyData, playerActID, True)
|
| | | else:
|
| | | startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
| | | actPack = ChPyNetSendPack.tagMCActTaskInfo()
|
| | | actPack.Clear()
|
| | | actPack.ActNum = actNum
|
| | |
| | | import IPY_GameWorld
|
| | | import ItemControler
|
| | | import EventShell
|
| | | import PlayerActTask
|
| | | import PlayerWeekParty
|
| | | import PlayerFeastTravel
|
| | | import PlayerActivity
|
| | |
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Arena, 1)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Arena, 1)
|
| | | PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Arena)
|
| | | return
|
| | |
|
| | | def __DoUpdateArenaScore(curPlayer, cmdDict={}):
|
| | |
| | | import IpyGameDataPY
|
| | | import PlayerPet
|
| | | import PlayerRefineStove
|
| | | import PlayerActTask
|
| | | import PlayerSuccess
|
| | | import SkillShell
|
| | |
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, eatCntKey, eatCnt)
|
| | | if funcIndex == ShareDefine.Def_AttrFruitFunc_Stove:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseStoveBylv, hasUseCnt, [item.GetLV()])
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_FruitStoveEatTimes) # 算次数,不算个数
|
| | |
|
| | | alchemyIpyData = IpyGameDataPY.GetIpyGameDataByCondition("Alchemy", {"AlchemItemID":itemID}, False, True)
|
| | | if alchemyIpyData:
|
| | |
| | | PlayerVip.VipOnDay(curPlayer)
|
| | |
|
| | | PlayerCoin.OnDay(curPlayer)
|
| | | PlayerActBuyCountGift.OnDay(curPlayer)
|
| | |
|
| | | #成就
|
| | | PlayerSuccess.SuccOnDay(curPlayer)
|
| | |
| | | PlayerTongTianLing.OnDay(curPlayer, onEventType)
|
| | | #bossƾ֤
|
| | | PlayerActBossTrial.PlayerOnDay(curPlayer, onEventType)
|
| | | #任务活动
|
| | | PlayerActTask.OnDay(curPlayer)
|
| | | #登录活动
|
| | | PlayerActLoginNew.OnDay(curPlayer)
|
| | | #购买次数礼包
|
| | | PlayerActBuyCountGift.OnDay(curPlayer, onEventType)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | import PlayerDienstgrad
|
| | | import PlayerGatherTheSoul
|
| | | import PlayerActGubao
|
| | | import PlayerActTask
|
| | | import PlayerCoat
|
| | |
|
| | | GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性 x次
|
| | |
| | | Sync_GubaoInfo(curPlayer, [gubaoID])
|
| | |
|
| | | PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoStarUp)
|
| | | return
|
| | |
|
| | | def DoGubaoAddFreePoint(curPlayer, gubaoID=0):
|
| | |
| | | Sync_GubaoInfo(curPlayer, [gubaoID])
|
| | |
|
| | | PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_GubaoLVUp)
|
| | | return
|
| | |
|
| | | def GetGubaoTotalLVStar(curPlayer):
|
| | |
| | | import IpyGameDataPY
|
| | | import IPY_GameWorld
|
| | | import ChPyNetSendPack
|
| | | import PlayerActTask
|
| | | import NetPackCommon
|
| | | import ItemControler
|
| | | import ItemCommon
|
| | |
| | | if msgType == "MineAreaAwardGet":
|
| | | awardInfoList = dataMsg[0]
|
| | | __DoGiveMineAreaAward(curPlayer, awardInfoList)
|
| | | |
| | | |
| | | ## 取消拉取 (包含主动 或 被动驱赶)
|
| | | elif msgType == "MineAreaCancelPull":
|
| | | areaPlayerID, reason = dataMsg
|
| | | __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason)
|
| | | |
| | | return
|
| | |
|
| | | def __DoGiveMineAreaAward(curPlayer, awardInfoList):
|
| | |
| | | GUIDList.append(GUID)
|
| | | GameWorld.DebugLog("结算福地奖励! areaPlayerID=%s,mineID=%s,itemLV=%s,itemID=%s,itemCount=%s,awardTime=%s,isToday=%s,workerCount=%s %s"
|
| | | % (areaPlayerID, mineID, itemLV, itemID, itemCount, GameWorld.ChangeTimeNumToStr(awardTime), isToday, workerCount, GUID), playerID)
|
| | | __OnMineAreaPullEnd(curPlayer, areaPlayerID, "OK")
|
| | |
|
| | | if addEnergyUsed:
|
| | | energyUsed += addEnergyUsed
|
| | |
| | | SendToGameServer_MineArea(curPlayer, "MineAreaAwardGetOK", [GUIDList, awardItemList])
|
| | | return
|
| | |
|
| | | def __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason):
|
| | | ## 拉取结束额外处理, 包含拉完、取消、被驱赶等
|
| | | GameWorld.DebugLog("__OnMineAreaPullEnd: areaPlayerID=%s, reason=%s" % (areaPlayerID, reason))
|
| | | if curPlayer.GetPlayerID() == areaPlayerID:
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndSelf)
|
| | | else:
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndOther)
|
| | | return
|
| | |
|
| | | def OnMineTreasureByCTGID(curPlayer, ctgID):
|
| | | ## 充值激活聚宝盆
|
| | | treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
|
| | |
| | | import ChPyNetSendPack
|
| | | import PlayerMagicWeapon
|
| | | import PlayerTongTianLing
|
| | | import PlayerActTask
|
| | | import PlayerPet
|
| | | import PlayerControl
|
| | | import GameWorld
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, "SignInText2", [ChConfig.Def_SkillID_PetSignDay, curEffect.GetEffectID(), curEffect.GetEffectValue(0)])
|
| | |
|
| | | PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_Sign, 1)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Sign)
|
| | | return
|
| | |
|
| | | ## 签到总奖励天数
|
| | |
| | | TreasureTypeList = (
|
| | | TreasureType_Jipin, # 极品寻宝 1
|
| | | TreasureType_Rune, # 符印寻宝 2
|
| | | TreasureType_Jueshi, # 绝世君宝 3
|
| | | TreasureType_Jueshi, # 绝世寻宝 3
|
| | | TreasureType_GatherTheSoul, # 聚魂猎魔 4
|
| | | TreasureType_Gubao, # 古宝寻宝 5
|
| | | ) = range(1, 1 + 5)
|
| | |
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureRune, treasureCount)
|
| | | elif treasureType == TreasureType_Jipin:
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJipin, treasureCount)
|
| | | elif treasureType == TreasureType_Jueshi:
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_JSTreasure, treasureCount)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_JSTreasure, treasureCount)
|
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_JSTreasure, treasureCount)
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureJueshi, treasureCount)
|
| | | elif treasureType == TreasureType_GatherTheSoul:
|
| | | pass
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGatherTheSoul, treasureCount)
|
| | | elif treasureType == TreasureType_Gubao:
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount)
|
| | |
|
| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import ShareDefine
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | |
| | |
|
| | | # 战令类型
|
| | | ZhanlingTypeList = (
|
| | | ZhanlingType_LV,
|
| | | ZhanlingType_Realm,
|
| | | ZhanlingType_SkyTower,
|
| | | ZhanlingType_GubaoStar,
|
| | | ZhanlingType_Login,
|
| | | ZhanlingType_GatherTheSoulLV,
|
| | | ZhanlingType_HorsePetTrain,
|
| | | ZhanlingType_GubaoTrain,
|
| | | ) = range(1, 1 + 8)
|
| | | ZhanlingType_LV, # 等级 1
|
| | | ZhanlingType_Realm, # 境界 2
|
| | | ZhanlingType_SkyTower, # 天星塔 3
|
| | | ZhanlingType_GubaoStar, # 古宝总星数 4
|
| | | ZhanlingType_Login, # 登录 5
|
| | | ZhanlingType_GatherTheSoulLV, # 聚魂 6
|
| | | ZhanlingType_HorsePetTrain, # 骑宠养成 7
|
| | | ZhanlingType_GubaoTrain, # 古宝养成 8
|
| | | ZhanlingType_Xianyuan, # 仙缘 9
|
| | | ZhanlingType_Huanjingge, # 幻境阁 10
|
| | | ) = range(1, 1 + 10)
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | for zhanlingType in ZhanlingTypeList:
|
| | |
| | | updStateH = GameWorld.SetBitValue(stateH, zhanlingType, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updStateH)
|
| | | if zhanlingType == ZhanlingType_Xianyuan:
|
| | | backValue = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore)
|
| | | PlayerControl.SetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore, 0)
|
| | | GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)"
|
| | | % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
|
| | |
|
| | |
| | | PlayerControl.SendMailByKey("ZhanlingRewardUnget", [playerID], itemList, paramList)
|
| | | return
|
| | |
|
| | | def AddZhanlingValue(curPlayer, zhanlingType, addValue=1):
|
| | | if zhanlingType not in [ZhanlingType_Huanjingge]:
|
| | | return
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
|
| | | updValue = min(ChConfig.Def_UpperLimit_DWord, curValue + addValue)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, updValue)
|
| | | GameWorld.DebugLog("增加战令进度: zhanlingType=%s,addValue=%s,curValue=%s,updValue=%s" |
| | | % (zhanlingType, addValue, curValue, updValue), curPlayer.GetPlayerID())
|
| | | SyncZhanlingInfo(curPlayer, zhanlingType, [])
|
| | | return updValue
|
| | |
|
| | | def SetZhanlingValue(curPlayer, zhanlingType, value1):
|
| | | if zhanlingType not in [ZhanlingType_Huanjingge]:
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, value1)
|
| | | GameWorld.DebugLog("设置战令进度: zhanlingType=%s,value1=%s" % (zhanlingType, value1), curPlayer.GetPlayerID())
|
| | | SyncZhanlingInfo(curPlayer, zhanlingType, [])
|
| | | return value1
|
| | |
|
| | | def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
|
| | | ## 领取战令奖励
|
| | | rewardID = GameWorld.ToIntDef(rewardID)
|
| | |
| | | curValue = PlayerActHorsePetTrain.GetActHorsePetTrainScore(curPlayer)
|
| | | elif zhanlingType == ZhanlingType_GubaoTrain:
|
| | | curValue = PlayerActGubao.GetActGubaoTrainScore(curPlayer)
|
| | | elif zhanlingType == ZhanlingType_Xianyuan:
|
| | | curValue = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanScore)
|
| | | elif zhanlingType == ZhanlingType_Huanjingge:
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
|
| | | else:
|
| | | return
|
| | |
|
| | |
| | |
|
| | | # 更新已领取成功标记
|
| | | GameWorld.SetDictValueByBit(curPlayer, rewardKey, rewardIndex, 1, True, [zhanlingType])
|
| | | SyncZhanlingInfo(curPlayer, zhanlingType, ipyData)
|
| | | SyncZhanlingInfo(curPlayer, zhanlingType, [ipyData])
|
| | | GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,rewardType=%s,itemList=%s" % (zhanlingType, needValue, rewardType, itemList), playerID)
|
| | |
|
| | | # 给物品
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def SyncZhanlingInfo(curPlayer, zhanlingType, ipyData=None):
|
| | | def SyncZhanlingInfo(curPlayer, zhanlingType, ipyDataList=None):
|
| | |
|
| | | ipyDataList = []
|
| | | if ipyData == None:
|
| | | if ipyDataList == None:
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
|
| | | else:
|
| | | ipyDataList = [ipyData]
|
| | | |
| | | if not ipyDataList:
|
| | | return
|
| | | |
| | | |
| | | rewardList = []
|
| | | for ipyData in ipyDataList:
|
| | | rewardIndex = ipyData.GetRewardIndex()
|
| | |
| | | CDBPlayerRefresh_TiandaoFruit, # 天道果 267
|
| | | CDBPlayerRefresh_Tuijinbi, # 推金币 268
|
| | | CDBPlayerRefresh_PayCoinDay, # 代币时效 269
|
| | | ) = range(146, 270)
|
| | | CDBPlayerRefresh_XianyuanScore, # 仙缘积分 270
|
| | | CDBPlayerRefresh_HuanjinggeScore, # 幻境阁积分 271
|
| | | ) = range(146, 272)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | TYPE_Price_HorsePetTrainScore = 45 # 骑宠养成积分
|
| | | TYPE_Price_GubaoTrainScore = 46 # 古宝养成积分
|
| | | TYPE_Price_TiandaoFruit = 47 # 天道果
|
| | | TYPE_Price_Tuijinbi = 48 # 推金币
|
| | | TYPE_Price_XianyuanScore = 49 # 仙缘积分
|
| | | TYPE_Price_HuanjinggeScore = 50 # 幻境阁积分
|
| | | TYPE_Price_PayCoinDay = 98 # 代币时效,每日过天重置
|
| | | TYPE_Price_PayCoin = 99 # 代币
|
| | |
|
| | |
| | | 16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘",
|
| | | 29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点",
|
| | | 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果",
|
| | | 49:"仙缘积分", 50:"幻境阁积分",
|
| | | 98:"代币时效", 99:"代币"
|
| | | }
|
| | |
|
| | |
| | | TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
|
| | | TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
|
| | | TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
|
| | | TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
|
| | | TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
|
| | | TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
|
| | | }
|
| | |
|