发表于 2011-12-28 00:081#
楼主看到别人编辑出的任务那么精彩,你是不是有点羡慕了呢?你也是不是想向他们那样靠自己编辑出一套属于自己的精彩的武侠世界呢?其实,是可以的!没错,看完这个,你将会拥有属于自己的武侠世界,圆自己一个美美的武侠梦。 大家首先打开流星任务文件Level那些SN**_的就是任务文件了 会看见以下函数代码 下面 就让小鬼帮你们解答一番: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // Rule 1=盟主2=截镖3=守城4=暗杀5=死斗int Rule = 5; int RoundTime = 20;这个是游戏的时间 单位为:分钟 int PlayerSpawn = 10;这个是主角游戏开始时出现的地方 int PlayerSpawnDir = 90; 这个是主角出现时面对的方向 根据旋转角度计算(最大值为360) int PlayerWeapon = 5; 这个是主角出场是携带的正武器 5=匕首 6=剑 7=枪 8=刀 9=锤子(其他详见相关资料)切忌不能为0!!! int PlayerWeapon2 = 0; 主角负武器 可以不填 int PlayerHP = 1000;这个是主角是血量 按除以10计算 例如你设置为1000进入任务时就为100血 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 接下来设定NPC: c = GetChar("小鬼"); c2 = GetChar("洛神"); c3 = GetChar("相关电脑人"); c4 = GetChar("相关电脑人"); 用数学的话来讲的话,就是赋值或者设编号的意思: 这段代码弄上后,NPC"小鬼"就用字母c表示 "洛神"则是用c2表示....大家接下来在那些代码中看到的字母c和c2就是分别代表 NPC"小鬼"和"洛神"了,名字大家可根据剧情任意修改 但注意要和相关的NPC文件名字所吻合,否则将不能执行(哪怕是只差一个小小的点也是一样)。以此类推可设置c3 c4 c5等等..... if (trg0 == 0) { SetTarget(0, "char", c(c代表着上面说过的小鬼的意思 下面就不提示了)); SetTarget(1, "char", player); if(c>=0 && Distance(0, 1) < 200) { NPC见到自己说话的函数,那200是距离。 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 触发相关段落的指定条件: if (GetHP(c)<GetMaxHP(c)) NPC受创后执行的,哪怕受伤1滴血也会执行。 if (GetHP(c)<GetMaxHP(c)-1000) NPC受伤100血执行,数值自己按剧情设置。 if (GetHP(c)<1000) NPC还剩余100血执行。 if (GetHP(c)<0) NPC死亡执行 if (c>=0) 无任何条件执行 if (c>=0 && GetEnemy(c)==player) NPC遇见主角时执行 if (c>=0 && GetHP(c)<GetMaxHP(c)/2) NPC气血减半时执行 那个2就是一半 3就是三分之一 4就是四分之一 同理..... if (GetHP(c)<=0 && GetHP(c2)<=0 && GetHP(c3)<=0 && GetHP(c4)<=0 && GetHP(c5)<=0 && GetHP(c6)<=0) 以上群体NPC全体气血死亡时执行 if (GetHP(player)<1000) 主角的气血减少100时执行,那数字可以设定,但气血的数值都是以自身除以10来计算的,所以说你那里设置的是1000,那么除以10的话就成100了。要是想减少500的话那就要设成5000,同理.... if(GetHP(c1)<GetMaxHP(c1)-1000 || GetHP(c2)<GetMaxHP(c2)-1000) { c和c2两个NPC其中任何1个受伤100血后就会执行。 if(GetHP(c1)<0 || GetHP(c2)<0) { c和c2两个NPC任一死亡后执行。 SetTarget(1,"waypoint",路点); ChangeBehavior(c,"attacktarget",1); NPC跑路点,路点照剧情设置。 SetTarget(0, "char", c); SetTarget(1, "waypoint", 路点); if (Distance(0, 1) < 100) { NPC到达路点执行 . 100 是距离 就是离指定路点的距离判断。 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx PlayerPerform("say", "小鬼是个制作单机任务的"); 主角说话代码 那文字为说话内容 可修改。 PlayerPerform("pause", 1); 主角站立代码 那1为站立秒数 可修改。这个代码是为了防止对话的时候语序错乱的 PlayerPerform("block", 1); 主角锁定代码(让主角站立不动) PlayerPerform("use", 19); 主角设置状态代码 19为爆红状态 4是小红 8是满气(不是无限气) 20为气血+500 其他数值请详见相关资料。 除加血代码之外 其他状态重复添加时效果不会重叠增加。。 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ChangeBehavior(c, "follow", player); NPC跟随主角代码 ChangeBehavior(c, "kill", player); NPC攻击主角代码 ChangeBehavior(c, "idle", 9999); NPC为永远呆立状态 ChangeBehavior(c, "wait"); NPC为永远原地张望状态 直至敌人出现在视线范围之内时会攻击 Perform(c, "guard", 5); NPC为防御状态 5是秒数 可自行修改 ChangeBehavior(c, "run"); NPC为无目的乱跑状态 但看到非己方的人会进行攻击 Perform(c, "faceto", player); NPC为锁定主角状态 不过要是距离太远的话可能会无效 Perform(c, "say", "小鬼是个制作单机任务的"); NPC说话代码 Perform(c2, "pause", 5); NPC站立秒数 数字5可自行修改 Perform(c, "use", 19); NPC设置状态代码 同上的主角状态代码相同。 Perform(c, "use", 35); NPC立即死亡代码 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这些就大体就是设计任务的主要成分了,还有很多小部分就不一一说明了。。 好了 说了那么多 下面就由我来简单的设置一段示范性的任务吧。。 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // 四方阵 int Rule = 4; ←任务模式 4是死斗 int RoundTime = 50; ←时间 int PlayerSpawn = 10; ←游戏开始时出现的地方 int PlayerSpawnDir = 90; ←角度 int PlayerWeapon = 5; ←武器 int PlayerWeapon2 = 0; int PlayerHP = 3000; ←气血 会自动除以10 int trg0 = 0; ←以后再说 int trg1 = 0; int timer0 = 0; int timer1 = 0; int gameover = 0; OnStart() { AddNPC("rw1"); ←加入的npc文件 AddNPC("rw2"); ←同上 } OnUpdate() { int player = GetAnyChar("player"); ←主角 if (player < 0) { return 0; } if (gameover == 2) { return 0; } int c; ←加载两个NPC int c2; ←加载两个NPC int now = GetGameTime(); if (trg0 == 0) { c = GetChar("小鬼"); ←为NPC设置编号 c2 = GetChar("洛神");←同上 if (c>=0 && GetEnemy(c)==player) ←任务触发条件 这里设的是(遇到主角时执行) { Perform(c2, "say", "杀啊!"); ←对话语序⑤ Perform(c2, "pause", 8); ←站立8秒说话 Perform(c2, "say", "知道你武功好 但今天我们有两个人"); ←对话语序③ Perform(c2, "pause", 5); ←站立时间5秒说话 Perform(c2, "say", "哼 主角 今天你死定了"); ←对话语序① Perform(c2, "faceto", player); ←目标锁定主角 Perform(c, "guard", 4); Perform(c, "faceto", player); ←目标锁定主角 Perform(c, "say", "就是 解决了你"); ←对话语序④ Perform(c, "pause", 7); ←站7秒说话 Perform(c, "use", 8); ←NPC添加状态8(满气) PlayerPerform("block", 0); PlayerPerform("say", "嘿嘿 来吧"); ←对话语序⑥ PlayerPerform("pause", 9); PlayerPerform("say", "是吗 不太可能哦"); ←对话语序② PlayerPerform("pause", 3); ←站立时间3秒说话 (决定说话顺序的) PlayerPerform("use", 19); ←主角添加状态19(爆红) PlayerPerform("block", 1); ←锁定主角了 trg0 = 1; } } if (gameover!=-1 && GetHP(player)<=0) ←主角死亡的话 { gameover = -1; ←游戏以失败结束 timer1 = now + 2; } } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 好了 嘿嘿 看完之后是不是觉得很简单呢 这些代码都是任务里主要的 设置任务靠的全是这些了。。 那么接下来 就试着自己编辑个任务吧!!!你完全可以打造属于自己的武侠世界。。。。 呼呼~这些都是本人学习后的总结,大家照目前的这些代码充分运用自己的大脑就可以编辑出一些不简单的任务了,要知道代码是固定的但人脑不是。。 由于时间关系还有些代码给没有一一说明,因为那些量很大很复杂,本人也是在不断学习的,通过每次的制作都能提高自己,目前有些也已经发布到网上了,呵呵,后来居上的朋友们,加油了。。。 |
UID 118513
