Merge pull request #10035 from Nightfirecat/add-player-kill-value-chat-message

loottracker: Show chat message after NPC and PVP kills
This commit is contained in:
Tomas Slusny
2020-05-08 03:44:12 +02:00
committed by GitHub
3 changed files with 73 additions and 0 deletions

View File

@@ -107,4 +107,24 @@ public interface LootTrackerConfig extends Config
description = ""
)
void setIgnoredEvents(String key);
@ConfigItem(
keyName = "npcKillChatMessage",
name = "Show chat message for NPC kills",
description = "Adds a chat message with monster name and kill value when receiving loot from an NPC kill."
)
default boolean npcKillChatMessage()
{
return false;
}
@ConfigItem(
keyName = "pvpKillChatMessage",
name = "Show chat message for PVP kills",
description = "Adds a chat message with player name and kill value when receiving loot from a player kill."
)
default boolean pvpKillChatMessage()
{
return false;
}
}

View File

@@ -80,6 +80,10 @@ import net.runelite.api.widgets.WidgetID;
import net.runelite.client.account.AccountSession;
import net.runelite.client.account.SessionManager;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.chat.ChatColorType;
import net.runelite.client.chat.ChatMessageBuilder;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.chat.QueuedMessage;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe;
@@ -98,6 +102,7 @@ import net.runelite.client.task.Schedule;
import net.runelite.client.ui.ClientToolbar;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.QuantityFormatter;
import net.runelite.client.util.Text;
import net.runelite.http.api.loottracker.GameItem;
import net.runelite.http.api.loottracker.LootAggregate;
@@ -189,6 +194,9 @@ public class LootTrackerPlugin extends Plugin
@Inject
private EventBus eventBus;
@Inject
private ChatMessageManager chatMessageManager;
private LootTrackerPanel panel;
private NavigationButton navButton;
@VisibleForTesting
@@ -394,6 +402,11 @@ public class LootTrackerPlugin extends Plugin
final int combat = npc.getCombatLevel();
addLoot(name, combat, LootRecordType.NPC, items);
if (config.npcKillChatMessage())
{
lootReceivedChatMessage(items, "a " + name);
}
}
@Subscribe
@@ -411,6 +424,11 @@ public class LootTrackerPlugin extends Plugin
final int combat = player.getCombatLevel();
addLoot(name, combat, LootRecordType.PLAYER, items);
if (config.pvpKillChatMessage())
{
lootReceivedChatMessage(items, name);
}
}
@Subscribe
@@ -840,4 +858,34 @@ public class LootTrackerPlugin extends Plugin
return false;
}
private long getTotalPrice(Collection<ItemStack> items)
{
long totalPrice = 0;
for (final ItemStack itemStack : items)
{
totalPrice += (long) itemManager.getItemPrice(itemStack.getId()) * itemStack.getQuantity();
}
return totalPrice;
}
private void lootReceivedChatMessage(final Collection<ItemStack> items, final String name)
{
final String message = new ChatMessageBuilder()
.append(ChatColorType.HIGHLIGHT)
.append("You've killed ")
.append(name)
.append(" for ")
.append(QuantityFormatter.quantityToStackSize(getTotalPrice(items)))
.append(" loot.")
.build();
chatMessageManager.queue(
QueuedMessage.builder()
.type(ChatMessageType.CONSOLE)
.runeLiteFormattedMessage(message)
.build());
}
}

View File

@@ -45,6 +45,7 @@ import net.runelite.api.Player;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ChatMessage;
import net.runelite.client.account.SessionManager;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemStack;
import net.runelite.client.game.SpriteManager;
@@ -116,6 +117,10 @@ public class LootTrackerPluginTest
@Bind
private ItemManager itemManager;
@Mock
@Bind
private ChatMessageManager chatMessageManager;
@Before
public void setUp()
{