zgbl 发表于 2011-8-23 15:33:17

说到武器,谈一下骑马与砍杀的设置

这个是西方冷兵器动作类游戏中真实度第一的游戏了,毋庸置疑
护甲效果——见面伤害,根据部位,简略分为头甲、身甲、腿甲三处,不同部位的攻击按照不同部位的护甲计算,攻击头部有额外加成

攻击种类
砍——一应劈砍动作,都是砍伤
刺——一应戳刺动作,都是刺伤
钝——一应敲击动作,都是钝伤

攻击种类的区别
砍——砍的兵器攻击力最高,但是受到护甲减免的效果也最严重。最好的全身板甲可以忽略大部分砍伤
刺——攻击力挺不错,护甲减免效果略差,即使全身板甲也不能忽视刺伤
钝——攻击力最低,打没甲的效果很差,但是护甲减免效果也很差,而且钝击打人必晕,而不是死,放到北侠可以考虑做成上限伤害

攻击速度则是看动作咯,自然是刺最快
如剑,就有刺和砍两种类型,刀就只有砍,锤头是盾,弓弩是刺,等等……

——————————————————————————————

在mud的功夫代码里,我也看到了类似的东东匕首功夫:
"damage_type" : "刺伤"

空手功夫:
"damage_type" : "瘀伤"
"damage_type" : "内伤"

刀法:
"damage_type" : "割伤"

棒法:
"damage_type": "挫伤"但是在北侠的代码里,damage_type,仅仅只是影响描述而已result += damage_msg(damage, action["damage_type"]);

