论坛首页›有间客栈[综合]›### 真武林江湖AI 之随机PST指令

### 真武林江湖AI 之随机PST指令

楼主:zmj_123发表于 2007-9-18 11:10回复 6查看 1,879最后回复 2007-9-18
共 7 楼
发表于 2007-9-18 11:101#
楼主
//#include "MeterorAI.h"
//#include "npctypes.h"
#include "npcnames.pst"
#include "npcopt.pst"
#include "staropt.pst"


string Name = "武林高手"; //这是前缀,后面将添加随机姓名
int Model = GetGaoshouAnyModel();//获取指定的model,可以任意设定
int Weapon = GetGaoshouAnyWeapon(Model);//获取该model对应的特殊武器方显威力
int Weapon2 = GetGaoshouAnyWeapon2(Model, Weapon);
int Team = Rand(3);//随机阵营
int View = Rand(5001)+5000;//随机数,这些说明该类型人物随机范围
int Think = Rand(5001)+5000;;//随机数
int Attack1 = Rand(25)+20;
int Attack2 = Rand(15)+15;
int Attack3 = 100-Attack1-Attack2;
int Guard = Rand(51)+50;
int Dodge = Rand(51)+50;
int Jump = Rand(50);
int Look = Rand(501)+500;
int Burst = Rand(51)+50;
int Aim = Rand(51)+50;
int GetItem = Rand(51)+50;
int Spawn = 0;//后面随机给出安全的出生点
int HP = GetGaoshouAnyHP();//指定该类型人物随机生命范围
int HPlast = 0;//用于随时显示任务当前生命数
int Stat = 0;
int realHP = 0;
int timer = 0;
int lucknum = GetGaoshouAnyLuck2(Model);//幸运随机数,用于给出附加道具定时服用可能性
int lucknum2 = GetBodyAnyLuck1();//隐身随机数,用于给出定时隐身可能性,随时变化
int speeder = Rand(60)+45;//幸运随机数,用于给出附加道具定时服用时间间隔
int heavior = Rand(4);//随机行为方式
int g_selfAddr;
int g_self;
//武林高手无变身指令加入


OnInit(int this)
{
int k;
for(k=0; k<20; k++){Rand(k+1);}
int min = GetSafeSpawnMin();//给出某类地图安全出生点范围
int max = GetSafeSpawnMax();//因为一些地图很容易出生死亡,一般为0-300

if(min == max){Spawn = min;}
else
{
Spawn = min+Rand(max-min);//随机出安全出生点
}

GetBodyAnyName(Name); //获取随机姓名
Name = gsNames;//最终姓名如:武林高手_上官红

g_selfAddr = this;
}

OnStart()
{
g_self = GetSelf(g_selfAddr);
GetBodyAnyBehavior(g_self);
}

OnUpdate()
{
if(Stat==0)
{
Stat++;
//显示任务出生时各项属性
OutputBodyAnyInfo(g_self, HP, Think, View, speeder, Model-lucknum);
return 0;
}

//随时显示生命和创伤
if(Stat==1)
{
Stat++;
realHP=GetHP(g_self);
HPlast=realHP;
return 0;
}
if(timer%speeder==0)
{
//幸运服用道具可能Model-lucknum
//幸运服用隐身可能lucknum2
lucknum2 = UpdatenBodyOpt(g_self, lucknum2, Model-lucknum);
timer=0;
}
timer++;
int HPnow=GetHP(g_self);
if(HPnowHPlast)
{
int AtkP2=HPnow-HPlast;
OutputBodyInfo(g_self, HPnow, AtkP2);
HPlast=HPnow;
}
if(HPnow==realHP&&HPlast<realHP)
{
HPlast=realHP;
}
}
UID 12792
发表于 2007-9-18 12:102#
主角的实时pst

GetSNSpawn(int level)
{
int g_tmpReturn;

int min = GetSafeSpawnMin();
int max = GetSafeSpawnMax();

if(min == max){g_tmpReturn = min;}
else
{
g_tmpReturn = min+Rand(max-min);
}

return g_tmpReturn-0;
}

GetSNWeapon(int level)
{
int g_tmpReturn;
int f = OpenFile("level\hero.sav", "r");

ReadFile(f);//version
ReadFile(f);//group
ReadFile(f);//map
ReadFile(f);//gate
ReadFile(f);//ai

g_tmpReturn = ReadFile(f);//weapon1

CloseFile(f);

return g_tmpReturn-0;
}

GetSNHP(int level)
{
int i;
int cofs;
int g_tmpReturn;

//needed experiences
g_levelExps[1] = 0;
cofs = 750;

for(i=2; i<=203; i++)
{
g_levelExps = g_levelExps[i-1]+cofs;
cofs = cofs+25;
}

int f = OpenFile("level\hero.sav", "r");

ReadFile(f);//version
ReadFile(f);//group
ReadFile(f);//map
ReadFile(f);//gate
ReadFile(f);//ai
ReadFile(f);//weapon1
ReadFile(f);//weapon2
ReadFile(f);//man

int exps = ReadFile(f);//exp

CloseFile(f);

for(i=1; i<=203; i++)
{
if(g_levelExps > exps)
{
g_tmpReturn = 4500+(i-2)*140;
break;
}
}
if(i > 203 || g_tmpReturn>32760)
{
g_tmpReturn = 32760;
}

return g_tmpReturn-0;
}

