收藏 分销(赏)

游戏简单任务脚本示例lua.doc

上传人:s4****5z 文档编号:8952325 上传时间:2025-03-09 格式:DOC 页数:15 大小:112.50KB
下载 相关 举报
游戏简单任务脚本示例lua.doc_第1页
第1页 / 共15页
游戏简单任务脚本示例lua.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
游戏任务策划案 一 任务简要说明: 老道炼药,需要一个天使之心,在天使加百列身上有半颗,在路西法身上有半颗。老道交给你一个玉符,告诉你在法坛上使用可以帮你打开通往两处的通道。并告诉你两处的坐标A、B。(不在法坛上使用玉符无效) A坐标通往加百列,B通道通往路西法。 你站在法坛上,使用玉符进入光明前殿(或者黑暗大殿,进入先后次序不论)。 进入光明前殿遇到加百列,加百列异常高傲,称你为异教徒,你回敬他是长着鸡翅膀的不男不女的鸟人,对骂之后开始战斗。 加百列战斗策略:自身20%的几率使用光明护盾,持续5秒,每次光明护盾消失后都有20%的几率再次使用。 当自身血量低于最大血量有10%的几率使用治愈术。 当自身血量低于最大血量10%有10%的几率使用复活术,血量回满,复活术最多可使用三次。 当自身血量低于最大血量1%,且三次复活术不满则100%使用复活术。 当对方血量是当前自身血量的2倍,有10%的几率使用大预言术,大预言术50%几率为时间凝固,对方不可操作,时间5秒,50%的几率为时间逆流,对方所有属性减半,时间5秒 加百列死亡后100%获得半颗光明天使之心,获得天使之心后,你自动返回法坛前,法坛前坐标为C。 进入黑暗神殿,路西法只说了声战斗吧,即开始战斗。 路西法战斗策略:当自身血量分别为最大血量的90%,70%, 50%, 30%, 10%时开始召唤生物,第一批为三个石像鬼,第二批为三个黑暗巫师,第三批为四个大恶魔,第四批为四个骨龙,第五批为五个深渊魔王。 当每死一只召唤生物,有10%的几率分别使用虚弱,中毒,恐惧,失明,四个魔法中的一个。 若召唤生物没有全部死亡,而路西法血量少于5%的时候处于无敌状态,物理和魔法攻击免疫。 杀死路西法100%获得半颗黑暗天使之心,获得后自动返回法坛前台。 你将两个半颗天使之心带到老道处,老道要你用狗血去融合了这两个半颗天使之心,使之变成一颗完整的天使之心。 你去找了半盆黑狗血,将两颗天使之心扔进去,一道光闪过,盆里出现课天使之心,你拿完整的天使之心又去交给老道,老道很满意,给了你一枚人参果,你临走好奇问老道要天使之心炼什么药,老道告诉你,没啥用,就是看鸟人脸上道貌岸然,一肚子男盗女娼的样子不爽,正好最近有点闲,拿天使之心不过是想炼一份给自己养的牛除牛虱的药而已。你不仅为老道的恶搞而汗颜。 特别说明: 1、该任务中任何死亡都做正常死亡处理,死亡后需要重新从法坛进入目的地 2、当每拿到半颗天使之心,则该地图不可再次进入,输入坐标无效 3、当两个半颗天使之心都已获得,则玉符自动消失 4、两个场景地图不保存信息,即玩家在两个场景地图中的任一个下线后,再次上线则回到法坛前 5、该任务不可重复,每个用户只能完成一次 6、该任务接受后需要在任务日志中记录,用户可以随时查询,任务完成后清除任务日志 7、用户获得的奖励需要做log,方便查询 要求: 1、写出任务基本流程,并附流程图 2、按照任务编写一份伪脚本 其他说明: 1、所有所需的关键词、变量、以及函数由答题者自行定义,并对所定义的词、变量、函数等作出解释说明 2、编写格式可以按自己的方式编写,但需作出必要的说明 3、在战斗脚本部分编写,可任一选择一个战斗进行编写,也可以全部编写 “老道炼药”任务策划案(初稿) 一 任务基本流程 领取任务:1.玩家去道观(21,104)找老道对话,获得玉符,任务开始。 做任务: 2.玩家去道观所在的法坛。 3.玩家在法坛使用玉符,打开通道,输入A坐标,来到光明大殿杀死加百列,获得半颗天使之心。 4.玩家在法坛使用玉符,打开通道,输入B坐标,来到黑暗大殿杀死路西法,获得半颗天使之心。 5.玩家带着2个半颗天使之心找老道对话。 6.玩家奉命炼制天使之心,去找材料黑狗血。 还任务: 7.玩家带着天使之心找老道对话,获得人参果,任务完成。 任务流程图: 找黑狗血 光明大殿 加百列 黑暗大殿 路西法 ⑦ ⑥ 老道 ⑤ ③ ② (法坛) 道观 ④ ① ② 二 加百列战斗脚本流程图 NPC生命状态 战斗状态 参数Dir,Dist Dist>0 AI决策 战斗状态 执行决策 Move, Dist-1 DropItem () MoveBack () Dist = 0 N Y Y N N Y N Y AI决策流程图: BrightShield ( ) Resurrection ( ) Therapy ( ) BigPrediection ( ) UseSkill (AI) Y N Y N Y N Y N 三 脚本相关 1.函数定义: GetMissionFlag (PlayerID,MissionID) ---读取玩家某任务的任务完成标识 GetMissionSpace ( ) ---读取玩家当前已接任务总数, ---未达上限返回TURE,否则返回FALSE GetMissionName (MissionFlag) ---读取指定任务的任务变量名 GetMissionValue(MissionFlag) ---读取指定任务的任务变量名对应的变量值 TestMissionFlag (Flag) ---检测玩家任务完成标识表的状态,有变化则返回---对应任务的任务编号,否则返回FALSE GetMissionText (MissionID,MissionFlag) ---根据任务编号和任务完成标识读取任务日志说明 GetPlayerLevel (PlayerID) ---读取玩家当前等级 GetPlayerName (PlayerID) ---读取玩家游戏ID的呢称 GetItem (ItemID) ---玩家获得指定物品 LoseItem (ItemID) ---玩家失去指定物品 GetMissionGain (MissionID) ---玩家获得某任务的任务奖励 LookforItem (ItemID,ItemNumber) ---追踪玩家身上携带的某物品,返回TURE或FALSE PlayAnim (NPC/Player,AnimID) ---播放指定的精灵动画 NPCtalk ( ) ---显示NPC当前对白 Playertalk ( ) ---显示玩家当前对白 ERROR( ) ---提示错误的输入信息 GetPlayerHP (PlayerID) ---读取玩家当前HP值 GetNPCHP (NPCID) ---读取NPC当前HP值 GetPlayerDroidX ( ) ---读取玩家当前X坐标 GetPlayerDroidY ( ) ---读取玩家当前Y坐标 GetPlayerDroidDir ( ) ---读取玩家当前面向 GetPlayerToNPCDist ( ) ---读取玩家距NPC的当前距离 GetNPCDroidX ( ) ---读取NPC当前X坐标 GetNPCDroidY ( ) ---读取NPC当前Y坐标 GetNPCDroidDir ( ) ---读取NPC当前面向 MoveNPCDroid(Dir, Dist,,Speed) ---根据给定的面向,距离和速度移动NPC GetStateTime (FreqtTime) ---计时器根据计数循环返回FALSE或1 UseSkill (SkillID) ---使用指定的技能 OverSkill (SkillID) ---取消指定的技能 ViewPepoleInRegional (radius) ---查看区域radius内目标,返回TURE或者FALSE GetSystemTime ( ) ---读取当前系统时间,单位秒 GetRanInRange (Min,Max ) ---获得[Min+1,Max-Min+1]范围内的任意整数值 ChangeScence(to,from) ---由from场景切换到to场景 GetScenceDriod (DroidX, DroidY) ---读取玩家输入的X,Y坐标 2. 附相关NPC对白配置文件:NPCdb.text(对白,文件后缀名不知道是什么类型的) -------------------------------------------------NPC对白编号--------------------------------------------------- // Dn660=“你输入的是错误的坐标,请重新输入。” ; // Db1000 =“XXX,你能力不够,还是去外面磨炼吧。” Db1001 =“XXX,贫道有件事想请你帮忙。” Db1002 =“道长,啥事?” Db1003 =“是这样,我炼药需要一个叫做天使之心的材料,这个材料在加百列身上有半颗,在路西法身上有半颗,你能帮我去取来吗?” Db1004 =“没问题。” Db1005 =“XXX,快去做你的事情吧。” Db1006 =“XXX,事情办的怎样了?” Db1007 =“抱歉,道长,我决定放弃了。” Db1008 =“办好了。” Db1009 = “太好了,XXX你真是少年英豪,贫道一直很看好你,恩,这个人参果送给你,希望你不要辜负贫道一番心意。” Db1010 =“道长你太客气了。哦,对了,顺便问下,道长你准备炼什么灵丹妙药呀?” Db1011 =“没啥用,就是看那鸟人表面道貌岸然,其实一肚子男盗女娼的样子不爽,我正好最近有点闲,拿天使之心不过是想炼一份给自己养的牛除牛虱的药而已。” Db1012 =“XXX,贫道要的是完整的天使之心,你用狗血去融合了这两个半颗天使之心,使之变成一颗完整的天使之心,然后再找我吧。” Db1013 =“XXX,不要和贫道开玩笑了,快点去完成吧。” Db1014 =“XXX,很遗憾你放弃了。” Db1015 =“XXX,很高兴见到你,上次多谢你帮忙。” Db1016 =“嘎嘎,哪来的异教徒,还不向仁慈的主忏悔?” Db1017 =“我呸!你丫的狂什么,不过是一个长着鸡翅膀的不男不女的鸟人。” Db1018 =“气死我也,主会原谅我的,受死吧!” Db1019 =“嘎嘎,看你往哪跑!” Db1020 =“嘎嘎…” Db1021 =“别得意了,战斗才刚刚开始。” Db1022 =“嘎嘎,很失望吧。” Db1023 =“该死,不可能的事情,我居然被打败了!” Db1024 =“可恶!” Db1025 =“难以置信,我会输给一个卑贱的人类么?” Db1026 =“别妄想反抗了,快来乖乖受死吧!” Db1027 =“还在挣扎,也好,我就来导演一场猫戏老鼠的精彩演出,嘎嘎!” Db1028 =“觉悟吧,你死定了。” // ; ; // 3.任务脚本:Mission.lua --------------------------------------------------导入API----------------------------------------------------- int HAPI_GetMissionFlag (lua_state *pluastate) int HAPI_GetMissionName (lua_state *pluastate) int HAPI_GetMissionValue(lua_state *pluastate) int HAPI_TestMissionFlag (lua_state *pluastate) int HAPI_GetMissionText (lua_state *pluastate) -----------------------------------------------脚本主体-------------------------------------------------------- Func_Mission ( ) // ; ; // If (TestMissionFlag ( )) then If (TestMissionFlag ( ) = = 01) then ---记录新任务信息 Flag= TestMissionFlag ( ); Mission={ }; Mission[Flag]={GetMissionName (Flag)= GetMissionValue (Flag)}; Else Mission={ }; Mission[TestMissionFlag ( )]=nil; ---删除指定任务信息 End Else if (LookforMissionText ( )) then ---查询指定任务日志 Print (GetMissionText(MissionID, MissionFlag)); Else if (LookforMissionTable ( ) ) then ---查询玩家当前任务列表信息 Print (Mission); End End 4.老道(npc47)的脚本:npc47.lua --------------------------------------------------导入API----------------------------------------------------- int HAPI_GetMissionFlag (lua_state *pluastate) int HAPI_GetMissionSpace (lua_state *pluastate) int HAPI_GetPlayerLevel (lua_state *pluastate) int HAPI_GetPlayerName (lua_state *pluastate) int HAPI_GetItem (lua_state *pluastate) int HAPI_GetMissionGain (lua_state *pluastate) int HAPI_LookforItem (lua_state *pluastate) int HAPI_PlayAnim (lua_state *pluastate) int HAPI_NPCtalk (lua_state *pluastate ) int HAPI_Playertalk (lua_state *pluastate) -------------------------------------------------常量声明-------------------------------------------------------- Level=50 ------------------------------------------------对话脚本-------------------------------------------------------- Func_npc47 ( ) # define XXX GetPlayerName ( PlayerID) ; If (GetPlayerLevel (PlayerID)<Level) then NPCtalk (Db1000); End MissionFlag= GetMissionFlag (PlayerID,Mission112) --读取玩家该任务的完成标识 If (MissionFlag= =00) then ---玩家没有领取过该任务 If (GetMissionSpace ( )) then ---玩家还可以领取任务 NPCtalk (Db1001); Playertalk (Db1002); NPCtalk (Db1003); Playertalk (Db1004); GetItem(Item250); --获得道具玉符 Else ---玩家领取任务已达上限 NPCtalk(Db1005); Else if (MissionFlag= =01) then NPCtalk (Db1006,Db1007,Db1008); If (Answer= = Db1007) then MissionFlag=10; Else if (LookforItem (Item368,1)) then ---察看玩家身上是否携带天使之心 NPCtalk (Db1009); Playertalk(Db1010); NPCtalk(Db1011) GetMissionGain (Mission112) ; --获得任务奖励(人参果) Else if ((LookforItem (Item366,1)) then ---查看玩家身上是否携带2个半颗天使之心 If ((LookforItem (Item367,1)) then NPCtalk (Db1012); Else NPCtalk (Db1013); End End Else if (MissionFlag= =10) then NPCtalk (Db1014); Else if (MissionFlag= =11) then NPCtalk (Db1015); End End 5.加百列(npc112)的脚本:npc112.lua --------------------------------------------------导入API----------------------------------------------------- int HAPI_NPCtalk (lua_state *pluastate ) int HAPI_Playertalk (lua_state *pluastate ) int HAPI_ERROR (lua_state *pluastate ) int HAPI_GetPlayerHP (lua_state *pluastate) int HAPI_GetNPCHP (lua_state *pluastate) int HAPI_GetPlayerDroidX (lua_state *pluastate ) int HAPI_GetPlayerDroidY (lua_state *pluastate) int HAPI_GetPlayerDroidDir (lua_state *pluastate) int HAPI_GetPlayerToNPCDist (lua_state *pluastate) int HAPI_GetNPCDroidX (lua_state *pluastate) int HAPI_GetNPCDroidY (lua_state *pluastate ) int HAPI_GetNPCDroidDir (lua_state *pluastate) int HAPI_MoveNPCDroid (lua_state *pluastate) int HAPI_GetSystemTime (lua_state *pluastate ) int HAPI_GetRanInRange (lua_state *pluastate) int HAPI_GetStateTime (lua_state *pluastate) int HAPI_UseSkill (lua_state *pluastate) int HAPI_ViewPlayerInRegional (lua_state *pluastate) -------------------------------------------------常量声明-------------------------------------------------------- // Direction // NORTH=0; SOUTH=2; EAST=4; WEST=6; ------------------------------------------------------------------------------------------------------------------- OriginalX=12; --加百列原来的X坐标 OriginalY=20; ---加百列原来的Y坐标 Speed=10; ---加百列的移动速度 Radius=20; ---加白列可以察觉目标的区域半径 HP=5000; ---加百列的生命满值 Rarity=0; ---指定的几率值 FreqAttack=1; ---加百列的攻击频率(s) AttackDist=4; ---加百列的有效攻击距离 OrdinaryAttack=1; ---普通攻击 BrightShield=121; ---光明护盾 BrightState =0; ---光明护盾状态 CD=5; ---光明状态有效持续时间(s) Therapy=122; ---治疗术 Resurrection=123; ---复活术 Cout=0; ---加百列复活术已使用次数 BigPrediction_1=124; ---大预言术之时间凝固 BigPrediction_2=125 ---大预言术之时间倒流 -----------------------------------------------定义函数------------------------------------------------------- // ---获得需要面对玩家的方向 Function GetPlayerFaceDir ( ) NPCDroidX= GetNPCDroidX ( ); NPCDroidY= GetNPCDroidY ( ); PlayerDroidX= GetNPCDroidX ( ); PlayerDroidY= GetNPCDroidY ( ); If (NPCDroidX < PlayerDroidX) then Return EAST; Else Retuun WEST; End If (NPCDroidY < PlayerDroidY ) then Return SOUTH; Else Return NORTH; End Return NORTH; --- End // ---获得返回原处需要面对的方向 Function GetMoveBackDir ( ) NPCDroidX= GetNPCDroidX ( ); NPCDroidY= GetNPCDroidY ( ); If (NPCDroidX < OriginalX) then Return EAST; Else if (NPCDroidY < OriginalY ) then Return SOUTH; Else if (NPCDroidX > OriginalX) then Return WEST; Else if (NPCDroidY >OriginalY) then Return NORTH; Else return FALSE; End End // ---光明护盾的AI策略 Function BrightShield ( ) --- If (BrightState = = 0) then Rarity= GetRanInRange (0, 9); If (GetRanInRange (0, 4) = = 1) then AI = BrightShield; BrightState = 1; T0 = GetSystemTime ( ); NPCtalk (Db1020); Else AI = FALSE; End Else T=GetSystemTime ( ) ; AI=FALSE; If (tT– t0 = = CD) then BrightState=0; End Return AI; End // ---复活术的AI策略 Function Resurrection ( ) NPCHP=GetNPCHP ( NPC112); If (NPCHP<HP/100) then If (Cout<3) then AI= Resurrection; If (Cout = = 0) then NPCtalk (Db1021); Else NPCtalk(Db1022); End Else AI=FALSE; NPCtalk (Db1023); End Else if (NPCHP<HP/10) then Rarity=GetRanInrange (0,9); If (Cout<3) then If (Rarity = = 1) then AI=Resurrection; If (Cout = = 0) then NPCtalk (Db1021); Else NPCtalk(Db1022); End Else AI= FALSE; If (Rarity = = 10) then NPCtalk (Db1024); End End Else AI= FALSE; If (Rarity = = 2) then NPCtalk (Db1025); End End Else AI= FALSE; End Return AI; End // ---治疗术的AI策略 Function Therapy ( ) NPCHP=GetNPCHP ( NPC112); Rarity=GetRanInrange (0,9); If (NPCHP<HP) then If (Rarity = = 1) then AI=Therapy; NPCtalk (Db1021); Else AI= FALSE; If (Rarity = = 10) then NPCtalk (Db1024); End End Else AI= FALSE; If (Rarity = = 2) then NPCtalk (Db1026); Else if (Rarity = = 3) then NPCtalk (Db1027); End End Return AI; End // ---大预言术的AI策略 Function BigPrediection ( ) NPCHP=GetNPCHP ( NPC112); PlayerHP= GetPlayerHP ( ); If (NPCHP<=PlayerHP/2) then Rarity=GetRanInrange (0,9); If (Rarity = =1) then NPCtalk (Db1028); If (GetRanInrange (0,1)= = 1) then AI= BigPrediection_1; Else AI= BigPrediection_2; End Else AI=FALSE; NPCtalk (Db1024); End Return AI; End -----------------------------------------------脚本主体------------------------------------------------------- Func_npc112 () ------------------------------------------------对话脚本-------------------------------------------------------- NPCtalk (Db1016); Playertalk (Db1017); NPCtalk (Db1018); ------------------------------------------------战斗脚本-------------------------------------------------------- // 主循环 // While (GetNPCHP (npc112)) do ---加百列未死亡时 If (ViewPepoleInRegional (Radius)) then ---发现目标 While (GetPlayerHP()) do ---玩家未死亡 NPCtalk (Db1019); Dir= GetPlayerFaceDir ( ); ---获得需要面对玩家的方向 Dist=RanInRange (3, 20); ---随机获得加百列的移动距离 While (Dist) do If (BrightShield ( )) then Dir= GetPlayerFaceDir ( ); UseSkill (BrightShield); Else if (Resurrection ( )) then Dir= GetPlayerFaceDir
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服