找回密码
 注-册

QQ登录

只需一步,快速开始

查看: 2821|回复: 1

Friends_talk 多种语音通讯模式

[复制链接]
Leya 发表于 2008-8-24 04:43:45 | 显示全部楼层 |阅读模式
插件发布
发布时间:
插件名称: 设置多种语音通讯模式的插件
是否原创: 转载
插件作者: iG_os
适用游戏: Cs
适用类型: AMXX
适用版本: 1.76d 
插件简介: 参数:friends_talk 1(默认) //0=sv_alltalk 0
//1=sv_alltalk 1
//2=活的队伍通信,死的听所有人声音
//3=同队伍(死&活)都能通信,观察者听所有人声音(适合比赛用)
amx命令:
amx_friends_talk (0-3) 临时更改语音模式,功能同上
adminspeak (打开/关闭)管理员发言模式,在任何模式下管理员都能和其他玩家通信

  1. /***************************************************************************************
  2. *amxmodx插件 amxmodx 1.71 测试通过
  3. * 设置多种语音通讯模式的插件
  4. * Friends_talk.sma
  5. * 来源: http://cs-friends.com.cn
  6.   
  7. * 作者:iG_os,version 0.2.16 2006-6-24 22:00

  8. 参数:friends_talk 1(默认) //0=sv_alltalk 0
  9.            //1=sv_alltalk 1
  10.            //2=活的队伍通信,死的听所有人声音
  11.            //3=同队伍(死&活)都能通信,观察者听所有人声音(适合比赛用)
  12. amx命令:
  13. amx_friends_talk (0-3)  临时更改语音模式,功能同上
  14. adminspeak        (打开/关闭)管理员发言模式,在任何模式下管理员都能和其他玩家通信
  15. ***************************************************************************************/

  16. #define PLUGIN  "Friends_Talk"
  17. #define VERSION "0.2.16"
  18. #define AUTHOR  "iG_os"

  19. #include <amxmodx>
  20. #include <amxmisc>
  21. #include <engine>
  22. #include <fun>

  23. new g_talkMODE
  24. new g_MAXPLAYERS
  25. new g_adminspeak[33] = {false,...}

  26. //=0模式,队伍语音 = sv_alltalk 0
  27. public player_listen_default()
  28. {
  29.    for (new id = 1; id <= g_MAXPLAYERS; id++)
  30.    if (is_user_connected(id))
  31.    if (!g_adminspeak[id]) //排除admin语音设置
  32.       set_speak(id, SPEAK_NORMAL) //id 恢复正常模式
  33.    set_cvar_num( "sv_alltalk",0 )
  34. }

  35. //=1模式,设置 id 与所有人相互通话 = sv_alltalk 1
  36. public player_listen_all()
  37. {
  38. /*
  39. for (new id = 1; id <= g_MAXPLAYERS; id++)
  40.   if (is_user_connected(id))
  41.    if (!g_adminspeak[id]) //排除admin语音设置
  42.     set_speak(id, SPEAK_NORMAL) //id 恢复正常模式
  43. */
  44.    set_cvar_num( "sv_alltalk",1 )
  45. }

  46. //=2模式,设置活得 id 与同队人语音,死得 id 听所有人声音
  47. public player_listen_team(id)
  48. {
  49.    if( !is_user_connected(id) ) return
  50.    if (g_adminspeak[id]) return //排除admin语音设置
  51.    new team = get_user_team(id)
  52.    if ( (team==1 || team==2) && is_user_alive(id) ) //id 是 T or CT 并且是活的
  53.    {
  54.       set_speak(id,SPEAK_NORMAL) //活得恢复默认
  55.    }
  56.    else
  57.    {
  58.       set_speak(id, SPEAK_LISTENALL) //死的听所有
  59.    }
  60. }

  61. //=3模式,设置id与T,CT同队(活的与死的)相互可以通话声音
  62. public player_listen_teamall(id)
  63. {
  64.    if ( !is_user_connected(id) ) return
  65.    if (g_adminspeak[id]) return //排除admin语音设置
  66.    new team = get_user_team(id)
  67.    if ( team!=1 && team!=2 ) //id 不是 T or CT
  68.    {
  69.       set_speak(id, SPEAK_LISTENALL) //观察者听所有
  70.       return
  71.    }
  72.    for( new other = 1;other<=g_MAXPLAYERS;other++)
  73.    {
  74.       if (is_user_connected(other))
  75.       if (!g_adminspeak[other])  //排除admin语音设置
  76.       if (other!=id)
  77.       if (team==get_user_team(other)) //other 与 id 同队
  78.       {
  79.          set_client_listen(id,other,1)  //id 听到 other
  80.          set_client_listen(other,id,1)  //other 听到 id
  81.       }
  82.       else
  83.       {
  84.          set_client_listen(id,other,0) //id 与 other 相互屏蔽声音
  85.       }
  86.    }
  87. }

  88. public player_spawn(id)
  89. {
  90.    new param[1]
  91.    param[0] = id
  92.    set_task(0.3,"player_reset",123+id,param,1)
  93.    return PLUGIN_CONTINUE
  94. }

  95. public player_reset(param[])
  96. {
  97.    new id = param[0]
  98.    if (g_adminspeak[id]) return
  99.    switch (g_talkMODE)
  100.    {
  101.       case 2: player_listen_team(id)
  102.       case 3: player_listen_teamall(id)
  103.    }
  104. }

  105. public death_event()
  106. {
  107.    new param[1]
  108.    param[0] = read_data(2)
  109.    set_task(0.3,"player_reset",123+param[0],param,1)
  110.    return PLUGIN_CONTINUE
  111. }

  112. public joined_team()
  113. {
  114.    new Arg1[64],name[32]
  115.    read_logargv(0,Arg1,63)
  116.    parse_loguser (Arg1, name, 31)
  117.    new id = get_user_index (name)
  118.    new param[1]
  119.    param[0] = id
  120.    set_task(7.0,"show_msg",565656+id,param,1)
  121.    set_task(0.3,"player_reset",123+id,param,1)
  122.    return PLUGIN_CONTINUE
  123. }

  124. public client_putinserver(id)
  125. {
  126.    new param[1]
  127.    param[0] = id
  128.    set_task(0.3,"player_reset",123+id,param,1)
  129.    return PLUGIN_CONTINUE
  130. }

  131. public eRestart()
  132. {
  133.    switch (g_talkMODE)
  134.    {
  135.       case 0: player_listen_default()
  136.       case 1: player_listen_all()
  137.       case 2:
  138.       {
  139.          set_cvar_num( "sv_alltalk",0 ) //sv_alltalk 0 必须要设为 0 才生效
  140.          for (new id = 1; id <= g_MAXPLAYERS; id++)
  141.          player_listen_team(id)
  142.       }
  143.       case 3:
  144.       {
  145.          set_cvar_num( "sv_alltalk",0 ) //sv_alltalk 0 必须要设为 0 才生效
  146.          for (new id = 1; id <= g_MAXPLAYERS; id++)
  147.          player_listen_teamall(id)
  148.       }
  149.    }
  150.    return PLUGIN_CONTINUE
  151. }

  152. public talkset(id,level,cid)
  153. {
  154.    if (!cmd_access(id,level,cid,2))
  155.       return PLUGIN_HANDLED
  156.    new arg[2]
  157.    read_argv(1,arg,2)
  158.    new res = str_to_num(arg)
  159.    if (res<0 || res>3)
  160.       return PLUGIN_HANDLED

  161.    g_talkMODE = res
  162.    new name[32]
  163.    get_user_name (id, name,31)
  164.    new msg[256]
  165.    format(msg,255,"^x01<^x03 %s^x01> ^x04改变语音模式",name)
  166.    color_text_all(id,msg)

  167.    new param[1]
  168.    param[0] = 0
  169.    show_msg(param)
  170.    eRestart()
  171.    log_amx("[%s] change friends_talk %d", name,g_talkMODE)
  172.    return PLUGIN_CONTINUE
  173. }

  174. public show_msg(param[])
  175. {
  176.    new id = param[0]
  177.    new msg[256]
  178.    switch (g_talkMODE)
  179.    {
  180.       case 0: //队伍通话 sv_alltalk 0
  181.          format(msg,255,"^x01<^x04 cs-friends.com.cn 语音模式^x01 > ^x03队伍通话 sv_alltalk 0")
  182.       case 1: //所有人相互通话 sv_alltalk 1
  183.          format(msg,255,"^x01<^x04 cs-friends.com.cn 语音模式^x01 > ^x03所有人相互通话 sv_alltalk 1")
  184.       case 2: //同队活人之间相互通话,所有死亡人相互通话,并听见活着人说话模式
  185.          format(msg,255,"^x01<^x04 cs-friends.com.cn 语音模式^x01 > ^x03同队活人相互通话,所有死亡人相互通话,并听见活人说话")
  186.       case 3: //同队人之间死活都相互通话模式
  187.          format(msg,255,"^x01<^x04 cs-friends.com.cn 语音模式^x01 > ^x03同队人死活都相互通话模式,观察者听见所有人说话模式")
  188.    }
  189.    if (id==0) color_text_all(id,msg)
  190.    else color_text_one(id,msg)
  191. }

  192. public admin_speak(id,level,cid)
  193. {
  194.    if (!cmd_access(id,level,cid,1))
  195.       return PLUGIN_HANDLED
  196.    new msg[256]
  197.    if (!g_adminspeak[id])
  198.    {
  199.       g_adminspeak[id] = true
  200.       set_speak(id, SPEAK_LISTENALL+SPEAK_ALL) //id 听,说所有
  201.       format(msg,255,"^x01<^x04管理员通话模式^x01> ^x03打开")
  202.    }
  203.    else
  204.    {
  205.       g_adminspeak[id] = false
  206.       new param[1]
  207.       param[0] = id
  208.       set_task(0.1,"player_reset",123+id,param,1)
  209.       format(msg,255,"^x01<^x04管理员通话模式^x01> ^x03关闭")
  210.    }
  211.    color_text_all(id,msg)
  212.    return PLUGIN_CONTINUE
  213. }

  214. public color_text_all(id,msg[])
  215. {
  216.    message_begin(MSG_ALL, get_user_msgid("SayText"), {0,0,0}, id)
  217.    write_byte(id)
  218.    write_string(msg)
  219.    message_end()
  220. }
  221. public color_text_one(id,msg[])
  222. {
  223.    message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id)
  224.    write_byte(id)
  225.    write_string(msg)
  226.    message_end()
  227. }

  228. public plugin_init()
  229. {
  230.    register_plugin(PLUGIN,VERSION,AUTHOR)
  231.    register_event("ResetHUD", "player_spawn", "be")
  232.    register_event("DeathMsg", "death_event", "a")
  233.    register_event("TextMsg","eRestart","a","2&#Game_C","2&#Game_w")
  234.    register_logevent("joined_team", 3, "1=joined team") //"2=SPECTATOR" //"2=CT" //"2=TERRORIST"
  235.    
  236.    register_concmd("adminspeak", "admin_speak", ADMIN_RESERVATION, "Admin speak is on/off")
  237.    register_concmd("amx_friends_talk","talkset",ADMIN_RESERVATION,"(0-3) Set friends_talk mode")
  238.    register_cvar("friends_talk","1")

  239.    g_talkMODE = get_cvar_num("friends_talk")
  240.    g_MAXPLAYERS = get_maxplayers()
  241.    return PLUGIN_CONTINUE
  242. }
复制代码
回复

使用道具 举报

daredevil 发表于 2009-1-29 23:56:36 | 显示全部楼层
同队伍(死&活)都能通信,观察者听所有人声音(适合比赛用)
无效果。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注-册

本版积分规则

Archiver|手机版|小黑屋|DoDVip ( 桂ICP备14000730号 )

GMT+8, 2024-5-4 12:19 , Processed in 0.052342 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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