Merge branch 'master' into runepouch

This commit is contained in:
Owain van Brakel
2019-11-23 23:43:59 +01:00
committed by GitHub
8 changed files with 342 additions and 93 deletions

View File

@@ -69,6 +69,9 @@ public class XpDropPlugin extends Plugin
private static final int XPDROP_PADDING = 2; // space between xp drop icons
private static final double HITPOINT_RATIO = 1.33; // Base rate of hp xp per point damage
private static final double DMM_MULTIPLIER_RATIO = 10;
private static final double TL_MULTIPLIER_RATIO = 5;
private static final int TWISTED_LEAGUE_WAY_OF_THE_WARRIOR = 3;
private static final int TWISTED_LEAGUE_XERICS_WISDOM = 3;
@Inject
private Client client;
@Inject
@@ -352,12 +355,26 @@ public class XpDropPlugin extends Plugin
private void calculateDamageDealt(int diff)
{
double damageDealt = diff / HITPOINT_RATIO;
// DeadMan mode has an XP modifier
// DeadMan mode has an XP modifier of 10x, Twisted League mode has an XP modifier of 5x
if (client.getWorldType().contains(WorldType.DEADMAN))
{
damageDealt = damageDealt / DMM_MULTIPLIER_RATIO;
}
if (client.getWorldType().contains(WorldType.LEAGUE))
{
damageDealt = damageDealt / TL_MULTIPLIER_RATIO;
if (client.getVar(Varbits.TWISTED_LEAGUE_RELIC_3) == TWISTED_LEAGUE_WAY_OF_THE_WARRIOR)
{
damageDealt = damageDealt / 2;
}
if (client.getVar(Varbits.TWISTED_LEAGUE_RELIC_5) == TWISTED_LEAGUE_XERICS_WISDOM)
{
damageDealt = damageDealt / 2;
}
}
// Some NPCs have an XP modifier, account for it here.
Actor a = client.getLocalPlayer().getInteracting();
if (!(a instanceof NPC) && !(a instanceof Player))

View File

@@ -349,12 +349,16 @@ public class ItemsKeptOnDeathPlugin extends Plugin
// Items are kept if:
// 1) is not tradeable
// 2) is under the deep wilderness line
// 3) is outside of the wilderness, or item has a broken form
// 2) Outside the wilderness: All are kept excluding `Pets` & `LostIfNotProtected`. (`AlwaysLostItem` are handled above)
// 3) In low level wilderness: (<=20) only `LockedItem`s and `BrokenOnDeathItem`s are kept
// 4) In deep level wilderness: (>=21) only `LockedItem`s are kept
if (!Pets.isPet(id)
&& !LostIfNotProtected.isLostIfNotProtected(id)
&& !isTradeable(itemManager.getItemDefinition(id)) && wildyLevel <= DEEP_WILDY
&& (wildyLevel <= 0 || ItemReclaimCost.of(id) != null))
&& !isTradeable(itemManager.getItemDefinition(id))
&& (wildyLevel <= 0
|| LockedItem.getBaseIdFromLockedId(id) != null
|| (wildyLevel <= DEEP_WILDY && ItemReclaimCost.of(id) != null))
)
{
keptItems.add(new ItemStack(id, qty));
}
@@ -432,17 +436,33 @@ public class ItemsKeptOnDeathPlugin extends Plugin
*/
@VisibleForTesting
int getDeathPrice(Item item)
{
return getDeathPriceById(item.getId());
}
/**
* Get the price of an item by its id
*
* @param itemId
* @return
*/
private int getDeathPriceById(final int itemId)
{
// 1) Check if the death price is dynamically calculated, if so return that value
// 2) If death price is based off another item default to that price, otherwise apply normal ItemMapping GE price
// 3) If still no price, default to store price
// 4) Apply fixed price offset if applicable
int itemId = item.getId();
// Unnote/unplaceholder item
int canonicalizedItemId = itemManager.canonicalize(itemId);
int exchangePrice = 0;
final Integer lockedBase = LockedItem.getBaseIdFromLockedId(canonicalizedItemId);
if (lockedBase != null)
{
return getDeathPriceById(lockedBase);
}
final DynamicPriceItem dynamicPrice = DynamicPriceItem.find(canonicalizedItemId);
if (dynamicPrice != null)
{
@@ -774,4 +794,4 @@ public class ItemsKeptOnDeathPlugin extends Plugin
return itemWidget;
}
}
}

View File

