コード例 #1
0
 private void SendMessageToPlayer(IPartyMember partyMember, string message, MessageType type)
 {
     if (partyMember is Player player)
     {
         player.ViewPlugIns.GetPlugIn <IShowMessagePlugIn>()?.ShowMessage(message, type);
     }
 }
コード例 #2
0
 private void SendMessageToPlayer(IPartyMember partyMember, string message, MessageType type)
 {
     if (partyMember is Player player)
     {
         player.PlayerView.ShowMessage(message, type);
     }
 }
コード例 #3
0
        private void SendPartyRequest(IPartyMember toRequest, IPartyMember requester)
        {
            if (Equals(requester, toRequest))
            {
                return;
            }

            toRequest.LastPartyRequester = requester;
            toRequest.PartyView.ShowPartyRequest(requester);
        }
コード例 #4
0
        private void SendPartyRequest(IPartyMember toRequest, IPartyMember requester)
        {
            if (Equals(requester, toRequest))
            {
                return;
            }

            toRequest.LastPartyRequester = requester;
            toRequest.ViewPlugIns.GetPlugIn <IShowPartyRequestPlugIn>()?.ShowPartyRequest(requester);
        }
コード例 #5
0
ファイル: PartyView.cs プロジェクト: izanf/OpenMU
 /// <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();
     }
 }
コード例 #6
0
 /// <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;
         }
     }
 }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
ファイル: Party.cs プロジェクト: khongtuong/OpenMU
        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();
        }
コード例 #9
0
        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();
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
        /// <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);
        }
コード例 #12
0
ファイル: Party.cs プロジェクト: webdes27/OpenMU
        /// <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);
        }
コード例 #13
0
        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();
        }
コード例 #14
0
ファイル: PartyView.cs プロジェクト: izanf/OpenMU
 /// <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;
 }
コード例 #15
0
 /// <inheritdoc/>
 public void ShowPartyRequest(IPartyMember requester)
 {
     this.connection.Send(new byte[] { 0xC1, 0x05, 0x40, requester.Id.GetHighByte(), requester.Id.GetLowByte() });
 }
コード例 #16
0
 public static bool IsPlayerWithSkill(IPartyMember specificPlayer, Skill skill)
 => IsPlayerWithSkill(specificPlayer, skill.SNOPower);
コード例 #17
0
 public static bool IsPlayerWithSkill(IPartyMember specificPlayer, SNOPower power)
 => IsPlayerWithAttrihbute <bool>(specificPlayer, ActorAttributeType.Skill, (int)power);
コード例 #18
0
 public static TrinityActor FindLocalPlayer(IPartyMember member)
 {
     return(Core.Actors.Actors.OfType <TrinityPlayer>().FirstOrDefault(p => Math.Abs(p.HitPointsMax - member.HitpointsMaxTotal) < 5));
 }
コード例 #19
0
        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));
        }