--[[
文件名 : 任务部件.lua
作者 : 陈泽丹
创建时间: 2013-1-22
描述 :
--]]
-- ------------------------------------
-- 创建任务部件
-- ------------------------------------
function API_GetTaskUID( _task_obj )
return "Sign " .. tostring(_task_obj)
end
G_ROLE_TASK_PART = {}
function Lua_GetTaskPart(_role)
local function do_Lua_GetTaskPart()
local obj_list = {}
local task_context = nil
local is_init = false
local public = {}
--初始化任务
function public.InitTaskPart()
--用pairs以把删除的任务排除掉
local t = {}
task_context = Lua_GetTaskContext(_role)
local t_obj_data = Lua_getValueSet( task_context.OBJ_DATA )
local len = table.getn(t_obj_data)
for i=1, len do
t[table.getn(t) + 1] = Lua_Task_Deserialize(_role, t_obj_data[i])
end
obj_list = {}
for i,v in pairs(t) do
public.addTask(t[i])
end
is_init = true
end
--是否初始化过
function public.IsInit()
return is_init
end
--反初始化任务
function public.UninitTaskPart()
--API_Trace( "UninitTaskPart" )
--public.showContext()
--用pairs以把删除的任务排除掉
task_context.OBJ_DATA = {}
for i, v in pairs(obj_list) do
task_context.OBJ_DATA[ table.getn(task_context.OBJ_DATA) + 1 ] = Lua_Task_Serialize(v)
end
--循环操作是外包的, 有可能更改当前循环流水线,故需先备份
local t_del = Lua_getValueSet( obj_list )
local len = table.getn(t_del)
for i=1, len do
t_del[i].setState( G_TASK_STATE.DELETE )
end
obj_list = {}
Lua_SetTaskContext(_role, task_context)
end
--显示当前任务BUG数据
function public.showContext()
local count = 0
for i, v in pairs(obj_list) do
count = count + 1
end
API_Trace( "obj size: " .. count .. ": " .. Lua_T2S(obj_list) )
API_Trace( "task_context: " .. Lua_T2S(task_context) )
end
--接受任务
function public.addTask( _obj )
if nil == _obj then
return
end
Lua_SendRefreshTaskItem( _role, _obj )
for i, v in pairs(obj_list) do
if API_GetTaskUID(v) == API_GetTaskUID(_obj) then
obj_list[i] = _obj
return
end
end
obj_list[ table.getn(obj_list) + 1 ] = _obj
end
--删除任务
function public.delTask( _obj )
if nil == _obj then
return
end
Lua_SendDeleleTaskItem( _role, _obj )
local len = table.getn(obj_list)
for i=1, len do
if obj_list[i] == _obj then
obj_list[i] = obj_list[len]
obj_list[len] = nil
break
end
end
end
--获得任务集
function public.getTaskList()
return obj_list
end
--获得任务共享缓存区
function public.getTaskData()
return task_context.SHARE_DATA
end
--清空玩家所有任务数据
function public.Clear()
--循环操作是外包的, 有可能更改当前循环流水线,故需先备份
local t_del = Lua_getValueSet( obj_list )
local len = table.getn(t_del)
for i=1, len do
t_del[i].setState( G_TASK_STATE.DELETE )
end
obj_list = {}
task_context.OBJ_DATA = {}
task_context.SHARE_DATA = {}
Lua_SetTaskContext(_role, task_context)
Lua_SendRefreshTaskList( _role )
end
--删除自身
function public.Delete()
if nil ~= G_ROLE_TASK_PART[_role] then
G_ROLE_TASK_PART[_role].UninitTaskPart()
G_ROLE_TASK_PART[_role] = nil
end
end
--是否有主线任务进行中
function public.HasStoryTask()
for i, v in pairs(obj_list) do
if nil ~= v.DBData and nil ~= v.DBData.STORY_TASK_INDEX then
return true
end
end
return false
end
return public
end
--单例模式获得玩家任务部件
if nil == G_ROLE_TASK_PART[_role] then
G_ROLE_TASK_PART[_role] = do_Lua_GetTaskPart()
end
--返回相关对象
return G_ROLE_TASK_PART[_role]
end