搜索
查看: 1958|回复: 5

[AMXX 带源码] 麻烦版主高手看下 这个错误怎么修改[源码]

[复制链接]
发表于 2009-9-28 23:09:22 | 显示全部楼层 |阅读模式 来自 中国–湖北–武汉
本帖最后由 visa567 于 2009-9-28 23:11 编辑

这是一个转F插件 不会与中文ID 冲突

但编译的时候会报错  AMXX 1.76C



下面是代码

  1. /* AMX Mod X script.
  2. * 如果OP通道插件未启用,本插件奖自动设置amx_reservation为 1 ,即保留一个通道。
  3. * 使用方法:
  4. * 在amxx.cfg里加入
  5. * amx_kickmode <参数>
  6. * 参数为 <1> 或者 <2> 。
  7. * 1 表示 - 当服务器人满时,有OP或者VIP登陆时则踢掉一个在线时间最短的玩家。
  8. * 2 表示 - 当服务器人满时,有OP或者VIP登陆时则踢掉一个ping值最高的玩家。
  9. * 内网IP地址设置方法:
  10. * amx_netbarip "IP地址的前面7位"
  11. * 例: amx_netbarip "192.168"
  12. */

  13. #include <amxmodx>
  14. #include <amxmisc>
  15. public plugin_init()
  16. {
  17.         register_plugin("Slots Reservation","1.0","Lu0007")
  18.         register_cvar("amx_kickmode","2")   //踢Ping高的
  19.         register_cvar("amx_reservation","2")
  20.         //预留的通道数,没有权限的玩家进入此通道时会被kick
  21.         register_cvar("amx_netbarip","10.0")
  22.         //默认内网IP段
  23.         register_cvar("amx_rd_server","x.x.x.x") //要转向的目的服务器.
  24.         register_cvar("amx_rd_serverport","27016") //端口
  25.         register_cvar("amx_rd_serverpw","") //密码,留空为无密码
  26. }

  27. //玩家进入初始化
  28. public client_authorized(id) {

  29.         new teamname[5][] = { "", "TERRORIST", "CT", "SPECTATOR", ""}
  30.         new szUserName[33]
  31.         get_user_name(id, szUserName, 32)
  32.         new szMessage[164]
  33.         new userip[17]
  34.         new ips[8]
  35.         new ips2[16]
  36.         new name[33]
  37.         new g_amx_netbarip[8]
  38.         get_user_ip(id,userip,16,1)
  39.         copy(ips,7,userip)  //前2段IP地址
  40.         copy(ips2,16,userip) //全IP地址
  41.         get_cvar_string("amx_netbarip",g_amx_netbarip,7)
  42.         get_user_name(id,name,32)  //返回玩家名

  43.         new rd_serverport = get_cvar_num("amx_rd_serverport")
  44.         new rd_server[64], rd_serverpw[32]
  45.         get_cvar_string("amx_rd_server",rd_server,63)
  46.         get_cvar_string("amx_rd_serverpw",rd_serverpw,31)
  47.         
  48.         new maxplayers = get_maxplayers() //返回游戏最大人数
  49.         new players = get_playersnum( 1 )   //统计人数 ,连正在连接的也算
  50.         new limit = maxplayers - get_cvar_num("amx_reservation")  //服最大人数 减去预留人数
  51.         new resType = get_cvar_num( "amx_kickmode" )    //踢人模式 是高Ping 还是时间最短的
  52.         new who

  53.         //当超过限制人数时
  54.         if ( players > limit )
  55.         {
  56.                 //进入的VIP&&OP 或是内网地址如192.168 或是有内网IP段的如 10.0
  57.                 if ( get_user_flags(id) & ADMIN_RESERVATION || (equali(ips,g_amx_netbarip)) || (contain(ips,g_amx_netbarip)==0))
  58.                 {
  59.                         set_user_flags(id, get_user_flags(id)|ADMIN_IMMUNITY)
  60.                         //set_user_flags(id,read_flags("b"))
  61.                         //设置玩家标记,b 为可通过预留通道加入服务器
  62.                         switch(resType) {     
  63.                                 case 1:
  64.                                         who = kickFresh() //踢时间短
  65.                                 case 2:
  66.                                         who = kickLag() //踢高Ping
  67.                                         }
  68.                         if(who)  {
  69.                                    get_user_name( who, name , 31 )
  70.                                    client_cmd(id,"echo ^"* %s 已被KICK或是转移!^"" ,name )
  71.                                    }
  72.                         return PLUGIN_CONTINUE
  73.                  
  74.                 }
  75.                 //如是外网普通用户进入
  76.                 if ( is_user_bot(id) ) //如是机器人,直接踢机器人
  77.                         server_cmd("kick #%d 服务器人满!", get_user_userid(id)  )
  78.                 else  {  //是人的,提示并踢除
  79.                         //server_cmd("kick #%d 服务器人满!", get_user_userid(id)  )
  80.                         if ( !equal(rd_serverpw,"") )
  81.                                 client_cmd(id,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
  82.                         client_cmd(id,"echo ^"Redirection -  Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)
  83.                         }
  84.                 return PLUGIN_HANDLED
  85.         }
  86.         if(get_user_flags(id) & ADMIN_BAN)
  87. {
  88.         format(szMessage, 163, "^x01【^x03服务器OP^x01】%s 连接中...", szUserName)
  89.         msg_teaminfo( 0, id, teamname[1])
  90. }
  91.         msg_saytext( 0, id, szMessage)
  92.         new team[32]
  93.         get_user_team(id, team, 31)
  94.         msg_teaminfo( 0, id, team)//此处恢复
  95. }

  96. //踢Ping高的
  97. kickLag() {
  98.         new rd_serverport = get_cvar_num("amx_rd_serverport")
  99.         new rd_server[64], rd_serverpw[32]
  100.         get_cvar_string("amx_rd_server",rd_server,63)
  101.         get_cvar_string("amx_rd_serverpw",rd_serverpw,31)
  102.         new who = 0, ping, loss, worst = -1
  103.         new maxplayers = get_maxplayers()
  104.         for(new i = 1; i <= maxplayers; ++i) {
  105.                 if ( !is_user_connected(i) && !is_user_connecting(i) )
  106.                         continue // not used slot  
  107.                 if (get_user_flags(i)&ADMIN_RESERVATION)
  108.                         continue // has reservation, skip him
  109.                 new name[32]                               // 增加行
  110.        get_user_name(i,name,31)                  // 增加行
  111.        if(containi(name,"[NO-sXe-I]")==-1)     // 增加行
  112.                   continue                          // 增加行
  113.                 get_user_ping(i,ping,loss) // get ping
  114.                 if ( ping > worst ) { //找出Ping最大的
  115.                         worst = ping
  116.                         who = i
  117.                         client_print(0,print_chat,"服务器为保留预留通道,将%s转服,ping值=%d.",who,ping)
  118.                                         }
  119.                                                 }
  120.         if(who)
  121.                 if ( is_user_bot(who) ) //如是机器人的
  122.                         server_cmd("kick #%d [OP通道] 请稍后再进 ." , get_user_userid(who)  )
  123.                 else  { //如是人的
  124.                         //server_cmd("kick #%d [OP通道] 请稍后再进." , get_user_userid(who)  )
  125.                         if ( !equal(rd_serverpw,"") )
  126.                                 client_cmd(who,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
  127.                         client_cmd(who,"echo ^"Redirection -  Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)
  128.                         }
  129.         return who  
  130. }
  131. //踢时间短的
  132. kickFresh() {
  133.         new rd_serverport = get_cvar_num("amx_rd_serverport")
  134.         new rd_server[64], rd_serverpw[32]
  135.         get_cvar_string("amx_rd_server",rd_server,63)
  136.         get_cvar_string("amx_rd_serverpw",rd_serverpw,31)
  137.         new who = 0, itime, shortest = 0x7fffffff
  138.         new maxplayers = get_maxplayers()
  139.         for(new i = 1; i <= maxplayers; ++i){
  140.                 if ( !is_user_connected(i) && !is_user_connecting(i) )//不是连接和不是正连接
  141.                         continue // not used slot
  142.                 if (get_user_flags(i)&ADMIN_RESERVATION) //是管理员的
  143.                         continue // has reservation, skip him
  144.                 itime = get_user_time(i) // get user playing time with connection duration  
  145.                 if ( shortest > itime ) {
  146.                         shortest = itime
  147.                         who = i
  148.                                         }
  149.                                                 }
  150.         if(who) //如找到最短时间的
  151.                 if ( is_user_bot(who) ) //如是个机器人
  152.                         server_cmd("kick #%d [OP通道] 请稍后再进.", get_user_userid(who)  )
  153.                 else  { //如是个人的
  154.                         //server_cmd("kick #%d [OP通道] 请稍后再进.", get_user_userid(who)  )
  155.                         if ( !equal(rd_serverpw,"") )
  156.                                 client_cmd(who,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
  157.                         client_cmd(who,"echo ^"Redirection -  Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)
  158.                         }
  159.         return who
  160. }

  161.         public msg_teaminfo( playerid, colorid, msg[])
  162. {
  163.         message_begin( playerid?MSG_ONE:MSG_ALL, get_user_msgid("TeamInfo"), {0,0,0}, playerid)
  164.         write_byte(colorid)
  165.         write_string(msg)
  166.         message_end()
  167. }

  168.         public msg_saytext( playerid, colorid, msg[])
  169. {
  170.         message_begin( playerid?MSG_ONE:MSG_ALL, get_user_msgid("SayText"), {0,0,0}, playerid)
  171.         write_byte(colorid)
  172.         write_string(msg)
  173.         message_end()
  174. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
发表于 2009-9-28 23:35:30 | 显示全部楼层 来自 中国–广东–深圳
这个没问题的..只是提示警告而已..上面也写着warning.只是代表警告.. done代表完成..
回复

使用道具 举报

发表于 2009-9-28 23:49:59 | 显示全部楼层 来自 中国–福建–漳州
第一个警告的意思是:client_authorized应该返回一个值。
出现这个警告,一般是因为有的地方有返回值,但有时可能会没返回值。当然它也有判断不准确的情况(主要是使用if...else等分支语句时)。
第二、三个警告是表示代码未对齐,你把代码对齐就可以了。
回复

使用道具 举报

 楼主| 发表于 2009-9-29 10:22:59 | 显示全部楼层 来自 中国–湖北–武汉
本帖最后由 visa567 于 2009-9-29 11:03 编辑

已经解决 谢谢大家
回复

使用道具 举报

发表于 2009-9-29 11:52:06 | 显示全部楼层 来自 中国–四川–遂宁
本帖最后由 sakulekingz 于 2009-9-29 11:53 编辑

格式啊..
回复

使用道具 举报

发表于 2009-10-3 23:23:15 | 显示全部楼层 来自 中国–广东–汕尾
这是警告而已啊,没有错误……
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表