Ejemplo n.º 1
0
        /// <inheritdoc />
        protected override LootEvent?ProcessAddDesynthSell(LootMessage message)
        {
            // Desynth (Local Player)
            if (this.ProcessAddDesynthSellDesynthRegex.IsMatch(message.MessageParts[0]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Desynth,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Orchestration (Local Player)
            if (this.ProcessAddDesynthSellOrchestrationRegex.IsMatch(message.MessageParts.Last()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Use,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            return(null);
        }
Ejemplo n.º 2
0
        /// <inheritdoc />
        protected override LootEvent?ProcessOtherPlayerRoll(LootMessage message)
        {
            var lootEvent = new LootEvent
            {
                IsLocalPlayer = false,
                PlayerName    = message.MessageParts.First(),
                World         = message.Player?.World.Name.ToString() ?? string.Empty,
            };

            // Cast Lot (Other Player)
            if (message.MessageParts.Count >= 2 && this.ProcessOtherPlayerRollCastRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Cast;
            }

            // Need Roll (Other Player)
            else if (message.MessageParts.Count >= 2 && this.ProcessOtherPlayerRollNeedRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Need;
                lootEvent.Roll          = Convert.ToUInt16(this.RollRegex.Match(message.MessageParts.Last()).Groups["Roll"].Value);
            }

            // Greed Roll (Other Player)
            else if (message.MessageParts.Count >= 2 && this.ProcessOtherPlayerRollGreedRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Greed;
                lootEvent.Roll          = Convert.ToUInt16(this.RollRegex.Match(message.MessageParts.Last()).Groups["Roll"].Value);
            }
            else
            {
                return(null);
            }

            return(lootEvent);
        }
Ejemplo n.º 3
0
        protected override LootEvent ProcessGather(LootMessage message)
        {
            // Obtain by MIN/BTN (Local Player)
            if (ProcessGatherMinBtnRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Gather,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            // Obtain by FSH (Local Player)
            if (ProcessGatherFshRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Gather,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;
            return(null);
        }
Ejemplo n.º 4
0
        protected override LootEvent ProcessLocalPlayerRoll(LootMessage message)
        {
            var lootEvent = new LootEvent
            {
                IsLocalPlayer = true,
                PlayerName    = Plugin.GetLocalPlayerName()
            };

            // Cast Lot (Local Player)
            if (ProcessLocalPlayerRollCastRegex.IsMatch(message.MessageParts.First()))
            {
                lootEvent.LootEventType = LootEventType.Cast;
            }

            // Need Roll (Local Player)
            else if (message.MessageParts.Count >= 1 && ProcessLocalPlayerRollNeedRegex.IsMatch(message.MessageParts[0]))
            {
                lootEvent.LootEventType = LootEventType.Need;
                lootEvent.Roll          = Convert.ToUInt16(RollRegex.Match(message.MessageParts.First()).Groups["Roll"].Value);
            }

            // Greed Roll (Local Player)
            else if (ProcessLocalPlayerRollGreedRegex.IsMatch(message.MessageParts.First()))
            {
                lootEvent.LootEventType = LootEventType.Greed;
                lootEvent.Roll          = Convert.ToUInt16(RollRegex.Match(message.MessageParts.First()).Groups["Roll"].Value);
            }

            else
            {
                return(null);
            }

            return(lootEvent);
        }
Ejemplo n.º 5
0
        protected override LootEvent ProcessOtherPlayerRoll(LootMessage message)
        {
            var lootEvent = new LootEvent
            {
                IsLocalPlayer = false,
                PlayerName    = message.MessageParts[0]
            };

            // Cast Lot (Other Player)
            if (message.MessageParts.Count >= 2 && ProcessOtherPlayerRollCastRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Cast;
            }

            // Need Roll (Other Player)
            else if (message.MessageParts.Count >= 2 && ProcessOtherPlayerRollNeedRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Need;
                lootEvent.Roll          = Convert.ToUInt16(RollRegex.Match(message.MessageParts[1]).Groups["Roll"].Value);
            }

            // Greed Roll (Other Player)
            else if (message.MessageParts.Count >= 2 && ProcessOtherPlayerRollGreedRegex.IsMatch(message.MessageParts[1]))
            {
                lootEvent.LootEventType = LootEventType.Greed;
                lootEvent.Roll          = Convert.ToUInt16(RollRegex.Match(message.MessageParts[1]).Groups["Roll"].Value);
            }

            else
            {
                return(null);
            }

            return(lootEvent);
        }
Ejemplo n.º 6
0
        /// <inheritdoc />
        protected override LootEvent?ProcessGather(LootMessage message)
        {
            // Obtain by MIN/BTN (Local Player)
            if (this.ProcessGatherMinBtnRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Gather,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Obtain by FSH (Local Player)
            if (this.ProcessGatherFshRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Gather,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            return(null);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Process loot message.
        /// </summary>
        /// <param name="message">message from chat.</param>
        /// <returns>loot event.</returns>
        public LootEvent?ProcessLoot(LootMessage message)
        {
            try
            {
                // process by message type
                var lootEvent = message.LootMessageType switch
                {
                    LootMessageType.System => this.ProcessSystem(message),
                    LootMessageType.LocalPlayerObtainLoot => this.ProcessLocalPlayerObtainLoot(message),
                    LootMessageType.LocalPlayerRoll => this.ProcessLocalPlayerRoll(message),
                    LootMessageType.OtherPlayerObtainLoot => this.ProcessOtherPlayerObtainLoot(message),
                    LootMessageType.OtherPlayerRoll => this.ProcessOtherPlayerRoll(message),
                    LootMessageType.AddDesynthSell => this.ProcessAddDesynthSell(message),
                    LootMessageType.LocalPlayerUse => this.ProcessLocalPlayerUse(message),
                    LootMessageType.LocalPlayerSpecialObtain => this.ProcessLocalPlayerSpecialObtain(message),
                    LootMessageType.OtherPlayerUse => this.ProcessOtherPlayerUse(message),
                    LootMessageType.FastCraft => this.ProcessFastCraft(message),
                    LootMessageType.Gather => this.ProcessGather(message),
                    LootMessageType.LocalPlayerSynthesize => this.ProcessLocalPlayerSynthesize(message),
                    LootMessageType.OtherPlayerSynthesize => this.ProcessOtherPlayerSynthesize(message),
                    LootMessageType.AllianceOtherPlayerObtain => this.ProcessOtherPlayerObtainLoot(message),
                    LootMessageType.AllianceOtherPlayerRoll => this.ProcessOtherPlayerRoll(message),
                    _ => null,
                };

                // reject if unsupported type
                if (lootEvent == null)
                {
                    return(null);
                }

                // set common fields
                lootEvent.LootMessage       = message;
                lootEvent.LootEventTypeName = Enum.GetName(typeof(LootEventType), lootEvent.LootEventType) ?? string.Empty;
                lootEvent.ItemName          = lootEvent.LootMessage.ItemName;
                if (string.IsNullOrEmpty(lootEvent.ItemName))
                {
                    lootEvent.ItemNameAbbreviated = lootEvent.ItemName;
                }
                else
                {
                    lootEvent.ItemNameAbbreviated = lootEvent.LootMessage.ItemName.Length <= 30
                        ? lootEvent.LootMessage.ItemName
                        : lootEvent.LootMessage.ItemName.Substring(0, 26) + "...";
                }

                lootEvent.PlayerName = this.Plugin.FormatPlayerName(this.Plugin.Configuration.ChatNameFormat, lootEvent.PlayerName);
                if (lootEvent.LootMessage.IsHq)
                {
                    lootEvent.ItemNameAbbreviated += " " + this.Plugin.GetSeIcon(SeIconChar.HighQuality);
                }
                return(lootEvent);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Failed to process item.");
                return(null);
            }
        }
Ejemplo n.º 8
0
 protected override LootEvent ProcessLocalPlayerSpecialObtain(LootMessage message)
 {
     // Obtain via Item (Local Player)
     return(new LootEvent
     {
         LootEventType = LootEventType.Obtain,
         IsLocalPlayer = true,
         PlayerName = Plugin.GetLocalPlayerName()
     });
 }
Ejemplo n.º 9
0
 protected override LootEvent ProcessLocalPlayerUse(LootMessage message)
 {
     // Use (Local Player)
     return(new LootEvent
     {
         LootEventType = LootEventType.Use,
         IsLocalPlayer = true,
         PlayerName = Plugin.GetLocalPlayerName()
     });
 }
Ejemplo n.º 10
0
 protected override LootEvent ProcessOtherPlayerObtainLoot(LootMessage message)
 {
     // Obtain Loot (Other Player)
     return(new LootEvent
     {
         LootEventType = LootEventType.Obtain,
         IsLocalPlayer = false,
         PlayerName = message.MessageParts[0]
     });
 }
Ejemplo n.º 11
0
 /// <inheritdoc />
 protected override LootEvent ProcessOtherPlayerObtainLoot(LootMessage message)
 {
     // Obtain Loot (Other Player)
     return(new ()
     {
         LootEventType = LootEventType.Obtain,
         IsLocalPlayer = false,
         PlayerName = message.MessageParts.First(),
         World = message.Player?.World.Name.ToString() ?? string.Empty,
     });
 }
Ejemplo n.º 12
0
 /// <inheritdoc />
 protected override LootEvent ProcessLocalPlayerObtainLoot(LootMessage message)
 {
     // Obtain Loot (Local Player)
     return(new ()
     {
         LootEventType = LootEventType.Obtain,
         IsLocalPlayer = true,
         PlayerName = this.Plugin.GetLocalPlayerName(),
         World = this.Plugin.GetLocalPlayerWorld(),
     });
 }
Ejemplo n.º 13
0
 protected override LootEvent ProcessOtherPlayerUse(LootMessage message)
 {
     // Use (Other Player)
     if (message.MessageParts.Count >= 2 && ProcessOtherPlayerUseRegex.IsMatch(message.MessageParts[1]))
     {
         return new LootEvent
                {
                    LootEventType = LootEventType.Use,
                    PlayerName    = message.MessageParts[0]
                }
     }
     ;
     return(null);
 }
Ejemplo n.º 14
0
        /// <inheritdoc />
        protected override LootEvent?ProcessOtherPlayerSynthesize(LootMessage message)
        {
            // Obtain by Crafting (Other Player)
            if (message.MessageParts.Count >= 2 && this.ProcessOtherPlayerSynthesizeRegex.IsMatch(message.MessageParts[1]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Craft,
                    PlayerName = message.MessageParts.First(),
                    World = message.Player?.World.Name.ToString() ?? string.Empty,
                });
            }

            return(null);
        }
Ejemplo n.º 15
0
 protected override LootEvent ProcessLocalPlayerSynthesize(LootMessage message)
 {
     // Obtain by Crafting (Local Player)
     if (ProcessLocalPlayerSynthesizeRegex.IsMatch(message.MessageParts.Last()))
     {
         return new LootEvent
                {
                    LootEventType = LootEventType.Craft,
                    IsLocalPlayer = true,
                    PlayerName    = Plugin.GetLocalPlayerName()
                }
     }
     ;
     return(null);
 }
Ejemplo n.º 16
0
        /// <inheritdoc />
        protected override LootEvent?ProcessOtherPlayerUse(LootMessage message)
        {
            // Use (Other Player)
            if (this.ProcessOtherPlayerUseRegex.IsMatch(message.MessageParts[1]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Use,
                    PlayerName = message.MessageParts[0],
                    World = message.Player?.World.Name.ToString() ?? string.Empty,
                });
            }

            return(null);
        }
Ejemplo n.º 17
0
     protected override LootEvent ProcessOtherPlayerSynthesize(LootMessage message)
     {
         // Obtain by Crafting (Other Player)
         if (ProcessOtherPlayerSynthesizeRegex.IsMatch(message.MessageParts.Last()))
         {
             return new LootEvent
                    {
                        LootEventType = LootEventType.Craft,
                        PlayerName    = message.MessageParts[0]
                    }
         }
         ;
         return(null);
     }
 }
Ejemplo n.º 18
0
        /// <inheritdoc />
        protected override LootEvent?ProcessLocalPlayerSynthesize(LootMessage message)
        {
            // Obtain by Crafting (Local Player)
            if (this.ProcessLocalPlayerSynthesizeRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Craft,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            return(null);
        }
Ejemplo n.º 19
0
        /// <inheritdoc />
        protected override LootEvent?ProcessFastCraft(LootMessage message)
        {
            // Use Materia (Local Player)
            if (message.MessageParts.Count >= 4 && this.ProcessFastCraftUseMateriaRegex.IsMatch(message.MessageParts[3]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Use,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Extract Materia (Local Player)
            if (message.MessageParts.Count >= 4 && this.ProcessFastCraftExtractMateriaRegex.IsMatch(message.MessageParts[3]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Obtain,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Obtain via Crafting (Local Player)
            if (message.MessageParts.Count >= 4 && this.ProcessFastCraftCraftRegex.IsMatch(message.MessageParts[0]) &&
                this.processFastCraftRegex2.IsMatch(message.MessageParts[3]))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Craft,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            return(null);
        }
Ejemplo n.º 20
0
        protected override LootEvent ProcessFastCraft(LootMessage message)
        {
            // Use Materia (Local Player)
            if (ProcessFastCraftUseMateriaRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Use,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            // Extract Materia (Local Player)
            if (ProcessFastCraftExtractMateriaRegex.IsMatch(message.MessageParts.First()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Obtain,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            // Obtain via Crafting (Local Player)
            if (ProcessFastCraftCraftRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Craft,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            return(null);
        }
Ejemplo n.º 21
0
        protected override LootEvent ProcessAddDesynthSell(LootMessage message)
        {
            // Desynth (Local Player)
            if (ProcessAddDesynthSellDesynthRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Desynth,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            // Orchestration (Local Player)
            if (ProcessAddDesynthSellOrchestrationRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Use,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            // Sell (Local Player)
            if (ProcessAddDesynthSellSellRegex.IsMatch(message.MessageParts.Last()))
            {
                return new LootEvent
                       {
                           LootEventType = LootEventType.Sell,
                           IsLocalPlayer = true,
                           PlayerName    = Plugin.GetLocalPlayerName()
                       }
            }
            ;

            return(null);
        }
Ejemplo n.º 22
0
        /// <inheritdoc />
        protected override LootEvent?ProcessLocalPlayerRoll(LootMessage message)
        {
            var lootEvent = new LootEvent
            {
                IsLocalPlayer = true,
            };

            // Cast Lot (Local Player)
            if (this.ProcessLocalPlayerRollCastRegex.IsMatch(message.MessageParts.First()))
            {
                lootEvent.LootEventType = LootEventType.Cast;
            }

            // Need Roll (Local Player)
            else if (this.ProcessLocalPlayerRollNeedRegex.IsMatch(message.MessageParts.First()))
            {
                lootEvent.LootEventType = LootEventType.Need;
                lootEvent.Roll          = Convert.ToUInt16(this.RollRegex.Match(message.MessageParts.Last()).Groups["Roll"].Value);
            }

            // Greed Roll (Local Player)
            else if (this.ProcessLocalPlayerRollGreedRegex.IsMatch(message.MessageParts.First()))
            {
                lootEvent.LootEventType = LootEventType.Greed;
                lootEvent.Roll          = Convert.ToUInt16(this.RollRegex.Match(message.MessageParts.Last()).Groups["Roll"].Value);
            }
            else
            {
                return(null);
            }

            lootEvent.PlayerName = this.Plugin.GetLocalPlayerName();
            lootEvent.World      = this.Plugin.GetLocalPlayerWorld();

            return(lootEvent);
        }
Ejemplo n.º 23
0
 protected abstract LootEvent ProcessLocalPlayerUse(LootMessage message);
Ejemplo n.º 24
0
 protected abstract LootEvent ProcessOtherPlayerSynthesize(LootMessage message);
Ejemplo n.º 25
0
 protected abstract LootEvent ProcessGather(LootMessage message);
Ejemplo n.º 26
0
 protected abstract LootEvent ProcessFastCraft(LootMessage message);
Ejemplo n.º 27
0
 protected abstract LootEvent ProcessOtherPlayerUse(LootMessage message);
Ejemplo n.º 28
0
 protected abstract LootEvent ProcessLocalPlayerSpecialObtain(LootMessage message);
Ejemplo n.º 29
0
        /// <inheritdoc />
        protected override LootEvent?ProcessSystem(LootMessage message)
        {
            // Searched (Local Player)
            if (this.ProcessSystemSearchRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Search,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Added
            if (this.ProcessSystemAddedRegex.IsMatch(message.MessageParts.Last()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Add,
                });
            }

            // Lost
            if (this.ProcessSystemLostRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Lost,
                });
            }

            // Purchased (Local Player)
            if (this.ProcessSystemPurchasedRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Purchase,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Discarded (Local Player)
            if (this.ProcessSystemDiscardedRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Discard,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Obtained from Desynth (Local Player)
            if (this.ProcessSystemObtainedFromDesynthRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Obtain,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Obtained by Retrieving Materia (Local Player)
            if (this.ProcessSystemObtainedFromMateriaRegex.IsMatch(message.MessageParts.First()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Obtain,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            // Lost Materia (Local Player)
            if (this.ProcessSystemLostMateriaRegex.IsMatch(message.MessageParts.Last()))
            {
                return(new LootEvent
                {
                    LootEventType = LootEventType.Lost,
                    IsLocalPlayer = true,
                    PlayerName = this.Plugin.GetLocalPlayerName(),
                    World = this.Plugin.GetLocalPlayerWorld(),
                });
            }

            return(null);
        }
Ejemplo n.º 30
0
 protected abstract LootEvent ProcessAddDesynthSell(LootMessage message);