发表于 2007-2-8 14:051#
楼主小编的能力有限,有见解不到之处请跟帖指出
一下修改的为流星的原版任务(新的任务有部分看不懂,不便在此胡言,此教程只为新手服务)
(注:要修改的任务文件在level文件夹里,npc_**文件是设置电脑人的,sn**_文件用于设置关卡,用文本方式打开
游戏中22个场景代号01钟乳洞02秦皇陵03一线天04织雪城05皇天城06四方阵07死之阵08毒牙阵09决死阵10炼铁狱11五爪峰12烽火雷13金华城14炎硫岛15飞鹏堡16五雷塔17伏虎山18圆满楼19洛阳城20卧龙窟21圣诞夜22威震八方
范例:原版任务第一关:
// 炎硫岛// ***为关卡的名字
int Rule = 10;int Rule = *为任务模式1=盟主2=截镖3=守城4=暗杀5=死斗,10也是死斗
int RoundTime = 10;int RoundTime = *为游戏时间,单位为分钟
int PlayerSpawn = 34;int PlayerSpawn = *为玩家出生点,这些点在游戏里都是设定好了的,当然可以改,如int PlayerSpawn = 1(这个点我没试过^^)
int PlayerSpawnDir = 180;int PlayerSpawnDir = *玩家出生方向,就像有东南西北一样,这个方向是以地图文件为准
int PlayerWeapon = 6;int PlayerWeapon = *玩家主武器,这个数值一定要为某个武器的代号,不可为0
int PlayerWeapon2 = 0;int PlayerWeapon2 = *玩家副武器,为0则表示没有
int PlayerHP = 1000;int PlayerHP = *玩家生命值(1000=100),这个值好像不能超过50000,不然……(游戏会很无聊~)
int trg0 = 0;其他人说是AI,我也不知叫什么,不过可以肯定这是用来维系剧情发展用的,后面会提到
int trg1 = 0;
int trg2 = 0;
int trg3 = 0;
int trg4 = 0;
OnStart()游戏开始(后面的{}一定要!凡是包在某个出发条件后{}里的为执行对象,空格用Tab键来建,格式看看就明白了)
{
AddNPC("npc14_01");AddNPC("***")加入npc,***是文件名,在level文件夹里,如果有自己做的电脑人想让它加入,可在此改成该文件的名字,也可以在下面加一行AddNPC("***"),空格不要漏,要对齐
AddNPC("npc14_02");
}
OnUpdate()游戏执行(剧本全在这里)
{
int player = GetChar("player");引入“player”,在后面出现时指代玩家
if (player < 0) if的用法和英文一样=“如果”
{
return 0;
}
int c;引入“c”
int c2;引入“c2”
if (trg0 == 0)在这里出现了trg0 == 0,这个就是上面提到的东东,在此做为触发条件
{
c = GetChar("大刀哨兵");c指代"大刀哨兵"
c2 = GetChar("铁枪哨兵");用法同上
if (c>=0 && c2>=0) (c>=0 && c2>=0)是指当c存在和(&&就是and)c2存在时执行下面的操作,执行下面这一类的东东时是从下至上执行
{
ChangeBehavior(c, "patrol", 0); 部分剧情函数ChangeBehavior(*,“***”,*)(角色代号,动作,辅助),"patrol"巡逻,0为某个固定的点,其代号为0
Perform(c, "say", "好呗,我也懒得听你的冷笑话﹒﹒"); 电脑人执行的前面全部用Perform,括号里的为(角色代号,动作,辅助),如"say"表示说话
Perform(c, "pause", 12); "pause"等待,间隔,单位为秒,好像是
Perform(c, "say", "真的很冷耶﹒﹒"); "say"说话
Perform(c, "say", "﹒﹒﹒﹒﹒﹒﹒");
Perform(c, "aggress"); "aggress"(小编不是很懂,大概是自由活动) Perform(c, "say", "冷个屁呀?四周都是岩浆,热到爆了!真想喝口酒来解热呀!");
Perform(c, "pause", 12);
Perform(c, "say", "奇怪了,为啥老大会叫我们来这种鸟不生蛋的地方守!=.=");
Perform(c, "faceto", c2); "faceto"面对着
ChangeBehavior(c2, "patrol", 16, 18, 19, 20, 21); "patrol"巡逻,16, 18, 19, 20, 21为某些点
Perform(c2, "say", "企企企!");
Perform(c2, "pause", 8);
Perform(c2, "say", "下次可能真被会被派到北方冰起来也说不定~");
Perform(c2, "say", "﹒﹒﹒﹒我还是快回去守着,以免又被发现我们偷懒~");
Perform(c2, "aggress", 10);
Perform(c2, "say", "喂~我是在讲个冷笑话来解解闷,你不到你这呆头听不懂呀~");
Perform(c2, "pause", 8);
Perform(c2, "say", "才被分派到这种鸟地方把我们 '冷冻' 起来﹒﹒X滴!");
Perform(c2, "say", "啊知~看样子是我们上次夜哨时偷溜出去喝酒被捉包!");
Perform(c2, "pause", 8);
Perform(c2, "faceto", c);
trg0 = 1; 很重要的东西,它原来是trg0 = 0,表示当上一级的条件出发成功时,这个值变为1,可作为其他剧情的触发条件
}
}
if (trg1 == 0) 不用说了吧,和trg0 = 0一样
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player ) 我只知道它是说"大刀哨兵"存在和他看见玩家时
{
StopPerform(c);
c2 = GetChar("铁枪哨兵");
StopPerform(c2);
Perform(c, "say", "好大的胆子竟敢乱闯禁地,没酒喝,火气正大,先拿你来开刀!");
trg1 = 1; trg1 == 0变为trg1 = 1
}
}
if (trg1 == 1) 这里的触发条件是由上面的剧情触发后得到的,所以说是用来维系剧情发展
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)!=player) GetEnemy(c)==player加了!变成了看不见?不是很懂~
{
Perform(c, "say", "跑到那儿去了!八成是跌入岩浆中了,哈哈哈哈!");
trg1 = 2;
}
}
if (trg1 == 2)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player)
{
Perform(c, "say", "好小子,被我发现了吧!这下子你跑不掉了!");
trg1 = 3;
}
}
if (trg1 == 3)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "aggress");
Perform(c, "say", "哼,又躲起来了!缩头鸟龟一只!");
trg1 = 4; 到这里trg1 == 0所带动的剧情就全部结束了,下面的是trg2 == 0
}
}
if (trg2 == 0)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
StopPerform(c);
c2 = GetAnyChar("大刀哨兵");
StopPerform(c2);
if (c2>=0 && GetHP(c2)>0)
{
ChangeBehavior(c2, "follow", c);
Perform(c, "say", "大胡子!!快点过来!有入侵者呀!!");
} else
{
ChangeBehavior(c, "follow", player); "follow"跟随
Perform(c, "attack");
Perform(c, "say", "大胡子人呢?该不会是你把他给杀了!我要你连他的命一起赔上!受死!");
}
Perform(c, "guard", 4); "guard"(不明~)
Perform(c, "say", "谁!你这生面孔八成不是什麽好东西,入侵者一律杀之!");
Perform(c, "faceto", player);
trg2 = 1;
}
}
if (trg2 == 1)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "say", "可恶,这臭小还真会躲!再让我见到要你好看!");
trg2 = 2;
}
}
if (trg2 == 2)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
Perform(c, "attack");
Perform(c, "say", "哈!你是躲不过我的视线的!拿命来!");
trg2 = 3;
}
}
if (trg2 == 3)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "aggress");
Perform(c, "say", "又被逃掉了,下次可不会再便宜你了!");
trg2 = 4;
}
}
if (trg3 == 0)
{
c = GetAnyChar("大刀哨兵");
if (c>=0 && GetHP(c)<=0) 这里第一次出现了GetHP(c)<=0,就是当c的HP<=0,就是死了的时候 {
Say(c, "想不到你这小子还有两三下功夫﹒﹒﹒﹒﹒﹒﹒呜﹒﹒﹒"); 这里的用法有点不同,但也可以,只是格式换了,其他如use也可以这样用,第一个字母要大写
trg3 = 1;
}
}
if (trg3 == 1)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
ChangeBehavior(c, "kill", player); "kill"杀死
Perform(c, "say", "你这小子,杀了我的挚友!要你偿命!");
Perform(c, "faceto", player);
trg3 = 2; 一个剧情可以更改两个或以上的变量
trg2 = 4;
}
}
if (trg4 == 0)
{
c = GetAnyChar("铁枪哨兵");
if (c>=0 && GetHP(c)<=0)
{
Say(c, "大胡子﹒﹒﹒帮﹒﹒﹒帮我报﹒﹒仇﹒﹒﹒");
trg4 = 1;
}
}
if (trg4 == 1)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player)
{
ChangeBehavior(c, "kill", player);
Perform(c, "say", "你死定了!!你这小子!");
Perform(c, "faceto", player);
trg4 = 2;
trg1 = 4;
}
}
}
小编的话:这一关与某些关不同,如没有决死阵里的
if (gameover!=-1 && GetHP(player)<=0)
{
gameover = -1;
timer1 = now + 2;
}
c = GetAnyChar("冷燕");
if (gameover!=-1 && c>=0 && GetHP(c)<=0)
{
gameover = -1;
timer1 = now + 2;
}
if ((gameover==1 || gameover==-1) && now>timer1)
{
GameOver(gameover);
gameover = 2;
这就按任务模式进行,本关任务模式为死斗,即把敌人全K掉就过关了
一下修改的为流星的原版任务(新的任务有部分看不懂,不便在此胡言,此教程只为新手服务)
(注:要修改的任务文件在level文件夹里,npc_**文件是设置电脑人的,sn**_文件用于设置关卡,用文本方式打开
游戏中22个场景代号01钟乳洞02秦皇陵03一线天04织雪城05皇天城06四方阵07死之阵08毒牙阵09决死阵10炼铁狱11五爪峰12烽火雷13金华城14炎硫岛15飞鹏堡16五雷塔17伏虎山18圆满楼19洛阳城20卧龙窟21圣诞夜22威震八方
范例:原版任务第一关:
// 炎硫岛// ***为关卡的名字
int Rule = 10;int Rule = *为任务模式1=盟主2=截镖3=守城4=暗杀5=死斗,10也是死斗
int RoundTime = 10;int RoundTime = *为游戏时间,单位为分钟
int PlayerSpawn = 34;int PlayerSpawn = *为玩家出生点,这些点在游戏里都是设定好了的,当然可以改,如int PlayerSpawn = 1(这个点我没试过^^)
int PlayerSpawnDir = 180;int PlayerSpawnDir = *玩家出生方向,就像有东南西北一样,这个方向是以地图文件为准
int PlayerWeapon = 6;int PlayerWeapon = *玩家主武器,这个数值一定要为某个武器的代号,不可为0
int PlayerWeapon2 = 0;int PlayerWeapon2 = *玩家副武器,为0则表示没有
int PlayerHP = 1000;int PlayerHP = *玩家生命值(1000=100),这个值好像不能超过50000,不然……(游戏会很无聊~)
int trg0 = 0;其他人说是AI,我也不知叫什么,不过可以肯定这是用来维系剧情发展用的,后面会提到
int trg1 = 0;
int trg2 = 0;
int trg3 = 0;
int trg4 = 0;
OnStart()游戏开始(后面的{}一定要!凡是包在某个出发条件后{}里的为执行对象,空格用Tab键来建,格式看看就明白了)
{
AddNPC("npc14_01");AddNPC("***")加入npc,***是文件名,在level文件夹里,如果有自己做的电脑人想让它加入,可在此改成该文件的名字,也可以在下面加一行AddNPC("***"),空格不要漏,要对齐
AddNPC("npc14_02");
}
OnUpdate()游戏执行(剧本全在这里)
{
int player = GetChar("player");引入“player”,在后面出现时指代玩家
if (player < 0) if的用法和英文一样=“如果”
{
return 0;
}
int c;引入“c”
int c2;引入“c2”
if (trg0 == 0)在这里出现了trg0 == 0,这个就是上面提到的东东,在此做为触发条件
{
c = GetChar("大刀哨兵");c指代"大刀哨兵"
c2 = GetChar("铁枪哨兵");用法同上
if (c>=0 && c2>=0) (c>=0 && c2>=0)是指当c存在和(&&就是and)c2存在时执行下面的操作,执行下面这一类的东东时是从下至上执行
{
ChangeBehavior(c, "patrol", 0); 部分剧情函数ChangeBehavior(*,“***”,*)(角色代号,动作,辅助),"patrol"巡逻,0为某个固定的点,其代号为0
Perform(c, "say", "好呗,我也懒得听你的冷笑话﹒﹒"); 电脑人执行的前面全部用Perform,括号里的为(角色代号,动作,辅助),如"say"表示说话
Perform(c, "pause", 12); "pause"等待,间隔,单位为秒,好像是
Perform(c, "say", "真的很冷耶﹒﹒"); "say"说话
Perform(c, "say", "﹒﹒﹒﹒﹒﹒﹒");
Perform(c, "aggress"); "aggress"(小编不是很懂,大概是自由活动) Perform(c, "say", "冷个屁呀?四周都是岩浆,热到爆了!真想喝口酒来解热呀!");
Perform(c, "pause", 12);
Perform(c, "say", "奇怪了,为啥老大会叫我们来这种鸟不生蛋的地方守!=.=");
Perform(c, "faceto", c2); "faceto"面对着
ChangeBehavior(c2, "patrol", 16, 18, 19, 20, 21); "patrol"巡逻,16, 18, 19, 20, 21为某些点
Perform(c2, "say", "企企企!");
Perform(c2, "pause", 8);
Perform(c2, "say", "下次可能真被会被派到北方冰起来也说不定~");
Perform(c2, "say", "﹒﹒﹒﹒我还是快回去守着,以免又被发现我们偷懒~");
Perform(c2, "aggress", 10);
Perform(c2, "say", "喂~我是在讲个冷笑话来解解闷,你不到你这呆头听不懂呀~");
Perform(c2, "pause", 8);
Perform(c2, "say", "才被分派到这种鸟地方把我们 '冷冻' 起来﹒﹒X滴!");
Perform(c2, "say", "啊知~看样子是我们上次夜哨时偷溜出去喝酒被捉包!");
Perform(c2, "pause", 8);
Perform(c2, "faceto", c);
trg0 = 1; 很重要的东西,它原来是trg0 = 0,表示当上一级的条件出发成功时,这个值变为1,可作为其他剧情的触发条件
}
}
if (trg1 == 0) 不用说了吧,和trg0 = 0一样
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player ) 我只知道它是说"大刀哨兵"存在和他看见玩家时
{
StopPerform(c);
c2 = GetChar("铁枪哨兵");
StopPerform(c2);
Perform(c, "say", "好大的胆子竟敢乱闯禁地,没酒喝,火气正大,先拿你来开刀!");
trg1 = 1; trg1 == 0变为trg1 = 1
}
}
if (trg1 == 1) 这里的触发条件是由上面的剧情触发后得到的,所以说是用来维系剧情发展
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)!=player) GetEnemy(c)==player加了!变成了看不见?不是很懂~
{
Perform(c, "say", "跑到那儿去了!八成是跌入岩浆中了,哈哈哈哈!");
trg1 = 2;
}
}
if (trg1 == 2)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player)
{
Perform(c, "say", "好小子,被我发现了吧!这下子你跑不掉了!");
trg1 = 3;
}
}
if (trg1 == 3)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "aggress");
Perform(c, "say", "哼,又躲起来了!缩头鸟龟一只!");
trg1 = 4; 到这里trg1 == 0所带动的剧情就全部结束了,下面的是trg2 == 0
}
}
if (trg2 == 0)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
StopPerform(c);
c2 = GetAnyChar("大刀哨兵");
StopPerform(c2);
if (c2>=0 && GetHP(c2)>0)
{
ChangeBehavior(c2, "follow", c);
Perform(c, "say", "大胡子!!快点过来!有入侵者呀!!");
} else
{
ChangeBehavior(c, "follow", player); "follow"跟随
Perform(c, "attack");
Perform(c, "say", "大胡子人呢?该不会是你把他给杀了!我要你连他的命一起赔上!受死!");
}
Perform(c, "guard", 4); "guard"(不明~)
Perform(c, "say", "谁!你这生面孔八成不是什麽好东西,入侵者一律杀之!");
Perform(c, "faceto", player);
trg2 = 1;
}
}
if (trg2 == 1)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "say", "可恶,这臭小还真会躲!再让我见到要你好看!");
trg2 = 2;
}
}
if (trg2 == 2)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
Perform(c, "attack");
Perform(c, "say", "哈!你是躲不过我的视线的!拿命来!");
trg2 = 3;
}
}
if (trg2 == 3)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)!=player)
{
Perform(c, "aggress");
Perform(c, "say", "又被逃掉了,下次可不会再便宜你了!");
trg2 = 4;
}
}
if (trg3 == 0)
{
c = GetAnyChar("大刀哨兵");
if (c>=0 && GetHP(c)<=0) 这里第一次出现了GetHP(c)<=0,就是当c的HP<=0,就是死了的时候 {
Say(c, "想不到你这小子还有两三下功夫﹒﹒﹒﹒﹒﹒﹒呜﹒﹒﹒"); 这里的用法有点不同,但也可以,只是格式换了,其他如use也可以这样用,第一个字母要大写
trg3 = 1;
}
}
if (trg3 == 1)
{
c = GetChar("铁枪哨兵");
if (c>=0 && GetEnemy(c)==player)
{
ChangeBehavior(c, "kill", player); "kill"杀死
Perform(c, "say", "你这小子,杀了我的挚友!要你偿命!");
Perform(c, "faceto", player);
trg3 = 2; 一个剧情可以更改两个或以上的变量
trg2 = 4;
}
}
if (trg4 == 0)
{
c = GetAnyChar("铁枪哨兵");
if (c>=0 && GetHP(c)<=0)
{
Say(c, "大胡子﹒﹒﹒帮﹒﹒﹒帮我报﹒﹒仇﹒﹒﹒");
trg4 = 1;
}
}
if (trg4 == 1)
{
c = GetChar("大刀哨兵");
if (c>=0 && GetEnemy(c)==player)
{
ChangeBehavior(c, "kill", player);
Perform(c, "say", "你死定了!!你这小子!");
Perform(c, "faceto", player);
trg4 = 2;
trg1 = 4;
}
}
}
小编的话:这一关与某些关不同,如没有决死阵里的
if (gameover!=-1 && GetHP(player)<=0)
{
gameover = -1;
timer1 = now + 2;
}
c = GetAnyChar("冷燕");
if (gameover!=-1 && c>=0 && GetHP(c)<=0)
{
gameover = -1;
timer1 = now + 2;
}
if ((gameover==1 || gameover==-1) && now>timer1)
{
GameOver(gameover);
gameover = 2;
这就按任务模式进行,本关任务模式为死斗,即把敌人全K掉就过关了
UID 17148


,是单机吗?

LZ麻烦你编辑下好不