switch( type )
{
case "擦伤":
case "割伤":
if( damage < 10 ) return "结果只是轻轻地划破$p的皮肉。\n";
else if( damage < 20 ) return "结果在$p$l划出一道细长的血痕。\n";
else if( damage < 40 ) return "结果「嗤」地一声划出一道伤口!\n";
else if( damage < 80 ) return "结果「嗤」地一声划出一道血淋淋的伤口!\n";
else if( damage < 160 ) return "结果「嗤」地一声划出一道又长又深的伤口,溅得$N满脸鲜血!\n";
else return "结果只听见$n一声惨嚎,$w已在$p$l划出一道深及见骨的可怕伤口!!\n";
break;
case "刺伤":
if( damage < 10 ) return "结果只是轻轻地刺破$p的皮肉。\n";
else if( damage < 20 ) return "结果在$p$l刺出一个创口。\n";
else if( damage < 40 ) return "结果「噗」地一声刺入了$n$l寸许!\n";
else if( damage < 80 ) return "结果「噗」地一声刺进$n的$l,使$p不由自主地退了几步!\n";
else if( damage < 160 ) return "结果「噗嗤」地一声,$w已在$p$l刺出一个血肉□糊的血窟窿!\n";
else return "结果只听见$n一声惨嚎,$w已在$p的$l对穿而出,鲜血溅得满地!!\n";
break;
case "瘀伤":
if( damage < 10 ) return "结果只是轻轻地碰到,比拍苍蝇稍微重了点。\n";
else if( damage < 20 ) return "结果在$p的$l造成一处瘀青。\n";
else if( damage < 40 ) return "结果一击命中,$n的$l登时肿了一块老高!\n";
else if( damage < 80 ) return "结果一击命中,$n闷哼了一声显然吃了不小的亏!\n";
else if( damage < 120 ) return "结果「砰」地一声,$n退了两步!\n";
else if( damage < 160 ) return "结果这一下「砰」地一声打得$n连退了好几步,差一点摔倒!\n";
else if( damage < 240 ) return "结果重重地击中,$n「哇」地一声吐出一口鲜血!\n";
else return "结果只听见「砰」地一声巨响,$n像一捆稻草般飞了出去!!\n";
break;
case "砸伤":
if( damage < 20 ) return "结果只是轻轻地碰撞到了$n一下,没有造成什么伤害。\n";
if( damage < 60 ) return "结果$w只将$n的$l砸出一块瘀红。\n";
if( damage < 120 ) return "结果「啪」地一声,$w打中$n的$l,登时肿了一块老高!\n";
if( damage < 240 ) return "结果$w重重得击中$n的$l,打得$p倒退数步,「哇」地吐出一大口鲜血!\n";
if( damage < 380 ) return "结果只听见「硼」地一声巨响,$w打在$n身上,将$p像一捆稻草般击飞出去!\n";
return "只见$w重重地撞击在$n的身上,几声骨碎声中,$p象散了架似的瘫了下去!!\n";
break;
case "内伤":
if( damage < 10 ) return "只是把$n打得退了半步,毫发无损。\n";
else if( damage < 20 ) return "$n痛哼一声,在$p的$l造成一处瘀伤。\n";
else if( damage < 30 ) return "一击命中,把$n打得痛得弯下腰去!\n";
else if( damage < 40 ) return "$n闷哼了一声,脸上一阵青一阵白,显然受了点内伤!\n";
else if( damage < 60 ) return "$n脸色一下变得惨白,昏昏沉沉接连退了好几步!\n";
else if( damage < 70 ) return "重重地击中,$n「哇」地一声吐出一口鲜血!\n";
else if( damage < 80 ) return "「轰」地一声,$n全身气血倒流,口中鲜血狂喷而出!\n";
else return "只听见几声喀喀轻响,$n一声惨叫,像滩软泥般塌了下去!!\n";
break;
case "点穴"://增加点穴伤害pal
if( damage < 10 ) return "结果只是轻轻的碰到$n的$l根本没有点到穴道。\n";
else if( damage < 20 ) return "结果$n痛哼一声,在$p的$l造成一处淤青。\n";
else if( damage < 40 ) return "结果一击命中,$w点中了$n$l上的穴道,$n只觉一阵麻木!\n";
else if( damage < 80 ) return "结果$n闷哼了一声,脸上一阵青一阵白,登时$l麻木!\n";
else if( damage < 160 ) return "结果$n脸色一下变得惨白,$w点中$n$l的穴道,一阵疼痛遍布整个$l!\n";
else if( damage < 240 ) return "结果$n一声大叫,$l的穴道被点中,疼痛直入心肺!\n";
else return "结果只听见$n一声惨叫,一阵剧痛夹杂着麻痒游遍全身,跟着直挺挺的倒了下去.\n";
break;
case "抓伤":
if( damage < 10 ) return "结果只是轻轻地抓到,比抓痒稍微重了点。\n";
else if( damage < 20 ) return "结果在$p的$l抓出几条血痕。\n";
else if( damage < 40 ) return "结果一抓命中,$n的$l被抓得鲜血飞溅!\n";
else if( damage < 80 ) return "结果「嗤」地一声,$l被抓得深可见骨!!\n";
else if( damage < 120 ) return "结果一抓命中,$n的$l被抓得血肉横飞!!!\n";
else if( damage < 160 ) return "结果这一下「嗤」地一声抓得$n连晃好几下,差一点摔倒!\n";
else if( damage < 240 ) return "结果$n哀号一声,$l被抓得筋断骨折!!\n";
else return "结果只听见$n一声惨嚎,$l被抓出五个血窟窿!鲜血溅得满地!!\n";
break;
case "摔伤":
case "撞伤":
if( damage < 20 ) return "结果$n脚下不稳,在地上擦破了点儿皮。\n";
if( damage < 80 ) return "结果「啪」地一声,$n在地上摔了个屁礅。\n";
if( damage < 160 ) return "结果$n一不小心,被$N重重摔倒在地!\n";
if( damage < 320 ) return "结果$n被一下摔倒在地,「噗」地一声喷出了一大口鲜血!\n";
if( damage < 500 ) return "结果被$N这一下摔在地上,骨头「卡嚓」一声断了!\n";
return "结果只听见$n一声惨嚎,被$N摔得血肉横飞,惨不忍睹!!\n";
case "反弹伤":
if( damage < 5 ) return "$N受到$n奋力反震,闷哼一声。\n";
else if( damage < 10 ) return "$N被$n的胸膛震得气血翻腾,大惊失色。\n";
else if( damage < 20 ) return "$N被$n的小腹震得站立不稳,摇摇晃晃。\n";
else if( damage < 40 ) return "$N被$n以内力反震,「嘿」地一声退了两步。\n";
else if( damage < 80 ) return "$N被$n的小腹反弹回来的力量震得半身发麻。\n";
else if( damage < 120 ) return "$N被$n的反弹力一震,胸口有如受到一记重击,连退了五六步!\n";
else if( damage < 160 ) return "$N被$n的内力劲风一震,眼前一黑,身子向後飞出丈许!!\n";
else return "$N被$n的内力劲风一震,眼前一黑,狂吐鲜血,身子象断了线的风筝向後飞去!!\n";
break;
default:
if( !type ) type = "伤害";
if( damage < 10 ) str ="结果只是勉强造成一处轻微";
else if( damage < 20 ) str = "结果造成轻微的";
else if( damage < 30 ) str = "结果造成一处";
else if( damage < 50 ) str = "结果造成一处严重";
else if( damage < 80 ) str = "结果造成颇为严重的";
else if( damage < 120 ) str = "结果造成相当严重的";
else if( damage < 170 ) str = "结果造成十分严重的";
else if( damage < 230 ) str = "结果造成极其严重的";
else str ="结果造成非常可怕的严重";
return str + type + "!\n";
}然而对伤害的影响,damage_type完全无用

