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 }
*/ 上面注释的很清楚,如果有什么不明白的,可以提出来一起讨论讨论 不错啊! 点通就是好! 学习学习啊!!!! 不错不错,下来看看 上面注释的很清楚,如果有什么不明白的,可以提出来一起讨论讨论 楼主把//#include <hamsandwich>改回来!具体原因请看下面这个连接!
http://forums.alliedmods.net/showthread.php?t=42159 //#include <hamsandwich>
支持hamsandwich的可以帮注释符去掉。 有注释的最适合我们新手学习、修改的 感谢楼主的分享 好好学习天天向上