shaoning79 发表于 2005-1-9 19:16:07

资料保存

最近用一个CM3 Series SaveGame Editor的编辑器,打开了一个档,在球员栏内发现有两排数值,其中第一排有些数值大于20。
比如西塞的射门是248、16,而爱马尔的射门是236、16。在游戏中两人的射门一样都是15(这个编辑器的数据都比游戏里的高1,不知为何)。那么,248和236 代表什么?
是不是
1、两人的射门看起来都是16,但是西塞要比埃玛尔好那么一点点?
2、我把两人前排都改到255,结果后排数据,西塞变成17,埃玛尔变成19。这又是为什么?是表示埃玛尔射门潜力高,西塞练死也就17了?

不解啊,求高人指点……0=056

[ Last edited by 本多RuRu on 2005-10-8 at 07:26 AM ]

shaoning79 发表于 2005-1-9 19:18:14

还有西塞的射门是248、16,萨哈的射门是251、15。到底哪个射门强?我有点晕了。

本多RuRu 发表于 2005-1-9 21:34:31

惊喜又有一个玩家开始深入研究了。
呵呵,水天可以来说说。

我找的一些资料如下

下面是篇转帖,希望能激起大家研究妖人妖的精神:

不知道大家还记不记得CM3的时候有一款Graeme Kelly开发的CM3 Series SaveGame Editor存盘编辑器,其实用过它就大概知道球员的属性和能力值大概是个什么关系 了,下面就以我最喜欢的Giggs为例给大家讲解一下
http://bbs.playcm.net/UploadFile/200421714162715161.gif

先做一下名词解释,如图所示:
RA:球员各项属性的实际能力;范围:1-255
FA:球员各项属性的最终体现值,也就是我们所看见的球员属性,范围:1-20
CA:球员的当前能力,范围:1-200
PA:球员的潜力,范围1-200

球员的属性分类两类:一类是Acceleration、Aggression等FA和RA相等的属性,这类属性不受CA影响,主要集中在球员的身体属性、部分精神属性和隐藏属性;另一类是Anticipation、Crossing等FA和RA不相等的属性,这类属性要受到CA的影响,主要集中在球员的技术属性和部分精神属性。

我们可以用表示FA=f(RA,CA)表示这三者之间的函数关系。经过测试发现,f是一个在(1,127)(128,255)两个区间分别递增的函数,但当CA一定的时候,FA和RA是非线性的关系,当RA一定的时候,FA和CA也是非线性的关系。我不是数学系出身,想要仅以几个采样值来求出这个二元函数几乎是不可能的,于是剩下唯一的办法就是去源程序里找了。我也不是学编程的,更没有faster那种把Diablo反编译的精神与体力,幸好CMScout的作者Nygreen给我们提供了他的源文件,让我们找到这个二元函数。大家有兴趣的可以到http://prdownloads.sourceforge.net/cmeditors/CMScout-v3.10-source.zip?下载这个软件

程序中有如下一段:

procedure TCM4PlayingData.ConvertRelativeAbilities(Ability: SmallInt);
begin
if Goalkeeper < POSITION_THRESHOLD then
begin
    FCrossing:=HighConvert(Ability, Crossing);
    FDribbling:=HighConvert(Ability, Dribbling);
    FFinishing:=HighConvert(Ability, Finishing);
    FHeading:=HighConvert(Ability, Heading);
    FLongShots:=HighConvert(Ability, LongShots);
    FMarking:=HighConvert(Ability, Marking);
    FOffTheBall:=HighConvert(Ability, OffTheBall);
    FPassing:=HighConvert(Ability, Passing);
    FPenalties:=HighConvert(Ability, Penalties);
    FTackling:=HighConvert(Ability, Tackling);
    FCreativity:=HighConvert(Ability, Creativity);

    FHandling:=LowConvert(Ability, Handling);
    FAerialAbility:=LowConvert(Ability, AerialAbility);
    FCommandOfArea:=LowConvert(Ability, CommandOfArea);
    FCommunication:=LowConvert(Ability, Communication);
    FKicking:=LowConvert(Ability, Kicking);
    FThrowing:=LowConvert(Ability, Throwing);
