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

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2754|回复: 16

[讨论] Half-Life SDK V2.3 之血量分析     [复制链接]

Rank: 7Rank: 7Rank: 7

帖子
1809
精华
0
声望
3294 点
金币
638 Mold
被赞许
0 次
注册时间
2010-2-13
发表于 2010-8-7 10:20:46 |显示全部楼层
本帖最后由 89701554 于 2010-8-7 10:23 编辑

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;
}
已有 1 人评分声望 金币 收起 理由
阿发 + 10 + 5

总评分: 声望 + 10  金币 + 5   查看全部评分

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1250
精华
0
声望
3577 点
金币
470 Mold
被赞许
45 次
注册时间
2010-7-13

可爱小猫

发表于 2010-8-7 10:39:45 |显示全部楼层
然后呢?有显示又怎样?话说一半就去厕所了吗?

使用道具 举报

Rank: 5Rank: 5

帖子
306
精华
0
声望
1063 点
金币
75 Mold
被赞许
0 次
注册时间
2010-7-5

图界之神

发表于 2010-8-7 10:43:08 |显示全部楼层
不用了,我已经破解血量了

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1809
精华
0
声望
3294 点
金币
638 Mold
被赞许
0 次
注册时间
2010-2-13
发表于 2010-8-7 10:44:33 |显示全部楼层
本帖最后由 89701554 于 2010-8-7 11:30 编辑

我正在试能不能在程序中载入client.dll,i不过可惜的是,这个DLL载入不了!!!
cl_dll_Instance = LoadLibrary("client.dll");
这个返回为空,,,,无法走下去!,,望高手分析!!!

原来这个Client.dll还调用了其它的DLL,呵呵,,

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1809
精华
0
声望
3294 点
金币
638 Mold
被赞许
0 次
注册时间
2010-2-13
发表于 2010-8-7 10:54:04 |显示全部楼层
回复 3# 俊仔


    厉害,,,使用插件还是什么???

使用道具 举报

Moderator

牛B闪闪的sandy

Rank: 8Rank: 8

帖子
1531
精华
1
声望
3174 点
金币
321 Mold
被赞许
16 次
注册时间
2009-9-13
发表于 2010-8-7 11:04:14 |显示全部楼层
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;
                }
关键

THE NAME OF WESKER!

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1809
精华
0
声望
3294 点
金币
638 Mold
被赞许
0 次
注册时间
2010-2-13
发表于 2010-8-7 11:09:13 |显示全部楼层
回复 3# 俊仔


    突破了发出来给我们用啊,,,呵呵,,别自己一个人用啊!!!!

使用道具 举报

Rank: 5Rank: 5

帖子
680
精华
0
声望
1301 点
金币
276 Mold
被赞许
0 次
注册时间
2009-8-23
发表于 2010-8-7 14:01:15 |显示全部楼层
不懂,


闲来逛逛.

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1926
精华
0
声望
2850 点
金币
380 Mold
被赞许
2 次
注册时间
2009-5-31
发表于 2010-8-7 15:09:39 |显示全部楼层
我觉得,只要把血量显示弄后一点,就可以显示1000血了。可能是那个血量标志SPR档着数字SPR,所以显示不出来。

使用道具 举报

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2010-8-7 15:37:43 |显示全部楼层
貌似问题不在这里 单看这段代码,百位完全可以是1-9 问题在于运行到这段代码时iNumber取值已经在0-255

PS: HL-sdk从哪下的?
此号待删除,不再登陆.

使用道具 举报

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

回顶部