骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 8217|回复: 7

[版主推荐] 偶然发现武器中第四类型伤害......砍,刺,钝之外的伤害....

[复制链接]

21

主题

127

回帖

94

积分

扈从

Rank: 2Rank: 2

UID
2733102
第纳尔
748
精华
0
互助
8
荣誉
1
贡献
0
魅力
0
注册时间
2016-3-31

战团正版勋章

鲜花(47) 鸡蛋(0)
发表于 2016-5-15 00:21:57 | 显示全部楼层 |阅读模式
本帖最后由 zhl199565 于 2016-5-15 12:32 编辑

#damage types:
cut    = 0
pierce = 1
blunt  = 2
首先物品头文件里面物品伤害类型有三种...,根据其数据储存的规律...感觉到至少有一种没被使用的...

之后向下面编译规则
ibf_armor_mask           = 0x00000000000000000000000ff
ibf_damage_mask          = 0x00000000000000000000003ff

iwf_swing_damage_bits       = 50
iwf_swing_damage_type_bits  = 58
iwf_thrust_damage_bits      = 60
iwf_thrust_damage_type_bits = 68
iwf_weapon_length_bits      = 70

def swing_damage(damage,damage_type):
  x = ((damage_type << iwf_damage_type_bits) | (damage & ibf_armor_mask))
  return (((bignum | x) & ibf_damage_mask) << iwf_swing_damage_bits)

def get_swing_damage(y):
  return (y >> iwf_swing_damage_bits) & ibf_damage_mask

def thrust_damage(damage,damage_type):
  x = ((damage_type << iwf_damage_type_bits) | (damage & ibf_armor_mask))
  return (((bignum | x) & ibf_damage_mask) << iwf_thrust_damage_bits)

def get_thrust_damage(y):
  return (y >> iwf_thrust_damage_bits) & ibf_damage_mask

对编程毫无基础的我都是刚刚百度才得知这些位运算符号的含义,(还好有一点小学数学的基础= =!)...函数就直接英文字面意思了,只是理解....

伤害范围是根据(damage & ibf_armor_mask))  能知道是0~255= =....因为ibf_armor_mask是ff也就是十进制255....是2的8次方-1  所以二进制就是全位为1的数....所以根据运算定义其范围自然就不会大于它本身,不过为了方便理解就相当于结果取余数(2n次方-1的特性)这里懒得证明了...其除数则是256....被除数是damage

