salik 发表于 2010-4-1 21:28:27

HUD显示队友金钱

本帖最后由 salik 于 2010-4-1 21:54 编辑

原作者K.K.Lv
后来做了三个版本的修改
压缩包里有详细的说明

源码
源码中的注释,我同事(师傅)发我的(因为我是刚学插件)
#include <amxmodx>
#include <cstrike>
//#include <hamsandwich>

#define NAME "show teammate's money"
#define VERSION "1.3"
#define AUTHOR "K.K.Lv"

new g_max_players
new g_teammate

public plugin_init()
{
        register_plugin(NAME, VERSION, AUTHOR)                                                // 注册插件
//        RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
        register_event("ResetHUD", "player_spawn", "be")                                // 注册用户事件,*重置玩家位置时会执行,例如一局开始或者用户重生时执行player_spawn函数
        register_clcmd("say /money", "show_money")                                        // 注册一个客户端命令,"say /money",执行show_money函数
        register_event("StatusValue", "show_teammate_money", "be", "1=2", "2!0")       
        register_event("StatusValue", "set_team", "be", "1=1")                                // 玩家加入队伍时执行
        g_max_players = get_maxplayers()                                                // 获取服务器设置的最大玩家数
}

public player_spawn(client)
{
        if (is_user_alive(client))                        // 判断用户是否活着的状态
        {
                set_task(1.0, "show_money", client)        // 设置一个TASK,延迟1.0秒后执行函授show_moeny,client为传递过去的用户ID,CS的用户ID为1-32,进入服务器时系统会自动将还没有用到的ID分配给你
        }
}

public show_money(id)
{
        new message                // 定义一个1024字节的变量
        new name                        // 定义一个32字节的变量
        new money                        // 定义一个为money的整型变量

        new len = format(message, sizeof message - 1, "本队伍队友金钱:^n")        // 格式化一句字符进message变量内,format为格式化命令
        for (new i = 1; i <= g_max_players; i++)                                // 循环1-最大玩家数
        {
                if (is_user_connected(i))                                        // 判断用户是否连接中
                {
                        if (cs_get_user_team(i) == cs_get_user_team(id))        // 对比执行命令的用户及循环出来的用户ID的队伍是否一样,cs_get_user_team为获取玩家队伍,返回1为T,返回2是CT,返回0是未知,返回3为观察者
                        {
                                money = cs_get_user_money(i)                        // 获取玩家金钱
                                get_user_name(i, name, 31)                        // 获取玩家名字
                                len += format(message, sizeof message - 1 -len, "%-22.22s: %d^n", name, money)
                        }
                }
        }
        set_hudmessage(100, 200, 0, 0.05, 0.35, 0, 0.02, 5.0, 0.1, 0.2, 2)
/*
set_hudmessage ( red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2, channel=4 )
前三个参数是用来控制颜色的;第四、第五个分别是水平位置和垂直位置,取值范围为0.0~1.0及-1.0,-1.0代表居中显示;第六个参数是效果,取值范围为0~2,为0时代表不使用效果,为1时代表打字效果,为2时代表闪烁效果;第七个参数是与效果相关的时间参数;第八个是持续时间即在屏幕上显示的时间,单位为秒;第九、第十个为淡入淡出时间;第十一个参数为频道,取值范围为1~4,即可以同时最多显示4个HUD,取其它值则是自动选择一个尚未使用的频道。
由此可以看出,要在屏幕上一直显示,holdtime设一个足够大的数就可以了。另外,应该对所有插件的HUD显示规划一下,看哪个频道显示什么,因为如果频道冲突的话,前面显示的HUD就会消失,显示后面的HUD。另外,当产生 ResetHUD 事件时,HUD内容也是会消失的。
*/

        show_hudmessage(id, message)                        // 发送HUD文字
}

public set_team(id)
{
        g_teammate = read_data(2)
}

public show_teammate_money(id)
{
        if(!is_user_bot(id) && is_user_connected(id))
        {
                new name
                new pid = read_data(2)
                new red = 0, green = 0
                       
                if (get_user_team(pid) == 1)
                        red = 255
                else
                        green = 255
               
                get_user_name(pid, name, sizeof name - 1)
                new money = cs_get_user_money(pid)
                if (g_teammate == 1)
                {
                        set_hudmessage(red, 50, green, -1.0, 0.60, 1, 0.01, 0.6, 0.01, 0.01, 8)
                        show_hudmessage(id, "Name:%s -- Money:%d", name, money)
                }
                else {
                        set_hudmessage(red, 50, green, -1.0, 0.60, 1, 0.01, 0.6, 0.01, 0.01, 8)
                        show_hudmessage(id, "Name:%s", name)
                }
        }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg936\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset134 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang2052\\ f0\\ fs16 \n\\ par }
*/

salik 发表于 2010-4-1 22:03:25

上面注释的很清楚,如果有什么不明白的,可以提出来一起讨论讨论

cs9527 发表于 2010-4-1 22:07:31

不错啊! 点通就是好! 学习学习啊!!!!

dearzww 发表于 2010-4-2 09:28:13

不错不错,下来看看

啊俊771 发表于 2010-4-2 11:56:25

上面注释的很清楚,如果有什么不明白的,可以提出来一起讨论讨论

LittleKu 发表于 2010-4-2 19:06:09

楼主把//#include <hamsandwich>改回来!具体原因请看下面这个连接!
http://forums.alliedmods.net/showthread.php?t=42159

salik 发表于 2010-4-4 14:11:12

//#include <hamsandwich>
支持hamsandwich的可以帮注释符去掉。

lala8888 发表于 2010-4-5 23:03:11

有注释的最适合我们新手学习、修改的

xiaogang4321 发表于 2010-4-10 15:39:40

感谢楼主的分享

xiaogang4321 发表于 2010-4-10 16:50:38

好好学习天天向上
页: [1] 2 3 4
查看完整版本: HUD显示队友金钱