@@ -0,0 +1,121 @@
/*
* Copyright (c) 2019, TheStonedTurtle <https://github.com/TheStonedTurtle>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.itemskeptondeath;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import javax.annotation.Nullable;
import lombok.AllArgsConstructor;
import net.runelite.api.ItemID;
/**
* A locked item will be kept in its unbroken state upon dying with it past level 20 Wildy but its locked status will be lost.
* Only certain untradeable items can be combined with a Trouver parchment by talking to Perdu and paying a fee.
*
* View the Trouver parchment wiki page for more information: https://oldschool.runescape.wiki/w/Trouver_parchment
*/
@AllArgsConstructor
public enum LockedItem
{
LOCKED_INFERNAL_CAPE(ItemID.INFERNAL_CAPE_L, ItemID.INFERNAL_CAPE),
LOCKED_INFERNAL_MAX_CAPE(ItemID.INFERNAL_MAX_CAPE_L, ItemID.INFERNAL_MAX_CAPE),
LOCKED_FIRE_CAPE(ItemID.FIRE_CAPE_L, ItemID.FIRE_CAPE),
LOCKED_FIRE_MAX_CAPE(ItemID.FIRE_MAX_CAPE_L, ItemID.FIRE_MAX_CAPE),
LOCKED_AVAS_ASSEMBLER(ItemID.AVAS_ASSEMBLER_L, ItemID.AVAS_ASSEMBLER),
LOCKED_ASSEMBLER_MAX_CAPE(ItemID.ASSEMBLER_MAX_CAPE_L, ItemID.ASSEMBLER_MAX_CAPE),
LOCKED_IMBUED_SARADOMIN_CAPE(ItemID.IMBUED_SARADOMIN_CAPE_L, ItemID.IMBUED_SARADOMIN_CAPE),
LOCKED_IMBUED_SARADOMIN_MAX_CAPE(ItemID.IMBUED_SARADOMIN_MAX_CAPE_L, ItemID.IMBUED_SARADOMIN_MAX_CAPE),
LOCKED_IMBUED_GUTHIX_CAPE(ItemID.IMBUED_GUTHIX_CAPE_L, ItemID.IMBUED_GUTHIX_CAPE),
LOCKED_IMBUED_GUTHIX_MAX_CAPE(ItemID.IMBUED_GUTHIX_MAX_CAPE_L, ItemID.IMBUED_GUTHIX_MAX_CAPE),
LOCKED_IMBUED_ZAMORAK_CAPE(ItemID.IMBUED_ZAMORAK_CAPE_L, ItemID.IMBUED_ZAMORAK_CAPE),
LOCKED_IMBUED_ZAMORAK_MAX_CAPE(ItemID.IMBUED_ZAMORAK_MAX_CAPE_L, ItemID.IMBUED_ZAMORAK_MAX_CAPE),
LOCKED_BRONZE_DEFENDER(ItemID.BRONZE_DEFENDER_L, ItemID.BRONZE_DEFENDER),
LOCKED_IRON_DEFENDER(ItemID.IRON_DEFENDER_L, ItemID.IRON_DEFENDER),
LOCKED_STEEL_DEFENDER(ItemID.STEEL_DEFENDER_L, ItemID.STEEL_DEFENDER),
LOCKED_BLACK_DEFENDER(ItemID.BLACK_DEFENDER_L, ItemID.BLACK_DEFENDER),
LOCKED_MITHRIL_DEFENDER(ItemID.MITHRIL_DEFENDER_L, ItemID.MITHRIL_DEFENDER),
LOCKED_ADAMANT_DEFENDER(ItemID.ADAMANT_DEFENDER_L, ItemID.ADAMANT_DEFENDER),
LOCKED_RUNE_DEFENDER(ItemID.RUNE_DEFENDER_L, ItemID.RUNE_DEFENDER),
LOCKED_DRAGON_DEFENDER(ItemID.DRAGON_DEFENDER_L, ItemID.DRAGON_DEFENDER),
LOCKED_AVERNIC_DEFENDER(ItemID.AVERNIC_DEFENDER_L, ItemID.AVERNIC_DEFENDER),
LOCKED_SARADOMIN_HALO(ItemID.SARADOMIN_HALO_L, ItemID.SARADOMIN_HALO),
LOCKED_ZAMORAK_HALO(ItemID.ZAMORAK_HALO_L, ItemID.ZAMORAK_HALO),
LOCKED_GUTHIX_HALO(ItemID.GUTHIX_HALO_L, ItemID.GUTHIX_HALO),
LOCKED_ARMADYL_HALO(ItemID.ARMADYL_HALO_L, ItemID.ARMADYL_HALO),
LOCKED_BANDOS_HALO(ItemID.BANDOS_HALO_L, ItemID.BANDOS_HALO),
LOCKED_SEREN_HALO(ItemID.SEREN_HALO_L, ItemID.SEREN_HALO),
LOCKED_ANCIENT_HALO(ItemID.ANCIENT_HALO_L, ItemID.ANCIENT_HALO),
LOCKED_BRASSICA_HALO(ItemID.BRASSICA_HALO_L, ItemID.BRASSICA_HALO),
LOCKED_HEALER_HAT(ItemID.HEALER_HAT_L, ItemID.HEALER_HAT),
LOCKED_FIGHTER_HAT(ItemID.FIGHTER_HAT_L, ItemID.FIGHTER_HAT),
LOCKED_RANGER_HAT(ItemID.RANGER_HAT_L, ItemID.RANGER_HAT),
LOCKED_FIGHTER_TORSO(ItemID.FIGHTER_TORSO_L, ItemID.FIGHTER_TORSO),
LOCKED_PENANCE_SKIRT(ItemID.PENANCE_SKIRT_L, ItemID.PENANCE_SKIRT),
LOCKED_VOID_KNIGHT_TOP(ItemID.VOID_KNIGHT_TOP_L, ItemID.VOID_KNIGHT_TOP),
LOCKED_ELITE_VOID_TOP(ItemID.ELITE_VOID_TOP_L, ItemID.ELITE_VOID_TOP),
LOCKED_VOID_KNIGHT_ROBE(ItemID.VOID_KNIGHT_ROBE_L, ItemID.VOID_KNIGHT_ROBE),
LOCKED_ELITE_VOID_ROBE(ItemID.ELITE_VOID_ROBE_L, ItemID.ELITE_VOID_ROBE),
LOCKED_VOID_KNIGHT_MACE(ItemID.VOID_KNIGHT_MACE_L, ItemID.VOID_KNIGHT_MACE),
LOCKED_VOID_KNIGHT_GLOVES(ItemID.VOID_KNIGHT_GLOVES_L, ItemID.VOID_KNIGHT_GLOVES),
LOCKED_VOID_MAGE_HELM(ItemID.VOID_MAGE_HELM_L, ItemID.VOID_MAGE_HELM),
LOCKED_VOID_RANGER_HELM(ItemID.VOID_RANGER_HELM_L, ItemID.VOID_RANGER_HELM),
LOCKED_VOID_MELEE_HELM(ItemID.VOID_MELEE_HELM_L, ItemID.VOID_MELEE_HELM),
LOCKED_GOLD_DECORATIVE_SWORD(ItemID.DECORATIVE_SWORD_L, ItemID.DECORATIVE_SWORD_4508),
LOCKED_GOLD_DECORATIVE_BODY(ItemID.DECORATIVE_ARMOUR_L, ItemID.DECORATIVE_ARMOUR_4509),
LOCKED_GOLD_DECORATIVE_LEGS(ItemID.DECORATIVE_ARMOUR_L_24159, ItemID.DECORATIVE_ARMOUR_4510),
LOCKED_GOLD_DECORATIVE_HELM(ItemID.DECORATIVE_HELM_L, ItemID.DECORATIVE_HELM_4511),
LOCKED_GOLD_DECORATIVE_SHIELD(ItemID.DECORATIVE_SHIELD_L, ItemID.DECORATIVE_SHIELD_4512),
LOCKED_GOLD_DECORATIVE_SKIRT(ItemID.DECORATIVE_ARMOUR_L_24162, ItemID.DECORATIVE_ARMOUR_11895),
LOCKED_DECORATIVE_MAGE_HAT(ItemID.DECORATIVE_ARMOUR_L_24165, ItemID.DECORATIVE_ARMOUR_11898),
LOCKED_DECORATIVE_MAGE_ROBE_TOP(ItemID.DECORATIVE_ARMOUR_L_24163, ItemID.DECORATIVE_ARMOUR_11896),
LOCKED_DECORATIVE_MAGE_ROBE_LEGS(ItemID.DECORATIVE_ARMOUR_L_24164, ItemID.DECORATIVE_ARMOUR_11897),
LOCKED_DECORATIVE_RANGE_TOP(ItemID.DECORATIVE_ARMOUR_L_24166, ItemID.DECORATIVE_ARMOUR_11899),
LOCKED_DECORATIVE_RANGE_BOTTOM(ItemID.DECORATIVE_ARMOUR_L_24167, ItemID.DECORATIVE_ARMOUR_11900),
LOCKED_DECORATIVE_RANGE_QUIVER(ItemID.DECORATIVE_ARMOUR_L_24168, ItemID.DECORATIVE_ARMOUR_11901),
LOCKED_RUNE_POUCH(ItemID.RUNE_POUCH_L, ItemID.RUNE_POUCH),
;
final private int lockedID;
final private int baseID;
private final static Map<Integer, Integer> ITEMS;
static
{
final ImmutableMap.Builder<Integer, Integer> builder = new ImmutableMap.Builder<>();
for (final LockedItem item : values())
{
builder.put(item.lockedID, item.baseID);
}
ITEMS = builder.build();
}
@Nullable
public static Integer getBaseIdFromLockedId(final int itemID)
{
return ITEMS.get(itemID);
}
}

