private void OnNotifyArenaEnd(SocketModel model) { NotifyArenaEnd notify = SerializeUtil.Deserialize <NotifyArenaEnd>(model.message); UIManager.instance.Open <ArenaEndWindow>().Init(notify.datas, notify.winteam); TankManager.instance.ClearAll(); }
public void Update(float dt) { List <Arena> arenas = CacheManager.instance.arenas; for (int i = 0; i < arenas.Count; i++) { Arena a = arenas[i]; a.Update(dt); if (a.elapsedTime >= Arena.battleTime) { //通知战斗结束 NotifyArenaEnd notify = new NotifyArenaEnd(); notify.blueKillCount = a.blueKillCount; notify.redKillCount = a.redKillCount; if (notify.blueKillCount > notify.redKillCount) { notify.winteam = (int)ETeam.Blue; } else if (notify.blueKillCount < notify.redKillCount) { notify.winteam = (int)ETeam.Red; } else { notify.winteam = (int)ETeam.None; } for (int j = 0; j < a.accounts.Count; j++) { AccountData acc = a.accounts[j]; TankKillData d = new TankKillData(); d.account = acc.account; d.deathCount = acc.deathCount; d.hurt = acc.hurt; d.kill = acc.killCount; d.team = (int)acc.team; notify.datas.Add(d); acc.killCount = 0; acc.team = ETeam.None; acc.hurt = 0; acc.deathCount = 0; } MsgSender.SendAll <NotifyArenaEnd>(a.accounts, (int)MsgID.NotifyArenaEnd, notify); arenas.Remove(a); } } }
void ArenaTankDeath(AccountData acc, AccountData enemy, Battle battle) { Arena arena = battle as Arena; if (acc.team == ETeam.Blue) { arena.blueKillCount++; } else { arena.redKillCount++; } if (arena.blueKillCount >= 5 || arena.redKillCount >= 5) { //通知战斗结束 NotifyArenaEnd notify = new NotifyArenaEnd(); notify.blueKillCount = arena.blueKillCount; notify.redKillCount = arena.redKillCount; if (notify.blueKillCount > notify.redKillCount) { notify.winteam = (int)ETeam.Blue; } else if (notify.blueKillCount < notify.redKillCount) { notify.winteam = (int)ETeam.Red; } else { notify.winteam = (int)ETeam.None; } for (int i = 0; i < arena.accounts.Count; i++) { AccountData accData = arena.accounts[i]; TankKillData d = new TankKillData(); d.account = accData.account; d.deathCount = accData.deathCount; d.hurt = accData.hurt; d.kill = accData.killCount; d.team = (int)acc.team; notify.datas.Add(d); accData.killCount = 0; accData.team = ETeam.None; accData.hurt = 0; accData.deathCount = 0; } MsgSender.SendAll <NotifyArenaEnd>(arena.accounts, (int)MsgID.NotifyArenaEnd, notify); arena.timers.Clear(); CacheManager.instance.arenas.Remove(arena); } else { Timer timer = new Timer(3f, () => { Tank t = arena.GetTank(enemy.account); if (t == null) { return; } t.hp = 100; //真随机 Random r = new Random(System.Guid.NewGuid().GetHashCode()); t.pos = SpawnPoint.point[r.Next(0, 5)]; NotifyReborn notify = new NotifyReborn(); notify.tank = new TankDTO(); notify.tank.id = t.uid; notify.tank.hp = t.hp; notify.tank.pos = Tools.ToVec_3(t.pos); notify.tank.color = Tools.UC2TC(t.color); notify.tank.team = (int)t.team; notify.tank.nickName = t.nickName; MsgSender.SendAll <NotifyReborn>(arena.accounts, (int)MsgID.NotifyReborn, notify); }); arena.timers.Add(timer); } }