查看单个帖子
旧 2005-09-12   #1
nightdream
正式会员
级别:1 | 在线时长:8小时 | 升级还需:7小时
 
nightdream 的头像
 
注册: 05年09月01日
帖子: 9
声望力: 0
声望: 10 nightdream 闻道则喜
精华:1
现金:69两梁山币
资产:69两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
【北京站】【原创】XYJ2000之NK详析篇

XYJ2000之NK详析篇

众所周知,在xyj2000中,wx(武学)的获得远比dh(道行)要容易的多,主要就是因为灭妖系统的设定只会得到wx和qn(潜能),不论等级有多高,你始终可以得到很多的wx和qn,而dh在早期可以通过nk(杀死npc来获得dh,水陆大会也算是特殊的nk)来获得,后期就基本上只能通过做quest(开封任务)来得到了(xiudao和chanting也可以得到一定的dh,但是效果甚微)。已得道高人暂且放在一旁,对于新手的前期nk生涯,很多人都不甚了解nk谁来获得dh,什么阶段可以nk,为什么有些npc(电脑控制人物)别人杀了有dh而你却没有等等问题,所以通过对源码的分析纂写此文,来剖析一下nk的秘密。我会有选择的贴出关键部分的源码并解释,喜欢研究源码的朋友大家可以共同分析,只喜欢看结果的也可以得到很多内容。

一、变量意义

在分析nk前,要几个文中要用到的变量含义作一下解释,再分析源码时便会清楚很多:
killer:杀死npc的玩家
victim:被杀死的npc
fam:杀死npc的玩家的门派
fam1:被杀死的npc的门派
cla:门派临时变量
eff_dx:代表获得dh的效果
eff1:代表获得dh的临时变量
eff2:代表获得dh的临时变量
dx:杀死npc的玩家的(dh+wx)/2
reward:最终得到的dh奖励
nkgain:nk获得dh的多少

还有些临时变量不再介绍,毕竟只要大家理解了nk的过程,解释越简洁越好。
门派介绍,1的就是正派,0是中立派,-1是反派(bj站没有开放芭蕉洞、碧波潭、火云洞,没有找到龙宫的npc):
mapping family=(["方寸山三星洞":1,
"南海普陀山":1,
"将军府":1,
"五庄观":1,
"阎罗地府":0,
"月宫":0,
"东海龙宫":0,
"龙宫":0,
"大雪山":-1,
"翠云山芭蕉洞":-1,
"陷空山无底洞":-1,
"乱石山碧波潭":-1,
"火云洞":-1,
]);

二、获得dh的前提

1、有些npc一出场就是不可获得dh的,即设置了no_nk_reward,代表人物是火焰山土地,乌鸡国护宫卫士,阴雾山的山妖,源码如下:
if(victim->query("no_nk_reward")) return 0;

2、如果是别的玩家打晕的npc,你杀了也没有dh,npc自己晕的不算(如召唤鬼兵致晕让新人吃dh):
if(victim->query_temp("last_fainted_from")
&& victim->query_temp("last_fainted_from")!=
killer->query("id")) return 0;

3、平民百姓nk无dh,一定要拜个门派才行:
if(fam && !undefinedp(family[fam])) { ...计算nk结果的程序... } return 0;


4、玩家杀同门派的npc,不能得到dh(如阎罗王是个nk的好对象,但是地府弟子杀他却是白杀):
fam1=victim->query("family/family_name");
if(fam1 && fam==fam1)
return 0;

5、对于设置了eff_dx的npc,其相反门派的玩家杀他没dh(如南海罗汉set("eff_dx", 720000),那么只有中立派和反派杀他有dh,正派杀他是没有dh的):
if(eff_dx!=0 && cla*eff_dx>0)
return 0;

6、玩家的dh+wx相对于npc不论是过高还是过低都拿不到dh,至于什么阶段可以拿到dh,具体分析往下看:)

7、经过试验得知,如果npc非正常死亡,也是没有dh的,即npc没有调用缺省的::die()函数。如宝象国的蓝袍怪,虽然设置了eff_dx和nkgain,但是在死亡时却destruct(this_object()),没有运行::die(),所以杀他是没有dh的,南海的观音菩萨也是类似的情况。

8、还有几个设置了eff_dx和nkgain的npc,但是却放在了nofight,nomagic的地方,除了wiz可以杀,玩家动不得的,就是天上的星官,这个不知道算是bug,还是wiz故意留下来馋人玩的......

三、nk效果

xyj2000中大部分npc的nk奖励很少,但是有些npc是被鼓励nk的,即直接设置了eff_dx的,eff_dx即决定了玩家的wx+dh的上下限,nkgain即决定了玩家的reward的获得多少。

1、如果npc没有设置eff_dx,那么需要计算出该npc的eff_dx:
if(!eff_dx) {
//default value for eff_dx and nkgain.
//the default nkgain is low.
//If want to increase the value for certain NPC,
//then need to set its eff_dx and nkgain.

int dxn=0;

eff_dx=(victim->query("daoxing")+
victim->query("combat_exp"))/2;
if(eff_dx>20000)
dxn=eff_dx/3;
else if(eff_dx>5000)
dxn=eff_dx/2;
else
dxn=eff_dx;
//make it easier for newbie.
eff_dx=dxn;
}

