⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npcsdk.lua

📁 top web admin panel (tales of pirates)
💻 LUA
📖 第 1 页 / 共 5 页
字号:
------------------------------------------------------------
--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 + -