Merge branch 'runelite-master'
Finalize pre patch day merge
This commit is contained in:
@@ -96,28 +96,56 @@ public class RuneLiteAPI
|
||||
.build();
|
||||
}
|
||||
|
||||
public static HttpUrl getApiRoot()
|
||||
public static HttpUrl getSessionBase()
|
||||
{
|
||||
return HttpUrl.parse(BASE);
|
||||
final String prop = System.getProperty("runelite.session.url");
|
||||
|
||||
if (prop != null && !prop.isEmpty())
|
||||
{
|
||||
return HttpUrl.parse(prop);
|
||||
}
|
||||
|
||||
return HttpUrl.parse(BASE + "/session");
|
||||
}
|
||||
|
||||
public static HttpUrl getSessionBase()
|
||||
public static HttpUrl getRuneLitePlusSessionBase()
|
||||
{
|
||||
return HttpUrl.parse(RLPLUS);
|
||||
}
|
||||
|
||||
public static HttpUrl getApiBase()
|
||||
{
|
||||
final String prop = System.getProperty("runelite.http-service.url");
|
||||
|
||||
if (prop != null && !prop.isEmpty())
|
||||
{
|
||||
return HttpUrl.parse(prop);
|
||||
}
|
||||
|
||||
return HttpUrl.parse(BASE + "/runelite-" + getVersion());
|
||||
}
|
||||
|
||||
public static HttpUrl getStaticBase()
|
||||
{
|
||||
final String prop = System.getProperty("runelite.static.url");
|
||||
|
||||
if (prop != null && !prop.isEmpty())
|
||||
{
|
||||
return HttpUrl.parse(prop);
|
||||
}
|
||||
|
||||
return HttpUrl.parse(STATICBASE);
|
||||
}
|
||||
|
||||
public static HttpUrl getWsEndpoint()
|
||||
{
|
||||
final String prop = System.getProperty("runelite.ws.url");
|
||||
|
||||
if (prop != null && !prop.isEmpty())
|
||||
{
|
||||
return HttpUrl.parse(prop);
|
||||
}
|
||||
|
||||
return HttpUrl.parse(WSBASE);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
import static java.lang.Math.floor;
|
||||
import static java.lang.Math.max;
|
||||
|
||||
/**
|
||||
* A utility class used for calculating experience related values.
|
||||
* <p>
|
||||
@@ -127,6 +124,15 @@ public class Experience
|
||||
return high + 1;
|
||||
}
|
||||
|
||||
private static double getMeleeRangeOrMagicCombatLevelContribution(int attackLevel, int strengthLevel, int magicLevel, int rangeLevel)
|
||||
{
|
||||
double melee = 0.325 * (attackLevel + strengthLevel);
|
||||
double range = 0.325 * (Math.floor(rangeLevel / 2) + rangeLevel);
|
||||
double magic = 0.325 * (Math.floor(magicLevel / 2) + magicLevel);
|
||||
|
||||
return Math.max(melee, Math.max(range, magic));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a non-virtual high-precision combat level without integer
|
||||
* rounding.
|
||||
@@ -146,13 +152,11 @@ public class Experience
|
||||
int defenceLevel, int hitpointsLevel, int magicLevel,
|
||||
int rangeLevel, int prayerLevel)
|
||||
{
|
||||
double base = 0.25 * (defenceLevel + hitpointsLevel + floor(prayerLevel / 2));
|
||||
double base = 0.25 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
|
||||
|
||||
double melee = 0.325 * (attackLevel + strengthLevel);
|
||||
double range = 0.325 * (floor(rangeLevel / 2) + rangeLevel);
|
||||
double magic = 0.325 * (floor(magicLevel / 2) + magicLevel);
|
||||
double typeContribution = getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
|
||||
|
||||
return base + max(melee, max(range, magic));
|
||||
return base + typeContribution;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,4 +177,101 @@ public class Experience
|
||||
{
|
||||
return (int) getCombatLevelPrecise(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate number of attack/strength levels required to increase combat level.
|
||||
*
|
||||
* @param attackLevel the attack level
|
||||
* @param strengthLevel the strength level
|
||||
* @param defenceLevel the defence level
|
||||
* @param hitpointsLevel the hitpoints level
|
||||
* @param magicLevel the magic level
|
||||
* @param rangeLevel the range level
|
||||
* @param prayerLevel the prayer level
|
||||
* @return the number of levels required
|
||||
*/
|
||||
public static int getNextCombatLevelMelee(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
|
||||
int magicLevel, int rangeLevel, int prayerLevel)
|
||||
{
|
||||
int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
|
||||
return (int) Math.ceil(-10. / 13 * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2) - 4 * nextCombatLevel)) - strengthLevel - attackLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate number of hitpoints/defence levels required to increase combat level.
|
||||
*
|
||||
* @param attackLevel the attack level
|
||||
* @param strengthLevel the strength level
|
||||
* @param defenceLevel the defence level
|
||||
* @param hitpointsLevel the hitpoints level
|
||||
* @param magicLevel the magic level
|
||||
* @param rangeLevel the range level
|
||||
* @param prayerLevel the prayer level
|
||||
* @return the number of levels required
|
||||
*/
|
||||
public static int getNextCombatLevelHpDef(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
|
||||
int magicLevel, int rangeLevel, int prayerLevel)
|
||||
{
|
||||
int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
|
||||
double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
|
||||
return (int) Math.ceil(4 * nextCombatLevel - Math.floor(prayerLevel / 2) - 4 * typeContribution) - hitpointsLevel - defenceLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate number of magic levels required to increase combat level.
|
||||
*
|
||||
* @param attackLevel the attack level
|
||||
* @param strengthLevel the strength level
|
||||
* @param defenceLevel the defence level
|
||||
* @param hitpointsLevel the hitpoints level
|
||||
* @param magicLevel the magic level
|
||||
* @param rangeLevel the range level
|
||||
* @param prayerLevel the prayer level
|
||||
* @return the number of levels required
|
||||
*/
|
||||
public static int getNextCombatLevelMagic(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
|
||||
int magicLevel, int rangeLevel, int prayerLevel)
|
||||
{
|
||||
int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
|
||||
return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - magicLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate number of ranged levels required to increase combat level.
|
||||
*
|
||||
* @param attackLevel the attack level
|
||||
* @param strengthLevel the strength level
|
||||
* @param defenceLevel the defence level
|
||||
* @param hitpointsLevel the hitpoints level
|
||||
* @param magicLevel the magic level
|
||||
* @param rangeLevel the range level
|
||||
* @param prayerLevel the prayer level
|
||||
* @return the number of levels required
|
||||
*/
|
||||
public static int getNextCombatLevelRange(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
|
||||
int magicLevel, int rangeLevel, int prayerLevel)
|
||||
{
|
||||
int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
|
||||
return (int) Math.ceil(2. / 3 * Math.ceil(-10. / 13 * (hitpointsLevel + defenceLevel - 4 * nextCombatLevel + Math.floor(prayerLevel / 2)))) - rangeLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate number of prayer levels required to increase combat level.
|
||||
*
|
||||
* @param attackLevel the attack level
|
||||
* @param strengthLevel the strength level
|
||||
* @param defenceLevel the defence level
|
||||
* @param hitpointsLevel the hitpoints level
|
||||
* @param magicLevel the magic level
|
||||
* @param rangeLevel the range level
|
||||
* @param prayerLevel the prayer level
|
||||
* @return the number of levels required
|
||||
*/
|
||||
public static int getNextCombatLevelPrayer(int attackLevel, int strengthLevel, int defenceLevel, int hitpointsLevel,
|
||||
int magicLevel, int rangeLevel, int prayerLevel)
|
||||
{
|
||||
int nextCombatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel, magicLevel, rangeLevel, prayerLevel) + 1;
|
||||
double typeContribution = Experience.getMeleeRangeOrMagicCombatLevelContribution(attackLevel, strengthLevel, magicLevel, rangeLevel);
|
||||
return 2 * (int) Math.ceil(-hitpointsLevel - defenceLevel + 4 * nextCombatLevel - 4 * typeContribution) - prayerLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ public enum Varbits
|
||||
/**
|
||||
* The active tab within the quest interface
|
||||
*/
|
||||
QUEST_TAB(8168);
|
||||
QUEST_TAB(8168),
|
||||
|
||||
/**
|
||||
* Explorer ring
|
||||
|
||||
@@ -39,7 +39,7 @@ class SessionClient
|
||||
{
|
||||
UUID open() throws IOException
|
||||
{
|
||||
HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
|
||||
HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder()
|
||||
.build();
|
||||
|
||||
Request request = new Request.Builder()
|
||||
@@ -61,7 +61,7 @@ class SessionClient
|
||||
|
||||
void ping(UUID uuid) throws IOException
|
||||
{
|
||||
HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
|
||||
HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder()
|
||||
.addPathSegment("ping")
|
||||
.addQueryParameter("session", uuid.toString())
|
||||
.build();
|
||||
@@ -81,7 +81,7 @@ class SessionClient
|
||||
|
||||
void delete(UUID uuid) throws IOException
|
||||
{
|
||||
HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder()
|
||||
HttpUrl url = RuneLiteAPI.getRuneLitePlusSessionBase().newBuilder()
|
||||
.addQueryParameter("session", uuid.toString())
|
||||
.build();
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ public class ChatCommandManager implements ChatboxInputListener
|
||||
case MODCHAT:
|
||||
case FRIENDSCHAT:
|
||||
case PRIVATECHAT:
|
||||
case MODPRIVATECHAT:
|
||||
case PRIVATECHATOUT:
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -29,411 +29,8 @@ import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import static net.runelite.api.ItemID.ABYSSAL_TENTACLE;
|
||||
import static net.runelite.api.ItemID.ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_HOOD_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBESKIRT_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_ROBETOP_75;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_100;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_25;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_50;
|
||||
import static net.runelite.api.ItemID.AHRIMS_STAFF_75;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_FURY;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_FURY_OR;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY1;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY2;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY3;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY5;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T1;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T2;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T3;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_GLORY_T5;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_TORTURE;
|
||||
import static net.runelite.api.ItemID.AMULET_OF_TORTURE_OR;
|
||||
import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD;
|
||||
import static net.runelite.api.ItemID.ANCIENT_WYVERN_SHIELD_21634;
|
||||
import static net.runelite.api.ItemID.ANGUISH_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ARCHERS_RING;
|
||||
import static net.runelite.api.ItemID.ARCHERS_RING_I;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.ARMADYL_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.BANDOS_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.BERSERKER_RING;
|
||||
import static net.runelite.api.ItemID.BERSERKER_RING_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_1;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_10_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_1_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_2;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_2_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_3;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_3_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_4;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_4_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_5;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_5_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_6;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_6_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_7;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_7_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_8;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_8_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_9;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_9_I;
|
||||
import static net.runelite.api.ItemID.BLACK_MASK_I;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.BLACK_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.BONECRUSHER_NECKLACE;
|
||||
import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET;
|
||||
import static net.runelite.api.ItemID.BOTTOMLESS_COMPOST_BUCKET_22997;
|
||||
import static net.runelite.api.ItemID.CRAWS_BOW;
|
||||
import static net.runelite.api.ItemID.CRAWS_BOW_U;
|
||||
import static net.runelite.api.ItemID.DARK_BOW;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12765;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12766;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12767;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_12768;
|
||||
import static net.runelite.api.ItemID.DARK_BOW_20408;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_COLOUR_KIT;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.DARK_INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_GREATAXE_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_HELM_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_25;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_50;
|
||||
import static net.runelite.api.ItemID.DHAROKS_PLATELEGS_75;
|
||||
import static net.runelite.api.ItemID.DRAGONBONE_NECKLACE;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_SHIELD_11284;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_WARD;
|
||||
import static net.runelite.api.ItemID.DRAGONFIRE_WARD_22003;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_BOOTS_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_3140;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_CHAINBODY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_DEFENDER_T;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_FULL_HELM_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_KITESHIELD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_LEGSSKIRT_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE;
|
||||
import static net.runelite.api.ItemID.DRAGON_PICKAXE_12797;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATEBODY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATELEGS_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.DRAGON_PLATESKIRT_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR_OR;
|
||||
import static net.runelite.api.ItemID.DRAGON_SCIMITAR_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_G;
|
||||
import static net.runelite.api.ItemID.DRAGON_SQ_SHIELD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ABYSSAL_HEAD_13508;
|
||||
import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_AVIANSIE_HEAD_13505;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BEAR_HEAD_13463;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_BLOODVELD_HEAD_13496;
|
||||
import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_CHAOS_DRUID_HEAD_13472;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DAGANNOTH_HEAD_13493;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DEMON_HEAD_13502;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DOG_HEAD_13469;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_DRAGON_HEAD_13511;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_ELF_HEAD_13481;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GIANT_HEAD_13475;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_GOBLIN_HEAD_13448;
|
||||
import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_HORROR_HEAD_13487;
|
||||
import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_IMP_HEAD_13454;
|
||||
import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_KALPHITE_HEAD_13490;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MINOTAUR_HEAD_13457;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_MONKEY_HEAD_13451;
|
||||
import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_OGRE_HEAD_13478;
|
||||
import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_SCORPION_HEAD_13460;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TROLL_HEAD_13484;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_TZHAAR_HEAD_13499;
|
||||
import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD;
|
||||
import static net.runelite.api.ItemID.ENSOULED_UNICORN_HEAD_13466;
|
||||
import static net.runelite.api.ItemID.FEROCIOUS_GLOVES;
|
||||
import static net.runelite.api.ItemID.FROZEN_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.FURY_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE1;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE2;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE3;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE4;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE5;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE6;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE7;
|
||||
import static net.runelite.api.ItemID.GAMES_NECKLACE8;
|
||||
import static net.runelite.api.ItemID.GRANITE_MAUL;
|
||||
import static net.runelite.api.ItemID.GRANITE_MAUL_12848;
|
||||
import static net.runelite.api.ItemID.GRANITE_RING;
|
||||
import static net.runelite.api.ItemID.GRANITE_RING_I;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.GREEN_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_CHAINSKIRT_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_HELM_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_100;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_25;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_50;
|
||||
import static net.runelite.api.ItemID.GUTHANS_WARSPEAR_75;
|
||||
import static net.runelite.api.ItemID.HYDRA_LEATHER;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.HYDRA_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.HYDRA_TAIL;
|
||||
import static net.runelite.api.ItemID.INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.INFINITY_BOTTOMS_20575;
|
||||
import static net.runelite.api.ItemID.INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP_10605;
|
||||
import static net.runelite.api.ItemID.INFINITY_TOP_20574;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_100;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_25;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_50;
|
||||
import static net.runelite.api.ItemID.KARILS_COIF_75;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_100;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_25;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_50;
|
||||
import static net.runelite.api.ItemID.KARILS_CROSSBOW_75;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_25;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_50;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERSKIRT_75;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_100;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_25;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_50;
|
||||
import static net.runelite.api.ItemID.KARILS_LEATHERTOP_75;
|
||||
import static net.runelite.api.ItemID.KRAKEN_TENTACLE;
|
||||
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.LAVA_BATTLESTAFF_21198;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_BOTTOMS;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_COLOUR_KIT;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_HAT;
|
||||
import static net.runelite.api.ItemID.LIGHT_INFINITY_TOP;
|
||||
import static net.runelite.api.ItemID.MAGIC_SHORTBOW;
|
||||
import static net.runelite.api.ItemID.MAGIC_SHORTBOW_I;
|
||||
import static net.runelite.api.ItemID.MAGMA_HELM;
|
||||
import static net.runelite.api.ItemID.MAGMA_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.MALEDICTION_WARD;
|
||||
import static net.runelite.api.ItemID.MALEDICTION_WARD_12806;
|
||||
import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH;
|
||||
import static net.runelite.api.ItemID.NECKLACE_OF_ANGUISH_OR;
|
||||
import static net.runelite.api.ItemID.OCCULT_NECKLACE;
|
||||
import static net.runelite.api.ItemID.OCCULT_NECKLACE_OR;
|
||||
import static net.runelite.api.ItemID.OCCULT_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.ODIUM_WARD;
|
||||
import static net.runelite.api.ItemID.ODIUM_WARD_12807;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_1;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_2;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_4;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_5;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_6;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_7;
|
||||
import static net.runelite.api.ItemID.PHARAOHS_SCEPTRE_8;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.PURPLE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.RED_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING1;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING2;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING3;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING4;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING5;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING6;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING7;
|
||||
import static net.runelite.api.ItemID.RING_OF_DUELING8;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_R;
|
||||
import static net.runelite.api.ItemID.RING_OF_SUFFERING_RI;
|
||||
import static net.runelite.api.ItemID.RING_OF_THE_GODS;
|
||||
import static net.runelite.api.ItemID.RING_OF_THE_GODS_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I1;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I2;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I3;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I4;
|
||||
import static net.runelite.api.ItemID.RING_OF_WEALTH_I5;
|
||||
import static net.runelite.api.ItemID.SANGUINESTI_STAFF;
|
||||
import static net.runelite.api.ItemID.SANGUINESTI_STAFF_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SARADOMINS_BLESSED_SWORD;
|
||||
import static net.runelite.api.ItemID.SARADOMINS_TEAR;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.SARADOMIN_GODSWORD_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.SCYTHE_OF_VITUR;
|
||||
import static net.runelite.api.ItemID.SCYTHE_OF_VITUR_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SEERS_RING;
|
||||
import static net.runelite.api.ItemID.SEERS_RING_I;
|
||||
import static net.runelite.api.ItemID.SERPENTINE_HELM;
|
||||
import static net.runelite.api.ItemID.SERPENTINE_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE1;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE2;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE3;
|
||||
import static net.runelite.api.ItemID.SKILLS_NECKLACE5;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.STEAM_BATTLESTAFF;
|
||||
import static net.runelite.api.ItemID.STEAM_BATTLESTAFF_12795;
|
||||
import static net.runelite.api.ItemID.TANZANITE_HELM;
|
||||
import static net.runelite.api.ItemID.TANZANITE_HELM_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE;
|
||||
import static net.runelite.api.ItemID.THAMMARONS_SCEPTRE_U;
|
||||
import static net.runelite.api.ItemID.TOME_OF_FIRE;
|
||||
import static net.runelite.api.ItemID.TOME_OF_FIRE_EMPTY;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_HAMMERS_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_HELM_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATEBODY_75;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_100;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_25;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_50;
|
||||
import static net.runelite.api.ItemID.TORAGS_PLATELEGS_75;
|
||||
import static net.runelite.api.ItemID.TORTURE_ORNAMENT_KIT;
|
||||
import static net.runelite.api.ItemID.TOXIC_BLOWPIPE;
|
||||
import static net.runelite.api.ItemID.TOXIC_BLOWPIPE_EMPTY;
|
||||
import static net.runelite.api.ItemID.TOXIC_STAFF_OF_THE_DEAD;
|
||||
import static net.runelite.api.ItemID.TOXIC_STAFF_UNCHARGED;
|
||||
import static net.runelite.api.ItemID.TREASONOUS_RING;
|
||||
import static net.runelite.api.ItemID.TREASONOUS_RING_I;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SEAS_E;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP;
|
||||
import static net.runelite.api.ItemID.TRIDENT_OF_THE_SWAMP_E;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET;
|
||||
import static net.runelite.api.ItemID.TURQUOISE_SLAYER_HELMET_I;
|
||||
import static net.runelite.api.ItemID.TYRANNICAL_RING;
|
||||
import static net.runelite.api.ItemID.TYRANNICAL_RING_I;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TOXIC_TRIDENT_E;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TRIDENT;
|
||||
import static net.runelite.api.ItemID.UNCHARGED_TRIDENT_E;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_100;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_25;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_50;
|
||||
import static net.runelite.api.ItemID.VERACS_BRASSARD_75;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_100;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_25;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_50;
|
||||
import static net.runelite.api.ItemID.VERACS_FLAIL_75;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_100;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_25;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_50;
|
||||
import static net.runelite.api.ItemID.VERACS_HELM_75;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_100;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_25;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_50;
|
||||
import static net.runelite.api.ItemID.VERACS_PLATESKIRT_75;
|
||||
import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE;
|
||||
import static net.runelite.api.ItemID.VIGGORAS_CHAINMACE_U;
|
||||
import static net.runelite.api.ItemID.VOLCANIC_ABYSSAL_WHIP;
|
||||
import static net.runelite.api.ItemID.WARRIOR_RING;
|
||||
import static net.runelite.api.ItemID.WARRIOR_RING_I;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_OR;
|
||||
import static net.runelite.api.ItemID.ZAMORAK_GODSWORD_ORNAMENT_KIT;
|
||||
|
||||
import static net.runelite.api.ItemID.*;
|
||||
|
||||
/**
|
||||
* Converts untradeable items to it's tradeable counterparts
|
||||
@@ -507,6 +104,8 @@ public enum ItemMapping
|
||||
ITEM_OCCULT_ORNAMENT_KIT(OCCULT_ORNAMENT_KIT, OCCULT_NECKLACE_OR),
|
||||
ITE_AMULET_OF_FURY(AMULET_OF_FURY, AMULET_OF_FURY_OR),
|
||||
ITE_FURY_ORNAMENT_KIT(FURY_ORNAMENT_KIT, AMULET_OF_FURY_OR),
|
||||
ITEM_TORMENTED_BRACELET(TORMENTED_BRACELET, TORMENTED_BRACELET_OR),
|
||||
ITEM_TORMENTED_ORNAMENT_KIT(TORMENTED_ORNAMENT_KIT, TORMENTED_BRACELET_OR),
|
||||
|
||||
// Ensouled heads
|
||||
ITEM_ENSOULED_GOBLIN_HEAD(ENSOULED_GOBLIN_HEAD_13448, ENSOULED_GOBLIN_HEAD),
|
||||
@@ -672,4 +271,4 @@ public enum ItemMapping
|
||||
|
||||
return mapping.iterator().next();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -264,7 +264,8 @@ public class CannonPlugin extends Plugin
|
||||
cballsLeft = 0;
|
||||
}
|
||||
|
||||
if (event.getMessage().contains("You pick up the cannon"))
|
||||
if (event.getMessage().contains("You pick up the cannon")
|
||||
|| event.getMessage().contains("Your cannon has decayed. Speak to Nulodion to get a new one!"))
|
||||
{
|
||||
cannonPlaced = false;
|
||||
cballsLeft = 0;
|
||||
|
||||
@@ -43,11 +43,6 @@ import net.runelite.client.util.ColorUtil;
|
||||
class CombatLevelOverlay extends Overlay
|
||||
{
|
||||
private static final Color COMBAT_LEVEL_COLOUR = new Color(0xff981f);
|
||||
private static final double PRAY_MULT = 0.125;
|
||||
static final double ATT_STR_MULT = 0.325;
|
||||
static final double DEF_HP_MULT = 0.25;
|
||||
static final double RANGE_MAGIC_LEVEL_MULT = 1.5;
|
||||
static final double RANGE_MAGIC_MULT = 0.325;
|
||||
|
||||
private final Client client;
|
||||
private final CombatLevelConfig config;
|
||||
@@ -95,23 +90,20 @@ class CombatLevelOverlay extends Overlay
|
||||
int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE);
|
||||
int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS);
|
||||
int magicLevel = client.getRealSkillLevel(Skill.MAGIC);
|
||||
int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
|
||||
int rangeLevel = client.getRealSkillLevel(Skill.RANGED);
|
||||
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
|
||||
|
||||
// calculate initial required numbers
|
||||
double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2D));
|
||||
double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
|
||||
double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
double max = Math.max(melee, Math.max(range, mage));
|
||||
|
||||
// find the needed levels until level up
|
||||
int next = client.getLocalPlayer().getCombatLevel() + 1;
|
||||
int meleeNeed = calcLevels(base + melee, next, ATT_STR_MULT);
|
||||
int hpdefNeed = calcLevels(base + max, next, DEF_HP_MULT);
|
||||
int prayNeed = calcLevelsPray(base + max, next, prayerLevel);
|
||||
int rangeNeed = calcLevelsRM(rangedLevel, next, base);
|
||||
int magicNeed = calcLevelsRM(magicLevel, next, base);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// create tooltip string
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -121,11 +113,11 @@ class CombatLevelOverlay extends Overlay
|
||||
{
|
||||
sb.append(meleeNeed).append(" Attack/Strength</br>");
|
||||
}
|
||||
if ((hitpointsLevel + defenceLevel + hpdefNeed) <= Experience.MAX_REAL_LEVEL * 2)
|
||||
if ((hitpointsLevel + defenceLevel + hpDefNeed) <= Experience.MAX_REAL_LEVEL * 2)
|
||||
{
|
||||
sb.append(hpdefNeed).append(" Defence/Hitpoints</br>");
|
||||
sb.append(hpDefNeed).append(" Defence/Hitpoints</br>");
|
||||
}
|
||||
if ((rangedLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL)
|
||||
if ((rangeLevel + rangeNeed) <= Experience.MAX_REAL_LEVEL)
|
||||
{
|
||||
sb.append(rangeNeed).append(" Ranged</br>");
|
||||
}
|
||||
@@ -133,76 +125,10 @@ class CombatLevelOverlay extends Overlay
|
||||
{
|
||||
sb.append(magicNeed).append(" Magic</br>");
|
||||
}
|
||||
if ((prayerLevel + prayNeed) <= Experience.MAX_REAL_LEVEL)
|
||||
if ((prayerLevel + prayerNeed) <= Experience.MAX_REAL_LEVEL)
|
||||
{
|
||||
sb.append(prayNeed).append(" Prayer");
|
||||
sb.append(prayerNeed).append(" Prayer");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate skill levels required for increasing combat level, meant
|
||||
* for all combat skills besides prayer, ranged, and magic.
|
||||
*
|
||||
* @param start initial value
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param multiple how much adding one skill level will change combat
|
||||
* @return levels required for a specific skill to level up combat
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static int calcLevels(double start, int end, double multiple)
|
||||
{
|
||||
return (int) Math.ceil(calcMultipliedLevels(start, end, multiple));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate skill levels for increasing combat level, meant ONLY for the Prayer skill.
|
||||
* <p>
|
||||
* Note: Prayer is a special case, only leveling up upon even level numbers. This is accounted
|
||||
* for in this function.
|
||||
* </p>
|
||||
*
|
||||
* @param start current combat level
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param prayerLevel the player's current prayer level
|
||||
* @return Prayer levels required to level up combat
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static int calcLevelsPray(double start, int end, int prayerLevel)
|
||||
{
|
||||
int neededLevels = (int) Math.ceil(calcMultipliedLevels(start, end, PRAY_MULT));
|
||||
|
||||
if (prayerLevel % 2 != 0)
|
||||
{
|
||||
neededLevels--;
|
||||
}
|
||||
|
||||
if ((prayerLevel + neededLevels) % 2 != 0)
|
||||
{
|
||||
return neededLevels + 1;
|
||||
}
|
||||
|
||||
return neededLevels;
|
||||
}
|
||||
|
||||
private static double calcMultipliedLevels(double start, int end, double multiple)
|
||||
{
|
||||
return (end - start) / multiple;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate skill levels required for increasing combat level, meant
|
||||
* ONLY for Ranged and Magic skills.
|
||||
*
|
||||
* @param start either the current ranged or magic level
|
||||
* @param end ending value (combat level + 1)
|
||||
* @param dhp defence, hitpoints, and prayer; this is the initial calculated "base" value
|
||||
* @return levels required for a specific skill to level up combat
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static int calcLevelsRM(double start, int end, double dhp)
|
||||
{
|
||||
start = Math.floor(start * RANGE_MAGIC_LEVEL_MULT) * RANGE_MAGIC_MULT;
|
||||
return (int) Math.ceil((end - dhp - start) / (RANGE_MAGIC_MULT * RANGE_MAGIC_LEVEL_MULT));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +122,7 @@ public class EmojiPlugin extends Plugin
|
||||
case FRIENDSCHAT:
|
||||
case PRIVATECHAT:
|
||||
case PRIVATECHATOUT:
|
||||
case MODPRIVATECHAT:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Devin French <https://github.com/devinfrench>
|
||||
* Copyright (c) 2019, Aleios <https://github.com/aleios>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -172,10 +173,10 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showBellowCharges",
|
||||
name = "Show Bellow Charges",
|
||||
description = "Configures if ogre bellow item charge is shown",
|
||||
position = 12
|
||||
keyName = "showBellowCharges",
|
||||
name = "Show Bellow Charges",
|
||||
description = "Configures if ogre bellow item charge is shown",
|
||||
position = 12
|
||||
)
|
||||
default boolean showBellowCharges()
|
||||
{
|
||||
@@ -183,10 +184,10 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showAbyssalBraceletCharges",
|
||||
name = "Show Abyssal Bracelet Charges",
|
||||
description = "Configures if abyssal bracelet item charge is shown",
|
||||
position = 13
|
||||
keyName = "showAbyssalBraceletCharges",
|
||||
name = "Show Abyssal Bracelet Charges",
|
||||
description = "Configures if abyssal bracelet item charge is shown",
|
||||
position = 13
|
||||
)
|
||||
default boolean showAbyssalBraceletCharges()
|
||||
{
|
||||
@@ -204,58 +205,11 @@ public interface ItemChargeConfig extends Config
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showSlayerBracelets",
|
||||
name = "Show Slayer Bracelets Charges",
|
||||
description = "Configures if slayer bracelets' item charges are shown",
|
||||
position = 15
|
||||
)
|
||||
default boolean showSlayerBracelets()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "expeditious",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int expeditious()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "expeditious",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void expeditious(int expeditious);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "slaughter",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int slaughter()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "slaughter",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void slaughter(int slaughter);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showBindingNecklaceCharges",
|
||||
name = "Show Binding Necklace Charges",
|
||||
description = "Configures if binding necklace item charge is shown",
|
||||
position = 16
|
||||
position = 15
|
||||
)
|
||||
default boolean showBindingNecklaceCharges()
|
||||
{
|
||||
@@ -284,7 +238,7 @@ public interface ItemChargeConfig extends Config
|
||||
keyName = "bindingNotification",
|
||||
name = "Binding Necklace Notification",
|
||||
description = "Configures if the binding necklace breaking notification is shown",
|
||||
position = 17
|
||||
position = 16
|
||||
)
|
||||
default boolean bindingNotification()
|
||||
{
|
||||
@@ -292,39 +246,119 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showXericTalismanCharges",
|
||||
name = "Show Xeric's Talisman Charges",
|
||||
description = "Configures if Xeric's Talisman item charge is shown",
|
||||
position = 18
|
||||
keyName = "showExplorerRingCharges",
|
||||
name = "Show Explorer's Ring Alch Charges",
|
||||
description = "Configures if explorer's ring alchemy charges are shown",
|
||||
position = 17
|
||||
)
|
||||
default boolean showXericTalismanCharges()
|
||||
default boolean showExplorerRingCharges()
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "xericTalisman",
|
||||
keyName = "explorerRing",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int explorerRing()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "explorerRing",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void explorerRing(int explorerRing);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showInfoboxes",
|
||||
name = "Show Infoboxes",
|
||||
description = "Configures whether to show an infobox equipped charge items",
|
||||
position = 18
|
||||
)
|
||||
default boolean showInfoboxes()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showSlayerBracelets",
|
||||
name = "Show Slayer Bracelets Charges",
|
||||
description = "Configures if slayer bracelets' item charges are shown",
|
||||
position = 19
|
||||
)
|
||||
default boolean showSlayerBracelets()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "expeditious",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int expeditious()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "expeditious",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void expeditious(int expeditious);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "slaughter",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int slaughter()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "slaughter",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void slaughter(int slaughter);
|
||||
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "xericTalisman",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int xericTalisman()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "xericTalisman",
|
||||
name = "",
|
||||
description = ""
|
||||
keyName = "xericTalisman",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void xericTalisman(int xericTalisman);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showSoulBearerCharges",
|
||||
name = "Show Soul Bearer Charges",
|
||||
description = "Configures if Soul Bearer item charge is shown",
|
||||
position = 19
|
||||
keyName = "showSoulBearerCharges",
|
||||
name = "Show Soul Bearer Charges",
|
||||
description = "Configures if Soul Bearer item charge is shown",
|
||||
position = 19
|
||||
)
|
||||
default boolean showSoulBearerCharges()
|
||||
{
|
||||
@@ -332,10 +366,10 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "soulBearer",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
keyName = "soulBearer",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int soulBearer()
|
||||
{
|
||||
@@ -343,17 +377,17 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "soulBearer",
|
||||
name = "",
|
||||
description = ""
|
||||
keyName = "soulBearer",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void soulBearer(int soulBearer);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showChronicleCharges",
|
||||
name = "Show Chronicle Charges",
|
||||
description = "Configures if Chronicle item charge is shown",
|
||||
position = 20
|
||||
keyName = "showChronicleCharges",
|
||||
name = "Show Chronicle Charges",
|
||||
description = "Configures if Chronicle item charge is shown",
|
||||
position = 20
|
||||
)
|
||||
default boolean showChronicleCharges()
|
||||
{
|
||||
@@ -361,34 +395,18 @@ public interface ItemChargeConfig extends Config
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "chronicle",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
keyName = "showXericTalismanCharges",
|
||||
name = "Show Xeric's Talisman Charges",
|
||||
description = "Configures if Xeric's Talisman item charge is shown",
|
||||
position = 21
|
||||
)
|
||||
default int chronicle()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "chronicle",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void chronicle(int chronicle);
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showInfoboxes",
|
||||
name = "Show Infoboxes",
|
||||
description = "Configures whether to show an infobox equipped charge items",
|
||||
position = 21
|
||||
)
|
||||
default boolean showInfoboxes()
|
||||
default boolean showXericTalismanCharges()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "showrecoil",
|
||||
name = "Show If Recoil is activated",
|
||||
@@ -399,4 +417,23 @@ public interface ItemChargeConfig extends Config
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "chronicle",
|
||||
name = "",
|
||||
description = "",
|
||||
hidden = true
|
||||
)
|
||||
default int chronicle()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "chronicle",
|
||||
name = "",
|
||||
description = ""
|
||||
)
|
||||
void chronicle(int chronicle);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Seth <Sethtroll3@gmail.com>
|
||||
* Copyright (c) 2019, Aleios <https://github.com/aleios>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -126,6 +127,15 @@ class ItemChargeOverlay extends WidgetItemOverlay
|
||||
}
|
||||
charges = config.chronicle();
|
||||
}
|
||||
else if (itemId >= ItemID.EXPLORERS_RING_1 && itemId <= ItemID.EXPLORERS_RING_4)
|
||||
{
|
||||
if (!config.showExplorerRingCharges())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
charges = config.explorerRing();
|
||||
}
|
||||
else
|
||||
|
||||
{
|
||||
@@ -164,6 +174,6 @@ class ItemChargeOverlay extends WidgetItemOverlay
|
||||
{
|
||||
return config.showTeleportCharges() || config.showDodgyCount() || config.showFungicideCharges()
|
||||
|| config.showImpCharges() || config.showWateringCanCharges() || config.showWaterskinCharges()
|
||||
|| config.showBellowCharges() || config.showAbyssalBraceletCharges();
|
||||
|| config.showBellowCharges() || config.showAbyssalBraceletCharges() || config.showExplorerRingCharges();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Seth <Sethtroll3@gmail.com>
|
||||
* Copyright (c) 2018, Hydrox6 <ikada@protonmail.ch>
|
||||
* Copyright (c) 2019, Aleios <https://github.com/aleios>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -41,13 +42,14 @@ import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.ItemContainer;
|
||||
import net.runelite.api.ItemID;
|
||||
import static net.runelite.api.ItemID.RING_OF_RECOIL;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.GraphicChanged;
|
||||
import net.runelite.api.events.ItemContainerChanged;
|
||||
import net.runelite.api.events.ScriptCallbackEvent;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.client.Notifier;
|
||||
@@ -60,6 +62,8 @@ import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
import static net.runelite.api.ItemID.RING_OF_RECOIL;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Item Charges",
|
||||
description = "Show number of item charges remaining",
|
||||
@@ -120,6 +124,9 @@ public class ItemChargePlugin extends Plugin
|
||||
private static final int MAX_SLAUGHTER_CHARGES = 30;
|
||||
private static final int MAX_EXPEDITIOUS_CHARGES = 30;
|
||||
private static final int MAX_BINDING_CHARGES = 16;
|
||||
private static final int MAX_EXPLORER_RING_CHARGES = 30;
|
||||
|
||||
private int lastExplorerRingCharge = -1;
|
||||
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
private boolean ringOfRecoilAvailable = false;
|
||||
@@ -219,6 +226,11 @@ public class ItemChargePlugin extends Plugin
|
||||
{
|
||||
removeInfobox(ItemWithSlot.BINDING_NECKLACE);
|
||||
}
|
||||
|
||||
if (!config.showExplorerRingCharges())
|
||||
{
|
||||
removeInfobox(ItemWithSlot.EXPLORER_RING);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -380,6 +392,11 @@ public class ItemChargePlugin extends Plugin
|
||||
{
|
||||
updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, items);
|
||||
}
|
||||
|
||||
if (config.showExplorerRingCharges())
|
||||
{
|
||||
updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, items);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -510,6 +527,16 @@ public class ItemChargePlugin extends Plugin
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
private void onVarbitChanged(VarbitChanged event)
|
||||
{
|
||||
int explorerRingCharge = client.getVar(Varbits.EXPLORER_RING_ALCHS);
|
||||
if (lastExplorerRingCharge != explorerRingCharge)
|
||||
{
|
||||
updateExplorerRingCharges(explorerRingCharge);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateDodgyNecklaceCharges(final int value)
|
||||
{
|
||||
config.dodgyNecklace(value);
|
||||
@@ -577,7 +604,7 @@ public class ItemChargePlugin extends Plugin
|
||||
updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, itemContainer.getItems());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void updateXericCharges(int xericCharges)
|
||||
{
|
||||
config.xericTalisman(xericCharges);
|
||||
@@ -592,6 +619,24 @@ public class ItemChargePlugin extends Plugin
|
||||
{
|
||||
config.chronicle(chronicleCharges);
|
||||
}
|
||||
|
||||
private void updateExplorerRingCharges(final int value)
|
||||
{
|
||||
// Note: Varbit counts upwards. We count down from the maximum charges.
|
||||
config.explorerRing(MAX_EXPLORER_RING_CHARGES - value);
|
||||
|
||||
if (config.showInfoboxes() && config.showExplorerRingCharges())
|
||||
{
|
||||
final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT);
|
||||
|
||||
if (itemContainer == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, itemContainer.getItems());
|
||||
}
|
||||
}
|
||||
|
||||
private void checkDestroyWidget()
|
||||
{
|
||||
@@ -663,6 +708,10 @@ public class ItemChargePlugin extends Plugin
|
||||
{
|
||||
charges = config.bindingNecklace();
|
||||
}
|
||||
else if ((id >= ItemID.EXPLORERS_RING_1 && id <= ItemID.EXPLORERS_RING_4) && type == ItemWithSlot.EXPLORER_RING)
|
||||
{
|
||||
charges = config.explorerRing();
|
||||
}
|
||||
}
|
||||
else if (itemWithCharge.getType() == type.getType())
|
||||
{
|
||||
|
||||
@@ -36,5 +36,6 @@ enum ItemChargeType
|
||||
DODGY_NECKLACE,
|
||||
BRACELET_OF_SLAUGHTER,
|
||||
EXPEDITIOUS_BRACELET,
|
||||
BINDING_NECKLACE
|
||||
}
|
||||
BINDING_NECKLACE,
|
||||
EXPLORER_RING
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Tomas Slusny <slusnucky@gmail.com>
|
||||
* Copyright (c) 2019, Aleios <https://github.com/aleios>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -37,6 +38,7 @@ enum ItemWithSlot
|
||||
EXPEDITIOUS_BRACELET(ItemChargeType.EXPEDITIOUS_BRACELET, EquipmentInventorySlot.GLOVES),
|
||||
DODGY_NECKLACE(ItemChargeType.DODGY_NECKLACE, EquipmentInventorySlot.AMULET),
|
||||
BINDING_NECKLACE(ItemChargeType.BINDING_NECKLACE, EquipmentInventorySlot.AMULET),
|
||||
EXPLORER_RING(ItemChargeType.EXPLORER_RING, EquipmentInventorySlot.RING),
|
||||
TELEPORT(ItemChargeType.TELEPORT, EquipmentInventorySlot.WEAPON, EquipmentInventorySlot.AMULET, EquipmentInventorySlot.GLOVES, EquipmentInventorySlot.RING);
|
||||
|
||||
private final ItemChargeType type;
|
||||
|
||||
@@ -125,16 +125,32 @@ class XpInfoBoxOverlay extends Overlay
|
||||
.right(StackFormatter.quantityToRSDecimalStack(rightNum, true))
|
||||
.build();
|
||||
|
||||
final LineComponent xpHour = LineComponent.builder()
|
||||
.left("XP/Hour:")
|
||||
.right(StackFormatter.quantityToRSDecimalStack(snapshot.getXpPerHour(), true))
|
||||
.build();
|
||||
final String bottemLeftStr;
|
||||
final int bottomRightNum;
|
||||
|
||||
switch (config.onScreenDisplayModeBottom())
|
||||
{
|
||||
case ACTIONS_HOUR:
|
||||
bottemLeftStr = snapshot.getActionType().getLabel() + "/Hour";
|
||||
bottomRightNum = snapshot.getActionsPerHour();
|
||||
break;
|
||||
case XP_HOUR:
|
||||
default:
|
||||
bottemLeftStr = "XP/Hour";
|
||||
bottomRightNum = snapshot.getXpPerHour();
|
||||
break;
|
||||
}
|
||||
|
||||
final LineComponent xpLineBottom = LineComponent.builder()
|
||||
.left(bottemLeftStr + ":")
|
||||
.right(StackFormatter.quantityToRSDecimalStack(bottomRightNum, true))
|
||||
.build();
|
||||
|
||||
final SplitComponent xpSplit = SplitComponent.builder()
|
||||
.first(xpLine)
|
||||
.second(xpHour)
|
||||
.orientation(ComponentOrientation.VERTICAL)
|
||||
.build();
|
||||
.first(xpLine)
|
||||
.second(xpLineBottom)
|
||||
.orientation(ComponentOrientation.VERTICAL)
|
||||
.build();
|
||||
|
||||
final ImageComponent imageComponent = new ImageComponent(icon);
|
||||
final SplitComponent iconXpSplit = SplitComponent.builder()
|
||||
|
||||
@@ -41,6 +41,13 @@ public interface XpTrackerConfig extends Config
|
||||
ACTIONS_LEFT
|
||||
}
|
||||
|
||||
@AllArgsConstructor
|
||||
enum OnScreenDisplayModeBottom
|
||||
{
|
||||
XP_HOUR,
|
||||
ACTIONS_HOUR,
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 0,
|
||||
keyName = "hideMaxed",
|
||||
@@ -88,11 +95,22 @@ public interface XpTrackerConfig extends Config
|
||||
@ConfigItem(
|
||||
position = 4,
|
||||
keyName = "onScreenDisplayMode",
|
||||
name = "On-screen tracker display mode",
|
||||
name = "On-screen tracker display mode (top)",
|
||||
description = "Configures the information displayed in the first line of on-screen XP overlays"
|
||||
)
|
||||
default OnScreenDisplayMode onScreenDisplayMode()
|
||||
{
|
||||
return OnScreenDisplayMode.XP_GAINED;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
position = 4,
|
||||
keyName = "onScreenDisplayModeBottom",
|
||||
name = "On-screen tracker display mode (bottom)",
|
||||
description = "Configures the information displayed in the second line of on-screen XP overlays"
|
||||
)
|
||||
default OnScreenDisplayModeBottom onScreenDisplayModeBottom()
|
||||
{
|
||||
return OnScreenDisplayModeBottom.XP_HOUR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,7 +460,7 @@
|
||||
"level": 60,
|
||||
"sprite": 354,
|
||||
"name": "Bones To Peaches",
|
||||
"xp": 65
|
||||
"xp": 35.5
|
||||
},
|
||||
{
|
||||
"level": 61,
|
||||
|
||||
@@ -24,209 +24,184 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.combatlevel;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.testing.fieldbinder.Bind;
|
||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Skill;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevels;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsPray;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsRM;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.ATT_STR_MULT;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.DEF_HP_MULT;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_LEVEL_MULT;
|
||||
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_MULT;
|
||||
import net.runelite.api.Experience;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import java.util.HashMap;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class CombatLevelPluginTest
|
||||
{
|
||||
@Mock
|
||||
@Bind
|
||||
private Client client;
|
||||
|
||||
@Mock
|
||||
private Player player;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
||||
|
||||
when(client.getLocalPlayer()).thenReturn(player);
|
||||
}
|
||||
|
||||
private HashMap<String, Double> getBaseValues()
|
||||
{
|
||||
int attackLevel = client.getRealSkillLevel(Skill.ATTACK);
|
||||
int strengthLevel = client.getRealSkillLevel(Skill.STRENGTH);
|
||||
int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE);
|
||||
int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS);
|
||||
int magicLevel = client.getRealSkillLevel(Skill.MAGIC);
|
||||
int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
|
||||
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
|
||||
|
||||
double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
|
||||
double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
|
||||
double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
|
||||
double max = Math.max(melee, Math.max(range, mage));
|
||||
|
||||
HashMap<String, Double> result = new HashMap<>();
|
||||
result.put("base", base);
|
||||
result.put("melee", melee);
|
||||
result.put("max", max);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNewPlayer()
|
||||
{
|
||||
when(player.getCombatLevel()).thenReturn(3);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
|
||||
int attackLevel = 1;
|
||||
int strengthLevel = 1;
|
||||
int defenceLevel = 1;
|
||||
int hitpointsLevel = 10;
|
||||
int magicLevel = 1;
|
||||
int rangeLevel = 1;
|
||||
int prayerLevel = 1;
|
||||
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(3, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
|
||||
player.getCombatLevel() + 1, ATT_STR_MULT));
|
||||
assertEquals(2, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(3, calcLevels(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, DEF_HP_MULT));
|
||||
|
||||
// test prayer
|
||||
assertEquals(5, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
||||
assertEquals(3, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(2, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(2, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(5, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAll10()
|
||||
{
|
||||
when(player.getCombatLevel()).thenReturn(12);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(10);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
|
||||
int attackLevel = 10;
|
||||
int strengthLevel = 10;
|
||||
int defenceLevel = 10;
|
||||
int hitpointsLevel = 10;
|
||||
int magicLevel = 10;
|
||||
int rangeLevel = 10;
|
||||
int prayerLevel = 10;
|
||||
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(12, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("melee"),
|
||||
player.getCombatLevel() + 1, ATT_STR_MULT));
|
||||
assertEquals(1, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, DEF_HP_MULT));
|
||||
|
||||
// test prayer
|
||||
assertEquals(2, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
||||
assertEquals(1, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(4, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(4, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(2, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPlayerBmid()
|
||||
{
|
||||
// snapshot of current stats 2018-10-2
|
||||
when(player.getCombatLevel()).thenReturn(83);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(65);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(70);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(60);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(56);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(75);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(73);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(71);
|
||||
int attackLevel = 65;
|
||||
int strengthLevel = 70;
|
||||
int defenceLevel = 60;
|
||||
int hitpointsLevel = 71;
|
||||
int magicLevel = 73;
|
||||
int rangeLevel = 75;
|
||||
int prayerLevel = 56;
|
||||
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(83, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
|
||||
player.getCombatLevel() + 1, ATT_STR_MULT));
|
||||
assertEquals(2, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, DEF_HP_MULT));
|
||||
|
||||
// test prayer
|
||||
assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
||||
assertEquals(2, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(17, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(17, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(19, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(19, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(4, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPlayerRunelite()
|
||||
{
|
||||
// snapshot of current stats 2018-10-2
|
||||
when(player.getCombatLevel()).thenReturn(43);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(43);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(36);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(15);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(51);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(64);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(42);
|
||||
int attackLevel = 43;
|
||||
int strengthLevel = 36;
|
||||
int defenceLevel = 1;
|
||||
int hitpointsLevel = 42;
|
||||
int magicLevel = 64;
|
||||
int rangeLevel = 51;
|
||||
int prayerLevel = 15;
|
||||
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(43, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(18, calcLevels(baseValues.get("base") + baseValues.get("melee"),
|
||||
player.getCombatLevel() + 1, ATT_STR_MULT));
|
||||
assertEquals(18, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, DEF_HP_MULT));
|
||||
|
||||
// test prayer
|
||||
assertEquals(3, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
||||
assertEquals(2, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(14, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(14, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(1, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
|
||||
player.getCombatLevel() + 1, baseValues.get("base")));
|
||||
assertEquals(1, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(3, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -234,83 +209,188 @@ public class CombatLevelPluginTest
|
||||
{
|
||||
// snapshot of current stats 2018-10-3
|
||||
// Zezima cannot earn a combat level from ranged/magic anymore, so it won't show as the result is too high
|
||||
when(player.getCombatLevel()).thenReturn(90);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(74);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
|
||||
int attackLevel = 74;
|
||||
int strengthLevel = 74;
|
||||
int defenceLevel = 72;
|
||||
int hitpointsLevel = 72;
|
||||
int magicLevel = 60;
|
||||
int rangeLevel = 44;
|
||||
int prayerLevel = 52;
|
||||
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(90, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
|
||||
player.getCombatLevel() + 1, ATT_STR_MULT));
|
||||
assertEquals(2, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, DEF_HP_MULT));
|
||||
assertEquals(2, hpDefNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
|
||||
assertEquals(4, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrayerLevelsNeeded()
|
||||
{
|
||||
when(player.getCombatLevel()).thenReturn(124);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(99);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(99);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(99);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(89);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(99);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(99);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(99);
|
||||
int attackLevel = 99;
|
||||
int strengthLevel = 99;
|
||||
int defenceLevel = 99;
|
||||
int hitpointsLevel = 99;
|
||||
int magicLevel = 99;
|
||||
int rangeLevel = 99;
|
||||
int prayerLevel = 89;
|
||||
|
||||
assertEquals(1, neededPrayerLevels());
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(124, combatLevel);
|
||||
|
||||
// test prayer
|
||||
assertEquals(1, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEvenPrayerLevelsNeededWhenNearNextCombatLevel()
|
||||
{
|
||||
when(player.getCombatLevel()).thenReturn(90);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
|
||||
int attackLevel = 74;
|
||||
int strengthLevel = 75;
|
||||
int defenceLevel = 72;
|
||||
int hitpointsLevel = 72;
|
||||
int magicLevel = 60;
|
||||
int rangeLevel = 44;
|
||||
int prayerLevel = 52;
|
||||
|
||||
assertEquals(2, neededPrayerLevels());
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(90, combatLevel);
|
||||
|
||||
// test prayer
|
||||
assertEquals(2, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOddPrayerLevelsNeededWhenNearNextCombatLevel()
|
||||
{
|
||||
when(player.getCombatLevel()).thenReturn(90);
|
||||
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
|
||||
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
|
||||
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
|
||||
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(53);
|
||||
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
|
||||
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
|
||||
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
|
||||
int attackLevel = 74;
|
||||
int strengthLevel = 75;
|
||||
int defenceLevel = 72;
|
||||
int hitpointsLevel = 72;
|
||||
int magicLevel = 60;
|
||||
int rangeLevel = 44;
|
||||
int prayerLevel = 53;
|
||||
|
||||
assertEquals(1, neededPrayerLevels());
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(90, combatLevel);
|
||||
|
||||
// test prayer
|
||||
assertEquals(1, prayerNeed);
|
||||
}
|
||||
|
||||
private int neededPrayerLevels()
|
||||
@Test
|
||||
public void testNextMagicLevelBarelyReachesNextCombatLevel()
|
||||
{
|
||||
HashMap<String, Double> baseValues = getBaseValues();
|
||||
int attackLevel = 40;
|
||||
int strengthLevel = 44;
|
||||
int defenceLevel = 46;
|
||||
int hitpointsLevel = 39;
|
||||
int magicLevel = 57;
|
||||
int rangeLevel = 40;
|
||||
int prayerLevel = 29;
|
||||
|
||||
return calcLevelsPray(
|
||||
baseValues.get("base") + baseValues.get("max"),
|
||||
player.getCombatLevel() + 1,
|
||||
client.getRealSkillLevel(Skill.PRAYER)
|
||||
);
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(52, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(3, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(3, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(18, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(1, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(5, prayerNeed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRangeMagicLevelsNeeded()
|
||||
{
|
||||
int attackLevel = 60;
|
||||
int strengthLevel = 69;
|
||||
int defenceLevel = 1;
|
||||
int hitpointsLevel = 78;
|
||||
int magicLevel = 85;
|
||||
int rangeLevel = 85;
|
||||
int prayerLevel = 52;
|
||||
|
||||
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
|
||||
magicLevel, rangeLevel, prayerLevel);
|
||||
|
||||
// test combat level
|
||||
assertEquals(68, combatLevel);
|
||||
|
||||
// test attack/strength
|
||||
assertEquals(3, meleeNeed);
|
||||
|
||||
// test defence/hitpoints
|
||||
assertEquals(4, hpDefNeed);
|
||||
|
||||
// test ranged
|
||||
assertEquals(3, rangeNeed);
|
||||
|
||||
// test magic
|
||||
assertEquals(3, magicNeed);
|
||||
|
||||
// test prayer
|
||||
assertEquals(8, prayerNeed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user