| | |
| | | list LVAttrValueList; //每级额外属性值(非累积)
|
| | | };
|
| | |
|
| | | //任务表
|
| | |
|
| | | struct tagTask
|
| | | {
|
| | | WORD _TaskID; //任务ID
|
| | | BYTE TaskType; //任务类型
|
| | | list TaskConds; //任务条件[...]
|
| | | DWORD NeedValue; //所需任务值
|
| | | list AwardItemList; //奖励物品列表 [[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //境界修仙之路
|
| | |
|
| | | struct tagRealmXXZL
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 10 当前任务信息 #tagMCTaskInfo
|
| | |
|
| | | class tagMCTaskInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TaskID", c_int), # 任务ID
|
| | | ("CurValue", c_int), # 当前进度值
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | self.TaskID = 0
|
| | | self.CurValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTaskInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TaskID:%d,
|
| | | CurValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TaskID,
|
| | | self.CurValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTaskInfo=tagMCTaskInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Cmd,m_NAtagMCTaskInfo.SubCmd))] = m_NAtagMCTaskInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 21 仙树信息 #tagMCTreeInfo
|
| | |
|
| | | class tagMCTreeInfo(Structure):
|
| | |
| | | Def_PDict_TreeLVUPState = "TreeLVUPState" # 仙树升级状态;0-未升级;1-升级中
|
| | | Def_PDict_TreeLVUPRemainTime = "TreeLVUPRemainTime" # 仙树升级剩余时间,秒
|
| | | Def_PDict_TreeLVUPRefreshTime = "TreeLVUPRefreshTime" # 仙树升级上次刷新时间戳
|
| | |
|
| | | #任务-简化版任务,有且仅有一个进行中的任务
|
| | | Def_PDict_TaskIDLast = "TaskIDLast" # 上一次完成的任务ID
|
| | | Def_PDict_TaskID = "TaskID" # 当前进行中的任务ID
|
| | | Def_PDict_TaskValue = "TaskValue" # 当前进行中的任务进度
|
| | | #-------------------------------------------------------------------------------
|
| | | #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
|
| | |
|
| | |
| | | Def_RewardType_FamilyBossHurt, #仙盟boss伤害奖励 63
|
| | | Def_RewardType_DailyPackBuyGift, #打包直购礼包奖励 64
|
| | | Def_RewardType_Zhanling, #战令奖励 65
|
| | | )= range(66)
|
| | | Def_RewardType_Task, #任务奖励 66
|
| | | )= range(67)
|
| | |
|
| | |
|
| | | #boss复活相关活动定义
|
| | |
| | | TTLTaskType_CrossBoss, # 跨服boss击杀x次 18
|
| | | ) = range(1, 1 + 18)
|
| | |
|
| | | # 任务类型定义
|
| | | TaskTypeList = (
|
| | | TaskType_LV, # 等级提升至x级 1
|
| | | TaskType_CutTree, # 砍树x次 2
|
| | | TaskType_EquipDecompose, # 分解装备x次 3
|
| | | TaskType_FBPass, # 副本过关到xxx 4
|
| | | TaskType_Arena, # 挑战竞技场x次 5
|
| | | ) = range(1, 1 + 5)
|
| | |
|
| | | # 充值点券处理类型
|
| | | (
|
| | | CoinType_Gold, # 直接充仙玉 0
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 10 当前任务信息 #tagMCTaskInfo
|
| | |
|
| | | class tagMCTaskInfo(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TaskID", c_int), # 任务ID
|
| | | ("CurValue", c_int), # 当前进度值
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB1
|
| | | self.SubCmd = 0x10
|
| | | self.TaskID = 0
|
| | | self.CurValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTaskInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 10 当前任务信息 //tagMCTaskInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TaskID:%d,
|
| | | CurValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TaskID,
|
| | | self.CurValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTaskInfo=tagMCTaskInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTaskInfo.Cmd,m_NAtagMCTaskInfo.SubCmd))] = m_NAtagMCTaskInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 21 仙树信息 #tagMCTreeInfo
|
| | |
|
| | | class tagMCTreeInfo(Structure):
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GM.Commands.Task
|
| | | #
|
| | | # @todo:任务
|
| | | # @author hxp
|
| | | # @date 2023-12-20
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 任务
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2023-12-20 12:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import PlayerTask
|
| | | import ChConfig
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | | # @param playerList 参数列表 [ missionID]
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, playerList):
|
| | | |
| | | if len(playerList) == 0:
|
| | | GameWorld.DebugAnswer(curPlayer, "设置任务: Task 任务ID 进度")
|
| | | return
|
| | | |
| | | taskID = playerList[0]
|
| | | taskValue = playerList[1] if len(playerList) > 1 else 0
|
| | | if taskID:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("Task", taskID)
|
| | | if not ipyData:
|
| | | GameWorld.DebugAnswer(curPlayer, "该任务ID不存在:%s" % taskID)
|
| | | return
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskID, taskID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue, taskValue)
|
| | | PlayerTask.SyncTaskInfo(curPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置任务ID:%s 进度:%s" % (taskID, taskValue))
|
| | | return
|
| | |
|
| | |
| | | ("list", "LVAttrValueList", 0),
|
| | | ),
|
| | |
|
| | | "Task":(
|
| | | ("WORD", "TaskID", 1),
|
| | | ("BYTE", "TaskType", 0),
|
| | | ("list", "TaskConds", 0),
|
| | | ("DWORD", "NeedValue", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "RealmXXZL":(
|
| | | ("WORD", "TaskID", 1),
|
| | | ("BYTE", "TaskType", 0),
|
| | |
| | | def GetEatItemAttrValueList(self): return self.EatItemAttrValueList # 每X个培养丹增加属性值=EatCntEverytime
|
| | | def GetLVAttrTypeList(self): return self.LVAttrTypeList # 每级额外属性类(非累积)
|
| | | def GetLVAttrValueList(self): return self.LVAttrValueList # 每级额外属性值(非累积) |
| | | |
| | | # 任务表 |
| | | class IPY_Task(): |
| | | |
| | | def __init__(self): |
| | | self.TaskID = 0
|
| | | self.TaskType = 0
|
| | | self.TaskConds = []
|
| | | self.NeedValue = 0
|
| | | self.AwardItemList = [] |
| | | return |
| | | |
| | | def GetTaskID(self): return self.TaskID # 任务ID
|
| | | def GetTaskType(self): return self.TaskType # 任务类型
|
| | | def GetTaskConds(self): return self.TaskConds # 任务条件[...]
|
| | | def GetNeedValue(self): return self.NeedValue # 所需任务值
|
| | | def GetAwardItemList(self): return self.AwardItemList # 奖励物品列表 [[物品ID,个数,是否拍品], ...] |
| | | |
| | | # 境界修仙之路 |
| | | class IPY_RealmXXZL(): |
| | |
| | | self.ipyLingQiAttrLen = len(self.ipyLingQiAttrCache)
|
| | | self.ipyLingQiTrainCache = self.__LoadFileData("LingQiTrain", IPY_LingQiTrain)
|
| | | self.ipyLingQiTrainLen = len(self.ipyLingQiTrainCache)
|
| | | self.ipyTaskCache = self.__LoadFileData("Task", IPY_Task)
|
| | | self.ipyTaskLen = len(self.ipyTaskCache)
|
| | | self.ipyRealmXXZLCache = self.__LoadFileData("RealmXXZL", IPY_RealmXXZL)
|
| | | self.ipyRealmXXZLLen = len(self.ipyRealmXXZLCache)
|
| | | self.ipyRealmCache = self.__LoadFileData("Realm", IPY_Realm)
|
| | |
| | | def GetLingQiAttrByIndex(self, index): return self.ipyLingQiAttrCache[index]
|
| | | def GetLingQiTrainCount(self): return self.ipyLingQiTrainLen
|
| | | def GetLingQiTrainByIndex(self, index): return self.ipyLingQiTrainCache[index]
|
| | | def GetTaskCount(self): return self.ipyTaskLen
|
| | | def GetTaskByIndex(self, index): return self.ipyTaskCache[index]
|
| | | def GetRealmXXZLCount(self): return self.ipyRealmXXZLLen
|
| | | def GetRealmXXZLByIndex(self, index): return self.ipyRealmXXZLCache[index]
|
| | | def GetRealmCount(self): return self.ipyRealmLen
|
| | |
| | | import PlayerZhanling
|
| | | import PlayerCutTree
|
| | | import PlayerLianTi
|
| | | import PlayerTask
|
| | | import PlayerYinji
|
| | | import PlayerLove
|
| | | import GameObj
|
| | |
| | | PlayerGubao.OnPlayerLogin(curPlayer)
|
| | | PlayerShentong.OnPlayerLogin(curPlayer)
|
| | | PlayerZhanling.OnPlayerLogin(curPlayer)
|
| | | PlayerTask.OnPlayerLogin(curPlayer)
|
| | | PlayerCutTree.OnPlayerLogin(curPlayer)
|
| | | # 上线查询一次充值订单
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
| | | #打包直购礼包奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_DailyPackBuyGift:
|
| | | PlayerGoldGift.GetDailyPackBuyGift(curPlayer, dataEx)
|
| | | #任务奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_Task:
|
| | | PlayerTask.GetTaskAward(curPlayer, dataEx)
|
| | | #战令奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_Zhanling:
|
| | | PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
|
| | |
| | | import PlayerActivity
|
| | | import PlayerSuccess
|
| | | import PlayerGubao
|
| | | import PlayerTask
|
| | |
|
| | | def DoArenaOpen(curPlayer):
|
| | | ## 竞技场功能开启
|
| | |
| | | # 触发任务
|
| | | EventShell.EventRespons_ArenaBattleOver(curPlayer)
|
| | | EventShell.EventRespons_ArenaHighestScore(curPlayer)
|
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_Arena, 1)
|
| | |
|
| | | PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Arena, 1)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Arena, 1)
|
| | |
| | | import PlayerGubao
|
| | | import PlayerShentong
|
| | | import PlayerCharm
|
| | | import PlayerTask
|
| | | import ChPlayer
|
| | | import GMShell
|
| | | import GameObj
|
| | |
| | | aftBaseCON = curPlayer.GetBaseCON()
|
| | | if aftLV > befLV:
|
| | | curPlayer.SetLV(aftLV, False) # 这里不再通知GameServer
|
| | | PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_LV, aftLV)
|
| | | PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_HeroLV, aftLV)
|
| | | PlayerActivity.DoAddActivityByLV(curPlayer, befLV, aftLV)
|
| | |
|
| | |
| | | import PlayerControl
|
| | | import IPY_GameWorld
|
| | | import ItemControler
|
| | | import PlayerTask
|
| | | import NPCCommon
|
| | | import ChConfig
|
| | | import ChEquip
|
| | |
| | |
|
| | | GameWorld.DebugLog(" 实际产出: giveEquipIDList=%s,giveItemListEx=%s,addExp=%s" % (giveEquipIDList, giveItemListEx, addExp), playerID)
|
| | | SyncCutTreeResult(curPlayer, giveEquipCount, giveItemListEx)
|
| | | |
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, giveEquipCount)
|
| | | return
|
| | |
|
| | | #// B2 22 砍树装备操作 #tagCMCutTreeEquipOP
|
| | |
| | | # 这边执行分解逻辑,待扩展...
|
| | |
|
| | | ItemCommon.DelItem(curPlayer, curEquip, curEquip.GetCount(), True, ChConfig.ItemDel_EquipDecompose)
|
| | | |
| | | PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_EquipDecompose, 1)
|
| | | return
|
| | |
|
| | | #// B2 23 仙树升级 #tagCMTreeLVUP
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerTask
|
| | | #
|
| | | # @todo:玩家任务
|
| | | # @author hxp
|
| | | # @date 2023-12-20
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 玩家任务,简化版任务,有且仅有一个进行中的任务
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2023-12-20 12:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import NetPackCommon
|
| | | import ChPyNetSendPack
|
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | | import ShareDefine
|
| | | import ChConfig
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | __giveNewTask(curPlayer)
|
| | | SyncTaskInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def __giveNewTask(curPlayer):
|
| | | ## 给新任务
|
| | | taskIDList = GetTaskIDList()
|
| | | if not taskIDList:
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | taskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskID)
|
| | | lastTaskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskIDLast)
|
| | | newTaskID = 0
|
| | | if not taskID and not lastTaskID:
|
| | | newTaskID = taskIDList[0]
|
| | | GameWorld.DebugLog("给第一个任务: newTaskID=%s" % (newTaskID), playerID)
|
| | | |
| | | elif not taskID and lastTaskID:
|
| | | # 没有当前任务,给下一个任务
|
| | | if lastTaskID not in taskIDList:
|
| | | GameWorld.ErrLog("找不到上一次完成的任务ID! lastTaskID=%s" % lastTaskID, playerID)
|
| | | return
|
| | | lastIndex = taskIDList.index(lastTaskID)
|
| | | if lastIndex >= len(taskIDList) - 1:
|
| | | GameWorld.DebugLog("已经完成了所有任务: lastTaskID=%s" % (lastTaskID), playerID)
|
| | | return
|
| | | newTaskID = taskIDList[lastIndex + 1]
|
| | | GameWorld.DebugLog("给下一个任务: newTaskID=%s,lastTaskID=%s" % (newTaskID, lastTaskID), playerID)
|
| | | |
| | | if not newTaskID:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("Task", newTaskID)
|
| | | if not ipyData:
|
| | | return
|
| | | taskType = ipyData.GetTaskType()
|
| | | conds = ipyData.GetTaskConds()
|
| | | needValue = ipyData.GetNeedValue()
|
| | | taskValue = 0
|
| | | |
| | | if taskType == ChConfig.TaskType_LV:
|
| | | taskValue = curPlayer.GetLV()
|
| | | elif taskType == ChConfig.TaskType_FBPass:
|
| | | if len(conds) != 2:
|
| | | return
|
| | | mapID, lineID = conds
|
| | | grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
|
| | | taskValue = 1 if grade > 0 else 0
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskIDLast, taskID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskID, newTaskID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue, taskValue)
|
| | | GameWorld.DebugLog("接到新任务: newTaskID=%s,taskValue=%s/%s" % (newTaskID, taskValue, needValue), playerID)
|
| | | return
|
| | |
|
| | | def GetTaskIDList():
|
| | | ## 获取所有的任务ID列表
|
| | | key = "TaskIDList"
|
| | | taskIDList = IpyGameDataPY.GetConfigEx(key)
|
| | | if not taskIDList:
|
| | | taskIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in xrange(ipyDataMgr.GetTaskCount()):
|
| | | ipyData = ipyDataMgr.GetTaskByIndex(index)
|
| | | taskIDList.append(ipyData.GetTaskID())
|
| | | IpyGameDataPY.SetConfigEx(key, taskIDList)
|
| | | GameWorld.Log("任务ID列表: %s" % taskIDList)
|
| | | return taskIDList
|
| | |
|
| | | def UpdTaskValue(curPlayer, taskType, setValue):
|
| | | ## 更新任务进度
|
| | | taskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskID)
|
| | | if not taskID:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("Task", taskID)
|
| | | if not ipyData:
|
| | | return
|
| | | if ipyData.GetTaskType() != taskType:
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue, setValue)
|
| | | SyncTaskInfo(curPlayer)
|
| | | GameWorld.DebugLog("更新任务进度: taskType=%s,taskID=%s,setValue=%s" % (taskType, taskID, setValue), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def AddTaskValue(curPlayer, taskType, addValue=1, conds=[]):
|
| | | ## 增加任务进度
|
| | | taskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskID)
|
| | | if not taskID:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("Task", taskID)
|
| | | if not ipyData:
|
| | | return
|
| | | if ipyData.GetTaskType() != taskType:
|
| | | return
|
| | | if taskType == ChConfig.TaskType_FBPass:
|
| | | taskConds = ipyData.GetTaskConds()
|
| | | if len(conds) != 2 or len(taskConds) != 2:
|
| | | return
|
| | | if conds[0] != taskConds[0]:
|
| | | return
|
| | | if conds[1] < taskConds[1]:
|
| | | return
|
| | | finishNeedValue = ipyData.GetNeedValue()
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskValue)
|
| | | if curValue >= finishNeedValue:
|
| | | return
|
| | | updValue = min(curValue + addValue, ShareDefine.Def_UpperLimit_DWord)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue, updValue)
|
| | | SyncTaskInfo(curPlayer)
|
| | | GameWorld.DebugLog("增加任务进度: taskType=%s,taskID=%s,addValue=%s,updValue=%s" % (taskType, taskID, addValue, updValue), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def GetTaskAward(curPlayer, taskID):
|
| | | ## 领取任务奖励
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | curTaskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskID)
|
| | | if taskID != curTaskID:
|
| | | GameWorld.DebugLog("非当前任务: curTaskID=%s" % curTaskID, playerID)
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("Task", taskID)
|
| | | if not ipyData:
|
| | | return
|
| | | needValue = ipyData.GetNeedValue()
|
| | | awardItemList = ipyData.GetAwardItemList()
|
| | | curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskValue)
|
| | | if curValue < needValue:
|
| | | GameWorld.DebugLog("任务进度不足无法领奖: taskID=%s,curValue=%s < %s" % (taskID, curValue, needValue), playerID)
|
| | | return
|
| | | if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
|
| | | return
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskIDLast, taskID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskID, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TaskValue, 0)
|
| | | |
| | | for itemID, itemCount, isAuctionItem in awardItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
|
| | | |
| | | __giveNewTask(curPlayer)
|
| | | SyncTaskInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def SyncTaskInfo(curPlayer):
|
| | | clientPack = ChPyNetSendPack.tagMCTaskInfo()
|
| | | clientPack.TaskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskID)
|
| | | clientPack.CurValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TaskValue)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|