cafeguest 发表于 2019-9-4 15:30

已知几个dll修改位置,攻速,攻击力,掉率,金币,技能点,经验,

本帖最后由 cafeguest 于 2019-9-8 11:24 编辑

嘛,又一个暗黑刷刷刷游戏,怎么可以不修改



工具:dnspy,但是反编译会报错,所以所有修改基于IL改公式数值


左键攻速
Zyklus.PlayerPlayerBaseGetDelayBetweenPrimaryAttacks()右键编辑IL 把1改成0.5就是两倍


右键攻速
同上,GetDelayBetweenSecondaryAttacks()


升级的时候崩怪的伤害
LevelUpDamage()   
this.level_up_adapter_.pDamage.pValue.SetMode_Const(2f * this.GetPrimaryAttackDamageStat().GetValue());   2改成200什么的


掉率
zuklus.LootLootDropperComponent
Drop函数,133行
if (RandomUtility.TryChance(this.drop_paramters_chance_.pItem2.GetValue() * 10f))
*10f是后加的倍率
IL是
ldc.r4 10
mul
当然也可以写死为true
这块是掉不掉东西,没说什么东西,这个过了还有第二次roll,太低了也只会掉钱,可能俩都得改
Zyklus.LootLootStaticDataContainer第二个Drop函数
float num = UnityEngine.Random.Range(0f, 1f);
把1改小,降低掉钱几率,具体改多小,保持大于你要的东西掉率之和就行,具体是多少不好说
随机举例:一个箱子的掉落表里,0-0.1是掉钱0.1-0.2掉血瓶,改成0-0.1就只掉钱,0-0.2就是一半一半,但是后面如果还有一个0.2-0.3掉装备,那么必须改成0-0.3才能出装备。超过0.3的未定义都是掉钱。至于有几段,分别代表是什么,分别是多宽,代码里看不到,得看具体箱子的掉落表。
这里只是把两次roll的机制找到了。如果不打算弄清楚就只改第一个,乘以30,包你满地金币血瓶符文。

金币数量
DropCommonPart函数
num3 = Mathf.FloorToInt(UnityEngine.Random.Range(0.9f, 1.1f) * (float)quantity / (float)num);
0.9-1.1倍改大即可
还有一处需要修改,改成乘以一个立即数就可以。它算法是如果钱多就掉好几堆,前面几堆上限固定,最后一堆就是上面那行。我是把值乘以自己了,原来掉7块就掉49块,感觉有点多。

升级技能点
Zyklus.Player   PlayerLevelStatRaiseOnLevelGained
this.total_ability_point_stat_.AddValue(1f);
this.ability_point_stat_.AddValue(1f);
1改10

经验倍数
Zyklus.Stat   StatStaticDataContainerAddXPDirect
float modification_value = (float)xp_value * xp_gain;
后面乘以倍数即可


怒气获取倍数
Zyklus.Stat   StatStaticDataContainerGetRageValue
return (num + num2) * 3f;
3是后加的倍率





符文耐久度不减
Zyklus.Rune RuneComponent UseRune()
this.current_durability_ -= 0f;
或者直接改类成员private float durability_use_rate = 0f;



弓妹的站撸技能伤害倍数
Zyklus.Player Linda ProgressStadyAim()
把_+_*_后面加一个*30倍就可以了,一箭正常,二箭死牛,三剑日天,遇事不决站着撸。。。我就是奥法!



法师小妹的追踪弹数量
Zyklus.player Lucy OnPrimaryAttackHit()
for (int i = 0; i < (int)this.currentExtraShotCount_ * 8; i++)


大儿子Mark的盾消耗速度
Zyklus.player Mark UpdateShieldOnHit()
-7和-3.5成倍改小

大儿子Mark盾相关的增益
UpdateProtectiveShield()
盾的最大值是50,改这个数值可以增减几种效果
成倍补充盾                this.number_of_protective_shields_ += shield_stack;
改盾上限(如果改了请注意修改这个文件的所有地方50保持一致)                this.number_of_protective_shields_ = Mathf.Clamp(this.number_of_protective_shields_, 0, 50);
设置能量条                base.pPlayerEnergyComponent.SetPlayerEnergyByFactor((float)this.number_of_protective_shields_ / 50f);
对左键伤害的增益                this.primary_damage_shield_modifier.SetValue(1f + (float)this.number_of_protective_shields_ / 50f * this.shield_damage_multiplier_.GetValue());
对免伤的增益                this.shield_physical_reduction_modifier.SetValue((float)this.number_of_protective_shields_ / 50f * this.shield_level_upgrade_stat_.GetValue());

大儿子Mark左键技能距离半径加倍
Update()
Collider2D[] array = Physics2D.OverlapCircleAll(vector, this.cast_radius_.GetValue() * 3f, LayerMask.GetMask(new string[]
                {
                  "EnemyHitable",
                  "OtherHitable"
                }));
