1、游戏任务策划案一 任务简要说明:老道炼药,需要一个天使之心,在天使加百列身上有半颗,在路西法身上有半颗。老道交给你一个玉符,告诉你在法坛上使用可以帮你打开通往两处的通道。并告诉你两处的坐标A、B。(不在法坛上使用玉符无效)A 坐标通往加百列,B 通道通往路西法。你站在法坛上,使用玉符进入光明前殿(或者黑暗大殿,进入先后次序不论)。进入光明前殿遇到加百列,加百列异常高傲,称你为异教徒,你回敬他是长着鸡翅膀的不男不女的鸟人,对骂之后开始战斗。加百列战斗策略:自身 20%的几率使用光明护盾,持续 5 秒,每次光明护盾消失后都有 20%的几率再次使用。当自身血量低于最大血量有 10%的几率使用治愈术。
2、当自身血量低于最大血量 10%有 10%的几率使用复活术,血量回满,复活术最多可使用三次。当自身血量低于最大血量 1%,且三次复活术不满则 100%使用复活术。当对方血量是当前自身血量的 2 倍,有 10%的几率使用大预言术,大预言术 50%几率为时间凝固,对方不可操作,时间 5 秒,50%的几率为时间逆流,对方所有属性减半,时间 5秒加百列死亡后 100%获得半颗光明天使之心,获得天使之心后,你自动返回法坛前,法坛前坐标为 C。 进入黑暗神殿,路西法只说了声战斗吧,即开始战斗。路西法战斗策略:当自身血量分别为最大血量的 90%,70%, 50%, 30%, 10% 时开始召唤生物,第一批为三
3、个石像鬼,第二批为三个黑暗巫师,第三批为四个大恶魔,第四批为四个骨龙,第五批为五个深渊魔王。当每死一只召唤生物,有 10%的几率分别使用虚弱,中毒,恐惧,失明,四个魔法中的一个。若召唤生物没有全部死亡,而路西法血量少于 5%的时候处于无敌状态,物理和魔法攻击免疫。杀死路西法 100%获得半颗黑暗天使之心,获得后自动返回法坛前台。你将两个半颗天使之心带到老道处,老道要你用狗血去融合了这两个半颗天使之心,使之变成一颗完整的天使之心。你去找了半盆黑狗血,将两颗天使之心扔进去,一道光闪过,盆里出现课天使之心,你拿完整的天使之心又去交给老道,老道很满意,给了你一枚人参果,你临走好奇问老道要天使之心炼什么
4、药,老道告诉你,没啥用,就是看鸟人脸上道貌岸然,一肚子男盗女娼的样子不爽,正好最近有点闲,拿天使之心不过是想炼一份给自己养的牛除牛虱的药而已。你不仅为老道的恶搞而汗颜。特别说明:1、该任务中任何死亡都做正常死亡处理,死亡后需要重新从法坛进入目的地2、当每拿到半颗天使之心,则该地图不可再次进入,输入坐标无效3、当两个半颗天使之心都已获得,则玉符自动消失4、两个场景地图不保存信息,即玩家在两个场景地图中的任一个下线后,再次上线则回到法坛前5、该任务不可重复,每个用户只能完成一次6、该任务接受后需要在任务日志中记录,用户可以随时查询,任务完成后清除任务日志7、用户获得的奖励需要做 log,方便查询要
5、求:1、写出任务基本流程,并附流程图2、按照任务编写一份伪脚本其他说明:1、所有所需的关键词、变量、以及函数由答题者自行定义,并对所定义的词、变量、函数等作出解释说明2、编写格式可以按自己的方式编写,但需作出必要的说明3、在战斗脚本部分编写,可任一选择一个战斗进行编写,也可以全部编写“老道炼药”任务策划案(初稿)一 任务基本流程领取任务:1.玩家去道观(21,104)找老道对话,获得玉符,任务开始。做任务: 2.玩家去道观所在的法坛。3.玩家在法坛使用玉符,打开通道,输入 A 坐标,来到光明大殿杀死加百列,获得半颗天使之心。4.玩家在法坛使用玉符,打开通道,输入 B 坐标,来到黑暗大殿杀死路西
6、法,获得半颗天使之心。5.玩家带着 2 个半颗天使之心找老道对话。6.玩家奉命炼制天使之心,去找材料黑狗血。还任务: 7.玩家带着天使之心找老道对话,获得人参果,任务完成。任务流程图:二 加百列战斗脚本流程图NY YN NY老道 (法坛)道观 光明大殿加百列黑暗大殿路西法找黑狗血NPC 生命状态战斗状态参数 Dir,DistDist0 AI 决策战斗状态执行决策Move, Dist-1DropItem ()MoveBack ()Dist = 0N YAI 决策流程图:YNYNYNYN三 脚本相关1.函数定义:GetMissionFlag (PlayerID,MissionID) -读取玩家某任
7、务的任务完成标识GetMissionSpace ( ) -读取玩家当前已接任务总数,-未达上限返回 TURE,否则返回 FALSEGetMissionName (MissionFlag) -读取指定任务的任务变量名GetMissionValue(MissionFlag) -读取指定任务的任务变量名对应的变量值TestMissionFlag (Flag) -检测玩家任务完成标识表的状态,有变化则返回-对应任务的任务编号,否则返回 FALSEGetMissionText (MissionID,MissionFlag) -根据任务编号和任务完成标识读取任务日志说明GetPlayerLevel (Pl
8、ayerID) -读取玩家当前等级GetPlayerName (PlayerID) -读取玩家游戏 ID 的呢称GetItem (ItemID) -玩家获得指定物品LoseItem (ItemID) -玩家失去指定物品GetMissionGain (MissionID) -玩家获得某任务的任务奖励LookforItem (ItemID,ItemNumber) -追踪玩家身上携带的某物品,返回 TURE 或FALSEPlayAnim (NPC/Player,AnimID) -播放指定的精灵动画NPCtalk ( ) -显示 NPC 当前对白Playertalk ( ) -显示玩家当前对白ERRO
9、R( ) -提示错误的输入信息BrightShield ( )Resurrection ( )Therapy ( )BigPrediection ( )UseSkill (AI)GetPlayerHP (PlayerID) -读取玩家当前 HP 值GetNPCHP (NPCID) -读取 NPC 当前 HP 值GetPlayerDroidX ( ) -读取玩家当前 X 坐标GetPlayerDroidY ( ) -读取玩家当前 Y 坐标GetPlayerDroidDir ( ) -读取玩家当前面向GetPlayerToNPCDist ( ) -读取玩家距 NPC 的当前距离GetNPCDroi
10、dX ( ) -读取 NPC 当前 X 坐标GetNPCDroidY ( ) -读取 NPC 当前 Y 坐标GetNPCDroidDir ( ) -读取 NPC 当前面向MoveNPCDroid(Dir, Dist,, Speed) -根据给定的面向,距离和速度移动 NPCGetStateTime (FreqtTime) -计时器根据计数循环返回 FALSE 或 1UseSkill (SkillID) -使用指定的技能 OverSkill (SkillID) -取消指定的技能ViewPepoleInRegional (radius) -查看区域 radius 内目标,返回 TURE 或者FAL
11、SEGetSystemTime ( ) -读取当前系统时间,单位秒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 =“XX
12、X,贫道有件事想请你帮忙。 ”Db1002 =“道长,啥事? ”Db1003 =“是这样,我炼药需要一个叫做天使之心的材料,这个材料在加百列身上有半颗,在路西法身上有半颗,你能帮我去取来吗?”Db1004 =“没问题。 ”Db1005 =“XXX,快去做你的事情吧。 ”Db1006 =“XXX,事情办的怎样了? ”Db1007 =“抱歉,道长,我决定放弃了。 ”Db1008 =“办好了。 ”Db1009 = “太好了, XXX 你真是少年英豪,贫道一直很看好你,恩,这个人参果送给你,希望你不要辜负贫道一番心意。 ”Db1010 =“道长你太客气了。哦,对了,顺便问下,道长你准备炼什么灵丹妙药呀
13、?”Db1011 =“没啥用,就是看那鸟人表面道貌岸然,其实一肚子男盗女娼的样子不爽,我正好最近有点闲,拿天使之心不过是想炼一份给自己养的牛除牛虱的药而已。”Db1012 =“XXX,贫道要的是完整的天使之心,你用狗血去融合了这两个半颗天使之心,使之变成一颗完整的天使之心,然后再找我吧。”Db1013 =“XXX,不要和贫道开玩笑了,快点去完成吧。 ”Db1014 =“XXX,很遗憾你放弃了。 ”Db1015 =“XXX,很高兴见到你,上次多谢你帮忙。 ”Db1016 =“嘎嘎,哪来的异教徒,还不向仁慈的主忏悔?”Db1017 =“我呸!你丫的 狂什么,不过是一个长着鸡翅膀的不男不女的鸟人。”
14、Db1018 =“气死我也,主会原谅我的,受死吧!”Db1019 =“嘎嘎 ,看你往哪跑!”Db1020 =“嘎嘎 ”Db1021 =“别得意了 ,战斗才刚刚开始。 ”Db1022 =“嘎嘎,很失望吧。 ”Db1023 =“该死 ,不可能的事情,我居然被打败了!”Db1024 =“可恶 !”Db1025 =“难以置信 ,我会输给一个卑贱的人类么? ”Db1026 =“别妄想反抗了 ,快来乖乖受死吧!”Db1027 =“还在挣扎 ,也好,我就来导演一场猫戏老鼠的精彩演出,嘎嘎!”Db1028 =“觉悟吧 ,你死定了。 ”/;/3.任务脚本:Mission.lua-导入 API-int HAPI_
15、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 ( ) thenIf (TestMissionFlag (
16、 ) = = 01) then -记录新任务信息Flag= TestMissionFlag ( );Mission= ;MissionFlag=GetMissionName (Flag)= GetMissionValue (Flag);Else Mission= ;MissionTestMissionFlag ( )=nil; -删除指定任务信息End Else if (LookforMissionText ( ) then -查询指定任务日志Print (GetMissionText(MissionID, MissionFlag));Else if (LookforMissionTable
17、( ) ) then -查询玩家当前任务列表信息Print (Mission);EndEnd4.老道(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 *pluas
18、tate) 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
19、(GetPlayerLevel (PlayerID) OriginalX) thenReturn WEST;Else if (NPCDroidY OriginalY) thenReturn NORTH;Else return FALSE;End End / -光明护盾的 AI 策略Function BrightShield ( ) -If (BrightState = = 0) thenRarity= GetRanInRange (0, 9);If (GetRanInRange (0, 4) = = 1) thenAI = BrightShield;BrightState = 1;T0 = G
20、etSystemTime ( );NPCtalk (Db1020);Else AI = FALSE;End Else T=GetSystemTime ( ) ;AI=FALSE;If (tT t0 = = CD) thenBrightState=0;End Return AI;End / -复活术的 AI 策略Function Resurrection ( ) NPCHP=GetNPCHP ( NPC112);If (NPCHPHP/100) thenIf (Cout3) thenAI= Resurrection;If (Cout = = 0) thenNPCtalk (Db1021);Els
21、e NPCtalk(Db1022);EndElse AI=FALSE;NPCtalk (Db1023);End Else if (NPCHPHP/10) thenRarity=GetRanInrange (0,9);If (Cout3) thenIf (Rarity = = 1) thenAI=Resurrection;If (Cout = = 0) thenNPCtalk (Db1021);Else NPCtalk(Db1022);EndElse AI= FALSE;If (Rarity = = 10) thenNPCtalk (Db1024);End End Else AI= FALSE;
22、If (Rarity = = 2) thenNPCtalk (Db1025);End End Else AI= FALSE;End Return AI;End / -治疗术的 AI 策略Function Therapy ( )NPCHP=GetNPCHP ( NPC112);Rarity=GetRanInrange (0,9);If (NPCHPHP) thenIf (Rarity = = 1) thenAI=Therapy;NPCtalk (Db1021);Else AI= FALSE;If (Rarity = = 10) thenNPCtalk (Db1024);End End Else
23、AI= FALSE;If (Rarity = = 2) thenNPCtalk (Db1026);Else if (Rarity = = 3) thenNPCtalk (Db1027);End End Return AI;End / -大预言术的 AI 策略Function BigPrediection ( )NPCHP=GetNPCHP ( NPC112);PlayerHP= GetPlayerHP ( );If (NPCHP=PlayerHP/2) thenRarity=GetRanInrange (0,9);If (Rarity = =1) thenNPCtalk (Db1028);If
24、 (GetRanInrange (0,1)= = 1) thenAI= 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
25、 -发现目标While (GetPlayerHP() do -玩家未死亡NPCtalk (Db1019); Dir= GetPlayerFaceDir ( ); -获得需要面对玩家的方向Dist=RanInRange (3, 20); -随机获得加百列的移动距离While (Dist) doIf (BrightShield ( ) then Dir= GetPlayerFaceDir ( ); UseSkill (BrightShield); Else if (Resurrection ( ) then Dir= GetPlayerFaceDir ( ); UseSkill (Resurrec
26、tion); Else if (Therapy () then Dir= GetPlayerFaceDir ( ); UseSkill (Therapy); Else if (BigPrediection ( ) thenDir= GetPlayerFaceDir ( ); UseSkill (BigPrediection ( );Else if (GetPlayerToNPCDist= AttackDist) then Dir= GetPlayerFaceDir ( ); UseSkill (OrdinaryAttack);End MoveNPCDroid (Dir, Dist, Speed
27、); -移动加百列If (ViewPepoleInRegional (Radius) thenDist=Dist-1;Else Dist=0; -失去目标End End End -玩家死亡或下线End -玩家离开加百列警觉区域Dir=GetMoveBackDir;If (Dir) thenMoveNPCDroid (Dir, Dist, Speed);End End -加百列被玩家杀死GetItem (Item366); -掉落半颗天使之心 End6.路西法(npc140)的脚本: npc150.lua(略)7.场景脚本:(道观)cj21.lua;(光明大殿)cj42.lua;(黑暗大殿)cj
28、60.lua(道观)cj21.lua:-导入 API 函数-Int HAPI_ChangeScence(lua_state *pluastate)/Int HAPI_GetScenceDriod (lua_state *pluastate)-脚本主体-Func_ cj21 ( )/;/If (GetScenceDriod (X, Y) = “20,211”) then -输入坐标 AChangeScence (cj42, cj21); -传送到光明大殿Else if (GetScenceDriod (X, Y) =”202,11”) then -输入坐标 BChangeScence (cj60
29、, cj21); -传送到黑暗大殿Else return ERROR (Db660); -如果输入错误信息,返回提示End End(光明大殿)Cj42.lua:-导入 API 函数-Int HAPI_ChangeScence(lua_state *pluastate)int HAPI_GetPlayerHP (lua_state *pluastate) int HAPI_LookforItem (lua_state *pluastate)/-脚本主体-Func_ cj42 ( )/;/If (GetPlayerHP () = =0) then -如果玩家死亡ChangeScence (cj21
30、, cj42); -被传送回道观里的法坛PlayerDroidX=44; -法坛坐标 C(44, 148)PlayerDroidY=148; EndIf (LookforItem (Item366, 1) then -如果杀死加百列获得半颗天使之心ChangeScence (cj21, cj42);EndEnd(黑暗大殿)Cj60.lua:-导入 API 函数-Int HAPI_ChangeScence(lua_state *pluastate)int HAPI_GetPlayerHP (lua_state *pluastate) int HAPI_LookforItem (lua_state
31、 *pluastate)/;/-脚本主体-Func_ cj60 ( )/;/If (GetPlayerHP () = =0) then -如果玩家死亡ChangeScence (cj21, cj60); -被传送回道观里的法坛PlayerDroidX=44; -法坛坐标 C(44, 148)PlayerDroidY=148; EndIf (LookforItem (Item367, 1) then -如果杀死路西法获得半颗天使之心ChangeScence (cj21, cj60);EndEnd7.物品脚本:玉符(Item250) ,半颗天使之心(Item366) ,半颗天使之心(Item367
32、),天使之心(Item368) ,人参果(Item321)(玉符)Item250.lua:-导入 API 函数-int HAPI_LookforItem (lua_state *pluastate) int HAPI_LoseItem (lua_state *pluastate) /-脚本主体-Func_ Item250 ( )/;/If (LookforItem (Item366, 1) then -查看玩家身上是否携带有 2 个半颗天使之心If (LookforItem (Item367, 1)LoseItem (Item250); -玉符消失EndEnd经验不足,存在许多语法错误和格式错误,引起阅读不便,还请各位见谅。