GetSNSpeed(int level)
{
int i;
int cofs;
int g_tmpReturn;

//needed experiences
g_levelExps[1] = 0;
cofs = 750;

for(i=2; i<=115; i++)
{
g_levelExps = g_levelExps[i-1]+cofs;
cofs = cofs+25;
}

int f = OpenFile("level\hero.sav", "r");

ReadFile(f);//version
ReadFile(f);//group
ReadFile(f);//map
ReadFile(f);//gate
ReadFile(f);//ai
ReadFile(f);//weapon1
ReadFile(f);//weapon2
ReadFile(f);//man

int exps = ReadFile(f);//exp

CloseFile(f);

for(i=1; i<=115; i++)
{
if(g_levelExps > exps)
{
g_tmpReturn = 120-(i-1);
break;
}
}
if(i > 115)
{
g_tmpReturn = 120-115;
}

g_backCnt = i/6;

return g_tmpReturn-0;
}

GetPlayerExps()
{
int g_tmpReturn;
int f = OpenFile("level\hero.sav", "r");

ReadFile(f);//version
ReadFile(f);//group
ReadFile(f);//map
ReadFile(f);//gate
ReadFile(f);//ai
ReadFile(f);//weapon1
ReadFile(f);//weapon2
ReadFile(f);//man

g_tmpReturn = ReadFile(f);//exp

CloseFile(f);

return g_tmpReturn-0;
}
UID 12792
发表于 2007-9-18 12:133#
武林高手的相关函数

/*
Attribute for any Gaoshou by ZMJ 2005/10/10
*/
GetGaoshouAnyHP()
{
int hp;
int tmp = Rand(104)+1;

if(tmp<=35) {hp = 5000+Rand(1000);}
if(tmp>=36 && tmp<=66) {hp = 6000+Rand(1000);}
if(tmp>=67 && tmp<=87) {hp = 7000+Rand(1000);}
if(tmp>=88 && tmp<=98) {hp = 8000+Rand(1000);}
if(tmp>=99) {hp = 9000+Rand(1000);}

return hp-0;
}

GetGaoshouAnyModel()
{
int model;
int tmp = Rand(115)+1;

if(tmp<=90){model=Rand(240)+300;}
if(tmp>=91 && tmp<=100){model=Rand(180)+20;}
if(tmp>100 && tmp<=107){model=294;}
if(tmp>108){model=291;}

return model-0;
}

GetGaoshouAnyWeapon(int model)
{
int weapon = Rand(58)+1;
int i;

for(i=0; i<=9; i++){g_hardWeapon = i+10;}
for(i=9; i<12; i++){g_hardWeapon = 48+4*(i-9);}

if(model>=20 && model<=199)
{
weapon = g_hardWeapon[(model-20)%9+3];
}
if(model>=300)
{
weapon = g_hardWeapon[(model-300)%12];
}
if(model==294){weapon = 44;}
if(model==291){weapon = 22;}

return weapon-0;
}

GetGaoshouAnyWeapon2(int model, int weapon)
{
return weapon-0;
}

GetGaoshouAnyLuck2(int model)
{
return Rand(5*(model+1));
}
UID 12792
发表于 2007-9-18 12:184#
随机姓名方法函数

/*
Name for any body by ZMJ 2005/10/10
*/
//#include "npcnames.h"

string gsNames = " ";

GetBodyAnyName(string prefix)
{
gsNames = prefix+"_";

int selId = Rand(1646);

if(selId==0){gsNames = gsNames+ "马行空";}
if(selId==1){gsNames = gsNames+ "马春花";}

...
...

return 0;
}

所以
string Name = "武林高手";
GetBodyAnyName(Name); //获取随机姓名
Name = gsNames;

//最终姓名如:武林高手_马春花
UID 12792
发表于 2007-9-18 12:475#
哇!表情表情厉害啊!你能不能做几个现成的电脑啊!表情表情
签名:力拔河山气盖世,飞扬跋扈为谁雄?
河东狮吼震八方,功盖三国耀扬威!
UID 27015
发表于 2007-9-18 20:176#
挖 厉害你们是用什么语言写的啊 你们是研究生还是本科的啊 厉害 弄的我也想学好计算机来玩机下写个程序
签名:让我们一起来体验流星的快乐吧
UID 27877
发表于 2007-9-18 20:227#
佩服也。可惜我是发不出这样子的帖子。表情
UID 23846
共 7 楼

关于这个存档

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

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

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

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

粤ICP备2024318274号-1