using Thousandto.Code.Center; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Thousandto.Code.Logic { /// /// 帮会语音的设置 /// public class GuildVoiceSetting : IGuildVoiceSetting { //是否是指挥者模式 private bool _voiceIsCmderModel = false; //召集的时间 private DateTime _recieveTogetherTime; private int _togetherCDTimeSpan = 300;//秒 //全体静音的时间 private DateTime _recieveAllMuteTime ; private int _allMuteCDTimeSpan = 30;//秒 //麦权 private bool _mcPermission = false; public bool McPermisson { get { //如果是自由模式,那么就是上麦,如果不是自由模式,那么就需要判断当前状态讲话状态 //(!_voiceIsCmderModel || (_voiceIsCmderModel && GameCenter.GuildSystem.TalkState != VoiceState.None)) return _mcPermission; } set { if (_mcPermission != value) { _mcPermission = value; ReqPlayerTalk(); } } } public bool McIsMute { get { return GameCenter.RealTimeVoiceSystem.GetMicrophoneMute(); } set { GameCenter.RealTimeVoiceSystem.SetMicrophoneMute(value); } } public bool VoiceModel { get { return _voiceIsCmderModel; } set { if (_voiceIsCmderModel != value) { _voiceIsCmderModel = value; ReqSetVoiceModel(); } } } public string TogetherCDText { get { var ts = _recieveTogetherTime.AddSeconds(_togetherCDTimeSpan) - DateTime.Now; if (ts > TimeSpan.Zero) { return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER) + string.Format("[ff0000]{0:d2}:{1:d2}[-]", ts.Minutes, ts.Seconds); } return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER); } } public bool EnableCallTogether { get { return IsGuildLeader() && _recieveTogetherTime.AddSeconds(_togetherCDTimeSpan) < DateTime.Now; } } public bool EnableChangeVoiceModel { get { return IsGuildLeader(); } } public bool EnableChangeMcPermisson { get { return _voiceIsCmderModel; } } public string AllMuteCDText { get { var ts = _recieveAllMuteTime.AddSeconds(_allMuteCDTimeSpan) - DateTime.Now; if (ts > TimeSpan.Zero) { return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_ALLMUTE) + string.Format("[ff0000]{0:d2}:{1:d2}[-]", ts.Minutes, ts.Seconds); } return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_ALLMUTE); } } public bool EnableAllMute { get { return IsGuildLeader() && _recieveAllMuteTime.AddSeconds(_allMuteCDTimeSpan) < DateTime.Now; } } private bool IsGuildLeader() { //if (LocalPlayerRoot.LocalPlayer != null) //{ // var item = GameCenter.GuildSystem.OnGetGuildOfficial(); // if (item != null) // { // //官职(1普通成员,2长老,3副会长,4会长,0学徒) // return item.Level == 3 || item.Level == 4; // } //} return false; } #region//服务器处理 #region//请求 //请求讲话 public void ReqPlayerTalk() { //发送给服务器一个我要讲话的需求 //new MSG_Guild.ReqSetMicState() { state = (_mcPermission ? 1 : 0) }.Send(); } //请求集合 public void ReqCallTogether() { //这里给服务器发送一个集合的请求,应该会分发到所有的玩家 // new MSG_Guild.ReqCallUpVoicer().Send(); } public void ReqSetVoiceModel() { //发送给服务器一个模式改变的消息 //new MSG_Guild.ReqModifyVoiceMode() { mode = _voiceIsCmderModel?1:0 }.Send(); } public void ReqSetAllUserMute() { //new MSG_Guild.ReqSynVoiceMode().Send(); //发送一个全体静音的消息 _recieveAllMuteTime = DateTime.Now; _allMuteCDTimeSpan = 30; } #endregion #region//接受 //接受模式改变的消息 public void RespVoiceModelChanged(bool isCmderModel) { _voiceIsCmderModel = isCmderModel; //接受一个全体静音的消息 _recieveAllMuteTime = DateTime.Now; _allMuteCDTimeSpan = 30; } //获得集合请求调用成功的消息 public void RespTogetherSuccess() { _recieveTogetherTime = DateTime.Now; _togetherCDTimeSpan = 300; } //接收到集合消息 public void RespTogetther() { _recieveTogetherTime = DateTime.Now; _togetherCDTimeSpan = 300; GameCenter.MsgPromptSystem.ShowMsgBox(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER_MSG_TEXT), Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_MSSAGEBOX_CANCEL), Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_MSSAGEBOX_OK), x => { if (x == MsgBoxResultCode.Button2) { GameCenter.RealTimeVoiceSystem.ReqChangeChannel(VoiceChannel.Guild); } }); } #endregion #endregion } public interface IGuildVoiceSetting { //语音模式 bool VoiceModel { get; set; } //Mc状态 bool McIsMute { get; set; } //Mc权限 bool McPermisson { get; set; } //召集的CD文本 string TogetherCDText { get; } //全部静音的CD文本 string AllMuteCDText { get; } //是否可以点击召集 bool EnableCallTogether { get; } //是否可以点击全体静音 bool EnableAllMute { get; } //是否可以改变帮会及时语音模式 bool EnableChangeVoiceModel { get; } //是否可以上麦 bool EnableChangeMcPermisson { get; } //方法: //请求集合 void ReqCallTogether(); //全体静音的消息 void ReqSetAllUserMute(); } }