本帖最后由 iiyyp 于 2011-7-11 00:21 编辑
以下两个脚本一个是npc脚本,另一个是任务脚本, 来自天龙八部
npc脚本- --阮诚
- --脚本号
- x020000_g_scriptId = 020000
- --所拥有的事件ID列表
- x020000_g_eventList={211105,211106,211108}
- --**********************************
- --事件列表
- --**********************************
- function x020000_UpdateEventList( sceneId, selfId,targetId )
- BeginEvent(sceneId)
- local PlayerName=GetName(sceneId,selfId)
- AddText(sceneId," 你好,你也是宋人吧。#r#r 你见过我的母亲和弟弟了?#r#r 你见过郡主了?#r#r 呵呵,看来你已经成为这片草原最受欢迎的客人了。进到毡帐里暖和一下吧,我想母亲和弟弟也会希望盛情款待你的。#r")
- for i, eventId in x020000_g_eventList do
- CallScriptFunction( eventId, "OnEnumerate",sceneId, selfId, targetId )
-
- end
- EndEvent(sceneId)
- DispatchEventList(sceneId,selfId,targetId)
- end
- --**********************************
- --事件交互入口
- --**********************************
- function x020000_OnDefaultEvent( sceneId, selfId,targetId )
- x020000_UpdateEventList( sceneId, selfId, targetId )
- end
- --**********************************
- --事件列表选中一项
- --**********************************
- function x020000_OnEventRequest( sceneId, selfId, targetId, eventId )
- for i, findId in x020000_g_eventList do
- if eventId == findId then
- CallScriptFunction( eventId, "OnDefaultEvent",sceneId, selfId, targetId )
- return
- end
- end
- end
- --**********************************
- --接受此NPC的任务
- --**********************************
- function x020000_OnMissionAccept( sceneId, selfId, targetId, missionScriptId )
- for i, findId in x020000_g_eventList do
- if missionScriptId == findId then
- ret = CallScriptFunction( missionScriptId, "CheckAccept", sceneId, selfId )
- if ret > 0 then
- CallScriptFunction( missionScriptId, "OnAccept", sceneId, selfId )
- end
- return
- end
- end
- end
- --**********************************
- --拒绝此NPC的任务
- --**********************************
- function x020000_OnMissionRefuse( sceneId, selfId, targetId, missionScriptId )
- --拒绝之后,要返回NPC的事件列表
- for i, findId in x020000_g_eventList do
- if missionScriptId == findId then
- x020000_UpdateEventList( sceneId, selfId, targetId )
- return
- end
- end
- end
- --**********************************
- --继续(已经接了任务)
- --**********************************
- function x020000_OnMissionContinue( sceneId, selfId, targetId, missionScriptId )
- for i, findId in x020000_g_eventList do
- if missionScriptId == findId then
- CallScriptFunction( missionScriptId, "OnContinue", sceneId, selfId, targetId )
- return
- end
- end
- end
- --**********************************
- --提交已做完的任务
- --**********************************
- function x020000_OnMissionSubmit( sceneId, selfId, targetId, missionScriptId, selectRadioId )
- for i, findId in x020000_g_eventList do
- if missionScriptId == findId then
- CallScriptFunction( missionScriptId, "OnSubmit", sceneId, selfId, targetId, selectRadioId )
- return
- end
- end
- end
复制代码 任务脚本- --草原狼的逆袭
- --MisDescBegin
- --脚本号
- x211100_g_ScriptId = 211100
- --上一个任务的ID
- --g_MissionIdPre =
- --任务号
- x211100_g_MissionId = 540
- --任务目标npc
- x211100_g_Name ="阮实"
- --任务归类
- x211100_g_MissionKind = 31
- --任务等级
- x211100_g_MissionLevel = 50
- --是否是精英任务
- x211100_g_IfMissionElite = 0
- --下面几项是动态显示的内容,用于在任务列表中动态显示任务情况**********************
- --任务是否已经完成
- x211100_g_IsMissionOkFail = 0 --变量的第0位
- --任务需要杀死的怪
- x211100_g_DemandKill = {{id=1810,num=5}} --变量第1位
- --以上是动态**************************************************************
- --任务文本描述
- x211100_g_MissionName="草原狼的逆袭"
- x211100_g_MissionInfo="俺们兰陵郡是辽国运送粮草的必经之地,现在路上多出好多草原狼来,得有人杀点狼俺们才敢出去运草料。" --任务描述
- x211100_g_MissionTarget="杀死5只草原狼" --任务目标
- x211100_g_ContinueInfo="你已经杀了5只草原狼吗?它们就在村子南边,走走就看见了。小心点啊,被一群狼围攻了那你就白瞎了。" --未完成任务的npc对话
- x211100_g_MissionComplete="谢谢啊,俺们终于敢出门了" --完成任务npc说话的话
- --任务奖励
- x211100_g_MoneyBonus=100
- x211100_g_ItemBonus={{id=30002002,num=1}}
- x211100_g_RadioItemBonus={{id=10100001,num=1},{id=10210001,num=1}}
- x211100_g_DemandTrueKill = {{name="草原狼",num=5}}
- --MisDescEnd
- --**********************************
- --任务入口函数
- --**********************************
- function x211100_OnDefaultEvent( sceneId, selfId, targetId ) --点击该任务后执行此脚本
- --如果玩家完成过这个任务(实际上如果完成了任务这里就不会显示,但是再检测一次比较安全)
- --if IsMissionHaveDone(sceneId,selfId,x211100_g_MissionId) > 0 then
- -- return
- --end
- --如果已接此任务
- if IsHaveMission(sceneId,selfId,x211100_g_MissionId) > 0 then
- --发送任务需求的信息
- BeginEvent(sceneId)
- AddText(sceneId,x211100_g_MissionName)
- AddText(sceneId,x211100_g_ContinueInfo)
- --for i, item in g_DemandItem do
- -- AddItemDemand( sceneId, item.id, item.num )
- --end
- EndEvent( )
- bDone = x211100_CheckSubmit( sceneId, selfId )
- DispatchMissionDemandInfo(sceneId,selfId,targetId,x211100_g_ScriptId,x211100_g_MissionId,bDone)
- --满足任务接收条件
- elseif x211100_CheckAccept(sceneId,selfId) > 0 then
- --发送任务接受时显示的信息
- BeginEvent(sceneId)
- AddText(sceneId,x211100_g_MissionName)
- AddText(sceneId,x211100_g_MissionInfo)
- AddText(sceneId,"#{M_MUBIAO}")
- AddText(sceneId,x211100_g_MissionTarget)
- AddMoneyBonus( sceneId, x211100_g_MoneyBonus )
- for i, item in x211100_g_ItemBonus do
- AddItemBonus( sceneId, item.id, item.num )
- end
- for i, item in x211100_g_RadioItemBonus do
- AddRadioItemBonus( sceneId, item.id, item.num )
- end
- EndEvent( )
- DispatchMissionInfo(sceneId,selfId,targetId,x211100_g_ScriptId,x211100_g_MissionId)
- end
- end
- --**********************************
- --列举事件
- --**********************************
- function x211100_OnEnumerate( sceneId, selfId, targetId )
- --如果玩家完成过这个任务
- if IsMissionHaveDone(sceneId,selfId,x211100_g_MissionId) > 0 then
- return
- end
- --如果已接此任务
- --else
- if IsHaveMission(sceneId,selfId,x211100_g_MissionId) > 0 then
- AddNumText(sceneId,x211100_g_ScriptId,x211100_g_MissionName);
- --满足任务接收条件
- elseif x211100_CheckAccept(sceneId,selfId) > 0 then
- AddNumText(sceneId,x211100_g_ScriptId,x211100_g_MissionName);
- end
- end
- --**********************************
- --检测接受条件
- --**********************************
- function x211100_CheckAccept( sceneId, selfId )
- --需要2级才能接
- if GetLevel( sceneId, selfId ) >= 1 then
- return 1
- else
- return 0
- end
- end
- --**********************************
- --接受
- --**********************************
- function x211100_OnAccept( sceneId, selfId )
- --加入任务到玩家列表
- AddMission( sceneId,selfId, x211100_g_MissionId, x211100_g_ScriptId, 1, 0, 0 ) --添加任务
- misIndex = GetMissionIndexByID(sceneId,selfId,x211100_g_MissionId) --得到任务的序列号
- SetMissionByIndex(sceneId,selfId,misIndex,0,0) --根据序列号把任务变量的第0位置0
- SetMissionByIndex(sceneId,selfId,misIndex,1,0) --根据序列号把任务变量的第1位置0
- end
- --**********************************
- --放弃
- --**********************************
- function x211100_OnAbandon( sceneId, selfId )
- --删除玩家任务列表中对应的任务
- DelMission( sceneId, selfId, x211100_g_MissionId )
- end
- --**********************************
- --继续
- --**********************************
- function x211100_OnContinue( sceneId, selfId, targetId )
- --提交任务时的说明信息
- BeginEvent(sceneId)
- AddText(sceneId,x211100_g_MissionName)
- AddText(sceneId,x211100_g_MissionComplete)
- AddMoneyBonus( sceneId, x211100_g_MoneyBonus )
- for i, item in x211100_g_ItemBonus do
- AddItemBonus( sceneId, item.id, item.num )
- end
- for i, item in x211100_g_RadioItemBonus do
- AddRadioItemBonus( sceneId, item.id, item.num )
- end
- EndEvent( )
- DispatchMissionContinueInfo(sceneId,selfId,targetId,x211100_g_ScriptId,x211100_g_MissionId)
- end
- --**********************************
- --检测是否可以提交
- --**********************************
- function x211100_CheckSubmit( sceneId, selfId )
- misIndex = GetMissionIndexByID(sceneId,selfId,x211100_g_MissionId)
- num = GetMissionParam(sceneId,selfId,misIndex,1)
- if num == x211100_g_DemandTrueKill[1].num then
- return 1
- end
- return 0
- end
- --**********************************
- --提交
- --**********************************
- function x211100_OnSubmit( sceneId, selfId, targetId,selectRadioId )
- if x211100_CheckSubmit( sceneId, selfId, selectRadioId ) then
- BeginAddItem(sceneId)
- for i, item in x211100_g_ItemBonus do
- AddItem( sceneId,item.id, item.num )
- end
-
- for i, item in x211100_g_RadioItemBonus do
- if item.id == selectRadioId then
- AddItem( sceneId,item.id, item.num )
- end
- end
- ret = EndAddItem(sceneId,selfId)
- --添加任务奖励
- if ret > 0 then
- AddMoney(sceneId,selfId,x211100_g_MoneyBonus );
- --扣除任务物品
- --for i, item in g_DemandItem do
- -- DelItem( sceneId, selfId, item.id, item.num )
- --end
- ret = DelMission( sceneId, selfId, x211100_g_MissionId )
- if ret > 0 then
- MissionCom( sceneId,selfId, x211100_g_MissionId )
- AddItemListToHuman(sceneId,selfId)
- end
- else
- --任务奖励没有加成功
- BeginEvent(sceneId)
- strText = "背包已满,无法完成任务"
- AddText(sceneId,strText);
- EndEvent(sceneId)
- DispatchMissionTips(sceneId,selfId)
- end
- end
- end
- --**********************************
- --杀死怪物或玩家
- --**********************************
- function x211100_OnKillObject( sceneId, selfId, objdataId )
- if GetName(sceneId,objId) == x211100_g_DemandTrueKill[1].name then
- misIndex = GetMissionIndexByID(sceneId,selfId,x211100_g_MissionId)
- num = GetMissionParam(sceneId,selfId,misIndex,1)
- if num < x211100_g_DemandTrueKill[1].num then
- --把任务完成标志设置为1
- if num == x211100_g_DemandTrueKill[1].num - 1 then
- SetMissionByIndex(sceneId,selfId,misIndex,0,1)
- end
- --设置打怪数量+1
- SetMissionByIndex(sceneId,selfId,misIndex,1,num+1)
- BeginEvent(sceneId)
- strText = format("已杀死草原狼 %d/5", GetMissionParam(sceneId,selfId,misIndex,1) )
- AddText(sceneId,strText);
- EndEvent(sceneId)
- DispatchMissionTips(sceneId,selfId)
- end
- end
- end
- --**********************************
- --进入区域事件
- --**********************************
- function x211100_OnEnterArea( sceneId, selfId, zoneId )
- end
- --**********************************
- --道具改变
- --**********************************
- function x211100_OnItemChanged( sceneId, selfId, itemdataId )
- end
- --**********************************
- --死亡事件
- --**********************************
- function x020000_OnDie( sceneId, selfId, killerId )
- end
复制代码 |