private void SendMessageToPlayer(IPartyMember partyMember, string message, MessageType type) { if (partyMember is Player player) { player.ViewPlugIns.GetPlugIn <IShowMessagePlugIn>()?.ShowMessage(message, type); } }
private void SendMessageToPlayer(IPartyMember partyMember, string message, MessageType type) { if (partyMember is Player player) { player.PlayerView.ShowMessage(message, type); } }
private void SendPartyRequest(IPartyMember toRequest, IPartyMember requester) { if (Equals(requester, toRequest)) { return; } toRequest.LastPartyRequester = requester; toRequest.PartyView.ShowPartyRequest(requester); }
private void SendPartyRequest(IPartyMember toRequest, IPartyMember requester) { if (Equals(requester, toRequest)) { return; } toRequest.LastPartyRequester = requester; toRequest.ViewPlugIns.GetPlugIn <IShowPartyRequestPlugIn>()?.ShowPartyRequest(requester); }
/// <inheritdoc/> public void ShowPartyRequest(IPartyMember requester) { using (var writer = this.connection.StartSafeWrite(0xC1, 5)) { var packet = writer.Span; packet[2] = 0x40; packet[3] = requester.Id.GetHighByte(); packet[4] = requester.Id.GetLowByte(); writer.Commit(); } }
/// <summary> /// Kicks the player from the party. /// </summary> /// <param name="sender">The sender.</param> public void KickMySelf(IPartyMember sender) { for (int i = 0; i < this.PartyList.Count; i++) { if (this.PartyList[i].Id == sender.Id) { this.ExitParty(this.PartyList[i], (byte)i); return; } } }
/// <summary> /// Adds the specified new party mate. /// </summary> /// <param name="newPartyMate">The new party mate.</param> /// <returns><c>True</c>, if adding was successful; Otherwise, <c>false</c>.</returns> public bool Add(IPartyMember newPartyMate) { if (this.PartyList.Count >= this.maxPartySize) { return(false); } this.PartyList.Add(newPartyMate); newPartyMate.Party = this; this.SendPartyList(); return(true); }
private void ExitParty(IPartyMember player, byte index) { if (this.PartyList.Count < 3 || Equals(this.PartyMaster, player)) { this.Dispose(); return; } this.PartyList.Remove(player); player.Party = null; player.ViewPlugIns.GetPlugIn <IPartyMemberRemovedPlugIn>()?.PartyMemberRemoved(index); this.SendPartyList(); }
private void ExitParty(IPartyMember player, byte index) { if (this.PartyList.Count < 3 || Equals(this.PartyMaster, player)) { this.Dispose(); return; } this.PartyList.Remove(player); player.Party = null; player.PartyView.PartyMemberDelete(index); this.SendPartyList(); }
/// <summary> /// Kicks the player from the party. /// Only the party master is allowed to kick other players. However, players can kick themself out of the party. /// </summary> /// <param name="sender">The sender.</param> /// <param name="index">The party list index of the member to kick.</param> public void KickPlayer(IPartyMember sender, byte index) { if (!Equals(sender, this.PartyList[0]) && !Equals(sender, this.PartyList[index])) { Log.WarnFormat("Suspicious request for sender with name: {0}, could be hack attempt.", sender.Name); return; } var toKick = this.PartyList[index]; this.ExitParty(toKick, index); }
/// <summary> /// Kicks the player from the party. /// Only the party master is allowed to kick other players. However, players can kick themself out of the party. /// </summary> /// <param name="sender">The sender.</param> /// <param name="index">The party list index of the member to kick.</param> public void KickPlayer(IPartyMember sender, byte index) { if (!Equals(sender, this.PartyList[0]) && !Equals(sender, this.PartyList[index])) { // todo: maybe log wrong request as hack attempt return; } var toKick = this.PartyList[index]; this.ExitParty(toKick); }
/// <summary> /// Initializes a new instance of the <see cref="Party" /> class. /// </summary> /// <param name="partyMaster">The party master.</param> /// <param name="maxPartySize">Maximum size of the party.</param> /// <param name="logger">Logger of this party.</param> public Party(IPartyMember partyMaster, byte maxPartySize, ILogger <Party> logger) { this.PartyMaster = partyMaster; this.maxPartySize = maxPartySize; this.logger = logger; this.PartyList = new List <IPartyMember>(maxPartySize); this.experienceDistributionList = new List <Player>(this.MaxPartySize); var updateInterval = new TimeSpan(0, 0, 0, 0, 500); this.healthUpdate = new Timer(this.HealthUpdate_Elapsed, null, updateInterval, updateInterval); this.Add(partyMaster); }
private void ExitParty(IPartyMember player, byte index) { if (this.PartyList.Count < 3 || Equals(this.PartyMaster, player)) { this.Dispose(); return; } this.PartyList.Remove(player); player.Party = null; try { player.ViewPlugIns.GetPlugIn <IPartyMemberRemovedPlugIn>()?.PartyMemberRemoved(index); } catch (Exception ex) { this.logger.LogDebug("Error when calling PartyMemberRemoved. Already disconnected?", ex); } this.SendPartyList(); }
/// <summary> /// Initializes a new instance of the <see cref="PartyView"/> class. /// </summary> /// <param name="connection">The connection.</param> /// <param name="player">The player.</param> public PartyView(IConnection connection, IPartyMember player) : base(connection) { this.connection = connection; this.player = player; }
/// <inheritdoc/> public void ShowPartyRequest(IPartyMember requester) { this.connection.Send(new byte[] { 0xC1, 0x05, 0x40, requester.Id.GetHighByte(), requester.Id.GetLowByte() }); }
public static bool IsPlayerWithSkill(IPartyMember specificPlayer, Skill skill) => IsPlayerWithSkill(specificPlayer, skill.SNOPower);
public static bool IsPlayerWithSkill(IPartyMember specificPlayer, SNOPower power) => IsPlayerWithAttrihbute <bool>(specificPlayer, ActorAttributeType.Skill, (int)power);
public static TrinityActor FindLocalPlayer(IPartyMember member) { return(Core.Actors.Actors.OfType <TrinityPlayer>().FirstOrDefault(p => Math.Abs(p.HitPointsMax - member.HitpointsMaxTotal) < 5)); }
public static T IsPlayerWithAttrihbute <T>(IPartyMember specificPlayer, ActorAttributeType attribute, int argument) where T : struct { var player = FindLocalPlayer(specificPlayer); return(player?.Attributes.GetAttribute <T>(ActorAttributeType.Skill, argument) ?? default(T)); }