2、如果npc没有设置nkgain,那么需要计算出该npc的nkgain:
if(!nkgain) {
int effdx=eff_dx;

if(effdx<0) effdx=-effdx;

if(effdx>667000)
nkgain=600;
else if(effdx>333000)
nkgain=500;
else if(effdx>100000)
nkgain=400;
else if(effdx>33000)
nkgain=300;
else if(effdx>17000)
nkgain=200;
else if(effdx>5000)
nkgain=150;
else if(effdx>2000)
nkgain=100;
else if(effdx>500)
nkgain=50;
else nkgain=25;

nkgain=nkgain+20;
}

3、如果npc初始就设置了eff_dx和nkgain的数值,那么上面两步忽略过,直接往下计算。

4、关键程序部分如下:
eff1=eff_dx/8;
eff2=eff_dx/4;
dx=(killer->query("daoxing")+
killer->query("combat_exp"))/2;
if(dx>eff_dx) reward=0;
else if(dx>eff2) reward=nkgain;
else if(dx>eff1) reward=10*(dx-eff1)/(eff2-eff1)*nkgain/10;
else reward=0;

举例说明,如地府阴间十王之仵官王,初始设置eff_dx=600000,那么玩家的dx>600000就拿不到dh了,即需要玩家的wx+dh要小于600000*2=1.2m才可以,但是玩家的dx<600000/8也是没有dh的,即玩家的wx+dh要大于600000*2/8=150k 才行。

地府阴间十王之仵官王的初始设置nkgain=600,只有玩家的dx>=600000/4时才能全部拿到600的nk奖励,即玩家的wx+dh大于600000*2/4=300k,否则wx+dh在150k~300k间玩家拿到的nk奖励会比较少,如玩家dx=100k,那么奖励仅为
10*(100000-600000/8)/(600000/4-600000/8)*600/10 = 180

再举个例子,如小西天的小童(黄眉老佛身边的除外)是没有设置eff_dx的,那么小童的eff_dx要经过计算,在小童被kill之后小童的wx+dh大约为1800000,经过上述第一步计算,eff_dx=(1800000/2)/3=300000,经过第二步计算,nkgain=520,那么可知玩家nk小童可从wx+dh=300000/8=37.5k开始,可到wx+dh=300000*2=600k左右,nkgain最多时为520点,经过第五步的计算,得到的dh=520*2/3=346点,即86天。

5、如果玩家是中立派,或者玩家非中立派时,npc却没有门派时,得到的结果还要打个折,是reward的2/3:
if(cla==0 || (cla!=0 && !fam1)) reward=reward*2/3;

6、最后得到的reward就是nk得到的dh,换算dh公式为 1天=4点,如reward=400点,那么就是400/4=100天dh。

四、附录:

本来以上内容已经完整的解释了nk的全过程,但是我相信肯定很多人未必会仔细研究,或者也懒得翻源码了,大家还是比较喜欢关注结果的,所以我把源码中带eff_dx和nkgain的npc摘录如下,谨供参考。至于没有eff_dx和nkgain的npc就太多了,自己可以找找那些wx、dh很高的npc来算一下,是否值得nk。

描述方式如下:
NPC1,NPC2,...
位置, eff_dx, nkgain, 技能,门派,是否持械,备注
=============================================

冰谷巡使
大雪山, -8000, 60, 30级, 雪山, 持刀

冰谷巡使
大雪山, -15000, 80, 40-50级, 雪山, 持刀

浣花
大雪山, -8000, 60, 30级, 雪山, 持刀

乌鸦先生
大雪山, -25000, 150, 50-80级, 雪山, 持刀

秃鹰尊者
大雪山, -120000, 300, 70-150级, 雪山, 空手

青狮老魔
方寸山, -200000, 400, 70-120级, 雪山, 持刀

白象尊者
大雪山, -200000, 400, 60-120, 雪山, 持刀

孔雀公主
大雪山, -200000, 400, 90-140, 雪山, 持剑, 会用perform chaofeng

广筠子
方寸山, 90000, 300, 70-80级, 方寸, 持棒

广羲子
方寸山, 60000, 250, 80-100级,方寸, 空手

云静
方寸山, 30000, 200, 40级, 方寸, 持棒

云清
方寸山, 30000, 200, 30-50级, 方寸, 持棒

云阳真人
方寸山, 250000, 400, 90-120, 方寸, 持棒, 会用法术

嫦娥
月宫, 200000, 350, 80级(200级dodge), 月宫, 持剑

月奴
月宫, 70000, 260, 60-80级, 月宫, 空手

痴梦仙姑
月宫, 100000, 300, 80-180级, 月宫, 持鞭

吴刚
月宫, 40000, 200, 50-100级(无特殊技能), 无门派, 持斧

惠岸行者
普陀,150000,300,100-120级,普陀,持杖,会用法术;

游方行者
普陀,40000,250,40-60级,普陀,持杖

和尚
普陀,35000,200,30-60级,普陀,空手

