Merge pull request #369 from sdburns1998/NPCStats-damagedrop
Plugin: xp drop change damage -> scraped npcstats and xpmodifier
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* Copyright (c) 2019, TheStonedTurtle <https://github.com/TheStonedTurtle>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -24,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.game;
|
package net.runelite.client.game;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -33,34 +35,69 @@ import java.util.Map;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Singleton
|
@Singleton
|
||||||
public class NPCManager
|
public class NPCManager
|
||||||
{
|
{
|
||||||
private final Map<String, Integer> healthMap;
|
private final ImmutableMap<Integer, NPCStats> statsMap;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private NPCManager()
|
private NPCManager()
|
||||||
{
|
{
|
||||||
final Gson gson = new Gson();
|
final Gson gson = new Gson();
|
||||||
final Type typeToken = new TypeToken<Map<String, Integer>>()
|
|
||||||
|
final Type typeToken = new TypeToken<Map<Integer, NPCStats>>()
|
||||||
{
|
{
|
||||||
}.getType();
|
}.getType();
|
||||||
|
|
||||||
final InputStream healthFile = getClass().getResourceAsStream("/npc_health.json");
|
final InputStream statsFile = getClass().getResourceAsStream("/npc_stats.json");
|
||||||
healthMap = gson.fromJson(new InputStreamReader(healthFile), typeToken);
|
final Map<Integer, NPCStats> stats = gson.fromJson(new InputStreamReader(statsFile), typeToken);
|
||||||
|
statsMap = ImmutableMap.copyOf(stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns health for target NPC based on it's combat level and name
|
* Returns the {@link NPCStats} for target NPC id
|
||||||
*
|
* @param npcId NPC id
|
||||||
* @param name npc name
|
* @return the {@link NPCStats} or null if unknown
|
||||||
* @param combatLevel npc combat level
|
|
||||||
* @return health or null if HP is unknown
|
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public Integer getHealth(final String name, final int combatLevel)
|
public NPCStats getStats(final int npcId)
|
||||||
{
|
{
|
||||||
return healthMap.get(name + "_" + combatLevel);
|
return statsMap.get(npcId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns health for target NPC ID
|
||||||
|
* @param npcId NPC id
|
||||||
|
* @return health or null if unknown
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public Integer getHealth(final int npcId)
|
||||||
|
{
|
||||||
|
final NPCStats s = statsMap.get(npcId);
|
||||||
|
if (s == null || s.getHitpoints() == -1)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.getHitpoints();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the exp modifier for target NPC ID based on its stats.
|
||||||
|
* @param npcId NPC id
|
||||||
|
* @return npcs exp modifier. Assumes default xp rate if npc stats are unknown (returns 1)
|
||||||
|
*/
|
||||||
|
public double getXpModifier(final int npcId)
|
||||||
|
{
|
||||||
|
final NPCStats s = statsMap.get(npcId);
|
||||||
|
if (s == null)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.calculateXpModifier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* 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.game;
|
||||||
|
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public class NPCStats
|
||||||
|
{
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
private final int hitpoints;
|
||||||
|
private final int combatLevel;
|
||||||
|
private final int slayerLevel;
|
||||||
|
|
||||||
|
private final int attackLevel;
|
||||||
|
private final int strengthLevel;
|
||||||
|
private final int defenceLevel;
|
||||||
|
private final int rangeLevel;
|
||||||
|
private final int magicLevel;
|
||||||
|
|
||||||
|
private final int stab;
|
||||||
|
private final int slash;
|
||||||
|
private final int crush;
|
||||||
|
private final int range;
|
||||||
|
private final int magic;
|
||||||
|
|
||||||
|
private final int stabDef;
|
||||||
|
private final int slashDef;
|
||||||
|
private final int crushDef;
|
||||||
|
private final int rangeDef;
|
||||||
|
private final int magicDef;
|
||||||
|
|
||||||
|
private final int bonusAttack;
|
||||||
|
private final int bonusStrength;
|
||||||
|
private final int bonusRangeStrength;
|
||||||
|
private final int bonusMagicDamage;
|
||||||
|
|
||||||
|
private final boolean poisonImmune;
|
||||||
|
private final boolean venomImmune;
|
||||||
|
|
||||||
|
private final boolean dragon;
|
||||||
|
private final boolean demon;
|
||||||
|
private final boolean undead;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based off the formula found here: http://services.runescape.com/m=forum/c=PLuJ4cy6gtA/forums.ws?317,318,712,65587452,209,337584542#209
|
||||||
|
* @return bonus XP modifier
|
||||||
|
*/
|
||||||
|
public double calculateXpModifier()
|
||||||
|
{
|
||||||
|
final double averageLevel = Math.floor((attackLevel + strengthLevel + defenceLevel + hitpoints) / 4);
|
||||||
|
final double averageDefBonus = Math.floor((stabDef + slashDef + crushDef) / 3);
|
||||||
|
|
||||||
|
return (1 + Math.floor(averageLevel * (averageDefBonus + bonusStrength + bonusAttack) / 5120) / 40);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,6 +32,13 @@ import net.runelite.client.config.ConfigItem;
|
|||||||
@ConfigGroup("xpdrop")
|
@ConfigGroup("xpdrop")
|
||||||
public interface XpDropConfig extends Config
|
public interface XpDropConfig extends Config
|
||||||
{
|
{
|
||||||
|
enum DamageMode
|
||||||
|
{
|
||||||
|
NONE,
|
||||||
|
ABOVE_OPPONENT,
|
||||||
|
IN_XP_DROP
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
keyName = "hideSkillIcons",
|
keyName = "hideSkillIcons",
|
||||||
name = "Hide skill icons",
|
name = "Hide skill icons",
|
||||||
@@ -93,9 +100,9 @@ public interface XpDropConfig extends Config
|
|||||||
description = "Show what you hit next to the XP drop",
|
description = "Show what you hit next to the XP drop",
|
||||||
position = 5
|
position = 5
|
||||||
)
|
)
|
||||||
default boolean showDamage()
|
default DamageMode showDamage()
|
||||||
{
|
{
|
||||||
return false;
|
return DamageMode.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConfigItem(
|
@ConfigItem(
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class XpDropOverlay extends Overlay
|
|||||||
@Override
|
@Override
|
||||||
public Dimension render(Graphics2D graphics)
|
public Dimension render(Graphics2D graphics)
|
||||||
{
|
{
|
||||||
if (config.showDamage())
|
if (plugin.getTickShow() > 0)
|
||||||
{
|
{
|
||||||
final Actor opponent = plugin.getLastOpponent();
|
final Actor opponent = plugin.getLastOpponent();
|
||||||
if (opponent != null)
|
if (opponent != null)
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (c) 2019, Owain van Brakel <https://github.com/Owain94>
|
||||||
|
* Copyright (c) 2019, TheStonedTurtle <https://github.com/TheStonedTurtle>
|
||||||
* Copyright (c) 2018, Cameron <https://github.com/noremac201>, SoyChai <https://github.com/SoyChai>
|
* Copyright (c) 2018, Cameron <https://github.com/noremac201>, SoyChai <https://github.com/SoyChai>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -25,8 +27,6 @@
|
|||||||
package net.runelite.client.plugins.experiencedrop;
|
package net.runelite.client.plugins.experiencedrop;
|
||||||
|
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import java.time.Duration;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -36,43 +36,29 @@ import lombok.AccessLevel;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.runelite.api.Actor;
|
import net.runelite.api.Actor;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.GameState;
|
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import static net.runelite.api.ScriptID.XPDROP_DISABLED;
|
import static net.runelite.api.ScriptID.XPDROP_DISABLED;
|
||||||
import net.runelite.api.Skill;
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.VarPlayer;
|
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
|
import net.runelite.api.WorldType;
|
||||||
|
import net.runelite.api.events.ConfigChanged;
|
||||||
import net.runelite.api.events.ExperienceChanged;
|
import net.runelite.api.events.ExperienceChanged;
|
||||||
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.api.events.InteractingChanged;
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
import net.runelite.api.events.VarbitChanged;
|
|
||||||
import net.runelite.api.events.WidgetHiddenChanged;
|
import net.runelite.api.events.WidgetHiddenChanged;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import net.runelite.api.widgets.WidgetID;
|
import net.runelite.api.widgets.WidgetID;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.game.HiscoreManager;
|
|
||||||
import net.runelite.client.game.NPCManager;
|
import net.runelite.client.game.NPCManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.plugins.attackstyles.AttackStyle;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.ACCURATE;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.AGGRESSIVE;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.CASTING;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.CONTROLLED;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.DEFENSIVE_CASTING;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.LONGRANGE;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.OTHER;
|
|
||||||
import static net.runelite.client.plugins.attackstyles.AttackStyle.RANGING;
|
|
||||||
import net.runelite.client.plugins.attackstyles.WeaponType;
|
|
||||||
import net.runelite.client.ui.overlay.OverlayManager;
|
import net.runelite.client.ui.overlay.OverlayManager;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.ColorUtil;
|
||||||
import net.runelite.http.api.hiscore.HiscoreEndpoint;
|
|
||||||
import net.runelite.http.api.hiscore.HiscoreResult;
|
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
name = "XP Drop",
|
name = "XP Drop",
|
||||||
@@ -82,7 +68,8 @@ import net.runelite.http.api.hiscore.HiscoreResult;
|
|||||||
public class XpDropPlugin extends Plugin
|
public class XpDropPlugin extends Plugin
|
||||||
{
|
{
|
||||||
private static final int XPDROP_PADDING = 2; // space between xp drop icons
|
private static final int XPDROP_PADDING = 2; // space between xp drop icons
|
||||||
private static final Duration WAIT = Duration.ofSeconds(5);
|
private static final double HITPOINT_RATIO = 1.33; // Base rate of hp xp per point damage
|
||||||
|
private static final double DMM_MULTIPLIER_RATIO = 10;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -90,29 +77,8 @@ public class XpDropPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private XpDropConfig config;
|
private XpDropConfig config;
|
||||||
|
|
||||||
private int tickCounter = 0;
|
@Inject
|
||||||
private int previousExpGained;
|
private NPCManager npcManager;
|
||||||
private boolean hasHit = false;
|
|
||||||
private boolean hasDropped = false;
|
|
||||||
private boolean correctPrayer;
|
|
||||||
private Skill lastSkill = null;
|
|
||||||
private Map<Skill, Integer> previousSkillExpTable = new EnumMap<>(Skill.class);
|
|
||||||
private PrayerType currentTickPrayer;
|
|
||||||
private AttackStyle attackStyle;
|
|
||||||
private int attackStyleVarbit = -1;
|
|
||||||
private int equippedWeaponTypeVarbit = -1;
|
|
||||||
private int castingModeVarbit = -1;
|
|
||||||
private int opponentHealth = -1;
|
|
||||||
private int xpGains = 0;
|
|
||||||
private AttackStyle[] offensiveStyles = {ACCURATE, AGGRESSIVE, DEFENSIVE, CONTROLLED, RANGING, LONGRANGE, CASTING, DEFENSIVE_CASTING};
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private int damage = 0;
|
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private Actor lastOpponent;
|
|
||||||
|
|
||||||
private Instant lastTime;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private OverlayManager overlayManager;
|
private OverlayManager overlayManager;
|
||||||
@@ -120,11 +86,23 @@ public class XpDropPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private XpDropOverlay overlay;
|
private XpDropOverlay overlay;
|
||||||
|
|
||||||
@Inject
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private NPCManager npcManager;
|
private int damage = 0;
|
||||||
|
|
||||||
@Inject
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private HiscoreManager hiscoreManager;
|
private int tickShow = 0;
|
||||||
|
|
||||||
|
@Getter(AccessLevel.PACKAGE)
|
||||||
|
private Actor lastOpponent;
|
||||||
|
|
||||||
|
private int tickCounter = 0;
|
||||||
|
private int previousExpGained;
|
||||||
|
private boolean hasDropped = false;
|
||||||
|
private boolean correctPrayer;
|
||||||
|
private Skill lastSkill = null;
|
||||||
|
private Map<Skill, Integer> previousSkillExpTable = new EnumMap<>(Skill.class);
|
||||||
|
private PrayerType currentTickPrayer;
|
||||||
|
private XpDropConfig.DamageMode damageMode;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
XpDropConfig provideConfig(ConfigManager configManager)
|
XpDropConfig provideConfig(ConfigManager configManager)
|
||||||
@@ -135,20 +113,56 @@ public class XpDropPlugin extends Plugin
|
|||||||
@Override
|
@Override
|
||||||
protected void startUp() throws Exception
|
protected void startUp() throws Exception
|
||||||
{
|
{
|
||||||
lastOpponent = null;
|
damageMode = config.showDamage();
|
||||||
overlayManager.add(overlay);
|
|
||||||
if (client.getGameState() == GameState.LOGGED_IN)
|
if (damageMode == XpDropConfig.DamageMode.ABOVE_OPPONENT)
|
||||||
{
|
{
|
||||||
attackStyleVarbit = client.getVar(VarPlayer.ATTACK_STYLE);
|
overlayManager.add(overlay);
|
||||||
equippedWeaponTypeVarbit = client.getVar(Varbits.EQUIPPED_WEAPON_TYPE);
|
|
||||||
castingModeVarbit = client.getVar(Varbits.DEFENSIVE_CASTING_MODE);
|
|
||||||
updateAttackStyle(
|
|
||||||
equippedWeaponTypeVarbit,
|
|
||||||
attackStyleVarbit,
|
|
||||||
castingModeVarbit);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void shutDown() throws Exception
|
||||||
|
{
|
||||||
|
overlayManager.remove(overlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onConfigChanged(ConfigChanged event)
|
||||||
|
{
|
||||||
|
if (!event.getGroup().equals("xpdrop"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (damageMode != XpDropConfig.DamageMode.ABOVE_OPPONENT)
|
||||||
|
{
|
||||||
|
damageMode = config.showDamage();
|
||||||
|
|
||||||
|
if (damageMode == XpDropConfig.DamageMode.ABOVE_OPPONENT)
|
||||||
|
{
|
||||||
|
overlayManager.add(overlay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
damageMode = config.showDamage();
|
||||||
|
|
||||||
|
if (damageMode != XpDropConfig.DamageMode.ABOVE_OPPONENT)
|
||||||
|
{
|
||||||
|
overlayManager.remove(overlay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onGameStateChanged(GameStateChanged event)
|
||||||
|
{
|
||||||
|
damage = 0;
|
||||||
|
tickShow = 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onWidgetHiddenChanged(WidgetHiddenChanged event)
|
public void onWidgetHiddenChanged(WidgetHiddenChanged event)
|
||||||
{
|
{
|
||||||
@@ -277,40 +291,11 @@ public class XpDropPlugin extends Plugin
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameTick(GameTick tick)
|
public void onGameTick(GameTick tick)
|
||||||
{
|
{
|
||||||
// Detect hitting a 0
|
lastOpponent = client.getLocalPlayer().getInteracting();
|
||||||
if (lastOpponent != null)
|
|
||||||
{
|
|
||||||
int health = calculateHealth(lastOpponent);
|
|
||||||
if (health != -1 && opponentHealth != -1 && health == opponentHealth && hasHit)
|
|
||||||
{
|
|
||||||
damage = 0;
|
|
||||||
hasHit = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle getting XP gains
|
if (tickShow > 0)
|
||||||
if (hasDropped)
|
|
||||||
{
|
{
|
||||||
if (xpGains != 0 && attackStyle.getSkills().length > 1 && attackStyle != LONGRANGE)
|
tickShow--;
|
||||||
{
|
|
||||||
damage = (int) (xpGains / (attackStyle.getSkills().length * 1.3));
|
|
||||||
}
|
|
||||||
else if (xpGains != 0)
|
|
||||||
{
|
|
||||||
damage = xpGains / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
xpGains = 0;
|
|
||||||
hasDropped = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear opponent
|
|
||||||
if (lastOpponent != null && lastTime != null && client.getLocalPlayer().getInteracting() == null)
|
|
||||||
{
|
|
||||||
if (Duration.between(lastTime, Instant.now()).compareTo(WAIT) > 0)
|
|
||||||
{
|
|
||||||
lastOpponent = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
currentTickPrayer = getActivePrayerType();
|
currentTickPrayer = getActivePrayerType();
|
||||||
@@ -350,120 +335,95 @@ public class XpDropPlugin extends Plugin
|
|||||||
Integer previous = previousSkillExpTable.put(skill, xp);
|
Integer previous = previousSkillExpTable.put(skill, xp);
|
||||||
if (previous != null)
|
if (previous != null)
|
||||||
{
|
{
|
||||||
opponentHealth = calculateHealth(lastOpponent);
|
|
||||||
previousExpGained = xp - previous;
|
previousExpGained = xp - previous;
|
||||||
if (skill != Skill.HITPOINTS && Arrays.stream(offensiveStyles).anyMatch(attackStyle::equals))
|
|
||||||
{
|
|
||||||
xpGains += previousExpGained;
|
|
||||||
}
|
|
||||||
|
|
||||||
hasDropped = true;
|
hasDropped = true;
|
||||||
hasHit = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateAttackStyle(int equippedWeaponType, int attackStyleIndex, int castingMode)
|
|
||||||
{
|
|
||||||
AttackStyle[] attackStyles = WeaponType.getWeaponType(equippedWeaponType).getAttackStyles();
|
|
||||||
if (attackStyleIndex < attackStyles.length)
|
|
||||||
{
|
|
||||||
attackStyle = attackStyles[attackStyleIndex];
|
|
||||||
if (attackStyle == null)
|
|
||||||
{
|
|
||||||
attackStyle = OTHER;
|
|
||||||
}
|
|
||||||
else if ((attackStyle == CASTING) && (castingMode == 1))
|
|
||||||
{
|
|
||||||
attackStyle = DEFENSIVE_CASTING;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onInteractingChanged(InteractingChanged event)
|
public void onScriptCallbackEvent(ScriptCallbackEvent e)
|
||||||
{
|
{
|
||||||
if (event.getSource() != client.getLocalPlayer())
|
if (config.showDamage() == XpDropConfig.DamageMode.NONE)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Actor opponent = event.getTarget();
|
final String eventName = e.getEventName();
|
||||||
|
|
||||||
if (opponent == null)
|
// Handles Fake XP drops (Ironman, DMM Cap, 200m xp, etc)
|
||||||
|
if (eventName.equals("fakeXpDrop"))
|
||||||
{
|
{
|
||||||
lastTime = Instant.now();
|
final int[] intStack = client.getIntStack();
|
||||||
return;
|
final int intStackSize = client.getIntStackSize();
|
||||||
}
|
|
||||||
else if (opponent.getName().equalsIgnoreCase("fishing spot"))
|
|
||||||
{
|
|
||||||
lastTime = Instant.now().minus(WAIT);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
damage = 0;
|
final int skillId = intStack[intStackSize - 2];
|
||||||
lastOpponent = opponent;
|
final Skill skill = Skill.values()[skillId];
|
||||||
opponentHealth = calculateHealth(opponent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int calculateHealth(Actor target)
|
if (skill.equals(Skill.HITPOINTS))
|
||||||
{
|
|
||||||
if (target == null || target.getName() == null)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int healthScale = target.getHealth();
|
|
||||||
final int healthRatio = target.getHealthRatio();
|
|
||||||
final String targetName = Text.removeTags(target.getName());
|
|
||||||
|
|
||||||
Integer maxHealth = -1;
|
|
||||||
if (target instanceof NPC)
|
|
||||||
{
|
|
||||||
maxHealth = npcManager.getHealth(targetName, target.getCombatLevel());
|
|
||||||
}
|
|
||||||
else if (target instanceof Player)
|
|
||||||
{
|
|
||||||
final HiscoreResult hiscoreResult = hiscoreManager.lookupAsync(targetName, HiscoreEndpoint.NORMAL);
|
|
||||||
if (hiscoreResult != null)
|
|
||||||
{
|
{
|
||||||
final int hp = hiscoreResult.getHitpoints().getLevel();
|
final int exp = intStack[intStackSize - 1];
|
||||||
if (hp > 0)
|
calculateDamageDealt(exp);
|
||||||
{
|
|
||||||
maxHealth = hp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (healthRatio < 0 || healthScale <= 0 || maxHealth == null)
|
client.setIntStackSize(intStackSize - 2);
|
||||||
|
}
|
||||||
|
else if (eventName.equals("hpXpGained"))
|
||||||
{
|
{
|
||||||
return -1;
|
final int[] intStack = client.getIntStack();
|
||||||
}
|
final int intStackSize = client.getIntStackSize();
|
||||||
|
|
||||||
return (int) ((maxHealth * healthRatio / healthScale) + 0.5f);
|
final int exp = intStack[intStackSize - 1];
|
||||||
|
calculateDamageDealt(exp);
|
||||||
|
}
|
||||||
|
else if (eventName.equals("xpDropAddDamage") &&
|
||||||
|
damageMode == XpDropConfig.DamageMode.IN_XP_DROP &&
|
||||||
|
damage > 0)
|
||||||
|
{
|
||||||
|
final String[] stringStack = client.getStringStack();
|
||||||
|
final int stringStackSize = client.getStringStackSize();
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder()
|
||||||
|
.append(stringStack[stringStackSize - 1])
|
||||||
|
.append(ColorUtil.colorTag(config.getDamageColor()))
|
||||||
|
.append(" (").append(damage).append(")");
|
||||||
|
|
||||||
|
stringStack[stringStackSize - 1] = builder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
private void calculateDamageDealt(int diff)
|
||||||
public void onVarbitChanged(VarbitChanged event)
|
|
||||||
{
|
{
|
||||||
if (attackStyleVarbit == -1 || attackStyleVarbit != client.getVar(VarPlayer.ATTACK_STYLE))
|
double damageDealt = diff / HITPOINT_RATIO;
|
||||||
|
// DeadMan mode has an XP modifier
|
||||||
|
if (client.getWorldType().contains(WorldType.DEADMAN))
|
||||||
{
|
{
|
||||||
attackStyleVarbit = client.getVar(VarPlayer.ATTACK_STYLE);
|
damageDealt = damageDealt / DMM_MULTIPLIER_RATIO;
|
||||||
updateAttackStyle(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE), attackStyleVarbit,
|
|
||||||
client.getVar(Varbits.DEFENSIVE_CASTING_MODE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (equippedWeaponTypeVarbit == -1 || equippedWeaponTypeVarbit != client.getVar(Varbits.EQUIPPED_WEAPON_TYPE))
|
// Some NPCs have an XP modifier, account for it here.
|
||||||
|
Actor a = client.getLocalPlayer().getInteracting();
|
||||||
|
if (!(a instanceof NPC) && !(a instanceof Player))
|
||||||
{
|
{
|
||||||
equippedWeaponTypeVarbit = client.getVar(Varbits.EQUIPPED_WEAPON_TYPE);
|
// If we are interacting with nothing we may have clicked away at the perfect time fall back to last tick
|
||||||
updateAttackStyle(equippedWeaponTypeVarbit, client.getVar(VarPlayer.ATTACK_STYLE),
|
if (!(lastOpponent instanceof NPC) && !(lastOpponent instanceof Player))
|
||||||
client.getVar(Varbits.DEFENSIVE_CASTING_MODE));
|
{
|
||||||
|
damage = (int) Math.rint(damageDealt);
|
||||||
|
tickShow = 3;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
a = lastOpponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (castingModeVarbit == -1 || castingModeVarbit != client.getVar(Varbits.DEFENSIVE_CASTING_MODE))
|
if (a instanceof Player)
|
||||||
{
|
{
|
||||||
castingModeVarbit = client.getVar(Varbits.DEFENSIVE_CASTING_MODE);
|
damage = (int) Math.rint(damageDealt);
|
||||||
updateAttackStyle(client.getVar(Varbits.EQUIPPED_WEAPON_TYPE), client.getVar(VarPlayer.ATTACK_STYLE),
|
tickShow = 3;
|
||||||
castingModeVarbit);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NPC target = (NPC) a;
|
||||||
|
damage = (int) Math.rint(damageDealt / npcManager.getXpModifier(target.getId()));
|
||||||
|
tickShow = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class OpponentInfoOverlay extends Overlay
|
|||||||
lastMaxHealth = null;
|
lastMaxHealth = null;
|
||||||
if (opponent instanceof NPC)
|
if (opponent instanceof NPC)
|
||||||
{
|
{
|
||||||
lastMaxHealth = npcManager.getHealth(opponentName, opponent.getCombatLevel());
|
lastMaxHealth = npcManager.getHealth(((NPC) opponent).getId());
|
||||||
}
|
}
|
||||||
else if (opponent instanceof Player)
|
else if (opponent instanceof Player)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import net.runelite.client.ui.overlay.Overlay;
|
|||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||||
import net.runelite.client.util.Text;
|
|
||||||
|
|
||||||
class TargetWeaknessOverlay extends Overlay
|
class TargetWeaknessOverlay extends Overlay
|
||||||
{
|
{
|
||||||
@@ -99,8 +98,7 @@ class TargetWeaknessOverlay extends Overlay
|
|||||||
|
|
||||||
final int healthScale = target.getHealth();
|
final int healthScale = target.getHealth();
|
||||||
final int healthRatio = target.getHealthRatio();
|
final int healthRatio = target.getHealthRatio();
|
||||||
final String targetName = Text.removeTags(target.getName());
|
final Integer maxHealth = npcManager.getHealth(target.getId());
|
||||||
final Integer maxHealth = npcManager.getHealth(targetName, target.getCombatLevel());
|
|
||||||
|
|
||||||
if (healthRatio < 0 || healthScale <= 0 || maxHealth == null)
|
if (healthRatio < 0 || healthScale <= 0 || maxHealth == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ public class XpTrackerPlugin extends Plugin
|
|||||||
if (interacting instanceof NPC && COMBAT.contains(skill))
|
if (interacting instanceof NPC && COMBAT.contains(skill))
|
||||||
{
|
{
|
||||||
final NPC npc = (NPC) interacting;
|
final NPC npc = (NPC) interacting;
|
||||||
xpState.updateNpcExperience(skill, npc, npcManager.getHealth(npc.getName(), npc.getCombatLevel()));
|
xpState.updateNpcExperience(skill, npc, npcManager.getHealth(npc.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
final XpUpdateResult updateResult = xpState.updateSkill(skill, currentXp, startGoalXp, endGoalXp);
|
final XpUpdateResult updateResult = xpState.updateSkill(skill, currentXp, startGoalXp, endGoalXp);
|
||||||
@@ -358,7 +358,7 @@ public class XpTrackerPlugin extends Plugin
|
|||||||
|
|
||||||
for (Skill skill : COMBAT)
|
for (Skill skill : COMBAT)
|
||||||
{
|
{
|
||||||
final XpUpdateResult updateResult = xpState.updateNpcKills(skill, npc, npcManager.getHealth(npc.getName(), npc.getCombatLevel()));
|
final XpUpdateResult updateResult = xpState.updateNpcKills(skill, npc, npcManager.getHealth(npc.getId()));
|
||||||
final boolean updated = XpUpdateResult.UPDATED.equals(updateResult);
|
final boolean updated = XpUpdateResult.UPDATED.equals(updateResult);
|
||||||
xpPanel.updateSkillExperience(updated, xpPauseState.isPaused(skill), skill, xpState.getSkillSnapshot(skill));
|
xpPanel.updateSkillExperience(updated, xpPauseState.isPaused(skill), skill, xpState.getSkillSnapshot(skill));
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
34671
runelite-client/src/main/resources/npc_stats.json
Normal file
34671
runelite-client/src/main/resources/npc_stats.json
Normal file
File diff suppressed because it is too large
Load Diff
1
runelite-client/src/main/scripts/FakeXPDrops.hash
Normal file
1
runelite-client/src/main/scripts/FakeXPDrops.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
32FBC48F8C6D8E62E02BCF09F444BA036F76133B6596396F0AB9E474687D9F3F
|
||||||
254
runelite-client/src/main/scripts/FakeXPDrops.rs2asm
Normal file
254
runelite-client/src/main/scripts/FakeXPDrops.rs2asm
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
.id 2091
|
||||||
|
.int_stack_count 2
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 2
|
||||||
|
.string_var_count 0
|
||||||
|
iload 0
|
||||||
|
iload 1
|
||||||
|
sconst "fakeXpDrop"
|
||||||
|
runelite_callback ;
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 207
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL9
|
||||||
|
jump LABEL16
|
||||||
|
LABEL9:
|
||||||
|
get_varc_int 207
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 207
|
||||||
|
jump LABEL216
|
||||||
|
LABEL16:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 208
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL25
|
||||||
|
jump LABEL32
|
||||||
|
LABEL25:
|
||||||
|
get_varc_int 208
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 208
|
||||||
|
jump LABEL216
|
||||||
|
LABEL32:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 209
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL41
|
||||||
|
jump LABEL48
|
||||||
|
LABEL41:
|
||||||
|
get_varc_int 209
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 209
|
||||||
|
jump LABEL216
|
||||||
|
LABEL48:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 210
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL57
|
||||||
|
jump LABEL64
|
||||||
|
LABEL57:
|
||||||
|
get_varc_int 210
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 210
|
||||||
|
jump LABEL216
|
||||||
|
LABEL64:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 211
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL73
|
||||||
|
jump LABEL80
|
||||||
|
LABEL73:
|
||||||
|
get_varc_int 211
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 211
|
||||||
|
jump LABEL216
|
||||||
|
LABEL80:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 212
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL89
|
||||||
|
jump LABEL96
|
||||||
|
LABEL89:
|
||||||
|
get_varc_int 212
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 212
|
||||||
|
jump LABEL216
|
||||||
|
LABEL96:
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 213
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL105
|
||||||
|
jump LABEL112
|
||||||
|
LABEL105:
|
||||||
|
get_varc_int 213
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 213
|
||||||
|
jump LABEL216
|
||||||
|
LABEL112:
|
||||||
|
get_varc_int 207
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL116
|
||||||
|
jump LABEL127
|
||||||
|
LABEL116:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 207
|
||||||
|
jump LABEL216
|
||||||
|
LABEL127:
|
||||||
|
get_varc_int 208
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL131
|
||||||
|
jump LABEL142
|
||||||
|
LABEL131:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 208
|
||||||
|
jump LABEL216
|
||||||
|
LABEL142:
|
||||||
|
get_varc_int 209
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL146
|
||||||
|
jump LABEL157
|
||||||
|
LABEL146:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 209
|
||||||
|
jump LABEL216
|
||||||
|
LABEL157:
|
||||||
|
get_varc_int 210
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL161
|
||||||
|
jump LABEL172
|
||||||
|
LABEL161:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 210
|
||||||
|
jump LABEL216
|
||||||
|
LABEL172:
|
||||||
|
get_varc_int 211
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL176
|
||||||
|
jump LABEL187
|
||||||
|
LABEL176:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 211
|
||||||
|
jump LABEL216
|
||||||
|
LABEL187:
|
||||||
|
get_varc_int 212
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL191
|
||||||
|
jump LABEL202
|
||||||
|
LABEL191:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 212
|
||||||
|
jump LABEL216
|
||||||
|
LABEL202:
|
||||||
|
get_varc_int 213
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL206
|
||||||
|
jump LABEL216
|
||||||
|
LABEL206:
|
||||||
|
iconst 0
|
||||||
|
iconst 83
|
||||||
|
iconst 105
|
||||||
|
iconst 81
|
||||||
|
iload 0
|
||||||
|
enum
|
||||||
|
iconst 0
|
||||||
|
iload 1
|
||||||
|
movecoord
|
||||||
|
set_varc_int 213
|
||||||
|
LABEL216:
|
||||||
|
return
|
||||||
1
runelite-client/src/main/scripts/XpDropChanged.hash
Normal file
1
runelite-client/src/main/scripts/XpDropChanged.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
AAA12D64549A1E4573B242AD9D53D8B1A436B947CF55BACBA660812411750E20
|
||||||
905
runelite-client/src/main/scripts/XpDropChanged.rs2asm
Normal file
905
runelite-client/src/main/scripts/XpDropChanged.rs2asm
Normal file
@@ -0,0 +1,905 @@
|
|||||||
|
.id 1004
|
||||||
|
.int_stack_count 34
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 48
|
||||||
|
.string_var_count 1
|
||||||
|
iload 0
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL4
|
||||||
|
jump LABEL9
|
||||||
|
LABEL4:
|
||||||
|
get_varc_int 207
|
||||||
|
iconst -1
|
||||||
|
if_icmpeq LABEL8
|
||||||
|
jump LABEL9
|
||||||
|
LABEL8:
|
||||||
|
return
|
||||||
|
LABEL9:
|
||||||
|
iconst 23
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 34
|
||||||
|
iload 34
|
||||||
|
define_array 83
|
||||||
|
iload 34
|
||||||
|
define_array 65641
|
||||||
|
iconst 0
|
||||||
|
istore 35
|
||||||
|
iconst 0
|
||||||
|
istore 36
|
||||||
|
iload 0
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL25
|
||||||
|
jump LABEL71
|
||||||
|
LABEL25:
|
||||||
|
get_varc_int 207
|
||||||
|
iconst -1
|
||||||
|
if_icmpne LABEL29
|
||||||
|
jump LABEL70
|
||||||
|
LABEL29:
|
||||||
|
iload 35
|
||||||
|
iconst 105
|
||||||
|
iconst 83
|
||||||
|
iconst 681
|
||||||
|
get_varc_int 207
|
||||||
|
coordx
|
||||||
|
enum
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
get_varc_int 207
|
||||||
|
coordy
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
get_array_int
|
||||||
|
iconst -1
|
||||||
|
if_icmpne LABEL46
|
||||||
|
jump LABEL55
|
||||||
|
LABEL46:
|
||||||
|
iload 35
|
||||||
|
get_array_int 1
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL51
|
||||||
|
jump LABEL55
|
||||||
|
LABEL51:
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL55:
|
||||||
|
get_varc_int 208
|
||||||
|
get_varc_int 209
|
||||||
|
get_varc_int 210
|
||||||
|
get_varc_int 211
|
||||||
|
get_varc_int 212
|
||||||
|
get_varc_int 213
|
||||||
|
iconst -1
|
||||||
|
set_varc_int 213
|
||||||
|
set_varc_int 212
|
||||||
|
set_varc_int 211
|
||||||
|
set_varc_int 210
|
||||||
|
set_varc_int 209
|
||||||
|
set_varc_int 208
|
||||||
|
set_varc_int 207
|
||||||
|
jump LABEL25
|
||||||
|
LABEL70:
|
||||||
|
jump LABEL508
|
||||||
|
LABEL71:
|
||||||
|
iconst 10
|
||||||
|
stat_xp
|
||||||
|
iload 25
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL80
|
||||||
|
jump LABEL90
|
||||||
|
LABEL80:
|
||||||
|
iload 35
|
||||||
|
iconst 10
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL90:
|
||||||
|
iconst 0
|
||||||
|
stat_xp
|
||||||
|
iload 11
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL99
|
||||||
|
jump LABEL109
|
||||||
|
LABEL99:
|
||||||
|
iload 35
|
||||||
|
iconst 0
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL109:
|
||||||
|
iconst 2
|
||||||
|
stat_xp
|
||||||
|
iload 12
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL118
|
||||||
|
jump LABEL128
|
||||||
|
LABEL118:
|
||||||
|
iload 35
|
||||||
|
iconst 2
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL128:
|
||||||
|
iconst 4
|
||||||
|
stat_xp
|
||||||
|
iload 13
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL137
|
||||||
|
jump LABEL147
|
||||||
|
LABEL137:
|
||||||
|
iload 35
|
||||||
|
iconst 4
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL147:
|
||||||
|
iconst 6
|
||||||
|
stat_xp
|
||||||
|
iload 14
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL156
|
||||||
|
jump LABEL166
|
||||||
|
LABEL156:
|
||||||
|
iload 35
|
||||||
|
iconst 6
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL166:
|
||||||
|
iconst 1
|
||||||
|
stat_xp
|
||||||
|
iload 15
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL175
|
||||||
|
jump LABEL185
|
||||||
|
LABEL175:
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL185:
|
||||||
|
iconst 3
|
||||||
|
stat_xp
|
||||||
|
iload 16
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt HP_XP_GAINED
|
||||||
|
jump LABEL204
|
||||||
|
HP_XP_GAINED:
|
||||||
|
iload 35
|
||||||
|
iconst 3
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
sconst "hpXpGained"
|
||||||
|
runelite_callback
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL204:
|
||||||
|
iconst 5
|
||||||
|
stat_xp
|
||||||
|
iload 17
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL213
|
||||||
|
jump LABEL223
|
||||||
|
LABEL213:
|
||||||
|
iload 35
|
||||||
|
iconst 5
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL223:
|
||||||
|
iconst 16
|
||||||
|
stat_xp
|
||||||
|
iload 18
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL232
|
||||||
|
jump LABEL242
|
||||||
|
LABEL232:
|
||||||
|
iload 35
|
||||||
|
iconst 16
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL242:
|
||||||
|
iconst 15
|
||||||
|
stat_xp
|
||||||
|
iload 19
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL251
|
||||||
|
jump LABEL261
|
||||||
|
LABEL251:
|
||||||
|
iload 35
|
||||||
|
iconst 15
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL261:
|
||||||
|
iconst 17
|
||||||
|
stat_xp
|
||||||
|
iload 20
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL270
|
||||||
|
jump LABEL280
|
||||||
|
LABEL270:
|
||||||
|
iload 35
|
||||||
|
iconst 17
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL280:
|
||||||
|
iconst 12
|
||||||
|
stat_xp
|
||||||
|
iload 21
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL289
|
||||||
|
jump LABEL299
|
||||||
|
LABEL289:
|
||||||
|
iload 35
|
||||||
|
iconst 12
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL299:
|
||||||
|
iconst 20
|
||||||
|
stat_xp
|
||||||
|
iload 22
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL308
|
||||||
|
jump LABEL318
|
||||||
|
LABEL308:
|
||||||
|
iload 35
|
||||||
|
iconst 20
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL318:
|
||||||
|
iconst 14
|
||||||
|
stat_xp
|
||||||
|
iload 23
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL327
|
||||||
|
jump LABEL337
|
||||||
|
LABEL327:
|
||||||
|
iload 35
|
||||||
|
iconst 14
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL337:
|
||||||
|
iconst 13
|
||||||
|
stat_xp
|
||||||
|
iload 24
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL346
|
||||||
|
jump LABEL356
|
||||||
|
LABEL346:
|
||||||
|
iload 35
|
||||||
|
iconst 13
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL356:
|
||||||
|
iconst 7
|
||||||
|
stat_xp
|
||||||
|
iload 26
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL365
|
||||||
|
jump LABEL375
|
||||||
|
LABEL365:
|
||||||
|
iload 35
|
||||||
|
iconst 7
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL375:
|
||||||
|
iconst 11
|
||||||
|
stat_xp
|
||||||
|
iload 27
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL384
|
||||||
|
jump LABEL394
|
||||||
|
LABEL384:
|
||||||
|
iload 35
|
||||||
|
iconst 11
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL394:
|
||||||
|
iconst 8
|
||||||
|
stat_xp
|
||||||
|
iload 28
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL403
|
||||||
|
jump LABEL413
|
||||||
|
LABEL403:
|
||||||
|
iload 35
|
||||||
|
iconst 8
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL413:
|
||||||
|
iconst 9
|
||||||
|
stat_xp
|
||||||
|
iload 29
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL422
|
||||||
|
jump LABEL432
|
||||||
|
LABEL422:
|
||||||
|
iload 35
|
||||||
|
iconst 9
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL432:
|
||||||
|
iconst 18
|
||||||
|
stat_xp
|
||||||
|
iload 30
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL441
|
||||||
|
jump LABEL451
|
||||||
|
LABEL441:
|
||||||
|
iload 35
|
||||||
|
iconst 18
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL451:
|
||||||
|
iconst 19
|
||||||
|
stat_xp
|
||||||
|
iload 31
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL460
|
||||||
|
jump LABEL470
|
||||||
|
LABEL460:
|
||||||
|
iload 35
|
||||||
|
iconst 19
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL470:
|
||||||
|
iconst 22
|
||||||
|
stat_xp
|
||||||
|
iload 32
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL479
|
||||||
|
jump LABEL489
|
||||||
|
LABEL479:
|
||||||
|
iload 35
|
||||||
|
iconst 22
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL489:
|
||||||
|
iconst 21
|
||||||
|
stat_xp
|
||||||
|
iload 33
|
||||||
|
sub
|
||||||
|
istore 36
|
||||||
|
iload 36
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL498
|
||||||
|
jump LABEL508
|
||||||
|
LABEL498:
|
||||||
|
iload 35
|
||||||
|
iconst 21
|
||||||
|
set_array_int
|
||||||
|
iload 35
|
||||||
|
iload 36
|
||||||
|
set_array_int 1
|
||||||
|
iload 35
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 35
|
||||||
|
LABEL508:
|
||||||
|
iconst 0
|
||||||
|
istore 37
|
||||||
|
iconst 0
|
||||||
|
istore 38
|
||||||
|
iconst 494
|
||||||
|
istore 39
|
||||||
|
iconst 494
|
||||||
|
istore 40
|
||||||
|
iconst 16
|
||||||
|
istore 41
|
||||||
|
iconst 0
|
||||||
|
istore 42
|
||||||
|
iconst 0
|
||||||
|
istore 43
|
||||||
|
iconst 0
|
||||||
|
istore 44
|
||||||
|
iconst 0
|
||||||
|
istore 45
|
||||||
|
iconst 0
|
||||||
|
istore 46
|
||||||
|
iconst -1
|
||||||
|
istore 47
|
||||||
|
sconst ""
|
||||||
|
sstore 0
|
||||||
|
iload 35
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL536
|
||||||
|
jump LABEL779
|
||||||
|
LABEL536:
|
||||||
|
iload 16
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL540
|
||||||
|
jump LABEL779
|
||||||
|
LABEL540:
|
||||||
|
clientclock
|
||||||
|
get_varc_int 76
|
||||||
|
sub
|
||||||
|
iconst 10
|
||||||
|
if_icmpgt LABEL546
|
||||||
|
jump LABEL779
|
||||||
|
LABEL546:
|
||||||
|
get_varbit 4693
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL550
|
||||||
|
jump LABEL561
|
||||||
|
LABEL550:
|
||||||
|
invoke 1972
|
||||||
|
iconst 0
|
||||||
|
if_icmpeq LABEL554
|
||||||
|
jump LABEL561
|
||||||
|
LABEL554:
|
||||||
|
iconst 495
|
||||||
|
iconst 495
|
||||||
|
iconst 25
|
||||||
|
istore 41
|
||||||
|
istore 40
|
||||||
|
istore 39
|
||||||
|
jump LABEL575
|
||||||
|
LABEL561:
|
||||||
|
get_varbit 4693
|
||||||
|
iconst 2
|
||||||
|
if_icmpeq LABEL565
|
||||||
|
jump LABEL575
|
||||||
|
LABEL565:
|
||||||
|
invoke 1972
|
||||||
|
iconst 0
|
||||||
|
if_icmpeq LABEL569
|
||||||
|
jump LABEL575
|
||||||
|
LABEL569:
|
||||||
|
iconst 496
|
||||||
|
iconst 496
|
||||||
|
iconst 25
|
||||||
|
istore 41
|
||||||
|
istore 40
|
||||||
|
istore 39
|
||||||
|
LABEL575:
|
||||||
|
iload 8
|
||||||
|
if_getheight
|
||||||
|
istore 42
|
||||||
|
iload 42
|
||||||
|
iconst 100
|
||||||
|
if_icmplt LABEL582
|
||||||
|
jump LABEL584
|
||||||
|
LABEL582:
|
||||||
|
iconst 100
|
||||||
|
istore 42
|
||||||
|
LABEL584:
|
||||||
|
iload 41
|
||||||
|
iconst 105
|
||||||
|
iconst 105
|
||||||
|
iconst 1171
|
||||||
|
get_varbit 4722
|
||||||
|
enum
|
||||||
|
multiply
|
||||||
|
iload 42
|
||||||
|
div
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 43
|
||||||
|
LABEL596:
|
||||||
|
iload 37
|
||||||
|
iload 35
|
||||||
|
if_icmplt LABEL600
|
||||||
|
jump LABEL774
|
||||||
|
LABEL600:
|
||||||
|
iload 38
|
||||||
|
iconst 0
|
||||||
|
if_icmpeq LABEL604
|
||||||
|
jump LABEL613
|
||||||
|
LABEL604:
|
||||||
|
iload 0
|
||||||
|
iconst 0
|
||||||
|
if_icmpeq LABEL608
|
||||||
|
jump LABEL613
|
||||||
|
LABEL608:
|
||||||
|
iload 37
|
||||||
|
get_array_int
|
||||||
|
set_varc_int 72
|
||||||
|
iconst 1
|
||||||
|
istore 38
|
||||||
|
LABEL613:
|
||||||
|
get_varc_int 71
|
||||||
|
iconst 0
|
||||||
|
if_icmpgt LABEL617
|
||||||
|
jump LABEL628
|
||||||
|
LABEL617:
|
||||||
|
get_varc_int 71
|
||||||
|
clientclock
|
||||||
|
iload 43
|
||||||
|
sub
|
||||||
|
if_icmpgt LABEL623
|
||||||
|
jump LABEL628
|
||||||
|
LABEL623:
|
||||||
|
get_varc_int 71
|
||||||
|
iload 43
|
||||||
|
add
|
||||||
|
istore 44
|
||||||
|
jump LABEL630
|
||||||
|
LABEL628:
|
||||||
|
clientclock
|
||||||
|
istore 44
|
||||||
|
LABEL630:
|
||||||
|
iload 44
|
||||||
|
clientclock
|
||||||
|
iload 43
|
||||||
|
iload 10
|
||||||
|
multiply
|
||||||
|
add
|
||||||
|
if_icmplt LABEL638
|
||||||
|
jump LABEL771
|
||||||
|
LABEL638:
|
||||||
|
iconst 105
|
||||||
|
iconst 73
|
||||||
|
iconst 1163
|
||||||
|
get_varc_int 70
|
||||||
|
enum
|
||||||
|
istore 47
|
||||||
|
iconst 0
|
||||||
|
iload 47
|
||||||
|
if_sethide
|
||||||
|
iload 37
|
||||||
|
get_array_int 1
|
||||||
|
istore 46
|
||||||
|
iload 47
|
||||||
|
iconst 5
|
||||||
|
iconst 1
|
||||||
|
cc_create
|
||||||
|
iconst 83
|
||||||
|
iconst 100
|
||||||
|
iconst 255
|
||||||
|
iload 37
|
||||||
|
get_array_int
|
||||||
|
enum
|
||||||
|
cc_setgraphic
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 5
|
||||||
|
cc_setposition
|
||||||
|
iconst 1
|
||||||
|
cc_sethide
|
||||||
|
iconst 1
|
||||||
|
istore 45
|
||||||
|
iload 37
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 37
|
||||||
|
LABEL674:
|
||||||
|
get_varbit 4696
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL678
|
||||||
|
jump LABEL722
|
||||||
|
LABEL678:
|
||||||
|
iload 37
|
||||||
|
iload 35
|
||||||
|
if_icmplt LABEL682
|
||||||
|
jump LABEL722
|
||||||
|
LABEL682:
|
||||||
|
iload 45
|
||||||
|
iconst 5
|
||||||
|
if_icmplt LABEL686
|
||||||
|
jump LABEL722
|
||||||
|
LABEL686:
|
||||||
|
iload 46
|
||||||
|
iconst 1000000
|
||||||
|
if_icmplt LABEL690
|
||||||
|
jump LABEL722
|
||||||
|
LABEL690:
|
||||||
|
iload 46
|
||||||
|
iload 37
|
||||||
|
get_array_int 1
|
||||||
|
add
|
||||||
|
istore 46
|
||||||
|
iload 45
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 45
|
||||||
|
iload 47
|
||||||
|
iconst 5
|
||||||
|
iload 45
|
||||||
|
cc_create
|
||||||
|
iconst 83
|
||||||
|
iconst 100
|
||||||
|
iconst 255
|
||||||
|
iload 37
|
||||||
|
get_array_int
|
||||||
|
enum
|
||||||
|
cc_setgraphic
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 5
|
||||||
|
cc_setposition
|
||||||
|
iconst 1
|
||||||
|
cc_sethide
|
||||||
|
iload 37
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
istore 37
|
||||||
|
jump LABEL674
|
||||||
|
LABEL722:
|
||||||
|
iload 46
|
||||||
|
sconst ","
|
||||||
|
invoke 46
|
||||||
|
sconst "xpDropAddDamage"
|
||||||
|
runelite_callback
|
||||||
|
sstore 0
|
||||||
|
iload 0
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL730
|
||||||
|
jump LABEL735
|
||||||
|
LABEL730:
|
||||||
|
sconst "<img=11>"
|
||||||
|
sconst " "
|
||||||
|
sload 0
|
||||||
|
join_string 3
|
||||||
|
sstore 0
|
||||||
|
LABEL735:
|
||||||
|
iload 47
|
||||||
|
iconst 0
|
||||||
|
cc_find
|
||||||
|
iconst 1
|
||||||
|
if_icmpeq LABEL741
|
||||||
|
jump LABEL756
|
||||||
|
LABEL741:
|
||||||
|
sload 0
|
||||||
|
cc_settext
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 0
|
||||||
|
iconst 5
|
||||||
|
cc_setposition
|
||||||
|
iconst 1
|
||||||
|
cc_sethide
|
||||||
|
iload 47
|
||||||
|
iload 41
|
||||||
|
iload 39
|
||||||
|
iload 40
|
||||||
|
sload 0
|
||||||
|
invoke 996
|
||||||
|
LABEL756:
|
||||||
|
iconst 1005
|
||||||
|
iload 47
|
||||||
|
iload 44
|
||||||
|
sconst "Ii"
|
||||||
|
iload 47
|
||||||
|
if_setontimer
|
||||||
|
iload 44
|
||||||
|
set_varc_int 71
|
||||||
|
get_varc_int 70
|
||||||
|
iconst 1
|
||||||
|
add
|
||||||
|
iload 10
|
||||||
|
mod
|
||||||
|
set_varc_int 70
|
||||||
|
jump LABEL773
|
||||||
|
LABEL771:
|
||||||
|
iload 35
|
||||||
|
istore 37
|
||||||
|
LABEL773:
|
||||||
|
jump LABEL596
|
||||||
|
LABEL774:
|
||||||
|
iload 1
|
||||||
|
iload 3
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
invoke 997
|
||||||
|
LABEL779:
|
||||||
|
iload 0
|
||||||
|
iconst 0
|
||||||
|
if_icmpeq LABEL783
|
||||||
|
jump LABEL802
|
||||||
|
LABEL783:
|
||||||
|
iload 3
|
||||||
|
iload 4
|
||||||
|
iload 5
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
invoke 999
|
||||||
|
iload 1
|
||||||
|
iload 2
|
||||||
|
iload 3
|
||||||
|
iload 4
|
||||||
|
iload 5
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
iload 10
|
||||||
|
invoke 1003
|
||||||
|
LABEL802:
|
||||||
|
return
|
||||||
Reference in New Issue
Block a user