From 5268d9e89c9ebd10fa9d793186e91c4b55f53d8e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 20 十二月 2023 12:08:59 +0800
Subject: [PATCH] 10054 【后端】任务系统
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py | 175 +++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py | 48 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 56 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 29 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 5
PySysDB/PySysDBPY.h | 11 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 2
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 56 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 17 ++
11 files changed, 405 insertions(+), 1 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index c6ac5fa..76a7ef5 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -60,6 +60,17 @@
list LVAttrValueList; //每级额外属性值(非累积)
};
+//任务表
+
+struct tagTask
+{
+ WORD _TaskID; //任务ID
+ BYTE TaskType; //任务类型
+ list TaskConds; //任务条件[...]
+ DWORD NeedValue; //所需任务值
+ list AwardItemList; //奖励物品列表 [[物品ID,个数,是否拍品], ...]
+};
+
//境界修仙之路
struct tagRealmXXZL
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 3cef67e..de6cfec 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -43940,6 +43940,62 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 05307bf..e0774f0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4381,6 +4381,11 @@
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, 默认格子数]}
@@ -5868,7 +5873,8 @@
Def_RewardType_FamilyBossHurt, #仙盟boss伤害奖励 63
Def_RewardType_DailyPackBuyGift, #打包直购礼包奖励 64
Def_RewardType_Zhanling, #战令奖励 65
-)= range(66)
+Def_RewardType_Task, #任务奖励 66
+)= range(67)
#boss复活相关活动定义
@@ -6080,6 +6086,15 @@
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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 3cef67e..de6cfec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -43940,6 +43940,62 @@
#------------------------------------------------------
+# 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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py
new file mode 100644
index 0000000..d94b64d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Task.py
@@ -0,0 +1,48 @@
+#!/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
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 0f160f9..afc7b01 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -79,6 +79,14 @@
("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),
@@ -2343,6 +2351,23 @@
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():
@@ -6927,6 +6952,8 @@
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)
@@ -7545,6 +7572,8 @@
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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 6f0b431..46365fd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -153,6 +153,7 @@
import PlayerZhanling
import PlayerCutTree
import PlayerLianTi
+import PlayerTask
import PlayerYinji
import PlayerLove
import GameObj
@@ -961,6 +962,7 @@
PlayerGubao.OnPlayerLogin(curPlayer)
PlayerShentong.OnPlayerLogin(curPlayer)
PlayerZhanling.OnPlayerLogin(curPlayer)
+ PlayerTask.OnPlayerLogin(curPlayer)
PlayerCutTree.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
@@ -5707,6 +5709,9 @@
#打包直购礼包奖励
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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
index 4b5cd00..2700979 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerArena.py
@@ -32,6 +32,7 @@
import PlayerActivity
import PlayerSuccess
import PlayerGubao
+import PlayerTask
def DoArenaOpen(curPlayer):
## 竞技场功能开启
@@ -302,6 +303,7 @@
# 触发任务
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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 4e91bdd..2398cfe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -102,6 +102,7 @@
import PlayerGubao
import PlayerShentong
import PlayerCharm
+import PlayerTask
import ChPlayer
import GMShell
import GameObj
@@ -4316,6 +4317,7 @@
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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
index 8f5f4f3..00c3332 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
@@ -24,6 +24,7 @@
import PlayerControl
import IPY_GameWorld
import ItemControler
+import PlayerTask
import NPCCommon
import ChConfig
import ChEquip
@@ -148,6 +149,8 @@
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
@@ -208,6 +211,8 @@
# 这边执行分解逻辑,待扩展...
ItemCommon.DelItem(curPlayer, curEquip, curEquip.GetCount(), True, ChConfig.ItemDel_EquipDecompose)
+
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_EquipDecompose, 1)
return
#// B2 23 仙树升级 #tagCMTreeLVUP
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
new file mode 100644
index 0000000..ace7d8a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTask.py
@@ -0,0 +1,175 @@
+#!/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
--
Gitblit v1.8.0