📄 npcsdk.lua
字号:
------------------------------------------------------------
--NpcSdk.lua Created by knight 2004.11.18.
--
--npc对话系统函数接口定义
print( "loading npcsdk.lua" )
------------------------------------------------------------
--服务器端发送命令消息协议定义
CMD_MC_BASE = 500
CMD_MC_ROLEBASE = CMD_MC_BASE + 300
CMD_MC_TALKPAGE = CMD_MC_ROLEBASE + 1
CMD_MC_FUNCPAGE = CMD_MC_ROLEBASE + 2
CMD_MC_CLOSETALK = CMD_MC_ROLEBASE + 3
CMD_MC_HELPINFO = CMD_MC_ROLEBASE + 4 -- 帮助信息
CMD_MC_TRADEPAGE = CMD_MC_ROLEBASE + 5
CMD_MC_TRADERESULT = CMD_MC_ROLEBASE + 6
CMD_MC_TRADE_DATA = CMD_MC_ROLEBASE + 7 -- NPC交易数据信息更新
CMD_MC_TRADE_ALLDATA = CMD_MC_ROLEBASE + 8 -- NPC交易所有数据信息更新
CMD_MC_MISSION = CMD_MC_ROLEBASE + 22
CMD_MC_MISSIONLIST = CMD_MC_ROLEBASE + 23
CMD_MC_MISSIONTALK = CMD_MC_ROLEBASE + 24
CMD_MC_MISPAGE = CMD_MC_ROLEBASE + 27 -- 任务页信息
CMD_MC_MISLOG = CMD_MC_ROLEBASE + 28 -- 任务日志
CMD_MC_MISLOGINFO = CMD_MC_ROLEBASE + 29 -- 单个任务详细信息
CMD_MC_BEGIN_ITEM_FORGE = CMD_MC_ROLEBASE + 35 -- 精练道具
CMD_MC_BEGIN_ITEM_UNITE = CMD_MC_ROLEBASE + 36 -- 道具合成
CMD_MC_CREATEBOAT = CMD_MC_ROLEBASE + 38 -- 创建船只
CMD_MC_UPDATEBOAT = CMD_MC_ROLEBASE + 39 -- 改造船只
CMD_MC_UPDATEBOAT_PART = CMD_MC_ROLEBASE + 40 -- 改造船只的部件
CMD_MC_BERTH_LIST = CMD_MC_ROLEBASE + 41 -- 船只停泊列表
CMD_MC_BOAT_LIST = CMD_MC_ROLEBASE + 42 -- 同步角色拥有的所有船只属性
CMD_MC_BOAT_ADD = CMD_MC_ROLEBASE + 43 -- 添加一艘船
CMD_MC_BOAT_CLEAR = CMD_MC_ROLEBASE + 44 -- 清除一艘船
CMD_MC_BOATINFO = CMD_MC_ROLEBASE + 45 -- 同步船只属性信息
CMD_MC_BOAT_BAGLIST = CMD_MC_ROLEBASE + 46 -- 显示可以打包的船只列表
--客户端发送命令消息协议定义
CMD_CM_BASE = 0
CMD_CM_ROLEBASE = CMD_CM_BASE + 300
CMD_CM_REQUESTTALK = CMD_CM_ROLEBASE + 1
CMD_CM_TALKPAGE = CMD_CM_ROLEBASE + 2
CMD_CM_FUNCITEM = CMD_CM_ROLEBASE + 3
CMD_CM_REQESTTRADE = CMD_CM_ROLEBASE + 8
CMD_CM_TRADEITEM = CMD_CM_ROLEBASE + 9
CMD_CM_REQUESTAGENCY= CMD_CM_ROLEBASE + 10
CMD_CM_MISSION = CMD_CM_ROLEBASE + 22
CMD_CM_MISSIONLIST = CMD_CM_ROLEBASE + 23
CMD_CM_MISSIONTALK = CMD_CM_ROLEBASE + 24
CMD_CM_MISLOG = CMD_CM_ROLEBASE + 25 -- 任务日志
--黑市交易
CMD_MC_BLACKMARKET_EXCHANGEDATA = CMD_MC_BASE + 71 -- 黑市兑换数据
CMD_MC_BLACKMARKET_EXCHANGEUPDATE = CMD_MC_BASE + 73 -- 黑市兑换更新
CMD_MC_BLACKMARKET_TRADEUPDATE = CMD_MC_BASE + 74 -- 黑市交易更新
CMD_MC_EXCHANGEDATA = CMD_MC_BASE + 75
CMD_CM_BLACKMARKET_EXCHANGE_REQ = CMD_CM_BASE + 51
--对话页命令信息
ROLE_FIRSTPAGE = 0 -- 请求初次对话信息
ROLE_CLOSEPAGE = -1 -- 请求关闭对话页命令
--交易宏信息定义
ROLE_MAXNUM_TRADEITEM = 60 --每个交易页最大摆放物品数量
ROLE_INVALID_ID = -1 --无效的索引
--交易物品类型定义
WEAPON = 0 --武器类型
DEFENCE = 1 --防具类型
OTHER = 2 --杂项类型
SYNTHESIS = 3 --合成物品类型
TRADE_SALE = 0 --出售物品操作
TRADE_BUY = 1 --购买物品操作
TRADE_GOODS = 2 --交易船舱货物
ROLE_TRADE_SALE = 0 --请求出售物品
ROLE_TRADE_BUY = 1 --请求购买物品
ROLE_TRADE_SALE_GOODS = 2 --请求出售货舱物品
ROLE_TRADE_BUY_GOODS = 3 --请求购买货舱物品
ROLE_TRADE_SELECT_BOAT = 4 --选择交易的船只
--船只显示列表类型
BERTH_TRADE_LIST = 0 -- 交易船只列表
BERTH_LUANCH_LIST = 1 -- 出海船只列表
BERTH_REPAIR_LIST = 3 -- 船只修理列表
BERTH_SALVAGE_LIST = 4 -- 船只打捞列表
BERTH_SUPPLY_LIST = 5 -- 船只补给列表
BERTH_BOATLEVEL_LIST = 6 -- 船只升级列表
--资源类型
RES_WOOD = 0 --木材资源
RES_MINE = 1 --矿石资源
--对话宏定义
ROLE_MAXNUM_PAGEITEM = 9
--帮助信息类型
MIS_HELP_DESP = 0 --文字帮助信息
MIS_HELP_IMAGE = 1 --图形帮助信息
MIS_HELP_SOUND = 2 --声音帮助信息
MIS_HELP_BICKER = 3 --闪动字体信息
--发送对话页函数
function SendTalkPage( character, npc, pageid, desp )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_TALKPAGE );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
WriteByte( packet, pageid );
WriteString( packet, desp );
SendPacket( character, packet );
end
--向客户端发送兑换数据
function SendExchangeData( character, npc )
local packet = GetPacket()
WriteCmd( packet, CMD_MC_BLACKMARKET_EXCHANGEDATA )
local npcid = GetCharID( npc )
WriteDword( packet, npcid )
if Exchange.count ~= nil then
WriteWord( packet, Exchange.count )
for n = 1, Exchange.count, 1 do
WriteWord( packet, Exchange.srcid[n] )
WriteWord( packet, Exchange.srcnum[n] )
WriteWord( packet, Exchange.tarid[n] )
WriteWord( packet, Exchange.tarnum[n] )
WriteWord( packet, Exchange.timenum[n] )
end
else
WriteWord( packet, 0 )
end
SendPacket( character, packet );
end
function SendExchangeXData( character, npc, exchangeData )
local packet = GetPacket()
WriteCmd( packet, CMD_MC_EXCHANGEDATA )
local npcid = GetCharID( npc )
WriteDword( packet, npcid )
if exchangeData.count ~= nil then
WriteWord( packet, exchangeData.count )
for n = 1, exchangeData.count, 1 do
WriteWord( packet, exchangeData.srcid[n] )
WriteWord( packet, exchangeData.srcnum[n] )
WriteWord( packet, exchangeData.tarid[n] )
WriteWord( packet, exchangeData.tarnum[n] )
end
else
WriteWord( packet, 0 )
end
SendPacket( character, packet );
end
--向客户端发送兑换更新数据
function SendExchangeUpdateData( character, npc )
local packet = GetPacket()
WriteCmd( packet, CMD_MC_BLACKMARKET_EXCHANGEUPDATE )
local npcid = GetCharID( npc )
WriteDword( packet, npcid )
if Exchange.count ~= nil then
WriteWord( packet, Exchange.count )
for n = 1, Exchange.count, 1 do
WriteWord( packet, Exchange.srcid[n] )
WriteWord( packet, Exchange.srcnum[n] )
WriteWord( packet, Exchange.tarid[n] )
WriteWord( packet, Exchange.tarnum[n] )
WriteWord( packet, Exchange.timenum[n] )
end
else
WriteWord( packet, 0 )
end
SynPacket( npc, packet )
end
function SendDebugPage( character, npc, info )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_TALKPAGE );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
WriteByte( packet, ROLE_CLOSEPAGE );
WriteString( packet, info );
SendPacket( character, packet );
end
--发送服务器提示帮助页信息
function HelpInfo( character, tp, info )
PRINT( "HelpInfo" )
local packet = GetPacket()
WriteCmd( packet, CMD_MC_HELPINFO )
WriteByte( packet, tp )
if tp == MIS_HELP_SOUND then
WriteWord( packet, info )
else
WriteString( packet, info )
end
SendPacket( character, packet );
end
--发送功能页函数
function SendFuncPage( character, npc, pageid, item, count )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_FUNCPAGE );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
WriteByte( packet, pageid );
WriteByte( packet, count );
--PRINT( "send function page function, count = ", count )
for i = 1, count, 1 do
--PRINT( "send function page function, i = ", i, item[i] )
if item[i] ~= nil then
WriteString( packet, item[i] )
else
WriteString( packet, "Incorrect notice option!" )
end
end
SendPacket( character, packet );
end
--发送页信息
function SendPage( character, npc, pageid, talk, item, count )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_FUNCPAGE );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
WriteByte( packet, pageid );
WriteString( packet, talk );
WriteByte( packet, count );
--PRINT( "send function page function, count = ", count )
for i = 1, count, 1 do
--PRINT( "send function page function, i = ", i, item[i] )
if item[i] ~= nil then
WriteString( packet, item[i] )
else
WriteString( packet, "Incorrect notice option!" )
end
end
SendPacket( character, packet );
end
--发送含任务列表信息对话页
function SendMissionPage( character, npc, pageid, talk, item, count, misitem, misnum )
PRINT( "SendMissionPage" )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_FUNCPAGE );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
WriteByte( packet, pageid );
WriteString( packet, talk );
WriteByte( packet, count );
--PRINT( "send function page function, count = ", count )
for i = 1, count, 1 do
--PRINT( "send function page function, i = ", i, item[i] )
if item[i] ~= nil then
WriteString( packet, item[i] )
else
WriteString( packet, "Incorrect notice option!" )
end
end
WriteByte( packet, misnum )
PRINT( "Send quest list notice, count ="..misnum )
for n = 1, misnum, 1 do
PRINT( "Name: Status: ", misitem[n].name, misitem[n].state )
WriteString( packet, misitem[n].name )
WriteByte( packet, misitem[n].state )
end
SendPacket( character, packet );
end
--关闭对话函数
function SendClosePage( character, npc )
local packet = GetPacket();
WriteCmd( packet, CMD_MC_CLOSETALK );
local npcid = GetCharID( npc );
WriteDword( packet, npcid );
SendPacket( character, packet );
end
--发送任务列表信息
function SendMissionList( character, npc, missionlist, itemid, optype, listtype )
PRINT( "SendMissionList, itemid, optype, listtype", itemid, optype, listtype )
local npcid = GetCharID( npc )
local ret, num = GetNumMission( character, npcid, listtype )
if ret ~= LUA_TRUE then
PRINT( "SendMissionList:obtain character quest list notice quantity failed!" )
return SystemNotice( character, "SendMissionList:obtain character quest list notice quantity failed!" )
end
PRINT( "itemid = %d, num = %d", itemid, num )
if itemid >= num then
PRINT( "SendMissionList: parameter item id error!" )
return SystemNotice( character, "SendMissionList: parameter item id error!" )
end
PRINT( "SendMissionList: calculation page index notice!" )
local count, previd, nextid, itemnum = 1, 0, 0, 0
local item = {}
--计算起始第一行索引
if optype == MIS_NEXT then
previd = itemid + 1
nextid = num - itemid
else
if itemid <= 8 then
previd = 1
if num >= 8 then
nextid = 8
else
nextid = num
end
else
previd = itemid - 8
nextid = itemid
end
end
--计算最后一行索引
PRINT( "SendMissionList:previd = %d, nextid = %d", previd, nextid )
for n = previd, nextid, 1 do
itemnum = n
local index = n - 1
PRINT( "index = ", index )
local ret, id, step = GetMissionInfo( character, npcid, listtype, index )
if ret ~= LUA_TRUE then
break
end
PRINT( "SendMissionList:missionid = %d, step = %d", id, step )
if missionlist[id] == nil or missionlist[id].name == nil then
item[count] = "Error: quest index or name does not exist!"
else
item[count] = missionlist[id].name
end
count = count + 1
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -