|
楼主 |
发表于 2006-8-31 17:05:36
|
显示全部楼层
来自 中国–海南–海口
回复: [原创]受不了别人发布的烂突破金钱上限的插件,破例写一个
源代码:
//请注意canMoneyChange这个变量的运用,还有set_task(1.0, "MChange",38541,"",0,"b")这个函数,完整地解决了其他金钱无上限插件所遗漏的细节问题。
/*
amx_maxmoney 99999
amx_addmoney #uid addmoney //op给指定用户增加钱,其中addmoney为负数时扣钱
在其他插件里面可以增加下面的一个函数,用此函数来修改用户的钱数,修改幅度不受8000的限制,注意函数里面的变量money为增加的钱数
public addmoney(id, money){
if (is_user_connected(id)){
server_cmd("amx_addmoney #%i %i", get_user_userid(id), money)
server_exec()
}
}
调用方法:给id用户扣13000块钱
addmoney(id, -13000)
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#define MONEY_TIER 8000//请不要修改此数值,使用内置cs核心修改金钱函数变化不能超过8000
new g_usermoney[33]//记录用户的金钱总数
new gmsg_Money
new MAX_MONEY = 99999
new canMoneyChange = true
public plugin_init()
{
register_plugin("Zhongjia Unlimited Money","1.0","Zhongjia")
register_event("Money","MoneyChange","b")
register_concmd("amx_addmoney", "addmoney",ADMIN_LEVEL_A,"<authid, nick, or #userid> <? addmoney>")
MAX_MONEY = register_cvar("amx_maxmoney", "99999")
gmsg_Money = get_user_msgid("Money")
set_task(1.0, "MChange",38541,"",0,"b")
return PLUGIN_CONTINUE
}
public client_putinserver(id){
set_task(2.0, "_client_putinserver", id)
return PLUGIN_CONTINUE
}
public _client_putinserver(id){
if (!is_user_connected(id))
return
g_usermoney[id] = cs_get_user_money(id)//每个用户进来的时候,金钱初始化
}
//提供其他插件超过$8000的金钱变化接口,当然不超过8000也可以使用此接口,使用格式为
//server_cmd("amx_addmoney #%i %i", id, addmoney)其中addmoney是负数时为扣钱
//当然管理员op也可以直接在命令行里面执行 amx_addmoney #id addmoney
public addmoney(aid, level, cid){
if ( !cmd_access(aid, level, cid, 3) )
return PLUGIN_HANDLED
new Arg1[32]
new Arg2[9]
read_argv(1, Arg1, 31)
read_argv(2, Arg2, 8)
new money = str_to_num(Arg2)
new id = cmd_target(aid, Arg1, 2)
if (is_user_connected(id))
send_moneymsg(id, g_usermoney[id], g_usermoney[id] + money)
return PLUGIN_HANDLED
}
public MChange(){//检测遗漏事件的金钱变化
new m = 0
new omoney, nmoney
for(new i=1; i<33; i++){
if (is_user_connected(i)){
m = cs_get_user_money(i)
if (m != MONEY_TIER && m != g_usermoney){
omoney = g_usermoney
nmoney = (g_usermoney > MONEY_TIER) ? (g_usermoney - (MONEY_TIER - m)) : m
send_moneymsg(i, omoney, nmoney)
}
}
}
}
public MoneyChange(id){//cs核心金钱改变事件
if (canMoneyChange)
set_task(0.0, "_MoneyChange", id)
return PLUGIN_CONTINUE
}
public _MoneyChange(id){
if(!is_user_connected(id))
return
new n = (g_usermoney[id] >= MONEY_TIER) ? MONEY_TIER : g_usermoney[id]
send_moneymsg(id, g_usermoney[id], g_usermoney[id] + (cs_get_user_money(id) - n))
}
stock send_moneymsg(id, omoney, umoney){
//控制金钱变化在0--MAX_MONEY之间变化
umoney = (umoney < 0)? 0: umoney
umoney = (umoney > MAX_MONEY)? MAX_MONEY : umoney
//记录金钱总数(显示出来的)
g_usermoney[id] = umoney
//设置cs核心内置(不显示的)金钱总数
new b = (umoney < MONEY_TIER)? umoney : MONEY_TIER
canMoneyChange = false
cs_set_user_money(id, b, 0)
canMoneyChange = true
//显示金钱总数
message_begin( MSG_ONE , gmsg_Money , {0,0,0}, id)
write_long(omoney)
write_byte(0)
message_end()
message_begin( MSG_ONE , gmsg_Money , {0,0,0}, id)
write_long(umoney)
write_byte(1)
message_end()
} |
|