/// <summary> /// Changes leader of the arena team /// </summary> /// <param name="newLeader">ArenaTeamMember of new leader</param> /// <param name="update">if true, sends event to the team</param> public void ChangeLeader(ArenaTeamMember newLeader) { if (newLeader.ArenaTeam != this) { return; } var currentLeader = Leader; currentLeader.Character.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 1); Leader = newLeader; newLeader.Character.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 0); RealmServer.IOQueue.AddMessage(new Message(() => { if (currentLeader != null) { currentLeader.Update(); } newLeader.Update(); Update(); })); if (currentLeader != null) { //ArenaTeamHandler.SendEventToTeam(this, ArenaTeamEvents.LEADER_CHANGED_SSS, newLeader, currentLeader); } }
public static void UnregisterArenaTeamMember(ArenaTeamMember atm) { if (OfflineChars.ContainsKey(atm.Id)) { OfflineChars.Remove(atm.Id); } }
public static void RegisterArenaTeamMember(ArenaTeamMember atm) { if (atm.Character == null) { OfflineChars.Add(atm.Id, atm); } }
public static void UnregisterArenaTeamMember(ArenaTeamMember atm) { if (!ArenaMgr.OfflineChars.ContainsKey(atm.Id)) { return; } ArenaMgr.OfflineChars.Remove(atm.Id); }
public static void RegisterArenaTeamMember(ArenaTeamMember atm) { if (atm.Character != null) { return; } ArenaMgr.OfflineChars.Add(atm.Id, atm); }
public bool RemoveMember(uint memberId) { ArenaTeamMember member = this[memberId]; if (member != null) { return(this.RemoveMember(member, true)); } return(false); }
public ArenaTeamMember AddMember(Character chr) { ArenaTeamMember arenaTeamMember = this.AddMember(chr.Record); if (arenaTeamMember != null) { arenaTeamMember.Character = chr; } return(arenaTeamMember); }
public bool RemoveMember(string name) { ArenaTeamMember member = this[name]; if (member != null) { return(this.RemoveMember(member, true)); } return(false); }
/// <summary> /// Removes ArenaTeamMember from the arena team /// </summary> /// <param name="member">member to remove</param> /// <param name="update">if false, changes to the team will not be promoted anymore (used when the team is being disbanded)</param> public bool RemoveMember(ArenaTeamMember member, bool update) { OnRemoveMember(member); if (update && member == m_leader) { OnLeaderDeleted(); } if (m_leader == null) { // Team has been disbanded return(true); } m_syncRoot.Enter(); try { if (!Members.Remove(member.Id)) { return(false); } } catch (Exception e) { LogUtil.ErrorException(e, string.Format("Could not delete member {0} from arena team {1}", member.Name, this)); return(false); } finally { m_syncRoot.Exit(); } if (update) { //ArenaTeamHandler.SendEventToTeam(this, ArenaTeamEvents.LEAVED_SS, member); } RealmServer.IOQueue.AddMessage(() => { member.Delete(); if (update) { Update(); } }); return(true); }
/// <summary> /// Creates a new ArenaTeamRecord row in the database with the given information. /// </summary> /// <param name="leader">leader's character record</param> /// <param name="name">the name of the new character</param> /// <returns>the <seealso cref="T:WCell.RealmServer.Battlegrounds.Arenas.ArenaTeam" /> object</returns> public ArenaTeam(CharacterRecord leader, string name, uint type) : this() { this._id = ArenaTeam._idGenerator.Next(); this._leaderLowId = (int)leader.EntityLowId; this._name = name; this._type = (int)type; this.m_slot = ArenaMgr.GetSlotByType(type); this.m_leader = new ArenaTeamMember(leader, this, true); this.m_stats = new ArenaTeamStats(this); this.Members.Add(this.m_leader.Id, this.m_leader); this.m_leader.Create(); ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage(new Action(((ActiveRecordBase)this).Create)); this.Register(); }
private void OnLeaderDeleted() { ArenaTeamMember newLeader = (ArenaTeamMember)null; foreach (ArenaTeamMember arenaTeamMember in (IEnumerable <ArenaTeamMember>) this.Members.Values) { newLeader = arenaTeamMember; } if (newLeader == null) { this.Disband(); } else { this.ChangeLeader(newLeader); } }
/// <summary>Removes ArenaTeamMember from the arena team</summary> /// <param name="member">member to remove</param> /// <param name="update">if false, changes to the team will not be promoted anymore (used when the team is being disbanded)</param> public bool RemoveMember(ArenaTeamMember member, bool update) { this.OnRemoveMember(member); if (update && member == this.m_leader) { this.OnLeaderDeleted(); } if (this.m_leader == null) { return(true); } this.m_syncRoot.Enter(); try { if (!this.Members.Remove(member.Id)) { return(false); } } catch (Exception ex) { LogUtil.ErrorException(ex, string.Format("Could not delete member {0} from arena team {1}", (object)member.Name, (object)this), new object[0]); return(false); } finally { this.m_syncRoot.Exit(); } int num = update ? 1 : 0; ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() => { member.Delete(); if (!update) { return; } this.Update(); })); return(true); }
/// <summary> /// Called before the given member is removed to clean up everything related to the given member /// </summary> protected void OnRemoveMember(ArenaTeamMember member) { ArenaMgr.UnregisterArenaTeamMember(member); Character character = member.Character; if (character == null) { return; } character.ArenaTeamMember[(int)this.Slot] = (ArenaTeamMember)null; character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_ID, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_TYPE, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_GAMES_WEEK, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_GAMES_SEASON, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_WINS_SEASON, 0U); character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_PERSONAL_RATING, 0U); }
/// <summary> /// Called before the given member is removed to clean up everything related to the given member /// </summary> protected void OnRemoveMember(ArenaTeamMember member) { ArenaMgr.UnregisterArenaTeamMember(member); var chr = member.Character; if (chr != null) { chr.ArenaTeamMember[(int)Slot] = null; chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_ID, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_TYPE, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_GAMES_WEEK, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_GAMES_SEASON, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_WINS_SEASON, 0); chr.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_PERSONAL_RATING, 0); } }
/// <summary> /// Creates a new ArenaTeamRecord row in the database with the given information. /// </summary> /// <param name="leader">leader's character record</param> /// <param name="name">the name of the new character</param> /// <returns>the <seealso cref="ArenaTeam"/> object</returns> public ArenaTeam(CharacterRecord leader, string name, uint type) : this() { _id = _idGenerator.Next(); _leaderLowId = (int)leader.EntityLowId; _name = name; _type = (int)type; m_slot = ArenaMgr.GetSlotByType(type); m_leader = new ArenaTeamMember(leader, this, true); m_stats = new ArenaTeamStats(this); Members.Add(m_leader.Id, m_leader); m_leader.Create(); RealmServer.IOQueue.AddMessage(Create); Register(); }
private void OnLeaderDeleted() { // leader was deleted ArenaTeamMember highestMember = null; foreach (var member in Members.Values) { highestMember = member; } if (highestMember == null) { Disband(); } else { ChangeLeader(highestMember); } }
/// <summary> /// Adds a new arena team member /// Calls ArenaTeamMgr.OnJoinTeam /// </summary> /// <param name="chr">character to add</param> /// <returns>ArenaTeamMember of new member</returns> public ArenaTeamMember AddMember(CharacterRecord chr) { ArenaTeamMember newMember; if (Members.Count >= Type * 2) { return(null); } SyncRoot.Enter(); try { if (Members.TryGetValue(chr.EntityLowId, out newMember)) { return(newMember); } newMember = new ArenaTeamMember(chr, this, false); newMember.Character.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_ID, Id); newMember.Character.SetArenaTeamInfoField(Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 1); Members.Add(newMember.Id, newMember); newMember.Create(); Update(); } catch (Exception e) { LogUtil.ErrorException(e, string.Format("Could not add member {0} to arena team {1}", chr, this)); return(null); } finally { SyncRoot.Exit(); } ArenaMgr.RegisterArenaTeamMember(newMember); //ArenaTeamHandler.SendEventToTeam(this, ArenaTeamEvents.JOINED_SS, newMember); return(newMember); }
/// <summary> /// Load & initialize the Team /// </summary> internal void InitAfterLoad() { var members = ArenaTeamMember.FindAll(this); foreach (var atm in members) { atm.Init(this); Members.Add(atm.Id, atm); } m_stats = ArenaTeamStats.FindByPrimaryKey(this.Id); m_slot = ArenaMgr.GetSlotByType(Type); m_leader = this[LeaderLowId]; if (m_leader == null) { OnLeaderDeleted(); } if (m_leader != null) { Register(); } }
internal void InitAfterLoad() { foreach (ArenaTeamMember arenaTeamMember in ArenaTeamMember.FindAll(this)) { arenaTeamMember.Init(this); this.Members.Add(arenaTeamMember.Id, arenaTeamMember); } this.m_stats = ActiveRecordBase <ArenaTeamStats> .FindByPrimaryKey((object)this.Id); this.m_slot = ArenaMgr.GetSlotByType(this.Type); this.m_leader = this[this.LeaderLowId]; if (this.m_leader == null) { this.OnLeaderDeleted(); } if (this.m_leader == null) { return; } this.Register(); }
/// <summary>Changes leader of the arena team</summary> /// <param name="newLeader">ArenaTeamMember of new leader</param> /// <param name="update">if true, sends event to the team</param> public void ChangeLeader(ArenaTeamMember newLeader) { if (newLeader.ArenaTeam != this) { return; } ArenaTeamMember currentLeader = this.Leader; currentLeader.Character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 1U); this.Leader = newLeader; newLeader.Character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 0U); ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((IMessage) new Message((Action)(() => { if (currentLeader != null) { currentLeader.Update(); } newLeader.Update(); this.Update(); }))); ArenaTeamMember arenaTeamMember = currentLeader; }
/// <summary> /// Adds a new arena team member /// Calls ArenaTeamMgr.OnJoinTeam /// </summary> /// <param name="chr">character to add</param> /// <returns>ArenaTeamMember of new member</returns> public ArenaTeamMember AddMember(CharacterRecord chr) { if ((long)this.Members.Count >= (long)(this.Type * 2U)) { return((ArenaTeamMember)null); } this.SyncRoot.Enter(); ArenaTeamMember atm; try { if (this.Members.TryGetValue(chr.EntityLowId, out atm)) { return(atm); } atm = new ArenaTeamMember(chr, this, false); atm.Character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_ID, this.Id); atm.Character.SetArenaTeamInfoField(this.Slot, ArenaTeamInfoType.ARENA_TEAM_MEMBER, 1U); this.Members.Add(atm.Id, atm); atm.Create(); this.Update(); } catch (Exception ex) { LogUtil.ErrorException(ex, string.Format("Could not add member {0} to arena team {1}", (object)chr, (object)this), new object[0]); return((ArenaTeamMember)null); } finally { this.SyncRoot.Exit(); } ArenaMgr.RegisterArenaTeamMember(atm); return(atm); }
public static void RegisterArenaTeamMember(ArenaTeamMember atm) { if (atm.Character == null) OfflineChars.Add(atm.Id, atm); }
public static void UnregisterArenaTeamMember(ArenaTeamMember atm) { if (OfflineChars.ContainsKey(atm.Id)) OfflineChars.Remove(atm.Id); }
/// <summary>Removes ArenaTeamMember from the arena team</summary> /// <param name="member">member to remove</param> /// <param name="update">if true, sends event to the team</param> public bool RemoveMember(ArenaTeamMember member) { return(this.RemoveMember(member, true)); }