/// <summary> /// 销毁战场 /// 主线程调用 /// </summary> private void EndBattle(Battle battle) { battle.Stop(); int count = battle.numChampions; //通知CS战场结束 Protos.BS2CS_BattleEnd battleEnd = ProtoCreator.Q_BS2CS_BattleEnd(); battleEnd.Bid = battle.id; for (int i = 0; i < count; ++i) { Champion champion = battle.GetChampionAt(i); var info = new Protos.BS2CS_BattleEndInfo { Result = (Protos.BS2CS_BattleEndInfo.Types.Result)champion.result, Team = champion.team, Damage = champion.damage, Hurt = champion.hurt, Heal = champion.heal, OccupyTime = champion.occupyTime, Skill0Used = champion.skill0Used, Skill0Damage = champion.skill0Damage, Skill1Used = champion.skill1Used, Skill1Damage = champion.skill1Damage, }; battleEnd.Infos.Add(champion.user.gcNID, info); } BS.instance.netSessionMgr.Send(SessionType.ServerB2CS, battleEnd, RPCEntry.Pop(this.OnCSBattleEndRet, battle)); }
/// <summary> /// 初始化 /// </summary> internal void Init(Battle battle) { this._battle = battle; int count = battle.numChampions; for (int i = 0; i < count; i++) { ulong id = battle.GetChampionAt(i).rid; this._gcNIDToAction[id] = new FrameAction(id); } }
private void OnCSBattleEndRet(NetSessionBase session, Google.Protobuf.IMessage message, object[] args) { Battle battle = ( Battle )args[0]; int count = battle.numChampions; for (int i = 0; i < count; i++) { Champion champion = battle.GetChampionAt(i); if (champion.user.isOnline) { //断开玩家连接 BS.instance.netSessionMgr.CloseSession(champion.user.gcSID, "battle_end"); //玩家下线 BS.instance.userMgr.Offline(champion.user); } //销毁玩家 BS.instance.userMgr.DestroyUser(champion.user); } this._finishBattles.Remove(battle); Logger.Log($"battle:{battle.id} destroied"); POOL.Push(battle); }