论坛首页›扭转乾坤[修改]›## 套用经典关卡流程 ##

## 套用经典关卡流程 ##

楼主:zmj_123发表于 2008-7-20 09:59回复 9查看 2,310最后回复 2008-10-8
共 10 楼
发表于 2008-7-20 09:591#
楼主
## 套用经典关卡流程 ##
本流程来自 真武林关卡套路。

/*
Attribute for SN_1 by ZMJ 2005/10/10
*/
#include "npctypes.pst"
#include "snopt.pst"

/////////////////////////////////////////////////////// BASIC此处为常用全局配置数据
int Level = GetConfig(3);
int Rule = GetSNRule(Level);
int RoundTime = GetSNTime(Level);
int PlayerSpawn = 14;
int PlayerSpawnDir = 0;
int PlayerWeapon = GetSNWeapon(Level);
int PlayerWeapon2 = GetSNWeapon2(Level);
int PlayerHP = GetSNHP(Level);
int PlayerSpeed = GetSNSpeed(Level);
int PlayerExps = GetPlayerExps();

/////////////////////////////////////////// BEG 此处为全局该关数据变量
int c1;
int c2;
int c3;
int curtime;
int gb_lastime = -1;
int gb_updatime = -1;
int gb_trg = 0;
int gb_trg2 = 0;
int gb_scence = 0;
int gameover = 0;

int i;
int tmp1;
int tmp2;
int gb_val1 = -1;
int gb_val2 = -1;
/////////////////////////////////////////// END

////////////////////////////
此处为小关卡过关打印升级信息
PrintSnapOver(int player, int beg, int end, int clear)
{

int speed;
PlayerExps = PlayerExps+GetNewExps3(beg, end);

if(clear == 1)
{
RemoveSnapNAlly(beg, end);
RemoveSnapAlly(3, 16);
}

speed = GetSnapSpeeder(PlayerSpeed, PlayerExps);
Say(player, "升级: ", PlayerSpeed-speed, " 内力: ", 120-speed);
Say(player, "****************",120-speed,"****************");
Say(player, "-------经验值 : ", PlayerExps, "----------");
PlayerSpeed = speed;
UpdateSnapReward(Level, player, PlayerSpeed);
}

////////////////////////////
此处判断改关是否结束的统一遵守条件
QueryIsGameOver(int player)
{
if (gameover==0 && GetHP(player)<=0)
{
gameover = -1;
gb_trg = 99;
gb_lastime = curtime;

return 1;
}

if ((gameover==1 || gameover==-1))
{
if(curtime-gb_lastime >= 15)
{
if(gameover==1) {Save(PlayerExps);}

GameOver(gameover);
gameover = 2;
}

return 1;
}

return 0;
}
此处时刻关注玩家升级后得到新的属性使用
QueryIsUpdateAI(int player)
{
if(gb_scence == 0)
{
return 0;
}

if(gb_updatime == -1)
{
gb_updatime = curtime;
}

if(curtime-gb_updatime>=PlayerSpeed)
{
UpdatePlayerOpt(player, PlayerSpeed);
gb_updatime = curtime;

return 1;
}

return 0;
}
此处是关卡的引子幕
ExecScence0(int player)
{
if(gb_scence != 0)
{
return 0;
}

c1 = GetChar("旁白");
if (c1 < 0)
{
return 0;
}

if(gb_val1 == -1)
{
ReadConfig();

gb_trg = GetTrg();
gb_trg2 = GetTrg2();
gb_scence = GetScens();

gb_lastime = curtime;

Say(c1, "读取进度中...");
Say(c1, "读取进度中...");
Say(c1, "读取进度中...");


if(gb_scence == 1)
{
自动补丁记录到你已经玩过了第0幕,新开始的第1幕剧情起始
AddNPC("爱莲云雪a1");
AddNPC("巡城兵士a1");
AddNPC("逻城兵士a1");

PlayerPerform("block", 1);
}

if(gb_scence == 2)
{
自动补丁记录到你已经玩过了第1幕,新开始的第2幕剧情起始
AddNPC("爱莲云雪b1");
}


gb_val1 = 1;
return 1;
}

if(gb_trg == 0)
{
引子幕旁白发表的感慨
Perform(c1, "pause", 2);
Perform(c1, "say", "小虾米剑术也颇有长进。");
Perform(c1, "pause", 2);
Perform(c1, "say", "日月如梭,眨眼间小虾米到异域山已经练剑二年多了!");
Perform(c1, "pause", 4);

PlayerPerform("block", 0);
PlayerPerform("pause", 10);
PlayerPerform("block", 1);

gb_lastime = curtime;
gb_trg ++;

return 1;
}

if(gb_trg==1 && curtime-gb_lastime>=12)
{
gb_scence ++;
gb_trg = 0;

return 1;
}

return 1;
}
关卡第1幕的剧情运行
ExecScence1(int player)
{
if(gb_scence != 1)
{
return 0;
}

if(gb_trg == 0)
{
AddNPC("1师父2");

gb_trg2 = 0;
gb_trg ++;
gb_lastime = curtime;
}

进入下一幕
if(gb_trg==5 && curtime-gb_lastime>=12)
{
c1 = GetChar("爱莲云雪");
Perform(c1, "use", 15);
Perform(c1, "use", 15);

gb_trg = 0;
gb_trg2 = 0;
PlayerPerform("block", 0);
SaveConfig(PlayerExps, 0, 0, 4, 0);
gb_scence ++;

FullPlayerHP(player);
}

return 1;
}
关卡第2幕的剧情运行
ExecScence2(int player)
{
if(gb_scence != 2)
{
return 0;
}

return 1;
}
关卡第。。。幕的剧情运行
//////////////////////////////////////////////////////////////
OnStart()
{
InitSNData();
AddNPC("旁白2");
}