end
else
begin
    FCrossing:=LowConvert(Ability, Crossing);
    FDribbling:=LowConvert(Ability, Dribbling);
    FFinishing:=LowConvert(Ability, Finishing);
    FHeading:=LowConvert(Ability, Heading);
    FLongShots:=LowConvert(Ability, LongShots);
    FMarking:=LowConvert(Ability, Marking);
    FOffTheBall:=LowConvert(Ability, OffTheBall);
    FPassing:=LowConvert(Ability, Passing);
    FPenalties:=LowConvert(Ability, Penalties);
    FTackling:=LowConvert(Ability, Tackling);
    FCreativity:=LowConvert(Ability, Creativity);

    FHandling:=HighConvert(Ability, Handling);
    FAerialAbility:=HighConvert(Ability, AerialAbility);
    FCommandOfArea:=HighConvert(Ability, CommandOfArea);
    FCommunication:=HighConvert(Ability, Communication);
    FKicking:=HighConvert(Ability, Kicking);
    FThrowing:=HighConvert(Ability, Throwing);
end;

FAnticipation:=HighConvert(Ability, Anticipation);
FDecisions:=HighConvert(Ability, Decisions);
FOneOnOnes:=HighConvert(Ability, OneOnOnes);
FPositioning:=HighConvert(Ability, Positioning);
FReflexes:=HighConvert(Ability, Reflexes);
FThrowIns:=HighConvert(Ability, ThrowIns);
FFirstTouch:=HighConvert(Ability, FirstTouch);
FTechnique:=HighConvert(Ability, Technique);
end;

我来解释一下,FCrossing等就是我所说的FA,Ability就是我所说的CA,而Crossing等就是我所说的RA。这里有两个函数:HighConvert和LowConvert。当球员不是守门员的时候,他的非守门属性和共有属性由HighConvert决定,而他的守门属性由LowConvert决定;而当一个球员是守门员的时候,他的守门属性和共有属性由HighConvert函数决定,而他的非守门属性由LowConvert决定。其中HighConvert起主导作用。

HighConvert和LowConvert分别是如下定义的:
其中:Ability=CA,value=RA,Result=FA

function TCM4PlayingData.HighConvert(Ability: SmallInt;
value: ShortInt): ShortInt;
var
Temp: Double;
begin
Temp:=(((value * 2) + Ability) * 0.05) + 10;
Temp:=((((Temp * Temp) * 0.1) + Temp) * (1/3)) + 0.5;

if Temp < 1 then
    Result:=1
else if Temp > 20 then
    Result:=20
else
    Result:=Trunc(Temp);
end;

function TCM4PlayingData.LowConvert(Ability: SmallInt;
value: ShortInt): ShortInt;
var
Temp: Double;
begin
Temp:=(((Ability * 0.1) + (value * 2)) * 0.05) + 10;
Temp:=((((Temp * Temp) * 0.1) + Temp) * (1/3)) + 0.5;

if Temp < 1 then
    Result:=1
else if Temp > 20 then
    Result:=20
else
    Result:=Trunc(Temp);
end;

由此我们可以看出,f是一个二元二次函数。要注意的是Ability的类型是SmallInt,它的范围是(-127,127),这也就解释了f为什么分别在两个区间递增,因为我们看到的(128,255)其实代表的是(-127,-1)。

综上所述,非守门员的Crossing,Dribbling,Finishing,Heading,LongShots,Marking,OffTheBall,Passing,Penalties,Tackling,Creativity和守门员的Handling,AerialAbility,CommandOfArea,Communication,Kicking,Throwing以及两者共有的Anticipation,Decisions,OneOnOnes,Positioning,Reflexes,ThrowIns,FirstTouch,Technique是由函数HighConvert决定的。

通过上面的公式我们也可以部分解释妖人存在的原因了。我们可以看到绝大多数球员的RA都在(-127,-1)区间内,就连堂堂Giggs也只有Dribbling一项属性在(1,127)区间内。而妖人的属性如果在(1,127)内的话,那么即便他的CA很低,他的FA依然可以很高。例如当RA=127时,即便CA=1,依然可以得到FA=20。

以上就是我对FA、RA、CA三者之间关系的解释,感谢各位耐心看完。不过看看就完了,不要深究,CM是一款足球经理游戏,不要过分看重这些数据了,不然到最后我们面前的就只是一堆数字而已,还有什么意思。和现实相结合,才是玩CM的最大乐趣。
2月18日更新

上面的内容大家反映有点复杂,我再抛开程序部分,通俗的为大家解释一下:

还是以上图为例,四类值分别是:
RA:球员各项属性的实际能力,这个值也是游戏中实际存在的,无论是初始数据库还是存盘文件,球员的各项属性都是以这个值的形式保存的;显示范围:(1,255),但由于RA的数据类型是SmallInt,所以实际的范围是:(-127,127)
FA:球员各项属性的最终体现值,也就是我们在游戏中所看见的球员属性,范围:(1,20)
CA:球员的当前能力,范围:(1,200)
PA:球员的潜力,范围(1,200)

CA和PA的关系,我想大家都知道,就是CA总是在(1,PA)这个范围内浮动,这里我就不多说了。

下面主要介绍一下RA、PA、CA三者之间的关系:

球员的属性分为两类:

一类是FA与RA相等,这类属性不受CA影响,主要属性有(CM0304中):

精神属性      非守门员属性    守门员属性      共同属性
Adaptability    LeftFoot      Eccentricity    Acceleration
Ambition      RightFoot       RushingOut      SetPieces
Loyalty         Flair         TendencyToPunch Strength
Pressure      Corners                         Stamina
Professionalism Teamwork                        Pace
Sportsmanship   WorkRate                        Jumping
Temperament   LongThrows                      Influence
Controversy                                     Dirtiness
                                                Balance
                                                Bravery
                                                Consistency
                                                Aggression
                                                Agility
                                                ImportantMatches
                                                Injury Proneness
                                                Versatility
                                                Natural Fitness
                                                Determination

这类属性不作重点讨论。

另一类是FA和RA不相等,这类属性要受到CA的影响,主要的属性有(CM0304中):

非守门员属性    守门员属性      共同属性
Crossing      Handling      Anticipation
Dribbling       AerialAbility   Decisions
Finishing       CommandOfArea   OneOnOnes
Heading         Communication   Positioning
LongShots       Kicking         Reflexes
Marking         Throwing      ThrowIns
OffTheBall                      FirstTouch
Passing                         Technique
PenaltyTaking
Tackling
Creativity

这类属性可以用函数FA=HighConvert(RA,CA)表示

其中HighConvert可以表示为:

Temp1=(((RA * 2) + CA) * 0.05) + 10
FA=((((Temp1 * Temp1) * 0.1) + Temp1) * (1/3)) + 0.5

如果FA<1,则FA=1
如果FA>20,则FA=20
如果1<FA<20,则FA为上面结果的整数部分

因此,我们将RA和CA带入上述函数,就能得到相应的FA。

这个函数在CA一定的时候,在(-127,127)范围内随RA递增,在RA一定的时候,在(1,200)范围内随CA递增。也就是CA越高,FA越高;RA越高,FA越高。

本多RuRu 发表于 2005-1-9 21:34:53

知道这些对我们有什么用:

一、可以部分解释妖人存在的原因。

当CA=1的时候,由RA=97和RA=127都可以得到FA=20,而由RA=97时得到的FA=20会随着RA的衰减到96而迅速衰减到FA=19,可以说它处在一个不稳定状态,而由RA=127得到的FA=20,要一直RA衰减到96时才能得到FA=19,可以说它相对的处在一个稳定的状态。这就是为什么我们修改出来的属性全为20的球员会很快状态下降,而游戏里的妖人的一些状态可以稳定的保持在20。因为我们现在的修改器,都只能修改FA而不能修改RA。

二、RA和CA那个重要

由(RA * 2) + CA可以看出,在单项属性上RA的影响力要比CA大。(由(Temp1 * Temp1)可知,其影响力不只2倍)但是,由于CA一共影响了19项属性(非守门员),而且都是很重要的技术属性,因此个人认为,在RA和CA都有很大上升空间的情况下,CA显得更为重要。

三、选拔年轻球员的原则

由于第一类属性FA不受CA影响,因此这类属性只能靠训练提高,增加的比较缓慢。因此我喜欢挑选这些属性都比较高,潜力也比较高的年轻球员,即便他们的技术都非常烂。但随着CA的提高,他们的技术一般都会飞速提高。

以上都是我的一些个人观点,还望大家海涵。另外还有什么好的提议,也请大家不吝赐教。

一些后续:

1:好象是说球员的实际能力是从1-255(-127,127),而显示只有1-20,实际能力(-127,0)而潜力与能力高(不稳定,容易下降)的是牛人,实际能力(1,127)但潜力低能力高(很稳定,不易下降)是妖人,如果碰到实际能力在(1,127)且潜力与能力都极高的就应该算是“妖牛”了,是真正的极品。
    另外大家记不记得阿色以前的一篇帖子,是说一些数值极为养眼,但在比赛中表现很差评分极低的妖人,却百思不得其解,这篇帖子就给出了答案,那就是潜力属于-2级别的,显示能力也很高,但实际能力却很不幸的在(-127,-63)之间

