我昨天下午下载了一个关于止痛药的模组,然后我又想找一个能修改技能点和技能等级上线的方法。
我从b站上找视频学习并开发了一个修改技能上限,经验和技能点的小模组。(还没测试呢,我是高中学历,21岁,没上大学)
于是我就开始有了想要学习代码和研究七日杀模组的想法。
于是我就打算从最简单的修改物品数值开始,于是我就挑选了我刚刚下载的止痛药修改模组,打算把他当作我学习代码和模组的第一步。
我的一切推理都基于这段代码和我能在网上查到的简易资料,不全面,不一定正确。就当作是推理小游戏了。
代码来源:
大佬潇_3的模组止痛药增强模组。感谢大佬!我将只放出一小部分代码用于推演学习!
这是模组页面的原话:
现在止痛药产生30%的免伤效果。为了防止前面提到免伤被叠到100%的情况,止痛药提供的免伤为独立乘区:
假如玩家服用止痛药前已经有90%免伤,那么服药后的免伤为 (1-(1-90%)*(1-30%)) = 93%;如果服药前没有其他免伤效果,则服药后会获得30%的伤害减免。
这个模组的效果是改变止痛药的减伤效果,改变和增强止痛药的加血效果,还能叠加buff,并且平衡了游戏的减伤效果。以下是部分代码。
<config>
<set xpath=”//buff[@name='buffDrugPainkillers']/effect_group[3]”>
</set>
<set xpath=”//buff[@name='buffDrugPainkillers']/effect_group[4]”>
<!– <passive_effect name=”GeneralDamageResist” operation=”base_add” value=”0.1″/>–>
<passive_effect name=”GeneralDamageResist” operation=”perc_add” value=”-0.3″/>
<passive_effect name=”GeneralDamageResist” operation=”base_add” value=”0.43″/>
<passive_effect name=”WaterChangeOT” operation=”base_subtract” value=”0.2″/> <!– 40/180 –>
<passive_effect name=”BuffResistance” operation=”base_add” value=”1″ tags=”buffInjuryStunned01CHTrigger,buffInjuryStunned00,buffInjuryStunned01,buffInjuryStunned01Shotgun,buffInjuryStunned02,buffInjuryStunned02Shotgun,buffInjuryStunned03,buffInjuryStunned03Shotgun”/>
</set>
</config>
以下是我的一些浅薄的理解,请各位大佬见谅,本人纯萌新,今天之前没有接触过任何代码。有任何看法是错误的,请各位大佬谅解并欢迎各位大佬提供建议。
看减伤部分,它修改了该buff的两个效果组(effect_group),特别是第三个和第四个效果组(索引从1开始)。
注意,第一个<set>标签清空了第三个效果组的内容(因为里面没有内容),而第二个<set>标签则修改了第四个效果组的内容。
那么看看这第四个效果组怎么样。代码如下:
<!– <passive_effect name=”GeneralDamageResist” operation=”base_add” value=”0.1″/>–>
<passive_effect name=”GeneralDamageResist” operation=”perc_add” value=”-0.3″/>
<passive_effect name=”GeneralDamageResist” operation=”base_add” value=”0.43″/>
其中GeneralDamageResist应该指伤害抵抗能力,原版七日杀的止痛药的减伤效果为0.1,改版之后就是0.3,和其他药物是独立乘区,由于本人不懂专业术语的定义,所以假设GeneralDamageResist代值伤害抵抗能力,那么base_add的计算方式为直接改变初始值的百分比,也就是源代码中的0.1的伤害减免。那么依据刚才第二行和第三行修改之后的代码我们进行假设验算实验。operation=”base_add代表基础数值叠加而非百分比,那么第三行代码就指伤害减免效果为0.43,那么有什么办法能同时达成单独使用效果为0.3,复合使用能符合以下式子 (1-(1-其他药物伤害减免百分比复合相加数)*(1-0.3))这两个条件呢?
先理解一下这个式子,这个式子可以简化为(1-(1-减免1)×(1-减免2)),拆分开,第二个和第三个1指的是受到伤害的百分比,如果是百分之百,那么敌人造成100的伤害,我就收到100的伤害,如果是百分之40,那么敌人造成100的伤害,我受到40的伤害,那么(1-减免)代表着我实际收到的伤害占原本伤害的百分比,那么两种效果相乘就是止痛药的独立乘区,是制衡游戏的手段之一。那么1减去这两种效果相乘就是双层否定,先计算实际受到伤害占原伤害的百分比的独立乘区,再用原伤害的百分比也就是百分之百减去计算完独立乘区的实际受到伤害占原伤害的百分比就是伤害减免的百分比。
而base_add代表基础数值叠加,但是这行代码的前面和第一行代码的前面是一样的,我怀疑是笔误,可能不生效。
我提出一种思路,总伤害计算是这样:最终伤害=原始伤害×(1-其他药物总减免)×(1-0.3)
还要同时满足两个条件:
1,单独使用时,其他药物减免为0,最终伤害=原始伤害×1×0.7,减免百分之30。
2,与其他药物一起使用时(效果同时存在时)(假设总减免为R),最终伤害=原始伤害×(1-R)×0.7。
以下是我搜索到的可能有用的代码句式和计算方式(不知道叫什么,姑且这么称呼吧)
可以用if句式(我是河北的,来自于高中发了但是没用的计算机课本),然后是独立乘区计算(dr_mult),可以用HasOtherDrugs来检查是否有其他药物生效,检查完之后如果是,那么使用独立乘区,如果不是,那么直接使用perc_add百分比加法。
一下是我的小作业
<!– 假设游戏支持条件语句 –>
<if condition=”HasOtherDrugs”>
<passive_effect name=”DamageResistance” operation=”dr_mult” value=”0.7″/>
</if>
<else>
<passive_effect name=”DamageResistance” operation=”perc_add” value=”-0.3″/>
</else>
但是七日杀药物太多,buff太多,不好判断,所以可以用另一种方式。
将效果作用域一个独立属性或利用乘法操作。
首先我搜到,七日杀有
“DamageModifier”等属性,且
“perc_add”在特定条件下可实现近似独立乘区的乘法叠加。
由于七日杀系统支持很复杂的条件判断,
所以可以尝试为止痛药的效果添加一个条件要求
例如检查玩家身上是否存在其他特定药物的buff。
– 当没有其他药物时,触发一个提供30%减免的效果(比如用
“perc_add”直接加到总减免上)。
– 当存在其他药物时,触发另一个效果,这个效果可能通过影响
“DamageModifier”或其他机制来实现独立乘区的30%减免。
这个相当复杂,我先消化一下上面的东西,也很晚了,到这里我连思考加搜索资料已经是宇宙银河系太阳系地球亚洲中国北京时间2025年10月1号早上4:40了,虽然我才21岁,但是我要是再不睡我就要猝死了,哈哈。平时还要上班,早九晚七,也就十一放假敢这么玩,哈哈!
前面的的区域,以后再来探索吧!迫真······










支持,鼓励!
一个热爱七日杀生存模组开发和UI设计的mod制作爱好者
很好很好,我也是从其他模组上慢慢摸索修改一些自己喜欢的数据,比如弓箭枪械耐久啊,每一级的伤害和可添加模组的数量,物块伤害什么的,加油!