39    0087    ldarg.0
40    0088    ldfld    class ['Assembly-CSharp-firstpass']Altar.Data.IStat Zyklus.Player.Mark::cast_radius_
41    008D    callvirt    instance float32 ['Assembly-CSharp-firstpass']Altar.Data.IStat::GetValue()
新增42    0092    ldc.r4    3
新增43    0097    mul
44    0098    ldc.i4.2
45    0099    newarr    System.String


小儿子kevin连击加攻速
Zyklus.Player KevinFrenzyComponent GetCurrentAttackSpeedFrenzyBonus()
return 3f + this.frenzyBonusUpgrade.GetValue() * (float)this.pCurrentStackCount * num;
1f改成3f,基础速度是3倍。如果在后面乘以一个倍数就是连击加成增倍。




以上修改可能无效,还在摸索欢迎分享


zhongzhi1017 发表于 2019-9-4 15:33

看着好牛逼!就是不会用。。。。。。。。。。

yy05555 发表于 2019-9-4 16:02

关键不知道在那

小黑蛇 发表于 2019-9-4 18:24

在哪里找到这些文件?

哦哈悠 发表于 2019-9-4 20:32

试了一下好像爆率修改 没效果

cafeguest 发表于 2019-9-4 21:01

哦哈悠 发表于 2019-9-4 20:32
试了一下好像爆率修改 没效果

zuklus.LootLootDropperComponent
Drop函数,133行
if (RandomUtility.TryChance(this.drop_paramters_chance_.pItem2.GetValue() * 10f))
*10f是后加的倍率
IL是
ldc.r4 10
mul
这块是掉不掉,这个过了还有一个roll,太低了也只会掉钱,可能俩都得改,后面的roll就是主贴说的那个


wab6234033 发表于 2019-9-4 22:22

楼主发一下你用的工具啊

yuz5432 发表于 2019-9-4 22:37

么看着好牛B,就是看不懂

rakong 发表于 2019-9-4 23:28

楼主发个你改好的文件来   
我们懒
直接覆盖元文件省心

258CYY 发表于 2019-9-5 00:14

这个改那个dll啊

258CYY 发表于 2019-9-5 01:58

大佬我试了一下,减cd那个貌似没用啊

cafeguest 发表于 2019-9-5 07:18

258CYY 发表于 2019-9-5 01:58
大佬我试了一下,减cd那个貌似没用啊

是的,而且游戏分物品CD和人物技能CD,改起来挺麻烦的,我再找找省事的改法
Lucy小女儿的技能CD是这么写的
this.tornado_cooldown_ = base.pStatsComponent.FindStat(StatEnum.LucySecondaryAttCoolDown);
this.decoy_cooldown_ = base.pStatsComponent.FindStat(StatEnum.LucyTrapCooldown);
this.blast_cooldown_ = base.pStatsComponent.FindStat(StatEnum.LucyArcaneBlastCoolDown);
要想乘以一个倍数,需要加一个
this.tornado_cooldown_.pModification.AddModifier(new StatModifier(StatModifierType.Multiplying, string.Empty, 0.25f, -1));
转换成IL大概长这样(new的部分)
2    0006    ldarg.0
3    0007    ldc.i4.1
4    0008    ldsfld    string System.String::Empty
5    000D    ldc.r4    1.3
6    0012    ldc.i4.m1
7    0013    newobj    instance void ['Assembly-CSharp-firstpass']Altar.Data.StatModifier::.ctor(valuetype ['Assembly-CSharp-firstpass']Altar.Data.StatModifierType, string, float32, int32)
8    0018    stfld    class ['Assembly-CSharp-firstpass']Altar.Data.StatModifier JoeyLLLLAttack::modifier



哦哈悠 发表于 2019-9-5 10:53

