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、该任务接受后需要在任务日志中记录,用户可以随时查询,任务完成后清除任
5、务日志 7、用户获得的奖励需要做log,方便查询 要求: 1、写出任务基本流程,并附流程图 2、按照任务编写一份伪脚本 其他说明: 1、所有所需的关键词、变量、以及函数由答题者自行定义,并对所定义的词、变量、函数等作出解释说明 2、编写格式可以按自己的方式编写,但需作出必要的说明 3、在战斗脚本部分编写,可任一选择一个战斗进行编写,也可以全部编写 “老道炼药”任务策划案(初稿) 一 任务基本流程 领取任务:1.玩家去道观(21,104)找老道对话,获得玉符,任务开始。 做任务: 2.玩家去道观所在的法坛。
6、 3.玩家在法坛使用玉符,打开通道,输入A坐标,来到光明大殿杀死加百列,获得半颗天使之心。 4.玩家在法坛使用玉符,打开通道,输入B坐标,来到黑暗大殿杀死路西法,获得半颗天使之心。 5.玩家带着2个半颗天使之心找老道对话。 6.玩家奉命炼制天使之心,去找材料黑狗血。 还任务: 7.玩家带着天使之心找老道对话,获得人参果,任务完成。 任务流程图: 找黑狗血 光明大殿 加百列 黑暗大殿 路西法
7、 ⑦ ⑥ 老道 ⑤ ③ ② (法坛) 道观 ④ ① ② 二 加百列战斗脚本流程图 NPC生命状态 战斗状态 参数Dir,Dist Dist>0
8、AI决策 战斗状态 执行决策 Move, Dist-1 DropItem () MoveBack () Dist = 0 N Y Y N N Y
9、 N Y AI决策流程图: BrightShield ( ) Resurrection ( ) Therapy ( ) BigPrediection ( ) UseSkill (AI) Y N Y N
10、 Y N Y N 三 脚本相关 1.函数定义: GetMissionFlag (PlayerID,MissionID) ---读取玩家某任务的任务完成标识 GetMissionSpace ( ) ---读取玩家当前已接任务总数, ---未达上限返回TURE,否则返回FALSE GetMissionName (MissionFlag) ---读取指定任务的任务变量名 Get
11、MissionValue(MissionFlag) ---读取指定任务的任务变量名对应的变量值 TestMissionFlag (Flag) ---检测玩家任务完成标识表的状态,有变化则返回---对应任务的任务编号,否则返回FALSE GetMissionText (MissionID,MissionFlag) ---根据任务编号和任务完成标识读取任务日志说明 GetPlayerLevel (PlayerID) ---读取玩家当前等级 GetPlayerName (PlayerID) -
12、读取玩家游戏ID的呢称 GetItem (ItemID) ---玩家获得指定物品 LoseItem (ItemID) ---玩家失去指定物品 GetMissionGain (MissionID) ---玩家获得某任务的任务奖励 LookforItem (ItemID,ItemNumber) ---追踪玩家身上携带的某物品,返回TURE或FALSE PlayAnim (NPC/Player,AnimID) ---播放指定的精灵动画 NPCtalk ( )
13、 ---显示NPC当前对白 Playertalk ( ) ---显示玩家当前对白 ERROR( ) ---提示错误的输入信息 GetPlayerHP (PlayerID) ---读取玩家当前HP值 GetNPCHP (NPCID) ---读取NPC当前HP值 GetPlayerDroidX ( ) ---读取玩家当前X坐标 GetPlayerD
14、roidY ( ) ---读取玩家当前Y坐标 GetPlayerDroidDir ( ) ---读取玩家当前面向 GetPlayerToNPCDist ( ) ---读取玩家距NPC的当前距离 GetNPCDroidX ( ) ---读取NPC当前X坐标 GetNPCDroidY ( ) ---读取NPC当前Y坐标 GetNPCDroidDir ( ) ---读取NPC当前面
15、向 MoveNPCDroid(Dir, Dist,,Speed) ---根据给定的面向,距离和速度移动NPC GetStateTime (FreqtTime) ---计时器根据计数循环返回FALSE或1 UseSkill (SkillID) ---使用指定的技能 OverSkill (SkillID) ---取消指定的技能 ViewPepoleInRegional (radius) ---查看区域radius内目标,返回TURE或者FALSE GetSyst
16、emTime ( ) ---读取当前系统时间,单位秒 GetRanInRange (Min,Max ) ---获得[Min+1,Max-Min+1]范围内的任意整数值 ChangeScence(to,from) ---由from场景切换到to场景 GetScenceDriod (DroidX, DroidY) ---读取玩家输入的X,Y坐标 2. 附相关NPC对白配置文件:NPCdb.text(对白,文件后缀名不知道是什么类型的) ---------------------------------
17、NPC对白编号--------------------------------------------------- // Dn660=“你输入的是错误的坐标,请重新输入。” ; // Db1000 =“XXX,你能力不够,还是去外面磨炼吧。” Db1001 =“XXX,贫道有件事想请你帮忙。” Db1002 =“道长,啥事?” Db1003 =“是这样,我炼药需要一个叫做天使之心的材料,这个材料在加百列身上有半颗,在路西法身上有半颗,你能帮我去取来吗?” Db1004 =“没问题。” Db1005 =“XXX,快去做你的事情吧。” Db1
18、006 =“XXX,事情办的怎样了?” Db1007 =“抱歉,道长,我决定放弃了。” Db1008 =“办好了。” Db1009 = “太好了,XXX你真是少年英豪,贫道一直很看好你,恩,这个人参果送给你,希望你不要辜负贫道一番心意。” Db1010 =“道长你太客气了。哦,对了,顺便问下,道长你准备炼什么灵丹妙药呀?” Db1011 =“没啥用,就是看那鸟人表面道貌岸然,其实一肚子男盗女娼的样子不爽,我正好最近有点闲,拿天使之心不过是想炼一份给自己养的牛除牛虱的药而已。” Db1012 =“XXX,贫道要的是完整的天使之心,你用狗血去融合了这两个半颗天使之心,使之变成一颗完整的
19、天使之心,然后再找我吧。” Db1013 =“XXX,不要和贫道开玩笑了,快点去完成吧。” Db1014 =“XXX,很遗憾你放弃了。” Db1015 =“XXX,很高兴见到你,上次多谢你帮忙。” Db1016 =“嘎嘎,哪来的异教徒,还不向仁慈的主忏悔?” Db1017 =“我呸!你丫的狂什么,不过是一个长着鸡翅膀的不男不女的鸟人。” Db1018 =“气死我也,主会原谅我的,受死吧!” Db1019 =“嘎嘎,看你往哪跑!” Db1020 =“嘎嘎…” Db1021 =“别得意了,战斗才刚刚开始。” Db1022 =“嘎嘎,很失望吧。” Db1023 =“该死,不可能
20、的事情,我居然被打败了!” Db1024 =“可恶!” Db1025 =“难以置信,我会输给一个卑贱的人类么?” Db1026 =“别妄想反抗了,快来乖乖受死吧!” Db1027 =“还在挣扎,也好,我就来导演一场猫戏老鼠的精彩演出,嘎嘎!” Db1028 =“觉悟吧,你死定了。” // ; ; // 3.任务脚本:Mission.lua --------------------------------------------------导入API----------------------------------------------------- in
21、t 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) --
22、脚本主体-------------------------------------------------------- Func_Mission ( ) // ; ; // If (TestMissionFlag ( )) then If (TestMissionFlag ( ) = = 01) then ---记录新任务信息 Flag= TestMissionFlag ( ); Mission={ }; Mission[Flag]={GetMi
23、ssionName (Flag)= GetMissionValue (Flag)}; Else Mission={ }; Mission[TestMissionFlag ( )]=nil; ---删除指定任务信息 End Else if (LookforMissionText ( )) then ---查询指定任务日志 Print (GetMissionText(MissionID, MissionFlag)); Else if (LookforMissionTable ( ) ) then
24、 ---查询玩家当前任务列表信息 Print (Mission); End End 4.老道(npc47)的脚本:npc47.lua --------------------------------------------------导入API----------------------------------------------------- int HAPI_GetMissionFlag (lua_state *pluastate) int HAPI_GetMissionSpace (lua_state *plua
25、state) 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)
26、 int HAPI_PlayAnim (lua_state *pluastate) int HAPI_NPCtalk (lua_state *pluastate ) int HAPI_Playertalk (lua_state *pluastate) -------------------------------------------------常量声明-------------------------------------------------------- Level=50 -----------
27、对话脚本--------------------------------------------------------
Func_npc47 ( )
# define XXX GetPlayerName ( PlayerID) ;
If (GetPlayerLevel (PlayerID) 28、
If (MissionFlag= =00) then ---玩家没有领取过该任务 If (GetMissionSpace ( )) then ---玩家还可以领取任务
NPCtalk (Db1001);
Playertalk (Db1002);
NPCtalk (Db1003);
Playertalk (Db1004);
GetItem(Item250); --获得道具玉符
Else 29、 ---玩家领取任务已达上限
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);
NPCtal 30、k(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) 31、
Else if (MissionFlag= =11) then
NPCtalk (Db1015);
End
End
5.加百列(npc112)的脚本:npc112.lua
--------------------------------------------------导入API-----------------------------------------------------
int HAPI_NPCtalk (lua_state *pluastate )
int HAPI_Playertal 32、k (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_Get 33、PlayerDroidY (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 ) 34、
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 35、HAPI_UseSkill (lua_state *pluastate)
int HAPI_ViewPlayerInRegional (lua_state *pluastate)
-------------------------------------------------常量声明--------------------------------------------------------
// Direction //
NORTH=0;
SOUTH=2;
EAST=4;
WEST=6;
------------------------------- 36、
OriginalX=12; --加百列原来的X坐标
OriginalY=20; ---加百列原来的Y坐标
Speed=10; ---加百列的移动速度
Radius=20; ---加白列可以察觉目标的区域半径
HP=5000; ---加百列的生命满值
Rarity 37、0; ---指定的几率值
FreqAttack=1; ---加百列的攻击频率(s)
AttackDist=4; ---加百列的有效攻击距离
OrdinaryAttack=1; ---普通攻击
BrightShield=121; ---光明护盾
BrightState =0; ---光明护盾状态
CD=5; ---光明状态有效持续时间(s)
Therapy=122; 38、 ---治疗术
Resurrection=123; ---复活术
Cout=0; ---加百列复活术已使用次数
BigPrediction_1=124; ---大预言术之时间凝固
BigPrediction_2=125 ---大预言术之时间倒流
-----------------------------------------------定义函数-------------------------------------------------------
// 39、 ---获得需要面对玩家的方向
Function GetPlayerFaceDir ( )
NPCDroidX= GetNPCDroidX ( );
NPCDroidY= GetNPCDroidY ( );
PlayerDroidX= GetNPCDroidX ( );
PlayerDroidY= GetNPCDroidY ( );
If (NPCDroidX < PlayerDroidX) then
Return EAST;
Else
Retuun WEST;
End
If (NPCDroidY < Player 40、DroidY ) 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 < Original 41、Y ) 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);
42、
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策略
Fun 43、ction Resurrection ( )
NPCHP=GetNPCHP ( NPC112);
If (NPCHP 44、nrange (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 45、);
End
End
Else AI= FALSE;
End
Return AI;
End
// ---治疗术的AI策略
Function Therapy ( )
NPCHP=GetNPCHP ( NPC112);
Rarity=GetRanInrange (0,9);
If (NPCHP 46、b1024);
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) the 47、n
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
------------------------------------------ 48、脚本主体-------------------------------------------------------
Func_npc112 ()
------------------------------------------------对话脚本--------------------------------------------------------
NPCtalk (Db1016);
Playertalk (Db1017);
NPCtalk (Db1018);
--------------------------------------- 49、战斗脚本--------------------------------------------------------
// 主循环 //
While (GetNPCHP (npc112)) do ---加百列未死亡时
If (ViewPepoleInRegional (Radius)) then ---发现目标
While (GetPlayerHP()) do ---玩家未死亡
NPCtalk (Db1019);
Dir 50、 GetPlayerFaceDir ( ); ---获得需要面对玩家的方向
Dist=RanInRange (3, 20); ---随机获得加百列的移动距离
While (Dist) do
If (BrightShield ( )) then
Dir= GetPlayerFaceDir ( );
UseSkill (BrightShield);
Else if (Resurrection ( )) then
Dir= GetPlayerFaceDir
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818