而 x = ((damage_type << iwf_damage_type_bits) | (damage & ibf_armor_mask)),
前面是左移值,因为只有0,1,2三种...0很简单...而iwf_damage_type_bits明显大于8,也就是说 ((damage_type << iwf_damage_type_bits)能整除2的8次方(之所以不说倍数是因为还有0),......其结果方便理解就是相加(同样懒得证明了)...

而罪关键的是  return (((bignum | x) & ibf_damage_mask) << iwf_swing_damage_bits)

其中ibf_damage_mask=3ff也就是2的10次方-1    这个就是伤害的范围0~1023,而反过来看
iwf_swing_damage_bits  = 50

iwf_swing_damage_type_bits  = 58=iwf_swing_damage_bits+8=iwf_thrust_damage_bits-2

iwf_thrust_damage_bits      = 60   

iwf_thrust_damage_type_bits = 68=iwf_thrust_damage_bits+8=iwf_weapon_length_bits-2

iwf_weapon_length_bits      = 70

分别为2的8次方和2的2次方
而iwf_swing_damage_bits与iwf_thrust_damage_bits与iwf_weapon_length_bits差了10个左移位...也就是2的10次方

所谓存数据的规律...再之上写的那些就是想表达意思来着...不过个人语言表达倾向于个人逻辑的跳跃习惯,反正直接说意思,2进制一个位的含义就是是和否,也就是说每一位都是一个是和否(即0和1),.....
而当分别有a,b两种不互相影响的情况时,那么a和b就分别有一个是和否...
也就是根据集合的乘法也就是....{0,1}×{a,b}={(0,a),(0,b),(1,a),(1,b)}.....而a和b又怎么表示呢?二进制同样只有是和否    那么当只有a,和b两种的情况下 也就用0,1来表示了...结果直接,而这不是只有a和b...a和b同时各有是和否,所以可以用二进制的个位表示a的是和否     二位(?也就相当于十进制的十位= =!,个人语言勿喷)表示b的,   四位表示c的以此类推............
ps...补充一下,二进制的个位就是0和1   二进制的二位就是x0     那么二进制的四位就是x00这样....
所以集合{0,1}×{a,b}的相乘把a和b都带入位的表示就相当于{0,1}×{0,10}....而这里之所以用集合不用数组就是因为防止用数组而忽略了其最后数据是一串来表示,如果不额外在分类判断数据同样会混淆....

这就是数据储存规律之一(主要类别的判断)

返回上部iwf_swing_damage_bits与iwf_thrust_damage_bits差了二进制的10个位,说过了a和b若是差一个位,那么a有两种结果(0,1)...如果a和b差了两个位...那么a就有四中结果(0,1,10,11),也就是二进制两个位的数量(2的2次方)
所以挥砍动作的伤害和穿刺动作的伤害(两种伤害动作类型),其值可以存二进制10个位的值,也就是十进制的0~1023

而对于每一个动作其值还储存伤害类型...挥砍动作伤害到iwf_swing_damage_type_bits(挥砍动作伤害类型),这个是8个位,也就是十进制的0~255表示伤害值...伤害类型到下一个bit是2位,存4种伤害类型也就是0~3......(你不会才发现多一种可储存类型把)。

而以上之所以把如此简单的说的如此复杂混乱,而且逻辑有多次跳跃,其原因是因为从各个方面分析(先是外行人眼中的py函数理解,然后是数学中的值积和计算机二进制语言的关系,其实人对于二进制的理解也是数学,或者说人理解世界的一切都是数学...- -!,而数学的本质则是建立的模型概念,也就是说认知世界是离不开通过模型的)方便不同人的理解...(好吧,也许每个方面都难以理解= =),

所以可以说以上对于很多人基本都是废话..........................*************************************

那么重点如下,理论伤害范围0~1023(包括了其类型4种,而每种分别瓜分0~1023的四分之一),和众多数据类型一样,依然有很多中间空余的数据没有利用储存...所以只是推测有第四种伤害类型,这只是初步证明了第四种伤害是可能存在的(毕竟打不开硬核文件)...然后就是测试了...首先我把一把剑的伤害头设定成了800....................然后module.ini文件伤害与防御的减免系数全部设为10
armor_soak_factor_against_cut       = 10
armor_soak_factor_against_pierce    = 10
armor_soak_factor_against_blunt     = 10

armor_reduction_factor_against_cut       = 10
armor_reduction_factor_against_pierce    = 10
armor_reduction_factor_against_blunt     = 10

....进入游戏后马上开新档测试(因为以前也没有档= =)...........然而在柏拉汶商人的第一个场景中,遇见强盗那里...半天谁也没砍死谁....还好新角色没有帽子,最后被劈砍击晕...然后测试找到我那把修改后的剑,居然显示的是32钝伤!(即800-768)....由此打开能判断这里的硬核语言是类似tryelse那种,最后一个tryelse就省去其类的范围条件了,即剩下的都是钝伤害.....
(ps:顺便补充一下,虽然显示是钝伤,但是和砍刺一样是杀人,不是击晕= =)
然而这只是显示(即硬核ui位置)....他始终没有module.ini里的定义位置,那么他输出呢?测试结果是无视一切防御值,也就是减免系数没有的都为0!.....而且能正常输出伤害....换句话说就是其”真实伤害值“...然而悲剧的是硬核文件打不开,想直接设定新的一种伤害也不行,所以要么就绝对真实伤害(不包括技能速度熟练度等加成)...要么就通过场景触发器修改....




评分

参与人数 1荣誉 +1 第纳尔 +50 互助 +4 收起 理由
海涵狮心王理查 + 1 + 50 + 4 探究过程之模范

查看全部评分

鲜花鸡蛋

iLoveFG  在2016-5-15 12:02  送朵鲜花  并说:送朵鲜花鼓励一下 ,虽然我看不懂

1

主题

10

回帖

3

积分

平民

Rank: 1

UID
2744987
第纳尔
351
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2016-5-11
鲜花(0) 鸡蛋(0)
发表于 2016-5-15 13:43:04 来自手机 | 显示全部楼层
会不会是骑枪突刺的伤害呢,真实伤害,无视盾牌。纯属个人猜测。

21

主题

127

回帖

94

积分

扈从

Rank: 2Rank: 2

UID
2733102
第纳尔
748
精华
0
互助
8
荣誉
1
贡献
0
魅力
0
注册时间
2016-3-31

战团正版勋章

鲜花(47) 鸡蛋(0)
 楼主| 发表于 2016-5-15 15:04:46 | 显示全部楼层
顺便补充一下以前的这个注释的= =...
# hit_points :   0x000000000000000000ffff0000000000
# swing_dmg  : 0x000000000000000003fc000000000000
# swing_type : 0x00000000000000000c00000000000000
# thrust_dmg : 0x000000000000000ff000000000000000
# thrust_type: 0x00000000000000300000000000000000
# length     : 0x000000000000ffc00000000000000000

注释的内容是3中伤害类型而 而且坑爹是他hit_points肯定打错了= =

而改进的注释

# hit_points : 0x00000000000000000000ffff000000000000
# swing_comb : 0x00000000000000000fff0000000000000000
# thrust_comb: 0x00000000000000fff0000000000000000000
# length     : 0x00000000000fff0000000000000000000000

伤害和伤害类型打包了然而居然是fff,也就是4096-1?增加了2个二进制位来存数据......这么说意味着更多伤害或者类型?

然而这都是ms1.16...的注释,也是官方的有过的想法...不过以前的那个注释里的突然转3进制感觉是真坑= =...虽然是最大化压缩数据

21

主题

127

回帖

94

积分

扈从

Rank: 2Rank: 2

UID
2733102
第纳尔
748
精华
0
互助
8
荣誉
1
贡献
0
魅力
0
注册时间
2016-3-31

战团正版勋章

鲜花(47) 鸡蛋(0)
 楼主| 发表于 2016-5-15 15:11:53 | 显示全部楼层
ktsdfghj4 发表于 2016-5-15 13:43
会不会是骑枪突刺的伤害呢,真实伤害,无视盾牌。纯属个人猜测。

= =完全不在同一个储存数据串中,你说的是flag....长枪依然是长枪的穿刺或者砍伤伤害,如果你把长枪改成钝伤,那就是击晕了.......也就说明了你是一点也没看懂我的意思= =!...突然感觉太失败了
顺便告诉你module.ini里面也有骑枪冲击的系数位置
couched_lance_damage_multiplier这里

1

主题

10

回帖

3

积分

平民

Rank: 1

UID
2744987
第纳尔
351
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2016-5-11
鲜花(0) 鸡蛋(0)
发表于 2016-5-15 15:57:34 | 显示全部楼层
zhl199565 发表于 2016-5-15 15:11
= =完全不在同一个储存数据串中,你说的是flag....长枪依然是长枪的穿刺或者砍伤伤害,如果你把长枪改成钝 ...

哈哈,我就是个小白伸手党什么都不懂,就是觉得像是骑枪突刺,说说罢了,不必那么认真。那么这个第四类伤害可以做什么呢?

9

主题

1076

回帖

371

积分

见习骑士

游骑士战队[YQS]
战团ID:气宗__羽莫

Rank: 3

UID
741747
第纳尔
3918
精华
0
互助
3
荣誉
3
贡献
0
魅力
4
注册时间
2012-4-9

战团正版勋章拿破仑正版勋章骑砍中文站微博会员勋章骑砍中文站微信会员勋章元老骑士勋章骑士美德之英勇勋章[杰出会员活跃勋章]霸主正版勋章

鲜花(72) 鸡蛋(1)
发表于 2016-5-16 00:05:35 | 显示全部楼层
第四类的气功么?
红尘未破也无甚牵挂,只恋生杀。
醉里论道,醒时折花。

49

主题

327

回帖

145

积分

见习骑士

Rank: 3

UID
2053404
第纳尔
741
精华
0
互助
4
荣誉
1
贡献
0
魅力
11
注册时间
2014-7-3
鲜花(33) 鸡蛋(0)
发表于 2016-8-30 17:29:42 | 显示全部楼层
额,必须是2的倍数,不会是3,只能用4。目测内核没定义,所以默认真实伤害。

0

主题

20

回帖

6

积分

平民

Rank: 1

UID
1999372
第纳尔
620
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2014-6-1

战团正版勋章

鲜花(0) 鸡蛋(0)
发表于 2016-9-8 15:16:29 | 显示全部楼层
所以算 被 壓迫攻擊的 炸傷?
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-11-19 10:24 , Processed in 0.139593 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表