/// <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); }
/// <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); }
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); }
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); }
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); }
/// <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); }
/// <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); } }
protected override LootEvent ProcessLocalPlayerSpecialObtain(LootMessage message) { // Obtain via Item (Local Player) return(new LootEvent { LootEventType = LootEventType.Obtain, IsLocalPlayer = true, PlayerName = Plugin.GetLocalPlayerName() }); }
protected override LootEvent ProcessLocalPlayerUse(LootMessage message) { // Use (Local Player) return(new LootEvent { LootEventType = LootEventType.Use, IsLocalPlayer = true, PlayerName = Plugin.GetLocalPlayerName() }); }
protected override LootEvent ProcessOtherPlayerObtainLoot(LootMessage message) { // Obtain Loot (Other Player) return(new LootEvent { LootEventType = LootEventType.Obtain, IsLocalPlayer = false, PlayerName = message.MessageParts[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, }); }
/// <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(), }); }
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); }
/// <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); }
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); }
/// <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); }
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); } }
/// <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); }
/// <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); }
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); }
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); }
/// <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); }
protected abstract LootEvent ProcessLocalPlayerUse(LootMessage message);
protected abstract LootEvent ProcessOtherPlayerSynthesize(LootMessage message);
protected abstract LootEvent ProcessGather(LootMessage message);
protected abstract LootEvent ProcessFastCraft(LootMessage message);
protected abstract LootEvent ProcessOtherPlayerUse(LootMessage message);
protected abstract LootEvent ProcessLocalPlayerSpecialObtain(LootMessage message);
/// <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); }
protected abstract LootEvent ProcessAddDesynthSell(LootMessage message);