文字MUD游戏论坛-天下泥潭群英会-水泊梁山

文字MUD游戏论坛-天下泥潭群英会-水泊梁山 (http://www.aolai.org/forums/index.php)
-   『 梁山论剑 』 (http://www.aolai.org/forums/forumdisplay.php?f=3)
-   -   三板斧代码解析(申请加精加声望) (http://www.aolai.org/forums/showthread.php?t=15893)

sky_yhm 2011-10-12 13:41

三板斧代码解析(申请加精加声望)
 
由于叛师后三板斧就不能练了!所以将军府的弟子少了不少!三板斧也成了比较神秘的东西!最近有空,看了一下源码!与大家分享一下!

sky_yhm 2011-10-12 13:43

回复: 三板斧代码解析(申请加精加声望)
 
首先,我们看看与三板斧相关的变量:
int success,hurt,diff,damage;

int myexp=(int)me->query("combat_exp")/5000; (自身的武学变量赋值myexp=自身武学/5000

int mylev=(int)me->query_skill("axe"); (自身的等级变量赋值mylev =axe 有效等级)

int mystr=(int)me->query("str")+(int)(me->query_skill("unarmed")/10-2);
(自身的后天体格变量赋值mystr =(先天体格+unarmed的有效等级/2-10)))
int mykar=(int)me->query_kar(); (自身福缘变量赋值mykar=后天福缘)
int targetlev(对方等级), targetstr(对方体格),
targetkar(对方福缘),targetexp(对方武学),
targeteffkee(对方气血);

sky_yhm 2011-10-12 13:45

回复: 三板斧代码解析(申请加精加声望)
 
其次,再来看看三板斧使出后打中与打不中的分别描述:
string *hitone = ({
"$n试图侧身避开,但为时已晚。大斧劈在肩上,留下一道深可见骨的伤口!\n",
"$n高举手中兵刃试图架开,但挡不住$N的来势,被震得吐出一口鲜血!\n",
"$n以攻为守,但去势不够凌厉。虽逼得$N回斧自护,但还是在$n肩膀带出一道伤口。\n",});
(第一招打中对方的描述)

string *missone = ({
"$n轻轻一闪,大斧带着一阵劲风从身边斩下,但没伤到$n分毫。\n",
"$n高举手中兵刃奋力一架,只听「当」的一声巨响,"$n巨斧已被弹开!\n",
"$n不顾大斧来势,反而向$N疾攻,逼得$N不得不回斧自保,
这一势「开瓜」就此落空。\n", });
(第一招打不中对方的描述)
string *hittwo = ({
"$n似乎没有觉出危险,顺手一挡。待到发觉来势之疾,
为时已晚。脸上已多了一条数寸长的伤口!\n",
"$n没想道$N攻势如此之快,急忙低头闪避,
但无法躲开,被刀刃划得皮开肉绽!\n",
"$n攻势已然发出,来不及回防,脸上被割掉一片皮,显然伤得不轻!\n", });
(第二招打中对方的描述)

string *misstwo = ({
"$n脑袋微微一侧,避过了$N的攻势。\n",
"$n似乎早已料到这一招,顺势在斧杆上一推,避了开去。\n",
"眼看这招要把$n脑袋戳个对穿,突然间$n使个铁板桥,护手刀落了个空。\n", });
(第二招打不中对方的描述)

string *hitthree = ({
"$n似乎已被这三斧连环的威势吓破了胆,懒懒散散地一歪,被大斧横劈在肩头。\n",
"$n看准来势,以手中兵器架去,但已力不从心,被斧头震得虎口出血,显然内伤不轻!\n",
"$n眼见来势凌厉,企图低头避过,但不料大斧随着下劈,从$n背上割下一大片皮肉!\n",});
(第三招打中对方的描述)

string *missthree = ({
"$n似乎早已熟知大斧来路,斧未到,人已先轻飘飘地避开了。\n",
"$n眼见躲不过来招,急忙在地上一滚。虽然避得狼狈,但丝毫没有受伤。\n",
"$n不顾自身危险,中宫直进,向$N攻去,果然将来招化解了。\n",});
(第三招打不中对方的描述)

string *hit=({
RED"$N道:也叫你尝尝这无敌三板斧的厉害!\n"NOR,
RED"这无敌三板斧一气呵成,$n被攻了个措手不及,伤势甚为可怕!\n"NOR,
RED"$N狂笑道:就凭你这点本事,也来跟我斗?\n"NOR,});
(打中对方的描述)

sky_yhm 2011-10-12 13:50

回复: 三板斧代码解析(申请加精加声望)
 
再来看看打出三板斧的条件:
if((string)me->query_skill_mapped("force")!="lengquan-force")
return notify_fail("无敌三板斧必须以冷泉神功为底子。\n");
(使用三板斧必须要求enable force lengquan-force

if(me->query_skill("lengquan-force",1) < 100)
return notify_fail("你的内功底子不足,无法运斧如风,施展不出无敌三板斧。\n");
(使用三板斧lengquan-force级别必须要大于100

if(me->query_skill("sanban-axe",1)<100)
return notify_fail("你对宣花三斧不够熟悉,无法一气呵成地使出!\n");
(使用三板斧sanban-axe级别必须要大于100

if(me->query("max_force") < 1000 || me->query("force")<500)
return notify_fail("你的内力不足,难以随意挥动一柄大斧。\n");
(使用三板斧内力要求左右两项必须各要大于1000/500

sky_yhm 2011-10-12 13:53

回复: 三板斧代码解析(申请加精加声望)
 
你一声暴喝:开瓜!剔牙!掏耳朵!三招一气呵成!
多酷的pfm 啊!
十几年前我玩451的时候,
就有个牛人用ji rain seal + pfm sanban
把我们当时站上所有的其他牛人都pk了一遍从此我们所有人都开始迷上了三板斧

三板的命中率和sanban-axe 肯定有有关的。但具体关系是什么呢?
让我们看看pfm sanban 命中率的计算。
if( random(mylev+targetlev+mystr*3+targetstr*3) > (targetlev+targetstr*3))
{msg += hitone[random(sizeof(hitone))];success+=1;


if(random(mykar+targetkar)>targetkar) hurt+=1;damage=15+random(mykar/3);}
else msg+=missone[random(sizeof(missone))];
msg+=CYN"\n$N大斧已经带过,顺势以斧尾护手尖刀疾挑$n面门!\n"NOR;
(第一板命中比axe有效等级和后天体格以及对方parry的有效等级;伤害程度比福缘)

if( random(myexp+targetexp+mylev+targetlev) > (targetexp+targetlev))
{msg += hittwo[random(sizeof(hittwo))];success+=1;

if(random(mykar+targetkar)>targetkar) hurt+=1;
damage+=15+random(mykar/3);}
else msg+=misstwo[random(sizeof(misstwo))];
msg+=CYN"\n$N迅疾无伦地翻转斧头,大斧向$n脑袋横劈过去!\n"NOR;
(第二板命中比武学和axe有效等级以及对方parry的有效等级;伤害程度仍然比福缘)



if(random(myexp+targetexp+mykar*10+targetkar*10)>(targetexp+targetkar))
{msg+=hitthree[random(sizeof(hitthree))];success+=1;

if(random(mykar+targetkar)>targetkar) hurt+=1;
damage+=15+random(mykar/3); }
else msg+=missthree[random(sizeof(missthree))];
(第三板命中比武学和福缘;伤害比福缘)

sky_yhm 2011-10-12 13:58

回复: 三板斧代码解析(申请加精加声望)
 
最后,看看使出三板斧后对自己的影响:
一方面是对自己气血的影响:
diff=3-success;
if (diff<0) diff = 0;
if (success) hurt=damage*hurt/success;
(伤害的计算)
else hurt=0;
me->add("force", -(150*success+70*diff));
targeteffkee=(int)target->query("eff_kee");(气血上限)
target->receive_wound("kee", targeteffkee*hurt/100);
target->receive_damage("kee", target->query("kee")*(damage-hurt)/100);
(如果打中对方3下,自己内力减150*3+70*0=450
如果打中对方2下,自己内力减150*2+70*1=370
如果打中对方1下,自己内力减150*1+70*2=290


另一方面:看看busy 的影响
if(success)
{me->start_busy(1+random(4-(mykar+5)/10));
msg+=hit[random(sizeof(hit))]; }
(如果后天福缘为40,打中对方的话,自己busy=1+4-40+5/10))=0.95秒以下,随机)
else
{me->start_busy(random(4-(mykar+5)/10));
(如果后天福缘为40,打不中的话,自己busy=4-40+5/10=-0.5
福缘高了以后基本不会busy

sky_yhm 2011-10-12 14:00

回复: 三板斧代码解析(申请加精加声望)
 
完毕!!!!!!!!!!!

asteria 2012-02-01 09:22

回复: 三板斧代码解析(申请加精加声望)
 
谢谢分项 虽没学到三板 但看看也过瘾


所有时间均为格林尼治时间 +9, 现在的时间是 07:43.

Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue


Content Relevant URLs by vBSEO 3.6.1