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 = "" description = ""
) )
void setIgnoredEvents(String key); 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.AccountSession;
import net.runelite.client.account.SessionManager; import net.runelite.client.account.SessionManager;
import net.runelite.client.callback.ClientThread; 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.config.ConfigManager;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe; 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.ClientToolbar;
import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.NavigationButton;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.QuantityFormatter;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
import net.runelite.http.api.loottracker.GameItem; import net.runelite.http.api.loottracker.GameItem;
import net.runelite.http.api.loottracker.LootAggregate; import net.runelite.http.api.loottracker.LootAggregate;
@@ -189,6 +194,9 @@ public class LootTrackerPlugin extends Plugin
@Inject @Inject
private EventBus eventBus; private EventBus eventBus;
@Inject
private ChatMessageManager chatMessageManager;
private LootTrackerPanel panel; private LootTrackerPanel panel;
private NavigationButton navButton; private NavigationButton navButton;
@VisibleForTesting @VisibleForTesting
@@ -394,6 +402,11 @@ public class LootTrackerPlugin extends Plugin
final int combat = npc.getCombatLevel(); final int combat = npc.getCombatLevel();
addLoot(name, combat, LootRecordType.NPC, items); addLoot(name, combat, LootRecordType.NPC, items);
if (config.npcKillChatMessage())
{
lootReceivedChatMessage(items, "a " + name);
}
} }
@Subscribe @Subscribe
@@ -411,6 +424,11 @@ public class LootTrackerPlugin extends Plugin
final int combat = player.getCombatLevel(); final int combat = player.getCombatLevel();
addLoot(name, combat, LootRecordType.PLAYER, items); addLoot(name, combat, LootRecordType.PLAYER, items);
if (config.pvpKillChatMessage())
{
lootReceivedChatMessage(items, name);
}
} }
@Subscribe @Subscribe
@@ -840,4 +858,34 @@ public class LootTrackerPlugin extends Plugin
return false; 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.coords.WorldPoint;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.client.account.SessionManager; import net.runelite.client.account.SessionManager;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemStack; import net.runelite.client.game.ItemStack;
import net.runelite.client.game.SpriteManager; import net.runelite.client.game.SpriteManager;
@@ -116,6 +117,10 @@ public class LootTrackerPluginTest
@Bind @Bind
private ItemManager itemManager; private ItemManager itemManager;
@Mock
@Bind
private ChatMessageManager chatMessageManager;
@Before @Before
public void setUp() public void setUp()
{ {