cafeguest 发表于 2019-9-4 21:01
zuklus.LootLootDropperComponent
Drop函数,133行
if (RandomUtility.TryChance(this.drop_paramters_ ...

谢谢   改到了

wwwdurong 发表于 2019-9-5 15:34

cafeguest 发表于 2019-9-5 07:18
是的,而且游戏分物品CD和人物技能CD,改起来挺麻烦的,我再找找省事的改法
Lucy小女儿的技能CD是这么写 ...

改哪个文件啊

cafeguest 发表于 2019-9-5 17:53

wwwdurong 发表于 2019-9-5 15:34
改哪个文件啊

Assembly-CSharp.dll
还能改哪个呀


258CYY 发表于 2019-9-5 19:57

本帖最后由 258CYY 于 2019-9-5 19:58 编辑

大佬,修改小妹技能出现这个Q:\QQ图片20190905195549.png

wwwdurong 发表于 2019-9-7 14:23

cafeguest 发表于 2019-9-5 07:18
是的,而且游戏分物品CD和人物技能CD,改起来挺麻烦的,我再找找省事的改法
Lucy小女儿的技能CD是这么写 ...

楼主,攻击速度只对弓箭手生效,那个打拳的大儿子改攻速没用,能否指点一下

cafeguest 发表于 2019-9-8 11:21

wwwdurong 发表于 2019-9-7 14:23
楼主,攻击速度只对弓箭手生效,那个打拳的大儿子改攻速没用,能否指点一下
...

你说的是小儿子kevin的那个连击加攻速吧?


Zyklus.Player KevinFrenzyComponent GetCurrentAttackSpeedFrenzyBonus()
return 3f + this.frenzyBonusUpgrade.GetValue() * (float)this.pCurrentStackCount * num;
1f改成3f,基础速度是3倍


lirunwei 发表于 2019-9-8 23:31

楼主,请问下,我打开文件,不改数值,点编辑都会报错。异常信息是:
严重程度        代码        描述        文件        行
错误        CS0592        Attribute 'DebuggerBrowsable' is not valid on this declaration type. It is only valid on 'property, indexer, field' declarations.        main.cs        21

cafeguest 发表于 2019-9-9 09:44

lirunwei 发表于 2019-9-8 23:31
楼主,请问下,我打开文件,不改数值,点编辑都会报错。异常信息是:
严重程度        代码        描述        文件        行
错误        CS0 ...

不要走反编译-编译,直接改汇编

lirunwei 发表于 2019-9-9 11:53

cafeguest 发表于 2019-9-9 09:44
不要走反编译-编译,直接改汇编

谢谢,明白了!:D

孤趷 发表于 2019-9-13 17:38

楼主,拿锤子的怎么改攻速,左键攻速改完不好使

cafeguest 发表于 2019-9-14 08:27

孤趷 发表于 2019-9-13 17:38
楼主,拿锤子的怎么改攻速,左键攻速改完不好使

Joey的锤子不是攻速低,是前摇高,但是攻击动画有固定播放速度,我没找到能改的地方

138532 发表于 2019-9-15 23:49

感觉我又回到了缺氧版面。

soullinks 发表于 2019-9-17 14:18

怒气获取倍数
Zyklus.Stat   StatStaticDataContainerGetRageValue
return (num + num2) * 3f;
3是后加的倍率
看不懂,怎么在后面加3F?

cafeguest 发表于 2019-9-17 14:36

soullinks 发表于 2019-9-17 14:18
怒气获取倍数
Zyklus.Stat   StatStaticDataContainerGetRageValue
return (num + num2) * 3f;


原来的公式是return num + num2;,想要的效果是在加法的结果上再乘一次,再返回。
选中这一行,右键打开IL编辑,可以看到原来的汇编大概是
38    0092    ldloc.0   把第一个加数加载到栈上

39    0093    ldloc.1   把第二个加数加载到栈上
40    0094    add    把栈顶的两个数相加,放再栈顶
41    009B    ret   把栈顶的数作为返回值返回

也就是在最后ret之前,对栈顶的num + num2再处理一下,于是选择ret这一行,右键,在选区前添加指令,插入两行新语句,因为我们准备添加两句
41    0095    ldc.r4    10   ldc指令把10这个立即数加载到栈顶,因为是float类型四字节所以是r4
42    009A    mul    把栈顶的两个数相乘,结果放栈顶,效果就是之前的加法结果与上一行的立即数相乘

最后结果:

38    0092    ldloc.0
39    0093    ldloc.1
40    0094    add
41    0095    ldc.r4    10
42    009A    mul
43    009B    ret
保存以后就可以在代码里检查变化
return (num + num2) * 10f;




需要注意一下要修改的公式是int还是float,如果是int需要用ldc.i4


郎咸平 发表于 2019-9-19 12:22

怎么改钱啊,具体说一下,我改了没效果

x2innet 发表于 2019-9-19 16:49

大佬,你那个钱怎么改的?
只改那num3 那两个参数不行吧,你说还有一处要改,改哪个地方?

cafeguest 发表于 2019-9-19 17:42

x2innet 发表于 2019-9-19 16:49
大佬,你那个钱怎么改的?
只改那num3 那两个参数不行吧,你说还有一处要改,改哪个地方? ...

                if (i != num - 1)
                {
                  num3 = Mathf.FloorToInt(UnityEngine.Random.Range(9f, 11f) * (float)quantity / (float)num);
                }
                else
                {
                  num3 = quantity * quantity;
                }


else的部分:

37    0055    br    42 (0061) ldloc.2
38    005A    ldarg.s    quantity (4)
39    005C    ldarg.s    quantity (4)
40    005E    mul
41    005F    stloc.s    V_4 (4)



cafeguest 发表于 2019-9-19 17:43

郎咸平 发表于 2019-9-19 12:22
怎么改钱啊,具体说一下,我改了没效果

                if (i != num - 1)
                {
                  num3 = Mathf.FloorToInt(UnityEngine.Random.Range(9f, 11f) * (float)quantity / (float)num);
                }
                else
                {
                  num3 = quantity * quantity;
                }


else的部分:

37    0055    br    42 (0061) ldloc.2
38    005A    ldarg.s    quantity (4)
39    005C    ldarg.s    quantity (4)
40    005E    mul
41    005F    stloc.s    V_4 (4)




页: [1] 2
查看完整版本: 已知几个dll修改位置,攻速,攻击力,掉率,金币,技能点,经验,