OnUpdate()
{
int player = GetAnyChar("player");
if (player < 0)
{
return 0;
}

获取关卡当前时间,供剧情使用
curtime = GetGameTime();

统一遵守的游戏结束判断,剧情幕内可以再有自己的其他条件判断
if(QueryIsGameOver(player) == 1)
{
return 0;
}

游戏玩家属性实时更新使用
QueryIsUpdateAI(player);

运行第0幕剧情
if(ExecScence0(player) == 1)
{
return 0;
}

运行第1幕剧情
if(ExecScence1(player) == 1)
{
return 0;
}

运行第2幕剧情
if(ExecScence2(player) == 1)
{
return 0;
}

运行第。。。幕剧情
由于ExecScenceX内部会判断当前是第x幕,所以每幕剧情不会混联,此时每幕只需关心本幕剧情设计
我们增加剧情只需要添加更多的ExecScence3, ExecScence4, ExecScence5, 。。。 即可



return 0;
}


祝大家愉快,明明白白我的深意。
表情
UID 12792
发表于 2008-7-20 10:262#
表情表情表情
哦。

还是不懂
表情表情表情
UID 39774
发表于 2008-7-20 10:333#
看懂了一半
但你什么意思?
写得教程?
UID 42128
发表于 2008-7-20 10:394#
不是教程,提取了关卡设计的公共部分作为框架,设计新的关卡时只需要复制框架,然后编写ExecScenceX就可以了
这样又规范又块捷。
UID 12792
发表于 2008-7-20 11:035#
这个样子的话 = =
不太懂
是否要加精?
UID 42128
发表于 2008-7-20 11:066#
表情
不用了吧,加个亮大家都注意一下就好了
UID 12792
发表于 2008-7-20 11:427#
囧.我完全看不懂..
UID 41462
发表于 2008-7-20 20:388#
看半天不知道写啥表情表情
签名:
外链图片
外链图片 · 若无法显示说明原图床已关闭
UID 45635
发表于 2008-7-23 15:419#
好高深啊表情表情
UID 47685
发表于 2008-10-8 13:1410#
看懂了又怎样?难道要我来编写真武林?
现实点吧……
UID 39978
共 10 楼

关于这个存档

本页内容为历史存档,已关闭一切写操作。附件仅展示文件信息,不提供下载。内容如涉侵权或不当,请联系 server@yfzz.net 下架。

可以做的事:浏览版块、阅读主题与楼层、查看图片附件、按标题或作者搜索、打开用户资料页。
不能做的事:注册、登录、发帖、回复、引用、评分、私信、收藏;压缩包等附件不提供下载——存档版只展示文件信息。

数据截至 2021-02-05;附件约有 30–40% 的原文件未能保存,页面上以「已丢失」标注。2009 年前的不少图片是外链图床,原图床已关闭,页面会显示失效占位。
隐龙轩QQ群:点此查看

26,823 主题 / 280,734 帖 / 17,145 位发过言的会员 · 数据最后更新 2021-02-05

粤ICP备2024318274号-1