public void ShowForFightAgain(FightAgainData againData) { // 构造friend, 取消邀请的时候要用 friend = new BriefRoleInfo(); friend.player_id = againData.player_id; friend.zoneid = againData.zoneid; // 构造matchEnemyData data = new MatchEnemyData(); data.isFightAgain = true; data.lastSeconds = 0; data.expectSeconds = -1; data.isFriend = true; // 这里要设置为true, 如果为false, 则取消的时候会发送取消匹配的协议 data.friendName = againData.name; data.matchType = PvpMatchType.Entertainment; NetworkManager.Instance.AddMessageCallback((int)ZoneCmd.ZONE_PVP_1V1_ACCEPT_NTF, OnFightAgainAccept); InviteFightAgain(againData); NetworkManager.Instance.AddMessageCallback((int)ZoneCmd.ZONE_PVP_1V1_ENTER_GAME_NTF, MatchSuccNtf); NetworkManager.Instance.AddMessageCallback((int)ZoneCmdLua.ZONE_LUA_JDC_PVP_BAN_PICK_ROOM_MATCH_NTF, FightAgainBanMatchSuccNtf); NGUITools.SetActive(EstimatedContainer.gameObject, false); DescLabel.text = "正在邀请 " + data.friendName + " 再来一战"; CancelLabel.text = "取消邀请"; NGUITools.SetActive(Button, false); BindingTargetHelper.AddListen(this); }
public override void OnInitData(object _data) { isExiting = false; isMatchReturn = false; actData = null; plugin = KHPluginManager.Instance.GetPluginByName(PVPRealTimeMainUIPlugin.PluginName) as PVPRealTimeMainUIPlugin; model = plugin.Model as PVPRealTimeMainUIModel; data = _data as MatchEnemyData; /// _data可能有三种含义: MatchEnemyData(正常匹配), FightAgainData(与其再战), BriefRoleInfo(好友切磋) /// 这里写的太乱了, 有空的时候重构下 FightAgainData againData = _data as FightAgainData; if (againData != null) { ShowForFightAgain(againData); return; } if (data == null) { friend = _data as BriefRoleInfo; if (friend == null) { // 用于活动主播接受队列某个玩家的挑战, 也是用邀请好友这一套 actData = _data as MatchPvPAct; friend = new BriefRoleInfo(); friend.name = actData.name; ulong player_id = 0; ulong.TryParse(actData.player_id, out player_id); friend.player_id = player_id; friend.zoneid = actData.zoneid; } data = new MatchEnemyData(); data.isFightAgain = false; data.lastSeconds = 0; data.isFriend = true; data.expectSeconds = -1; data.friendName = friend.name; data.matchType = PvpMatchType.Entertainment; NetworkManager.Instance.AddMessageCallback((int)ZoneCmd.ZONE_PVP_1V1_ACCEPT_NTF, OnFriendAccept); InviteFriend(friend); } else { SendMatchEnemyReq(data); } NetworkManager.Instance.AddMessageCallback((int)ZoneCmd.ZONE_PVP_1V1_ENTER_GAME_NTF, MatchSuccNtf); NetworkManager.Instance.AddMessageCallback((int)ZoneCmdLua.ZONE_LUA_JDC_PVP_BAN_PICK_ROOM_MATCH_NTF, BanMatchSuccNtf); if (!data.isFriend) { NGUITools.SetActive(EstimatedContainer.gameObject, false); //EstimatedTimeLabel.text = data.expectSeconds + "秒"; DescLabel.text = "正在寻找旗鼓相当的对手..."; CancelLabel.text = "取消匹配"; NGUITools.SetActive(Button, false); } else { NGUITools.SetActive(EstimatedContainer.gameObject, false); DescLabel.text = "正在邀请 " + data.friendName + " 进行切磋"; CancelLabel.text = "取消邀请"; NGUITools.SetActive(Button, false); } BindingTargetHelper.AddListen(this); }
//先进界面再发请求,以防止未打开界面时,就已经匹配了。 private void InviteFriend(object data) { BriefRoleInfo friend = data as BriefRoleInfo; var req = new ZonePvp1v1InviteReq(); req.friend_gid = friend.player_id; req.friend_zone = friend.zoneid; req.invite = true; var friendModel = KHPluginManager.Instance.GetModel(PVPRealTimeFriendPlugin.PluginName) as PVPRealTimeFriendModel; if (actData != null) { req.pvp_type = actData.pvp_type; } else { req.pvp_type = friendModel.banMode ? 1u : 0u; } if (friendModel.platformFriendList.Contains(friend)) { req.plat_friend = true; } else { req.plat_friend = false; } NetworkManager.Instance.Send <ZonePvp1v1InviteReq>((uint)ZoneCmd.ZONE_PVP_1V1_INVITE, req, (object fullInfo) => { ZonePvp1v1InviteResp resp = fullInfo as ZonePvp1v1InviteResp; if (resp.ret_info.ret_code == 0) { isStarted = true; if (actData == null) { NGUITools.SetActive(Button, true); } } else { ErrorCodeCenter.DefaultProcError(resp.ret_info); if (actData != null && actData.remain_times > 0) { ActCenterPlugin plugin = KH.KHPluginManager.Instance.GetPluginByName(KH.Plugins.ActCenterPlugin.NAME) as KH.Plugins.ActCenterPlugin; plugin.InvokeActFun((uint)actData.act_id, "ReqCmd7"); } else { _CloseWindow(null); } } if (resp.refresh) { var model = plugin.Model as PVPRealTimeMainUIModel; model.TriggerBinding("RefreshFriendList"); } }, false, timeoutCallback => { UIAPI.ShowMsgTip("邀请好友比试超时"); if (actData != null && actData.remain_times > 0) { ActCenterPlugin plugin = KH.KHPluginManager.Instance.GetPluginByName(KH.Plugins.ActCenterPlugin.NAME) as KH.Plugins.ActCenterPlugin; plugin.InvokeActFun((uint)actData.act_id, "ReqCmd7"); } else { _CloseWindow(null); } }); }