前辈阿色的2贴

http://fmfans.cn/viewthread.php?tid=3915

http://fmfans.cn/viewthread.php?tid=5436&highlight=&page=1

2:说简单点,隐藏在所有1~20的显性数值,都会被其相对应的-127~127的隐性数值所影响,这个数值应该是一个基础加权数值,比如拿弹跳来说,一个弹跳20的球员绝对不可能跳到弹跳为1的球员的20倍高度。再有射门这个数值,有人说是射门欲望,而有人说是临门一脚(射在门框以内)的水平,我认为1~20的应该是射门欲望,临门一脚由其背后的-127~127控制,这也可以解释联赛的球员平分中,有些球员踢了30场比赛,射正率还在80%以上,而那些著名前锋却一而再再而三的把球射偏,或者交给门将,这也可以理解0304里的门将为什么nb,前锋为什么lj,只要SI在隐藏数值上作点文章,我们就会发现装了新补丁后,数值还是那些数值,但却变成门将lj,前锋nb了,SI才没变态到要修改比赛引擎。


(他当中一些例子是以cm0304来说明的,但是其中的原理一样的,大家自己看)

本多RuRu 发表于 2005-1-10 06:12:41

水天这是我昨完的结果

当前能力CA,Ra0-255 具体能力FA

先说具体能力和当前能力关系
修改球员能力的时候
如果用cmexporler
只改具体能力,因为当前能力不变,而且0-255不变,所以很容易具体能力后来下降。
我们开档,只改当前能力,但是不动具体能力,开了档出来,发现球员的具体能力上升了。
这也是为什么开档前,看球员的已写入具体能力很高,但是档出来却没有设置的高。因为当前能力没变。
归根揭底就是确实具体的能力和当前能力是递增的。



下来说RA0-255和具体能力FA关系
函数在0-255不对称(因为0-255中的一段区间内,当temp>20就直接=20了,确实是0-128左右递增,129-255递增)

现在看下来,在0-255中那段数值比较小时就显示具体能力20的,表现牛,当然0-255能取到20的区间内通过训练保持具体能力稳定时间的长短,我就不知道了。这个要看CA和RA的递增性哪个大了

几个妖人看下来,都是取的在0-255区间就能得到20的区间的较小范围0-127之间。
比如TMD,CA65,射门41,16,从71-128,射门都是20。其他盘带都取的较小直

大牌我也看了下,比如V32,他的射门238 17,因为当前能力高,训练涨能力可以从238-255-128都能保持射门17-19-20,还不算当前能力上涨带来的具体能力提高。V32在CA187不变情况下,1-128都是显示射门20,其他区间无。其他关键能力的实验差不多。


总之,大牌具体能力FA能取到20的那个0-255的区间长,当前能力越大,能取到的FA20的区间越长。
我想妖人一般潜力减去当前能力没多少空间,所以当前能力上升不多,所以保持的数值Fa稳定,所以牛?

那么想法就是当前能力越小,把这些直固定在20表现怎么样呢。

我改了个人,能力2,潜力2,RA值改到100,显示一些FA是20,结果踢了一场后,过了一阶段出先和cmgod一样的情况,FA直回去了。RA是255,导致FA才7。

已经早上了,没多少时间了。你继续
感觉训练的影响很大。

[ Last edited by 本多RuRu on 2005-1-10 at 06:37 AM ]

本多RuRu 发表于 2005-10-8 07:25:00

http://fmfans.cn/viewthread.php?tid=24811

[ Last edited by 本多RuRu on 2005-10-11 at 07:43 AM ]

本多RuRu 发表于 2005-10-8 07:25:22

http://fmfans.cn/viewthread.php?tid=68513

本多RuRu 发表于 2005-10-8 07:29:10

http://fmfans.cn/viewthread.php?tid=82285&fpage=1&highlight=kelly%2Bca

xioye 发表于 2005-10-8 09:18:54

巨讨厌张掖的贴子

好好玩游戏的,结果变成数学题了

本多RuRu 发表于 2005-10-8 09:21:40

有些选材的东西想直接简化出来,这样大家挑人也方便
页: [1] 2
查看完整版本: 资料保存