View File

@@ -35,61 +35,140 @@ final class Pets
}
private static final Set<Integer> PETS = ImmutableSet.of(
BABY_MOLE,
PRINCE_BLACK_DRAGON,
PET_CORPOREAL_CRITTER, PET_DARK_CORE,
JALNIBREK, TZREKZUK,
KALPHITE_PRINCESS, KALPHITE_PRINCESS_12654,
LIL_ZIK,
SKOTOS,
PET_SNAKELING, PET_SNAKELING_12939, PET_SNAKELING_12940,
TZREKJAD,
VORKI,
OLMLET, PUPPADILE, TEKTINY, VANGUARD, VASA_MINIRIO, VESPINA,
PET_DAGANNOTH_PRIME, PET_DAGANNOTH_REX, PET_DAGANNOTH_SUPREME,
PET_GENERAL_GRAARDOR, PET_KRIL_TSUTSAROTH, PET_KREEARRA, PET_ZILYANA,
ABYSSAL_ORPHAN,
HELLPUPPY,
PET_KRAKEN,
MIDNIGHT, NOON,
PET_SMOKE_DEVIL, PET_SMOKE_DEVIL_22663,
IKKLE_HYDRA, IKKLE_HYDRA_22748, IKKLE_HYDRA_22750, IKKLE_HYDRA_22752,
CALLISTO_CUB,
PET_CHAOS_ELEMENTAL,
SCORPIAS_OFFSPRING,
VENENATIS_SPIDERLING,
VETION_JR, VETION_JR_13180,
BABY_CHINCHOMPA, BABY_CHINCHOMPA_13324, BABY_CHINCHOMPA_13325, BABY_CHINCHOMPA_13326,
BEAVER,
GIANT_SQUIRREL,
HERON,
RIFT_GUARDIAN, RIFT_GUARDIAN_20667, RIFT_GUARDIAN_20669, RIFT_GUARDIAN_20671, RIFT_GUARDIAN_20673, RIFT_GUARDIAN_20675,
RIFT_GUARDIAN_20677, RIFT_GUARDIAN_20679, RIFT_GUARDIAN_20681, RIFT_GUARDIAN_20683, RIFT_GUARDIAN_20685, RIFT_GUARDIAN_20687,
RIFT_GUARDIAN_20689, RIFT_GUARDIAN_20691, RIFT_GUARDIAN_21990,
ROCK_GOLEM, ROCK_GOLEM_21187, ROCK_GOLEM_21188, ROCK_GOLEM_21189, ROCK_GOLEM_21190, ROCK_GOLEM_21191, ROCK_GOLEM_21192,
ROCK_GOLEM_21193, ROCK_GOLEM_21194, ROCK_GOLEM_21195, ROCK_GOLEM_21196, ROCK_GOLEM_21197, ROCK_GOLEM_21340, ROCK_GOLEM_21358,
ROCK_GOLEM_21359, ROCK_GOLEM_21360,
ROCKY,
TANGLEROOT,
PET_KITTEN, PET_KITTEN_1556, PET_KITTEN_1557, PET_KITTEN_1558, PET_KITTEN_1559, PET_KITTEN_1560,
PET_CAT, PET_CAT_1562, PET_CAT_1563, PET_CAT_1564, PET_CAT_1565, PET_CAT_1566, PET_CAT_1567, PET_CAT_1568, PET_CAT_1569,
PET_CAT_1570, PET_CAT_1571, PET_CAT_1572,
LAZY_CAT, LAZY_CAT_6550, LAZY_CAT_6551, LAZY_CAT_6552, LAZY_CAT_6553, LAZY_CAT_6554,
WILY_CAT, WILY_CAT_6556, WILY_CAT_6557, WILY_CAT_6558, WILY_CAT_6559, WILY_CAT_6560,
OVERGROWN_HELLCAT, HELL_CAT, HELLKITTEN, LAZY_HELL_CAT, WILY_HELLCAT,
//Cats
HELL_CAT,
HELLKITTEN,
LAZY_CAT,
LAZY_CAT_6550,
LAZY_CAT_6551,
LAZY_CAT_6552,
LAZY_CAT_6553,
LAZY_CAT_6554,
LAZY_HELL_CAT,
OVERGROWN_HELLCAT,
PET_CAT,
PET_CAT_1562,
PET_CAT_1563,
PET_CAT_1564,
PET_CAT_1565,
PET_CAT_1566,
PET_CAT_1567,
PET_CAT_1568,
PET_CAT_1569,
PET_CAT_1570,
PET_CAT_1571,
PET_CAT_1572,
PET_KITTEN,
PET_KITTEN_1556,
PET_KITTEN_1557,
PET_KITTEN_1558,
PET_KITTEN_1559,
PET_KITTEN_1560,
WILY_CAT,
WILY_CAT_6556,
WILY_CAT_6557,
WILY_CAT_6558,
WILY_CAT_6559,
WILY_CAT_6560,
WILY_HELLCAT,
//ClueScroll Pets
BLOODHOUND,
CHOMPY_CHICK,
HERBI,
//PVM Pets
ABYSSAL_ORPHAN,
BABY_MOLE,
CALLISTO_CUB,
CORRUPTED_YOUNGLLEF,
HELLPUPPY,
IKKLE_HYDRA,
IKKLE_HYDRA_22748,
IKKLE_HYDRA_22750,
IKKLE_HYDRA_22752,
JALNIBREK,
KALPHITE_PRINCESS,
KALPHITE_PRINCESS_12654,
LIL_ZIK,
MIDNIGHT,
NOON,
OLMLET,
PET_CHAOS_ELEMENTAL,
PET_CORPOREAL_CRITTER,
PET_DAGANNOTH_PRIME,
PET_DAGANNOTH_REX,
PET_DAGANNOTH_SUPREME,
PET_DARK_CORE,
PET_GENERAL_GRAARDOR,
PET_KRAKEN,
PET_KREEARRA,
PET_KRIL_TSUTSAROTH,
PET_PENANCE_QUEEN,
PHOENIX
PET_SMOKE_DEVIL,
PET_SMOKE_DEVIL_22663,
PET_SNAKELING,
PET_SNAKELING_12939,
PET_SNAKELING_12940,
PET_ZILYANA,
PRINCE_BLACK_DRAGON,
PUPPADILE,
SCORPIAS_OFFSPRING,
SKOTOS,
SMOLCANO,
SRARACHA,
TEKTINY,
TZREKJAD,
TZREKZUK,
VANGUARD,
VASA_MINIRIO,
VENENATIS_SPIDERLING,
VESPINA,
VETION_JR,
VETION_JR_13180,
VORKI,
YOUNGLLEF,
//Skilling Pets
BABY_CHINCHOMPA,
BABY_CHINCHOMPA_13324,
BABY_CHINCHOMPA_13325,
BABY_CHINCHOMPA_13326,
BEAVER,
CHOMPY_CHICK,
GIANT_SQUIRREL,
HERBI,
HERON,
PHOENIX,
RIFT_GUARDIAN,
RIFT_GUARDIAN_20667,
RIFT_GUARDIAN_20669,
RIFT_GUARDIAN_20671,
RIFT_GUARDIAN_20673,
RIFT_GUARDIAN_20675,
RIFT_GUARDIAN_20677,
RIFT_GUARDIAN_20679,
RIFT_GUARDIAN_20681,
RIFT_GUARDIAN_20683,
RIFT_GUARDIAN_20685,
RIFT_GUARDIAN_20687,
RIFT_GUARDIAN_20689,
RIFT_GUARDIAN_20691,
RIFT_GUARDIAN_21990,
ROCK_GOLEM,
ROCK_GOLEM_21187,
ROCK_GOLEM_21188,
ROCK_GOLEM_21189,
ROCK_GOLEM_21190,
ROCK_GOLEM_21191,
ROCK_GOLEM_21192,
ROCK_GOLEM_21193,
ROCK_GOLEM_21194,
ROCK_GOLEM_21195,
ROCK_GOLEM_21196,
ROCK_GOLEM_21197,
ROCK_GOLEM_21340,
ROCK_GOLEM_21358,
ROCK_GOLEM_21359,
ROCK_GOLEM_21360
);
public static boolean isPet(int id)