————————————————————————————————————————

矛盾矛盾,矛和盾自出现以来就是彼此对立的,攻击和防御,必须以彼此为参照才能体现出来

但是,北侠的防御呢?
没任何用处,只能减少受到的上限伤害……

谈一谈游戏中我见过的几种很经典的防御算法吧

1、圣火纹章
伤害=攻击-防御
这个是最简单的,也是最经典的,但是要求攻防必须精确到了极点,因此只适合于圣火纹章这种剧情完全固定的游戏
特点:破甲
2、魔兽争霸
伤害=攻击/(1+0.06*防御)
每点防御增加6%的有效生命,随着防御的上升,减免程度会下降,但是从有效生命来看,是线性的
魔兽争霸算法的经典程度我就不解释了吧
特点:比例减免
3、骑马与砍杀
护甲吸收——砍 = 0.8
护甲吸收——刺 = 0.65
护甲吸收——盾 = 0.5

护甲减免——砍= 1.0
护甲减免——刺= 0.5
护甲减免——盾= 0.75

计算公式是:
伤害少 = 基础伤害 - ( 护甲 * 护甲吸收 )
最终伤害 =伤害 * ( 1 -( 护甲/100 * 护甲减免 ) )

这种算法,结合了上述算法一(破甲)和算法二(比例减免)的特点,并且根据伤害类型有不同的加成,个人觉得是最适合移植北侠的

北大侠客行MUD,中国最好的MUD

[ 本帖最后由 zgbl 于 2011-8-23 03:42 PM 编辑 ]

zgbl 发表于 2011-8-23 15:45:08

护甲减免的计算方式


骑马与砍杀里相比常规100点左右的初始伤害,70甲已经近乎无敌了

放到北侠也很可行,以100M1000sk和3o200武器天精金造成的伤害为上限,以同样的极品3o防御装为上限,来调整参数,设计分界线

[ 本帖最后由 zgbl 于 2011-8-23 03:48 PM 编辑 ]

nol 发表于 2011-8-23 15:45:58

我可以先攻击马不?

yct27

syfd 发表于 2011-8-23 15:46:26

护甲要有用少林星宿有福了,普通人只好花钱去换ironskin了

zgbl 发表于 2011-8-23 15:49:07

原帖由 nol 于 2011-8-23 15:45 发表 http://pkuxkx.com/forum/images/common/back.gif
yct27
马么。。。打到马就算马的防御,没打到就算人的,就这样

zgbl 发表于 2011-8-23 15:53:23

不过如果改这个的话,随机装备的防御就得大改了,不然很容易就能凑一套高防装备。。。

syfd 发表于 2011-8-23 15:59:35

高防装常见,3o高防装不常见,不过装备差的那点防御在某些技能和特技面前可以忽略不计

zine 发表于 2011-8-23 16:22:42

如果攻防都这样细算的话,
除了增加npc化学攻击比例,增加npc数量之外。
单挑npc的任务几乎别无选择要给npc穿一身随机装备才能对抗玩家的攻防。

diskid 发表于 2011-8-23 16:25:30

为啥NPC要对抗玩家。。。。NPC练一个号1秒钟,玩家练一个号少则半月,多则半年,这已经很不公平了,所以NPC被玩家虐才对

diskid 发表于 2011-8-23 16:27:57

原帖由 syfd 于 2011-8-23 03:46 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
护甲要有用少林星宿有福了,普通人只好花钱去换ironskin了
少林还带ironskin的飘过。。。什么都不穿2000多防御yct10 yct10 yct10
页: [1] 2
查看完整版本: 说到武器,谈一下骑马与砍杀的设置