回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码
测试研究, 自动转F是个好东西回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码
Post by baili1258[隐藏内容]
在次感谢 我试试希望能成功
回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码
对了 楼主能不能把这插件改下?
把限制枪械的功能该成限制杀人数量?
如:没开SXE的玩家杀人数达到多少自动KICK
// 0(关闭功能) 1=只能用刀,2=禁止某些主枪
no_sxei_wpnlimit 1
//是否打开自动踢出功能。No sXe 玩家进入,在规定时间内自动被踢出
//设置限制时间,秒(默认120秒),0 为关闭自动踢出功能
no_sxei_timelimit 120
/*
sXe required (No sXe 提示插件)(AMXX 1.76C)
来源:老友记<http://cs-friends.com.cn>
iG_os
// 插件说明:
* 当玩家没有安装 sXe Injected 反作弊客户端,进入服务器
* 则显示提示信息,并可以设置武器限制(刀),及定时踢出设置。
* sXe Injected Anti-Cheat 反作弊(服务器端/客户端)
* 官方主页:http://www.sxe-injected.com/
// 可用设置参数:
1:是否打开限制武器功能。当武器限制打开时,No sXe 玩家进入只能用刀,并强制丢掉C4
no_sxei_wpnlimit 1 // 0(关闭功能) 1=只能用刀,2=禁止某些主枪
2:是否打开自动踢出功能。No sXe 玩家进入,在规定时间内自动被踢出
no_sxei_timelimit 120 // 设置限制时间,秒(默认120秒),0 为关闭自动踢出功能
注意:插件设置仅在 sxei 服务器参数 __sxei_required 0 (不限制 sxei 客户端)时才工作
* 因为 sXe 没有提供允许插件可以检查玩家是否安装 sXe/版本的功能,但会自动更改没有启动 sXe 玩家的名字
* 所以,本插件检测当玩家名字包含 "" 则视为没有安装 sXe 进入
更新日志::
2007-2-25 v1.0
2007-2-27 v1.1
bug 修正:在玩家被提出前换图,对玩家检查无效的bug
bug 修正:no_sxei_wpnlimit 设置相反了
2007-2-27 v1.2
修改检测名字的过程
2007-2-27 v1.3
修正武器禁止问题
2007-2-27 v1.4
尝试解决挂机问题??
2007-2-28 v1.5
修正改检查C4的方法
2007-2-28 v1.6
修正丢C4判断, 精简了一些代码
2007-3-5 v2.0
增加允许使用特定武器(手枪)可以自定义使用武器类型,详改代码。
*/
/* ############################################################################################# */
/* ######## 可以修改以下引号内的提示信息,记得保存为 UTF-8(不带签名),然后再重新编译 ######### */
// 提示信息内容设置,(内容不要太长)
new const HUDMSG1[] = "老友记提示::需要你安装 sXe 反作弊才允许正常游戏"
new const HUDMSG2[] = "sXe 下载地址: http://www.sxe-injected.com/"
new const HUDMSG3[] = "如有疑问请看: http://cs-friends.com.cn/bbs"
// 提示信息显示位置设置
#define HUD_Xpos -1.0
#define HUD_Ypos 0.60
// 提示信息显示颜色设置
#define HUD_RED 255
#define HUD_GREEN 10
#define HUD_BLUE10
/* ########################################### 可以修改终止 #################################### */
/* ############################################################################################# */
/************** 以下内容如果你不确定,请不要修改 **************/
new const PLUGINNAME[] = "sXe required"
new const VERSION[] = "2.0.16"
new const AUTHORS[] = "iG_os"
#include <amxmodx>
#include <fakemeta>
new pCVAR_wpnlimit
new pCVAR_timelimit
new bool:g_bNO_sXe// 是否为 No sXe 玩家标记
new Float:g_fKickTime// 踢出时限
new g_szInfo
#define DISPLAYMSGID 56432
// 执行插件初始化
public plugin_init()
{
// 注册插件名字/版本/作者名字
register_plugin(PLUGINNAME, VERSION, AUTHORS)
// 注册系统武器消息
register_event("CurWeapon", "SwitchWeapon", "be", "1=1")
// 注册玩家信息更换消息
register_forward(FM_ClientUserInfoChanged, "FM_client_userinfochanged")
// 玩家捡到出生时获得 C4 日志消息
register_logevent("logevent_GotTheBomb", 3, "2=Spawned_With_The_Bomb")
// 玩家捡到 C4 日志消息
register_logevent("logevent_GotTheBomb", 3, "2=Got_The_Bomb")
// cvars 参数注册
pCVAR_wpnlimit = register_cvar("no_sxei_wpnlimit", "1") // 是否打开限制武器功能
pCVAR_timelimit = register_cvar("no_sxei_timelimit", "120") // 是否打开自动踢出功能
new sz_SXE_VER
get_cvar_string("__sxei_clt_ver", sz_SXE_VER, 4)
formatex(g_szInfo, 511, "注意你没有安装 sXe v%s 反作弊工具客户端^n%s^n%s^n%s", sz_SXE_VER, HUDMSG1, HUDMSG2, HUDMSG3)
// 延时检查服务器参数
set_task(2.5, "delay_load")
}
// 执行延时检查
public delay_load()
{
// 检查服务器参数 __sxei_required = ?
if (!cvar_exists("__sxei_required") || (get_cvar_num("__sxei_required") != 0) )
pause("ad") // 如果 __sxei_required 不等于 0 ,则暂定插件运作,节省资源
}
// 玩家进入消息
public client_putinserver(id)
{
// 初始化设置
g_bNO_sXe = false
// 设置踢出时间上限
g_fKickTime = get_gametime() + get_pcvar_num(pCVAR_timelimit)
// 进行名字检查
new szName
get_user_name(id, szName, 31)
checkname(id, szName)
}
// 玩家离线消息
public client_disconnect(id)
{
// 清除可能存在的任务
remove_task(id)
remove_task(id+DISPLAYMSGID)
g_bNO_sXe = false
g_fKickTime = -1.0
}
// 名字更改消息
public FM_client_userinfochanged(id, iBuffer)
{
// 玩家是否依然在线?
if (!is_user_connected(id))
return FMRES_IGNORED // 离开,则返回
// 获取名字改变情况
static szOldName, szNewName
get_user_name(id, szOldName, 31)
engfunc(EngFunc_InfoKeyValue, iBuffer, "name", szNewName, 31)
// 检查是否改名字?(Death change name by VEN)
if (equal(szNewName, szOldName)) // 如果名字没有改变,则返回
return FMRES_IGNORED
// 进行名字检查
checkname(id, szNewName)
// * CS 默认状态下,如果玩家在死亡状态,更换名字是不被执行的
// 所以在这里检查,如果玩家在死亡状态更换名字,则发送一次名字更换消息
// 让名字更换,在死亡状态下也可以正常显示/执行,方便查看玩家名字
if (!is_user_alive(id))
{
message_begin(MSG_BROADCAST, get_user_msgid("SayText"))
write_byte(id)
write_string("#Cstrike_Name_Change")
write_string(szOldName)
write_string(szNewName)
message_end()
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
// 执行名字检查
checkname(id, szName[])
{
// 名字包含 "" ,被视为没有安装 sXe Injected 客户端进入游戏
if (contain(szName, "") != -1)
{
new TaskID = id+DISPLAYMSGID
// 标记玩家为没有安装 sXe
g_bNO_sXe = true
// 清除可能已经存在的任务
if (task_exists(TaskID)) remove_task(TaskID)
// 启动一次提示任务
set_task(random_float(2.0,6.0), "show_msg_one", id)
// 启动无限循环检查/提示任务
set_task(15.0, "check_player_static", TaskID, _, _, "b")
}
}
// 玩家持武器消息处理
public SwitchWeapon(id)
{
// 是否为 NO-sXe 玩家?是否打开限制武器功能?
if (!g_bNO_sXe)
return PLUGIN_CONTINUE
static wpn
wpn = read_data(2)
weapon_limited(id, wpn)
return PLUGIN_CONTINUE
}
// 玩家获得C4消息
public logevent_GotTheBomb()
{
// 获得玩家id
new szLoguser, szName
read_logargv(0, szLoguser, 79)
parse_loguser(szLoguser, szName, 31)
new id = get_user_index(szName)
// 是否为 NO-sXe 玩家?是否打开限制武器功能?
if (g_bNO_sXe && get_pcvar_num(pCVAR_wpnlimit))
{
// 强制丢掉C4
client_cmd(id, "weapon_c4")
client_cmd(id, "drop")
}
}
// 定时提示/检查任务
public check_player_static(param)
{
new id = param - DISPLAYMSGID
if (is_user_connected(id))
{
// 是否打开限制武器功能?
if (get_pcvar_num(pCVAR_wpnlimit) && is_user_alive(id))
{
// 玩家是否有c4?
if (user_has_weapon(id, CSW_C4)){
client_cmd(id, "weapon_c4") // 有c4,则强制丢掉C4
client_cmd(id, "drop")
}
// 玩家当前武器是否为禁止项类型?
new wpn, iClip, iAmmo
wpn = get_user_weapon(id, iClip, iAmmo)
weapon_limited(id, wpn)
}
// 是否打开定时踢出功能?是否超时?
if ( (get_gametime() > g_fKickTime) && (get_pcvar_num(pCVAR_timelimit) > 0) )
{
client_cmd(id, "spk events/tutor_msg") // 播放提示音
kick_player(id) // 超时 kick player
remove_task(param)
return
}
// 显示提示信息
show_msg_one(id)
}
else remove_task(param)
}
// 显示提示信息
public show_msg_one(id)
{
// 玩家是否依然在线?
if (!is_user_connected(id))
return // 离开,则返回
static szKnifeOnlyMsg, szTimeLimitMsg
// 是否打开武器限制?
if (get_pcvar_num(pCVAR_wpnlimit)==1)
{
// 是,则增加限制武器提示
formatex(szKnifeOnlyMsg, 63, "武器限制>你只能刀")
}
else if (get_pcvar_num(pCVAR_wpnlimit)==2)
{
// 是,则增加限制武器提示
formatex(szKnifeOnlyMsg, 63, "武器限制>你使用手枪")
}
else szKnifeOnlyMsg = ""
// 是否打开时间限制?
if (get_pcvar_num(pCVAR_timelimit) > 0)
{
// 是,则增加限制时间限制提示
formatex(szTimeLimitMsg, 63, " * (%d)秒后你将会自动离开", floatround(g_fKickTime - get_gametime(), floatround_ceil))
}
else szTimeLimitMsg = ""
// 设置提示显示(颜色/位置/效果。。)
set_hudmessage(HUD_RED, HUD_GREEN, HUD_BLUE, HUD_Xpos, HUD_Ypos, 0, 3.0, 10.0, 0.1, 1.0, -1)
// 执行显示提示
show_hudmessage(id, "%s^n%s%s", g_szInfo, szKnifeOnlyMsg, szTimeLimitMsg)
}
// 执行踢出操作
kick_player(id)
{
// 打开控制台命令
client_cmd(id, "toggleconsole")
// 发送提示信息
client_cmd(id, "echo ^">>自动踢出提示:^"")
client_cmd(id, "echo ^">>%s^"", HUDMSG1)
client_cmd(id, "echo ^">>%s^"", HUDMSG2)
client_cmd(id, "echo ^">>%s^"", HUDMSG3)
// 发送离线命令
client_cmd(id, "disconnect")
}
// 处理,检查如果为禁止的武器
weapon_limited(id, wpn)
{
switch (get_pcvar_num(pCVAR_wpnlimit))
{
// 禁止类型设置,只能使用到,事件处理
case 1:
if (wpn!=29 && wpn!=6)
engclient_cmd(id, "weapon_knife") // 强制换刀
// 禁止使用某一些武器,事件处理
case 2:
// 如果为禁止使用的武器类型,则强制换刀
if (block_weapon(wpn))
engclient_cmd(id, "weapon_knife")
}
}
// 如果为禁止武器id,则返回 true
// 如果要禁止某个武器,去掉前面的注释即可
// 如果要取消禁止的武器,用 // 注释掉即可
// 下面设置禁止了主枪
stock bool:block_weapon(wpn)
{
switch(wpn)
{
// 没有注释掉的这个禁止使用
case CSW_P228: return true
case CSW_SCOUT: return true
// 这个被注释掉的手雷,不禁止使用
//case CSW_HEGRENADE: return true
case CSW_XM1014: return true
case CSW_MAC10: return true
case CSW_AUG: return true
case CSW_SMOKEGRENADE: return true
//case CSW_ELITE: return true
//case CSW_FIVESEVEN: return true
case CSW_UMP45: return true
case CSW_SG550: return true
case CSW_GALI: return true
case CSW_FAMAS: return true
//case CSW_USP: return true
//case CSW_GLOCK18: return true
case CSW_AWP: return true
case CSW_MP5NAVY: return true
case CSW_M249: return true
//case CSW_M3: return true
case CSW_M4A1: return true
//case CSW_TMP: return true
case CSW_G3SG1: return true
//case CSW_FLASHBANG: return true
//case CSW_DEAGLE: return true
case CSW_SG552: return true
case CSW_AK47: return true
case CSW_P90: return true
}
return false
}