净瓶使者
普陀,40000,200,55-80级,无门派,空手

时值功曹
天宫,200000,300,100-110级,无门派,持枪

月值功曹
天宫,200000,340,90-115级,无门派,持剑

年值功曹
天宫,220000,350,100-120级,无门派,持棒

日值功曹
天宫,250000,350,100-120级,无门派,持棒

巨灵神
天宫,400000,400,100-170级,无门派,持斧

妖王
豹头山,-80000,100,70-130级,无门派,持铲

国王
宝象国,15000,110,50级,无门派,空手

五爪金龙
碧波潭,-500000,500,179级(无特殊技能),无门派,空手

西波儿古
碧波潭,-20000,250,40级,无门派,持叉

古波儿西
碧波潭,20000,250,40级,无门派,持叉

大肚虾婆
碧波潭,-2000,200,20级(无特殊技能),无门派,空手

万圣公主
碧波潭,-100000,400,70级(160基本轻功),无门派,空手

九头驸马
碧波潭,-500000,500,160-200级,火云洞,持杖

芦娘
碧波潭,-60000,330,80-100级,无门派,持鞭

山妖
碧波潭,-20000,200,40级,无门派,持刀

石头精
碧波潭,-100000,350,90级(无特殊技能),无门派,持石头,有办法一直杀

柳树精
碧波潭,-20000,200,40级(无特殊技能),无门派,持杖

水蛇怪
碧波潭,-5000,120,20级,无门派,空手

国王
比丘国,15000,90,100级(无特殊技能),无门派,空手

国王
车迟国,30000,180,50级,无门派,空手

上官郡主
凤仙郡,15000,90,100级(无特殊技能),无门派,持刀

铁扇公主
火焰山,80000,140,80级,芭蕉洞,持扇

杏仙
荆棘岭,-150000,400,80-100级,无门派,持杏枝

凌虚子
荆棘岭,-50000,300,75级,无门派,空手

小公主
女儿国,20000,110,75级,无门派,持剑

国王
钦法国,15000,90,100级(无特殊技能),无门派,空手

国王
天竺国,15000,90,100级(无特殊技能),无门派,空手

山妖
黑松林,-20000,200,40级,无门派,持刀

山猫怪,苍狼怪,野猪怪,棕熊怪,花虎怪,黑蟒怪,巨猿怪
黑松林,-48000~-80000,300,60-100级(无特殊攻击技能),无门派,持兵器

红孩儿
黑松林,-500000,500,150-200级,火云洞,持枪,会用法术

鹿头怪,狐头怪,马头怪,羊头怪,兔头怪
黑松林,-9000~-15000,200,42-70级,无门派,空手

国王
乌鸡国,15000,90,100级(无特殊技能),无门派,空手

妖王
阴雾山,-90000,90,110级,无门派,空手

老王爷,大王子
玉华县,10000,50,60级(无特殊技能),无门派,空手

二王子
玉华县,9000,40,50-80级(无特殊技能),无门派,空手

小王子
玉华县,8000,30,40-70级(无特殊技能),无门派,空手

国王
朱紫国,15000,90级,100级(无特殊技能),无门派,空手

百花仙子
蓬莱仙岛,200000,350,80-100(200级特殊攻击技能),月宫,空手,会用法术

雾渊道长
长安城,80000,300,80-90级,无门派,持拂尘,会用法术

法明长老
长安城,90000,300,90级,无门派,空手,会用法术

袁天罡
长安城,1000,1,50-100级,无门派,持剑,杀袁会被别人pk的,新手要注意

郭申,直健
梅山,300000,400,145级,无门派,持兵器

卞城王,仵官王, 楚江王, 都市王, 轮转王, 平等王, 秦广王, 宋帝王, 泰山王
地府,600000,600,150级,无门派,空手,会用法术

阎罗王
地府,800000,600,150级,地府,持剑,会用法术

降龙、伏虎、清静、接引、归真、金刚、精进、功德、旃檀、光明、贤善、庄严、智慧、日月、妙音、须弥、金身、广力罗汉
普陀,720000,500,150级,普陀,持杖

魔礼青
天宫,1500000,800,220级,无门派,持枪

魔礼红,魔礼海,魔礼寿
天宫,1500000,800,240级,无门派,持兵器

李靖
天宫,600000,600,170-180级,无门派,持剑,杀李也会被人pk的,新手要注意


五、以上内容分析的源码均来自于互联网,并不能保证适用于任何一个xyj站点,但是我想,对于今朝今日的文字mud来讲,公开研究的过程远比闷头练功有趣的多,期望拙文可以抛砖引玉,共同学习,更加期望能够见到xyj的后续版本。最后借用《medu的北京站练功发展之我见》的最后一句话:你有一个苹果,我也有一个苹果,互换一下,我们还是每人只有一个苹果;你有一种思想,我有一种思想,互换一下,我们每人都有了两种思想。

※ 版权所有,转载请注明出处:西游记北京站论坛 http://xyj.china.com(mud.cww.com) ※

此帖于 2005-09-15 11:57 被 nightdream 编辑.
nightdream 当前离线  
+20 两梁山币
回复时引用此帖