3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 3734|回复: 0
打印 上一主题 下一主题

[补丁] 沉船研究第五弹——健康度研究取得进展,永远健康mod放出

[复制链接]

7

主题

703

帖子

756

积分

超级玩家

Rank: 5Rank: 5

贡献度
43
金元
5839
积分
756
精华
0
注册时间
2006-7-8
跳转到指定楼层
主题
发表于 2009-7-12 23:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天研究的项目是健康度,本贴研究的目的是避免主角在和敌人PK到重伤后落下终身残废。本次修改针对的文件是游戏目录Programcharacters下面的RPGUtilite.c文件。

首先研究的是每日健康度的算法:
    用Ultraedit-32打开RPGUtilite.c,在1500行左右(我的是1527行起,因为之前的改动,这个行数可能不一样)有这样一段语句。
void SetNewDayHealth()
{
    ref mainChr = GetMainCharacter();

    float maxhp = stf(mainChr.chr_ai.hp_max);
    float damg  = stf(mainChr.Health.Damg);
    int   add   = 0;

    mainChr.Health.Damg = 0.0;

    if (IsCharacterPerkOn(mainChr, "Medic"))
    {
        add = 1;
    }
    if (damg >= (maxhp / 1.5) )
    {
        if ((damg / maxhp) > add)
        {
            AddCharacterHealth(mainChr, -damg / maxhp + add);
        }
    }
    else
    {
        if (!IsEntity(worldMap)) // 礤 磬 赅痱?
        {
            AddCharacterHealth(mainChr, 1 + add);
        }
        else
        {
            AddCharacterHealth(mainChr, 0.5 + add / 2.0);
        }
    }
}

我分析了这段语句,它的含义大致如下:
如果本日收到的伤害>=生命值上限/1.5,且本日伤害/生命值上限>add,(这里add在两种不同的情况下值可能是0或者1),则
健康度=原健康度—受到伤害/生命值上限+add。
否则的话在大地图上健康度=原健康度+0.5+add/2;不在大地图上的话健康度=原健康度+1+add。

因此我们可以得到这样一个结论:如果我们把第一个条件设的更苛刻一点,或者修改健康度的变化公式,我们的主角就会变得永远健康。
因此我们有两种改法:
第一种可以这么改

if (damg >= (maxhp / 1.5) )
改为
if (damg >= (maxhp * 1000) )
这样除非你一天之内受到你生命值1000倍的伤害,否则你就不会受伤。
第二种改法可以这么改。

AddCharacterHealth(mainChr, -damg / maxhp + add);
改为
AddCharacterHealth(mainChr, 0 + add);
这样的话就把受伤后减健康度的算法变成了受伤后依旧增加健康度。

*******************************************************
然后是每周健康度的算法:
      刚才那一段的后面接下来是这么一段:
void SetNewDayHealthMax()
{
    ref mainChr = GetMainCharacter();

    float maxhp = stf(mainChr.chr_ai.hp_max);
    float damg  = stf(mainChr.Health.weekDamg);

    mainChr.Health.weekDamg = 0.0;

    if (damg > (maxhp * 3.5))
    {
        AddCharacterMaxHealth(mainChr, -1);
    }
}

这段比较简单,就是本周受到的伤害>生命值上限*3.5的话,生命值上限减1单位(这个地方不是很确定是生命值还是健康值上限,不过没关系,不影响修改)。
可以这么改:
把 if (damg > (maxhp * 3.5))改为: if (damg > (maxhp * 1000))
或者把AddCharacterMaxHealth(mainChr, -1);改为:AddCharacterMaxHealth(mainChr, 0);

我初步测试了一下,改完之后效果确实比较明显。希望大家来进一步测试。

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

      看到大家可能不是很了解健康的概念,所以我来解释一下。这里要感谢NoWater兄,关于每周伤害那个地方是他帮我研究清楚具体是指哪个量的。好了,闲话少说,进入正题:

      首先,如果你某天受到的伤害比较多,比如说你去城市里面肆虐了一番,或者去巴拿马杀了个三进三出,那么等你第二天起床时,你会发现你的健康值会减少。如果健康度持续下降,很快你会进入不健康的状态,这是你的基础属性会下降,直到你去妓院里面睡上几天康复为止(很奇怪,妓院=医院),但在这个康复过程中如果你升级了,那么很不幸,你的生命值上限会比正常状态下升级永久损失一部分。如果这些你不介意的话,那好,请看下面。如果你在一周内受到的伤害超过一定值后(系统默认是生命上限的3.5倍),你的健康值上限会永久下降一点(这里感谢NoWater兄),而且这个是永久损失,无法弥补回来的,这样持续损失下去,你会进入“亚健康”状态,也就是所谓的终身残废。所以为了你的主角活得更好,还是让主角保持健康吧。


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

如果不想看上面的研究内容的话可以直接下载我附件里面的补丁覆盖原文件,文件位置是:游戏目录Programcharacters下面的RPGUtilite.c文件。(附件文件里面整合了前一个帖子的完美鼠神宝物,如果需要调出对应的宝物的快捷键的话请去我的第四弹帖子里面下载对应的debug.c文件,不需要那个功能的话可以只下这个文件)

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

网盘下载地址:

http://www.rayfile.com/files/d336d9fd-6ecb-11de-9329-0014221b798a/

http://d.namipan.com/d/e1dff45b3e551cd942fe947b4bf3bd918592368c573b0000

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

下面是广告时间:

第一弹——  一干二净之洗劫大法!(告诉你如何把敌船抢得一干二净)
http://3dmgame.chnren.com/bbs/showtopic-765023.html

第二弹——  沉船之城全城市ID代码大全(让你能在所有沉船的城市间自由传送)
http://3dmgame.chnren.com/bbs/showtopic-770120.html

第三弹——  沉船之城最简单的改船方案,让你随心所欲改船!(不用研究debug也能改船)
http://3dmgame.chnren.com/bbs/showtopic-770124.html

第四弹——  最强宝物登场!让你拥有完美副官(简简单单让你主角和所有副官属性全满)
http://3dmgame.chnren.com/bbs/showtopic-770127.html

第五弹——健康度研究取得进展,永远健康mod放出(让你的主角和副官长命百岁,远离疑难杂症)
http://3dmgame.chnren.com/bbs/showtree.aspx?topicid=771329&postid=7931492

第六弹——忠诚度研究重大突破,完美忠诚mod放出(你的副官再也不会弃你而去了)
http://3dmgame.chnren.com/bbs/showtopic-771331-1.html#7931516

RPGUtilite.rar

14.83 KB, 下载次数: 41

rar

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-3-29 02:25 , Processed in 0.661521 second(s), 18 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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