📄 missionsdk.lua
字号:
end
local ret = HasRandMissionCount( character, mission.id, mission.loopinfo[loopnum].num )
if ret == LUA_TRUE then
--清除该环任务计数,同时环计数增加
ret = AddRandMissionNum( character, mission.id )
if ret ~= LUA_TRUE then
PRINT( "CompleteRandMission:AddRandMissionNum reset quest cycle calculation failed!id = ", mission.id )
LG( "randmission_error", "CompleteRandMission:AddRandMissionNum reset quest cycle count failed!id ", mission.id )
SystemNotice( character, "CompleteRandMission:AddRandMissionNum reset quest cycle calculation failed!id = "..mission.id )
return LUA_FALSE
end
if loopdata[loopnum + 1] == nil then
--清除该随机任务计数因为已经跑环完毕,任务计数从头开始
PRINT( "CompleteRandMission:ResetRandMissionNum: quest cycle completed!" )
ResetRandMissionNum( character, mission.id )
SystemNotice( character, "Quest cycle completed!" )
end
end
end
else
PRINT( "CompleteMission: Parameter quest type unknown. Invalid!" )
SystemNotice( character, "CompleteMission: Parameter quest type unknown. Invalid!" )
return LUA_FALSE
end
if tp ~= WORLD_MISSION then
PRINT( "CompleteMission:ResetMissionState" )
ret = RefreshMissionState( character, npc )
if ret ~= LUA_TRUE then
PRINT( "CompleteMission:RefreshMissionState deliver quest reset npc quest status failed!" )
SystemNotice( character, "CompleteMission:RefreshMissionState deliver quest change npc quest status failed!" )
return LUA_FALSE
end
end
PRINT( "CompleteMission: return true" )
return LUA_TRUE
end
--选择任务列表
function SelMissionList( character, npc, selindex, missionlist )
local npcid = GetCharID( npc )
local ret, id, state = GetMissionInfo( character, npcid, selindex )
if ret ~= LUA_TRUE then
PRINT( "SelMissionList: obtain quest notice failed!" )
return SystemNotice( character, "MissionProc: obtain quest notice failed!" )
end
PRINT( "SelMissionList:id = %d, state = %d", id, state )
if missionlist[id] == nil then
PRINT( "SelMissionList: Server does not have requested quest notice error!" )
return SystemNotice( character, "MissionProc: server does not have requested quest notice error!" )
end
ret = SetMissionTempInfo( character, npcid, id, state, missionlist[id].tp )
if ret ~= LUA_TRUE then
PRINT( "SelMissionList:set quest temporary data notice failed!" )
return SystemNotice( character, "MissionProc: Set quest temporary data notice failed!" )
end
if missionlist[id].tp == NOMAL_MISSION then
PRINT( "SelMissioinList:NomalMission type" )
--根据任务状态发送任务的不同信息
if state == MIS_DELIVERY then
return SendDeliveryPage( character, npcid, missionlist[id], missionlist[id].id )
elseif state == MIS_ACCEPT then
return SendAcceptPage( character, npcid, missionlist[id], missionlist[id].id )
elseif state == MIS_PENDING then
return SendPendingPage( character, npcid, missionlist[id], missionlist[id].id )
else
PRINT( "SelMissionList: incorrect type of quest status notice!" )
return SystemNotice( character, "SelMissionList: incorrect type of quest status notice!" )
end
elseif missionlist[id].tp == RAND_MISSION then
PRINT( "SelMissioinList:RandMission type" )
--判断是否已经接受了该随机任务,如果接受了则是来还任务得
ret = HasRandMission( character, missionlist[id].id )
if ret ~= LUA_TRUE then
--随机任务在选择时就已经产生并且玩家接受任务
local ret = IsMissionFull( character )
if ret == LUA_TRUE then
return SystemNotice( character, "You quest log is full. Please abandon an existing quest before activating another!" )
end
local ret = NpcTriggerCheck( character, missionlist[id].begin )
if ret ~= LUA_TRUE then
PRINT( "SelMissionList:NpcTriggerCheck accept random quest condition trigger management failed!" )
SystemNotice( character, "SelMissionList:NpcTriggerCheck accept random quest condition trigger management failed!" )
return LUA_FALSE
end
PRINT( "SelMissionList:missionlist[id] = , id = ", missionlist[id], id )
local ret, index = CreateRandMission( character, npc, missionlist[id] )
if ret ~= LUA_TRUE then
if index ~= nil then
-- 表明背包容量不足
return LUA_TRUE
end
PRINT( "SelMissionList:CreateRandMission, generate random quest failed!" )
return LUA_FALSE
end
ret = AcceptMission( character, npc, missionlist, index )
if ret ~= LUA_TRUE then
PRINT( "SelMissionList:AcceptMission: accept quest failed!" )
SystemNotice( character, "SelMissionList:AcceptMission: accept quest failed!" )
return LUA_FALSE
end
--发送随机任务的交付页面信息
local ret, randid, state = GetMissionInfo( character, npcid, selindex )
if ret ~= LUA_TRUE or id ~= randid then
ret, state = GetCharMission( character, npcid, id )
if ret ~= LUA_TRUE then
PRINT( "SelMissionList:GetCharMission obtain quest notice failed!" )
return SystemNotice( character, "MissionProc:GetCharMission obtain quest notice failed!" )
end
end
--if state == MIS_PENDING then
PRINT( "SelMissionList:SendPendingPage, index =, mission = ", index, missionlist[id].missionlist[index] )
return SendPendingPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
--elseif state == MIS_DELIVERY then
--PRINT( "SelMissionList:SendDeliveryPage, index = , mission = ", index, missionlist[id].missionlist[index] )
--return SendDeliveryPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
--else
--PRINT( "SelMissionList:random quest accept response as PENDING or DELIVERY status, however test status incorrect. state = "..state )
--return SystemNotice( character, "SelMissionList:random quest accept response as PENDING or DELIVERY status, however test status incorrect. state = "..state )
--end
else
local ret, index = GetCharRandMission( character, missionlist[id].id, missionlist[id] )
if ret ~= LUA_TRUE or index == 0 then
--根据随机任务参数生成随机任务信息错误
PRINT( "SelMissionList:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
return SystemNotice( character, "SelMissionList:GetcharRandMission, according to random quest parameter generate random quest notice error!" )
end
if state ~= MIS_DELIVERY then
PRINT( "SelMissionList:SendPendingPage, index =, mission = ", index, missionlist[id].missionlist[index] )
return SendPendingPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
end
PRINT( "SelMissionList:SendDeliveryPage, index = , mission = ", index, missionlist[id].missionlist[index] )
return SendDeliveryPage( character, npcid, missionlist[id].missionlist[index], missionlist[id].id )
end
else
PRINT( "SelMissionList: parameter quest type unknown, invalid!" )
SystemNotice( character, "SelMissionList: parameter quest type unknown, invalid!" )
return LUA_FALSE
end
end
--任务处理
function MissionProc( character, npc, rpk, missionlist )
if missionlist == nil then
SystemNotice( character, "MissionProc: parameter error!" )
return LUA_FALSE
end
local byCmd = ReadByte( rpk )
if byCmd == MIS_SEL then
local selindex = ReadByte( rpk )
return SelMissionList( character, npc, selindex, missionlist )
elseif byCmd == MIS_BTNACCEPT then
local ret = IsMissionFull( character )
if ret == LUA_TRUE then
return BickerNotice( character, "Quest slots are all taken. Unable to obtain new quest!" )
end
return AcceptMission( character, npc, missionlist )
elseif byCmd == MIS_BTNDELIVERY then
local byParam1 = ReadByte( rpk )
local byParam2 = ReadByte( rpk )
local ret = CompleteMission( character, npc, missionlist, byParam1, byParam2 )
--if ret == LUA_TRUE then
--完成任务后继续下一个任务
--local npcid = GetCharID( npc )
--local ret, index, id, state = GetNextMission( character, npcid )
--PRINT( "MissionProc:GetNextMission: ret, index, id, state", ret, index, id, state )
--if ret == LUA_TRUE then
--PRINT( "MissionProc:SelMissionList" )
--return SelMissionList( character, npc, index, missionlist )
--end
--end
--elseif byCmd == MIS_BTNPENDING then
--elseif byCmd == MIS_TALK then
else
PRINT( "MissionProc:incorrect quest page command type!" )
return SystemNotice( character, "MissionProc:incorrect quest page command type!" )
end
end
--查询任务日志信息
function MissionLog( character, sid )
PRINT( "MissionLog" )
if sid == nil or Mission[sid] == nil then
PRINT( "MissionLog: cannot locate quest script notice, sid = "..sid )
LG( "mission_error", "MissionLog: cannot locate quest script notice, sid = "..sid )
SystemNotice( character, "MissionLog: cannot locate quest script notice, sid = "..sid )
return
end
if Mission[sid].tp == NOMAL_MISSION or Mission[sid].tp == WORLD_MISSION then
SendMissionLog( character, Mission[sid], Mission[sid].id, Mission[sid].name )
elseif Mission[sid].tp == RAND_MISSION then
local ret, index, loopdata = GetCharRandMission( character, Mission[sid].id, Mission[sid] )
if ret ~= LUA_TRUE or index == 0 then
--根据随机任务参数生成随机任务信息错误
PRINT( "MissionLog:GetcharRandMission, according to random quest parameter generated quest notice error!" )
SystemNotice( character, "MissionLog:GetcharRandMission, according to random quest parameter generated quest notice error!" )
return
end
PRINT( "MissionLog:SendMissionLog, index = , mission = ", index, Mission[sid].missionlist[index] )
SendMissionLog( character, Mission[sid].missionlist[index], Mission[sid].id, Mission[sid].name )
else
PRINT( "MissionLog: parameter quest type unknown, invalid!ID = "..sid )
SystemNotice( character, "SelMissionList: parameter quest type unknown, invalid!ID = "..sid )
end
end
--发送任务日志信息
function SendMissionLog( character, mission, id, name )
PRINT( "SendMissionLog" )
if id == nil or mission == nil then
return SystemNotice( character, "Have not found target quest log notice, ID = "..id )
end
local packet = GetPacket()
WriteCmd( packet, CMD_MC_MISLOGINFO )
WriteWord( packet, id )
--发送任务需求信息
WriteString( packet, name )
PRINT( "SendMissionLog:misname = ", name )
WriteByte( packet, mission.need.count )
PRINT( "SendMissionLog:need count = "..mission.need.count )
for n = 1, mission.need.count, 1 do
PRINT( "SendMissionLog:need n = , tp, p1, p2, p3 ", n, mission.need[n].tp, mission.need[n].p1, mission.need[n].p2, mission.need[n].p3 )
WriteByte( packet, mission.need[n].tp )
if mission.need[n].tp == MIS_NEED_ITEM then
WriteWord( packet, mission.need[n].p1 )
WriteWord( packet, mission.need[n].p2 )
--获取任务需求完成计数
local ret, num = GetNeedItemCount( character, id, mission.need[n].p1 )
PRINT( "SendMissionLog:GetNeedItemCount, num = ", num )
if ret ~= LUA_TRUE then
PRINT( "SendMissionLog:GetNeedItemCount,error. misid = , itemid = , num = ", id, mission.need[n].p1, mission.need[n].p2 )
SystemNotice( character, "SendMissionLog: GetNeedItemCount,error." )
LG( "mislog_error", "SendMissionLog:GetNeedItemCount,error. misid = , itemid = , num = ", id, mission.need[n].p1, mission.need[n].p2 )
num = 0
end
WriteByte( packet, num )
elseif mission.need[n].tp == MIS_NEED_KILL then
WriteWord( packet, mission.need[n].p1 )
WriteWord( packet, mission.need[n].p2 )
--获取任务需求完成计数
PRINT( "SendMissionLog:GetNumFlag:GetNumFalg, id, p1, p2", id, mission.need[n].p3, mission.need[n].p2 )
WriteByte( packet, GetNumFlag( character, id, mission.need[n].p3, mission.need[n].p2 ) )
elseif mission.need[n].tp == MIS_NEED_DESP then
WriteString( packet, mission.need[n].p1 )
else
PRINT( "SendMissionLog:unknown quest required type!mission id = ", id )
SystemNotice( character, "SendMissionLog:unknown quest required type!mission id = ", id )
return
end
end
--发送任务奖励信息
WriteByte( packet, mission.prize.seltp )
WriteByte( packet, mission.prize.count )
PRINT( "SendMissionLog:prize count = , seltype =", mission.prize.count, mission.prize.seltp )
for i = 1, mission.prize.count, 1 do
PRINT( "SendMissionLog:prize i = , tp, p1, p2 ", i, mission.prize[i].tp, mission.prize[i].p1, mission.prize[i].p2 )
WriteByte( packet, mission.prize[i].tp )
WriteWord( packet, mission.prize[i].p1 )
WriteWord( packet, mission.prize[i].p2 )
end
--发送任务描述信息
PRINT( "SendMissionLog:begin talk = "..mission.begin.talk )
WriteString( packet, mission.begin.talk )
SendPacket( character, packet )
end
--发送任务交付页信息
function SendDeliveryPage( character, npcid, mission, id )
PRINT( "SendDeliveryPage" )
--发送报文信息
local packet = GetPacket()
WriteCmd( packet, CMD_MC_MISPAGE )
WriteByte( packet, MIS_BTNDELIVERY )
WriteDword( packet, npcid )
WriteString( packet, mission.name )
PRINT( "SenddeliveryPage:missionname = ", mission.name )
PRINT( "SendDeliveryPage:need = ", mission.need )
--发送任务需求信息
--完成任务页不发送任务需求消息
WriteByte( packet, 0 )
--WriteByte( packet, mission.need.count )
--PRINT( "SendDeliveryPage:need count = "..mission.need.count )
--for n = 1, mission.need.count, 1 do
--PRINT( "SendDeliveryPage:need n = , tp, p1, p2, p3 ", n, mission.need[n].tp, mission.need[n].p1, mission.need[n].p2, mission.need[n].p3 )
--WriteByte( packet, mission.need[n].tp )
--if mission.need[n].tp == MIS_NEED_ITEM then
--WriteWord( packet, mission.need[n].p1 )
--WriteWord( packet, mission.need[n].p2 )
----获取任务需求完成计数
--local ret, num = GetNeedItemCount( character, id, mission.need[n].p1 )
--PRINT( "SendDeliveryPage:GetNeedItemCount, num = ", num )
--if ret ~= LUA_TRUE then
--PRINT( "SendDeliveryPage:GetNeedItemCount,error.itemid = , num = ", mission.need[n].p1, mission.need[n].p2 )
--SystemNotice( character, "SendDeliveryPage:GetNeedItemCount,error." )
--LG( "mislog_error", "SendDeliveryPage:GetNeedItemCount,error.itemid = , num = ", mission.need[n].p1, mission.need[n].p2 )
--num = 0
--end
--WriteByte( packet, num )
--elseif mission.need[n].tp == MIS_NEED_KILL then
--WriteWord( packet, mission.need[n].p1 )
--WriteWord( packet, mission.need[n].p2 )
----获取任务需求完成计数
--PRINT( "SendDeliveryPage:GetNumFlag:GetNumFalg, id, p1, p2", id, mission.need[n].p3, mission.need[n].p2 )
--WriteByte( packet, GetNumFlag( character, id, mission.need[n].p3, mission.need[n].p2 ) )
--elseif mission.need[n].tp == MIS_NEED_DESP then
--WriteString( packet, mission.need[n].p1 )
--else
--PRINT( "SendDeliveryPage:unknown quest required type!mission id = ", id )
--SystemNotice( character, "SendDeliveryPage:unknown quest required type!mission id = ", id )
--return
--end
--end
--发送任务奖励信息
WriteByte( packet, mission.prize.seltp )
WriteByte( packet, mission.prize.count )
PRINT( "SendDeliveryPage:prize count = , seltype =", mission.prize.count, mission.prize.seltp )
for i = 1, mission.prize.count, 1 do
PRINT( "SendDeliveryPage:prize i = , tp, p1, p2 ", i, mission.priz
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -