设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1742|回复: 11

[原创] 更正上次某人说的255血量位置     [复制链接]

Rank: 5Rank: 5

帖子
315
精华
0
声望
941 点
金币
251 Mold
被赞许
6 次
注册时间
2010-9-5
发表于 2010-9-12 09:53:28 |显示全部楼层
本帖最后由 MARS-MAN 于 2010-9-12 09:57 编辑

上次不知谁发的
原帖地址:http://www.modchina.com/viewthread.php?tid=48173&page=1
原帖内容:
Half-Life SDK V2.3  高手来看下啊!!!
  SDK下的文件夹Multiplayer Source\cl_dll
  health.cpp 该文件处理血量的显示
  其中有一句
  x = gHUD.DrawHudNumber(x, y, DHN_3DIGITS | DHN_DRAWZERO, m_iHealth, r, g, b);
  函数实现如下:
  int CHud :: DrawHudNumber(int x, int y, int iFlags, int iNumber, int r, int g, int b)
{
        int iWidth = GetSpriteRect(m_HUD_number_0).right - GetSpriteRect(m_HUD_number_0).left;
        int k;
        
        if (iNumber > 0)
        {
                // SPR_Draw 100's
                if (iNumber >= 100)   
                {
                         k = iNumber/100;
                        SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
                        SPR_DrawAdditive( 0, x, y, &GetSpriteRect(m_HUD_number_0 + k));
                        x += iWidth;
                }
                else if (iFlags & (DHN_3DIGITS))
                {
                        //SPR_DrawAdditive( 0, x, y, &rc );
                        x += iWidth;
                }

                // SPR_Draw 10's
                if (iNumber >= 10)
                {
                        k = (iNumber % 100)/10;
                        SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
                        SPR_DrawAdditive( 0, x, y, &GetSpriteRect(m_HUD_number_0 + k));
                        x += iWidth;
                }
                else if (iFlags & (DHN_3DIGITS | DHN_2DIGITS))
                {
                        //SPR_DrawAdditive( 0, x, y, &rc );
                        x += iWidth;
                }

                // SPR_Draw ones
                k = iNumber % 10;
                SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
                SPR_DrawAdditive(0,  x, y, &GetSpriteRect(m_HUD_number_0 + k));
                x += iWidth;
        }
        else if (iFlags & DHN_DRAWZERO)
        {
                SPR_Set(GetSprite(m_HUD_number_0), r, g, b );

                // SPR_Draw 100's
                if (iFlags & (DHN_3DIGITS))
                {
                        //SPR_DrawAdditive( 0, x, y, &rc );
                        x += iWidth;
                }

                if (iFlags & (DHN_3DIGITS | DHN_2DIGITS))
                {
                        //SPR_DrawAdditive( 0, x, y, &rc );
                        x += iWidth;
                }

                // SPR_Draw ones
               
                SPR_DrawAdditive( 0,  x, y, &GetSpriteRect(m_HUD_number_0));
                x += iWidth;
        }

        return x;
}
于是乎我打开cldll.dsw查看
可是我发现 貌似是说明当血液剩下15时 变成红色的.......
于是我继续查看
忽然发现..
还没有放到HL中查看 谁有空看下算了
可是没用.
因为CS的CLDLL和HL的大不相同
囧 CS又不开源...
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
a

使用道具 举报

Rank: 5Rank: 5

帖子
442
精华
0
声望
1334 点
金币
203 Mold
被赞许
0 次
注册时间
2010-5-1
发表于 2010-9-12 10:01:46 |显示全部楼层
额...源码?...LZ说啥米.

使用道具 举报

Rank: 5Rank: 5

帖子
315
精华
0
声望
941 点
金币
251 Mold
被赞许
6 次
注册时间
2010-9-5
发表于 2010-9-12 10:06:07 |显示全部楼层
关于255血量限制的说
a

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1124
精华
0
声望
1762 点
金币
585 Mold
被赞许
0 次
注册时间
2009-8-30

黑暗使者

发表于 2010-9-12 10:32:25 |显示全部楼层
这个东西难得搞 超过了255的血量 他也和实际不符合
已有 1 人评分声望 收起 理由
MARS-MAN + 1 ...你没抽吧 修改源码可以完全实现 ...

总评分: 声望 + 1   查看全部评分


↑ 全是我的

使用道具 举报

Administrator

荻野埃及

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
605
精华
0
声望
8563 点
金币
1495 Mold
被赞许
19 次
注册时间
2006-2-5
发表于 2010-9-12 10:47:17 |显示全部楼层
如果要4位数就得再写
  1.                 // SPR_Draw 1000's
  2.                 if (iNumber >= 1000)
  3.                 {
  4.                          k = iNumber/1000;
  5.                         SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
  6.                         SPR_DrawAdditive( 0, x, y, &GetSpriteRect(m_HUD_number_0 + k));
  7.                         x += iWidth;
  8.                 }
  9.                 else if (iFlags & (DHN_3DIGITS))
  10.                 {
  11.                         //SPR_DrawAdditive( 0, x, y, &rc );
  12.                         x += iWidth;
  13.                 }
复制代码

使用道具 举报

Rank: 8Rank: 8

帖子
933
精华
0
声望
1955 点
金币
1035 Mold
被赞许
5 次
注册时间
2009-5-28
发表于 2010-9-12 21:02:09 |显示全部楼层
又是SDK......= =,那个俊仔不是突破了么?
已有 1 人评分声望 收起 理由
MARS-MAN + 1 他放屁呢 貌似他还叫我师傅呢... 还有不要 ...

总评分: 声望 + 1   查看全部评分

AI怪物插件学习圣坛,让你快速学会制作大灾变和机甲风暴单机版!http://www.modchina.com/?fromuid=49624

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
582
精华
8
声望
10792 点
金币
3444 Mold
被赞许
20 次
注册时间
2009-4-28

星界财团

发表于 2010-9-16 12:41:12 |显示全部楼层
还有一点说明血量突破255不可能:

int CHudHealth:: MsgFunc_Health(const char *pszName,  int iSize, void *pbuf )
{
        // TODO: update local health data
        BEGIN_READ( pbuf, iSize );
        int x = READ_BYTE();

        m_iFlags |= HUD_ACTIVE;

        // Only update the fade if we've changed health
        if (x != m_iHealth)
        {
                m_fFade = FADE_TIME;
                m_iHealth = x;
        }

        return 1;
}

说明在传输时血量数据只占用一个字节,自然无法正确传输大于255的血量信息.

使用道具 举报

Rank: 5Rank: 5

帖子
465
精华
0
声望
1032 点
金币
113 Mold
被赞许
0 次
注册时间
2009-8-29
发表于 2010-9-17 17:59:34 |显示全部楼层
我知道了    原來              我在找的傳說中的原碼

使用道具 举报

Rank: 5Rank: 5

帖子
316
精华
0
声望
788 点
金币
94 Mold
被赞许
2 次
注册时间
2010-7-13
发表于 2010-11-20 18:56:16 |显示全部楼层
回复 1# MARS-MAN
你用什么打开的dll啊

使用道具 举报

Rank: 2

帖子
90
精华
0
声望
355 点
金币
57 Mold
被赞许
0 次
注册时间
2010-1-5
发表于 2010-11-21 16:58:57 |显示全部楼层
....很简单的,我内存提取过一次,结果出来虾米???
是 Ascii码!!!!!!不是数值
Ascii码大于255就无法用标准的函数库转换成数值了。。。小于255我试过可以

使用道具 举报

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

回顶部