一 任务简要说明:
游戏任务策划案
老道炼药,需要一个天使之心,在天使加百列身上有半颗,在路西法身上有半颗。老道交给
你一个玉符,告诉你在法坛上使用可以帮你打开通往两处的通道。并告诉你两处的坐标 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.玩家带着天使之心找老道对话,获得人参果,任务完成。
任务流程图:
找黑狗血
⑦
光明大殿
①
老道
道观
⑥
⑤
②
③
②
(法坛)
④
二 加百列战斗脚本流程图
黑暗大殿
加百列
路西法
Dist = 0
DropItem ()
MoveBack ()
N
N
NPC 生命状态
Move, Dist-1
Y
战斗状态
Y
Y
战斗状态
N
参数 Dir,Dist
执行决策
N
Dist>0
Y
AI 决策
AI 决策流程图:
BrightShield ( )
N
Resurrection ( )
N
Therapy ( )
N
BigPrediection ( )
N
Y
Y
Y
Y
UseSkill (AI)
三 脚本相关
1.函数定义:
GetMissionFlag (PlayerID,MissionID)
GetMissionSpace ( )
GetMissionName (MissionFlag)
GetMissionValue(MissionFlag)
TestMissionFlag (Flag)
---读取玩家某任务的任务完成标识
---读取玩家当前已接任务总数,
---未达上限返回 TURE,否则返回 FALSE
---读取指定任务的任务变量名
---读取指定任务的任务变量名对应的变量值
---检测玩家任务完成标识表的状态,有变化则返回
---对应任务的任务编号,否则返回 FALSE
---读取玩家当前等级
---读取玩家游戏 ID 的呢称
---玩家获得指定物品
---玩家失去指定物品
---玩家获得某任务的任务奖励
---追踪玩家身上携带的某物品,返回 TURE 或 FALSE
GetMissionText (MissionID,MissionFlag) ---根据任务编号和任务完成标识读取任务日志说明
GetPlayerLevel (PlayerID)
GetPlayerName (PlayerID)
GetItem (ItemID)
LoseItem (ItemID)
GetMissionGain (MissionID)
LookforItem (ItemID,ItemNumber)
PlayAnim (NPC/Player,AnimID)
NPCtalk ( )
Playertalk ( )
ERROR( )
GetPlayerHP (PlayerID)
GetNPCHP (NPCID)
GetPlayerDroidX ( )
GetPlayerDroidY ( )
GetPlayerDroidDir ( )
---播放指定的精灵动画
---显示 NPC 当前对白
---显示玩家当前对白
---提示错误的输入信息
---读取玩家当前 HP 值
---读取 NPC 当前 HP 值
---读取玩家当前 X 坐标
---读取玩家当前 Y 坐标
---读取玩家当前面向
GetPlayerToNPCDist ( )
GetNPCDroidX ( )
GetNPCDroidY ( )
GetNPCDroidDir ( )
MoveNPCDroid(Dir, Dist,,Speed)
GetStateTime (FreqtTime)
UseSkill (SkillID)
OverSkill (SkillID)
ViewPepoleInRegional (radius)
GetSystemTime ( )
GetRanInRange (Min,Max )
ChangeScence(to,from)
GetScenceDriod (DroidX, DroidY)
---读取玩家距 NPC 的当前距离
---读取 NPC 当前 X 坐标
---读取 NPC 当前 Y 坐标
---读取 NPC 当前面向
---根据给定的面向,距离和速度移动 NPC
---计时器根据计数循环返回 FALSE 或 1
---使用指定的技能
---取消指定的技能
---查看区域 radius 内目标,返回 TURE 或者 FALSE
---读取当前系统时间,单位秒
---获得[Min+1,Max-Min+1]范围内的任意整数值
---由 from 场景切换到 to 场景
---读取玩家输入的 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
int HAPI_GetMissionValue(lua_state *pluastate)
int HAPI_TestMissionFlag (lua_state
int HAPI_GetMissionText (lua_state *pluastate)
-----------------------------------------------脚本主体--------------------------------------------------------
Func_Mission ( )
*pluastate)
*pluastate)
//
;
;
//
If (TestMissionFlag ( ))
then
If (TestMissionFlag ( ) = = 01)
Flag= TestMissionFlag ( );
Mission={ };
Mission[Flag]={GetMissionName (Flag)= GetMissionValue (Flag)};
---记录新任务信息
then
Else
End
Mission={ };
Mission[TestMissionFlag ( )]=nil;
---删除指定任务信息
Else if (LookforMissionText ( ))
then
---查询指定任务日志
Print (GetMissionText(MissionID, MissionFlag));
Else if (LookforMissionTable ( ) )
then
---查询玩家当前任务列表信息
Print (Mission);
End
End
4.老道(npc47)的脚本:npc47.lua
*pluastate)
*pluastate)
--------------------------------------------------导入 API-----------------------------------------------------
int HAPI_GetMissionFlag (lua_state *pluastate)
int HAPI_GetMissionSpace (lua_state
int HAPI_GetPlayerLevel (lua_state *pluastate)
int HAPI_GetPlayerName (lua_state *pluastate)
int HAPI_GetItem (lua_state
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
If (GetPlayerLevel (PlayerID)
Else if ((LookforItem (Item366,1))
If ((LookforItem (Item367,1))
NPCtalk (Db1012);
then
---查看玩家身上是否携带 2 个半颗天使之心
then
NPCtalk (Db1013);
Else
End
End
Else if (MissionFlag= =10)
then
NPCtalk (Db1014);
Else if (MissionFlag= =11)
then
NPCtalk (Db1015);
End
End
5.加百列(npc112)的脚本:npc112.lua
*pluastate)
*pluastate )
--------------------------------------------------导入 API-----------------------------------------------------
*pluastate )
int HAPI_NPCtalk (lua_state
int HAPI_Playertalk (lua_state *pluastate )
int HAPI_ERROR (lua_state
*pluastate )
int HAPI_GetPlayerHP (lua_state
int HAPI_GetNPCHP (lua_state *pluastate)
int HAPI_GetPlayerDroidX (lua_state
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
int HAPI_MoveNPCDroid (lua_state *pluastate)
int HAPI_GetSystemTime (lua_state *pluastate )
int HAPI_GetRanInRange (lua_state *pluastate)
int HAPI_GetStateTime (lua_state
*pluastate)
*pluastate)
int HAPI_UseSkill (lua_state
int HAPI_ViewPlayerInRegional (lua_state
*pluastate)
*pluastate)
//
Direction
-------------------------------------------------常量声明--------------------------------------------------------
//
NORTH=0;
SOUTH=2;
EAST=4;
WEST=6;