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

@@ -1,6 +1,8 @@
name: OpenOSRS - CI (PR)
on: pull_request
on:
pull_request:
types: ['opened', 'edited', 'reopened', 'synchronize']
jobs:
pr-lint:
@@ -13,6 +15,8 @@ jobs:
uses: seferov/pr-lint-action@master
with:
title-regex: '^([\w-/]+): \w+'
github-token: ${{ secrets.GITHUB_TOKEN }}
auto-close-message: 'Closing this pull request since the title does not match %pattern% pattern. Please fix the title and re-open the pull request.'
build:
runs-on: ubuntu-latest
@@ -116,4 +120,4 @@ jobs:
if: github.event_name == 'pull_request' && github.actor == 'OpenOSRS'
uses: hmarr/auto-approve-action@v2.0.0
with:
github-token: ${{ secrets.Owain }}
github-token: ${{ secrets.Owain }}

View File

@@ -2,15 +2,17 @@
# OpenOSRS
# OpenOSRS
[![Build Status](https://github.com/open-osrs/runelite/workflows/OpenOSRS%20-%20CI%20(push)/badge.svg)](https://github.com/open-osrs/runelite/actions?query=workflow%3A%22OpenOSRS+-+CI+%28push%29%22)
[![HitCount](http://hits.dwyl.io/open-osrs/runelite.svg)](http://hits.dwyl.io/open-osrs/runelite)
[OpenOSRS](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying more open-source. We are not affiliated with RuneLite.
[OpenOSRS](https://openosrs.com) is an extended version of [RuneLite](https://github.com/runelite/runelite) that provides more functionality and less restrictions while staying fully open-source. We are not affiliated with RuneLite.
## Discord
## Discord
[![Discord](https://img.shields.io/discord/373382904769675265.svg)](https://discord.gg/HN5gf3m)
## Project Layout
## Project Layout
- [cache](cache/src/main/java/net/runelite/cache) - Libraries used for reading/writing cache files, as well as the data in it
- [deobfuscator](deobfuscator/src/main/java/net/runelite/deob) - Can decompile and cleanup gamepacks as well as map updates to newer revs
@@ -23,38 +25,18 @@
- [runescape-api](runescape-api/src/main/java/net/runelite) - Mappings correspond to these interfaces, runelite-api is a subset of this
- [runelite-client](runelite-client/src/main/java/net/runelite/client) - Game client with plugins
## Building
## Building
We have migrated the project to Gradle. Information on how to setup and build the project can be found at https://github.com/open-osrs/runelite/wiki/Building-with-IntelliJ-IDEA
## Private Servers
Currently we support RSMod which can be found at: https://github.com/Tomm0017/rsmod but should work with any server that follows osrs protocol.
```
Gradle
enter
run --args='--rs=RSPS'
into the tasks box
Jar
Use -rs=RSPS arg.
Exe
Use --clientargs="--rs=RSPS" arg.
-----
Codebase is set to 127.0.0.1 by default and can be changed in the Private Server plugin (requires restart)
Update modulus in Private Server plugin.
Disable Default World plugin if you have it enabled, this causes issues with codebase.
```
## License
## License
OpenOSRS is licensed under the BSD 2-clause license. See the license header in the respective file to be sure.
## Contribute and Develop
## Contribute and Develop
We've set up a separate document for our [contribution guidelines](https://github.com/open-osrs/runelite/blob/master/.github/CONTRIBUTING.md).
## Supported By
## Supported By
OpenOSRS uses profiling tools provided by [![YourKit](https://www.yourkit.com/images/yklogo.png)](https://www.yourkit.com/java/profiler/)

View File

@@ -11356,5 +11356,6 @@ public final class ItemID
public static final int TWISTED_TROUSERS_T1 = 24409;
public static final int TWISTED_BOOTS_T1 = 24411;
public static final int TWISTED_LEAGUE_BANNER = 24413;
public static final int RUNE_POUCH_L = 24416;
/* This file is automatically generated. Do not edit. */
}

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)

View File

@@ -662,4 +662,29 @@ public class ItemsKeptOnDeathPluginTest
final List<ItemStack> kept = deathItems.getKeptItems();
assertTrue(kept.contains(new ItemStack(ItemID.AVERNIC_DEFENDER, 1)));
}
@Test
public void lockedItemTest()
{
// Base item data needs to exist for each locked item tested as the death price is pulled from the base item.
final Item defenderBase = mItem(ItemID.AVERNIC_DEFENDER, 1, "Avernic defender", false, 0);
final Item defenderLocked = mItem(ItemID.AVERNIC_DEFENDER_L, 1, "Avernic defender (l)", false, 0);
assertEquals(plugin.getDeathPrice(defenderBase), plugin.getDeathPrice(defenderLocked));
final Item[] inv = new Item[]
{
defenderLocked,
mItem(ItemID.DRAGON_CLAWS, 1, "Dragon Claws", true, 30042579)
};
plugin.isSkulled = true;
plugin.protectingItem = true;
plugin.wildyLevel = 21;
final DeathItems deathItems = plugin.calculateKeptLostItems(inv, new Item[0]);
final List<ItemStack> kept = deathItems.getKeptItems();
assertEquals(inv.length, kept.size());
}
}