kolle 发表于 2008-1-31 23:07:27

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

测试研究, 自动转F是个好东西

y543685085 发表于 2008-2-1 10:06:16

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

Post by baili1258
[隐藏内容]

在次感谢 我试试希望能成功

y543685085 发表于 2008-2-1 10:16:08

回复: 重新修正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
}

fd2000 发表于 2008-2-1 14:45:06

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

好插件~~谢谢~~~~~

ttbs123 发表于 2008-2-1 15:05:12

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

不错不错,谢谢分享,楼主真是点通的好人。

hebuyou 发表于 2008-2-1 16:05:09

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

这个插件不错很实用~

kisspapaya 发表于 2008-2-1 16:29:59

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

源码是怎么写出来的.???

wjf365 发表于 2008-2-1 17:53:33

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

需要设置什么吗?zzzzzzzzzzzzzzzzz

zhuangxl 发表于 2008-2-1 19:54:41

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

感谢楼主,,我也下了,正在测试。。。。。

夏日胖胖虎 发表于 2008-2-1 21:53:39

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

测试一下!!~~~~
页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13
查看完整版本: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码