Add Virtual Levels plugin
This plugin displays the virtual level in the denominator of given skills, and the virtual total level on the skills tab. Fixes runelite/runelite#375 Co-authored-by: Joshua Filby <joshua@filby.me>
This commit is contained in:
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Joshua Filby <joshua@filby.me>
|
||||||
|
* Copyright (c) 2018, Jordan Atwood <jordan.atwood423@gmail.com>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.virtuallevels;
|
||||||
|
|
||||||
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Experience;
|
||||||
|
import net.runelite.api.Skill;
|
||||||
|
import net.runelite.api.events.ScriptCallbackEvent;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import net.runelite.client.events.PluginChanged;
|
||||||
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
|
|
||||||
|
@PluginDescriptor(
|
||||||
|
name = "Virtual Levels",
|
||||||
|
description = "Configuration for the virtual levels plugin.",
|
||||||
|
tags = {"skill", "total", "max"},
|
||||||
|
enabledByDefault = false
|
||||||
|
)
|
||||||
|
public class VirtualLevelsPlugin extends Plugin
|
||||||
|
{
|
||||||
|
private static final String TOTAL_LEVEL_TEXT_PREFIX = "Total level:<br>";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ClientThread clientThread;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void shutDown()
|
||||||
|
{
|
||||||
|
clientThread.invoke(this::simulateSkillChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void a(PluginChanged pluginChanged)
|
||||||
|
{
|
||||||
|
// this is guaranteed to be called after the plugin has been registered by the eventbus. startUp is not.
|
||||||
|
if (pluginChanged.getPlugin() == this)
|
||||||
|
{
|
||||||
|
clientThread.invoke(this::simulateSkillChange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onScriptCallbackEvent(ScriptCallbackEvent e)
|
||||||
|
{
|
||||||
|
final String eventName = e.getEventName();
|
||||||
|
|
||||||
|
final int[] intStack = client.getIntStack();
|
||||||
|
final int intStackSize = client.getIntStackSize();
|
||||||
|
final String[] stringStack = client.getStringStack();
|
||||||
|
final int stringStackSize = client.getStringStackSize();
|
||||||
|
|
||||||
|
switch (eventName)
|
||||||
|
{
|
||||||
|
case "skillTabBaseLevel":
|
||||||
|
final int skillId = intStack[intStackSize - 2];
|
||||||
|
final Skill skill = Skill.values()[skillId];
|
||||||
|
final int exp = client.getSkillExperience(skill);
|
||||||
|
|
||||||
|
// alter the local variable containing the level to show
|
||||||
|
intStack[intStackSize - 1] = Experience.getLevelForXp(exp);
|
||||||
|
break;
|
||||||
|
case "skillTabMaxLevel":
|
||||||
|
// alter max level constant
|
||||||
|
intStack[intStackSize - 1] = Experience.MAX_VIRT_LEVEL;
|
||||||
|
break;
|
||||||
|
case "skillTabTotalLevel":
|
||||||
|
int level = 0;
|
||||||
|
|
||||||
|
for (Skill s : Skill.values())
|
||||||
|
{
|
||||||
|
if (s == Skill.OVERALL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
level += Experience.getLevelForXp(client.getSkillExperience(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
stringStack[stringStackSize - 1] = TOTAL_LEVEL_TEXT_PREFIX + level;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void simulateSkillChange()
|
||||||
|
{
|
||||||
|
// this fires widgets listening for all skill changes
|
||||||
|
for (Skill skill : Skill.values())
|
||||||
|
{
|
||||||
|
if (skill != Skill.OVERALL)
|
||||||
|
{
|
||||||
|
client.queueChangedSkill(skill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
runelite-client/src/main/scripts/SkillTabBuilder.hash
Normal file
1
runelite-client/src/main/scripts/SkillTabBuilder.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
BE6DF54FF18E3B1D03EC67240FA1F88846AB50B8F3FC88709D0E7E69C7688107
|
||||||
367
runelite-client/src/main/scripts/SkillTabBuilder.rs2asm
Normal file
367
runelite-client/src/main/scripts/SkillTabBuilder.rs2asm
Normal file
@@ -0,0 +1,367 @@
|
|||||||
|
.id 395
|
||||||
|
.int_stack_count 3
|
||||||
|
.string_stack_count 1
|
||||||
|
.int_var_count 10
|
||||||
|
.string_var_count 4
|
||||||
|
iload 0
|
||||||
|
get_boostedskilllevels
|
||||||
|
int_to_string
|
||||||
|
widget_put_text
|
||||||
|
iload 0
|
||||||
|
get_realskilllevels
|
||||||
|
istore 3
|
||||||
|
iload 0 ; load the skill id from arguments
|
||||||
|
iload 3 ; load the current real skill level
|
||||||
|
load_string "skillTabBaseLevel" ; push event name
|
||||||
|
runelite_callback ; invoke callback
|
||||||
|
istore 3 ; store the (possibly) edited real skill level
|
||||||
|
iload 3
|
||||||
|
int_to_string
|
||||||
|
widget_put_text 1
|
||||||
|
iload 0
|
||||||
|
get_skillexperiences
|
||||||
|
istore 4
|
||||||
|
load_string ","
|
||||||
|
sstore 1
|
||||||
|
sload 0
|
||||||
|
load_string " XP:"
|
||||||
|
string_append 2
|
||||||
|
sstore 2
|
||||||
|
iload 4
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
sstore 3
|
||||||
|
load_int 0
|
||||||
|
istore 5
|
||||||
|
get_varbit 4181
|
||||||
|
load_int 0
|
||||||
|
if_icmpeq LABEL29
|
||||||
|
jump LABEL60
|
||||||
|
LABEL29:
|
||||||
|
iload 3
|
||||||
|
load_int 99
|
||||||
|
load_string "skillTabMaxLevel" ; push event name
|
||||||
|
runelite_callback ; invoke callback
|
||||||
|
if_icmplt LABEL33
|
||||||
|
jump LABEL59
|
||||||
|
LABEL33:
|
||||||
|
load_int 105
|
||||||
|
load_int 105
|
||||||
|
load_int 256
|
||||||
|
iload 3
|
||||||
|
load_int 1
|
||||||
|
iadd
|
||||||
|
get_enum_value
|
||||||
|
istore 5
|
||||||
|
sload 2
|
||||||
|
load_string "|Next level at:|Remaining XP:"
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
iload 5
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
load_string "|"
|
||||||
|
iload 5
|
||||||
|
iload 4
|
||||||
|
isub
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
LABEL59:
|
||||||
|
jump LABEL78
|
||||||
|
LABEL60:
|
||||||
|
sload 2
|
||||||
|
load_string "|Next level at:"
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_int 105
|
||||||
|
load_int 105
|
||||||
|
load_int 256
|
||||||
|
iload 3
|
||||||
|
load_int 1
|
||||||
|
iadd
|
||||||
|
get_enum_value
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
string_append 2
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
LABEL78:
|
||||||
|
load_int 0
|
||||||
|
istore 6
|
||||||
|
load_int 0
|
||||||
|
istore 7
|
||||||
|
load_int 0
|
||||||
|
istore 8
|
||||||
|
load_int 0
|
||||||
|
istore 9
|
||||||
|
invoke 1138
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL90
|
||||||
|
jump LABEL227
|
||||||
|
LABEL90:
|
||||||
|
iload 0
|
||||||
|
invoke 1936
|
||||||
|
istore 6
|
||||||
|
iload 6
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL97
|
||||||
|
jump LABEL127
|
||||||
|
LABEL97:
|
||||||
|
iload 6
|
||||||
|
load_int 10
|
||||||
|
idiv
|
||||||
|
istore 6
|
||||||
|
iload 6
|
||||||
|
iload 4
|
||||||
|
if_icmpgt LABEL105
|
||||||
|
jump LABEL127
|
||||||
|
LABEL105:
|
||||||
|
sload 2
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "XP to regain:"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
iload 6
|
||||||
|
iload 4
|
||||||
|
isub
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
load_int 1
|
||||||
|
istore 7
|
||||||
|
LABEL127:
|
||||||
|
iload 7
|
||||||
|
load_int 0
|
||||||
|
if_icmpeq LABEL131
|
||||||
|
jump LABEL227
|
||||||
|
LABEL131:
|
||||||
|
get_varp 1588
|
||||||
|
load_int 0
|
||||||
|
if_icmpgt LABEL135
|
||||||
|
jump LABEL227
|
||||||
|
LABEL135:
|
||||||
|
iload 0
|
||||||
|
switch
|
||||||
|
0: LABEL138
|
||||||
|
1: LABEL183
|
||||||
|
2: LABEL138
|
||||||
|
4: LABEL183
|
||||||
|
6: LABEL138
|
||||||
|
jump LABEL227
|
||||||
|
LABEL138:
|
||||||
|
load_int 20
|
||||||
|
invoke 2031
|
||||||
|
istore 9
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
if_icmpgt LABEL145
|
||||||
|
jump LABEL164
|
||||||
|
LABEL145:
|
||||||
|
sload 2
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "XP permitted:"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
iload 9
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
jump LABEL182
|
||||||
|
LABEL164:
|
||||||
|
load_int 1
|
||||||
|
istore 8
|
||||||
|
sload 2
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "XP permitted:"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "NONE"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
LABEL182:
|
||||||
|
jump LABEL227
|
||||||
|
LABEL183:
|
||||||
|
load_int 30
|
||||||
|
invoke 2031
|
||||||
|
istore 9
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
if_icmpgt LABEL190
|
||||||
|
jump LABEL209
|
||||||
|
LABEL190:
|
||||||
|
sload 2
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "XP permitted:"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
iload 9
|
||||||
|
sload 1
|
||||||
|
invoke 46
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
jump LABEL227
|
||||||
|
LABEL209:
|
||||||
|
load_int 1
|
||||||
|
istore 8
|
||||||
|
sload 2
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "XP permitted:"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 2
|
||||||
|
sload 3
|
||||||
|
load_string "|"
|
||||||
|
load_string "<col=7c0808>"
|
||||||
|
load_string "NONE"
|
||||||
|
load_string "</col>"
|
||||||
|
string_append 4
|
||||||
|
concat_string
|
||||||
|
sstore 3
|
||||||
|
LABEL227:
|
||||||
|
iload 1
|
||||||
|
load_int 5
|
||||||
|
widget_load_child 1
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL233
|
||||||
|
jump LABEL243
|
||||||
|
LABEL233:
|
||||||
|
iload 8
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL237
|
||||||
|
jump LABEL240
|
||||||
|
LABEL237:
|
||||||
|
load_int 0
|
||||||
|
widget_put_hidden 1
|
||||||
|
jump LABEL242
|
||||||
|
LABEL240:
|
||||||
|
load_int 1
|
||||||
|
widget_put_hidden 1
|
||||||
|
LABEL242:
|
||||||
|
jump LABEL270
|
||||||
|
LABEL243:
|
||||||
|
iload 1
|
||||||
|
load_int 5
|
||||||
|
load_int 5
|
||||||
|
widget_create_child 1
|
||||||
|
load_int 6
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 1
|
||||||
|
widget_put_position 1
|
||||||
|
load_int 19
|
||||||
|
load_int 19
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
widget_put_size 1
|
||||||
|
load_int 940
|
||||||
|
widget_put_spriteid 1
|
||||||
|
load_int 65793
|
||||||
|
widget_put_sprite2 1
|
||||||
|
iload 8
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL265
|
||||||
|
jump LABEL268
|
||||||
|
LABEL265:
|
||||||
|
load_int 0
|
||||||
|
widget_put_hidden 1
|
||||||
|
jump LABEL270
|
||||||
|
LABEL268:
|
||||||
|
load_int 1
|
||||||
|
widget_put_hidden 1
|
||||||
|
LABEL270:
|
||||||
|
invoke 1972
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL274
|
||||||
|
jump LABEL301
|
||||||
|
LABEL274:
|
||||||
|
load_int 2367
|
||||||
|
load_int -2147483644
|
||||||
|
load_int -2147483645
|
||||||
|
load_int -1
|
||||||
|
iload 2
|
||||||
|
sload 2
|
||||||
|
sload 3
|
||||||
|
load_int 495
|
||||||
|
load_string "iIiIssf"
|
||||||
|
iload 1
|
||||||
|
widget_put_option_click_listener_widget
|
||||||
|
get_varc 218
|
||||||
|
iload 1
|
||||||
|
if_icmpeq LABEL289
|
||||||
|
jump LABEL300
|
||||||
|
LABEL289:
|
||||||
|
get_varc 217
|
||||||
|
load_int -1
|
||||||
|
if_icmpeq LABEL293
|
||||||
|
jump LABEL300
|
||||||
|
LABEL293:
|
||||||
|
iload 1
|
||||||
|
load_int -1
|
||||||
|
iload 2
|
||||||
|
sload 2
|
||||||
|
sload 3
|
||||||
|
load_int 495
|
||||||
|
invoke 2344
|
||||||
|
LABEL300:
|
||||||
|
jump LABEL316
|
||||||
|
LABEL301:
|
||||||
|
load_int 992
|
||||||
|
load_int -2147483645
|
||||||
|
load_int -1
|
||||||
|
iload 2
|
||||||
|
sload 2
|
||||||
|
sload 3
|
||||||
|
load_int 495
|
||||||
|
load_int 25
|
||||||
|
load_int 5
|
||||||
|
idiv
|
||||||
|
load_string "IiIssfi"
|
||||||
|
iload 1
|
||||||
|
widget_put_mouse_hover_listener_widget
|
||||||
|
load_int 0
|
||||||
|
put_varc 2
|
||||||
|
LABEL316:
|
||||||
|
return
|
||||||
1
runelite-client/src/main/scripts/SkillTabTotalLevel.hash
Normal file
1
runelite-client/src/main/scripts/SkillTabTotalLevel.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
97557341CEF7AB7480D59D0841E480DD0FD7370D12588A2C02D4A814CAA462CE
|
||||||
83
runelite-client/src/main/scripts/SkillTabTotalLevel.rs2asm
Normal file
83
runelite-client/src/main/scripts/SkillTabTotalLevel.rs2asm
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
.id 396
|
||||||
|
.int_stack_count 2
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 2
|
||||||
|
.string_var_count 2
|
||||||
|
load_string "Total level:"
|
||||||
|
load_string "<br>"
|
||||||
|
invoke 1007
|
||||||
|
int_to_string
|
||||||
|
string_append 3
|
||||||
|
iload 0
|
||||||
|
load_string "skillTabTotalLevel" ; push event name
|
||||||
|
runelite_callback ; invoke callback
|
||||||
|
widget_put_text_widget
|
||||||
|
iload 0
|
||||||
|
widget_put_actions_null_widget
|
||||||
|
load_string "Total XP:"
|
||||||
|
sstore 0
|
||||||
|
invoke 1008
|
||||||
|
invoke 1009
|
||||||
|
sstore 1
|
||||||
|
invoke 1972
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL18
|
||||||
|
jump LABEL49
|
||||||
|
LABEL18:
|
||||||
|
load_int 1
|
||||||
|
load_string "Toggle Total XP"
|
||||||
|
iload 0
|
||||||
|
widget_put_action_widget
|
||||||
|
load_int 2367
|
||||||
|
load_int -2147483644
|
||||||
|
load_int -2147483645
|
||||||
|
load_int -1
|
||||||
|
iload 1
|
||||||
|
sload 0
|
||||||
|
sload 1
|
||||||
|
load_int 495
|
||||||
|
load_string "iIiIssf"
|
||||||
|
iload 0
|
||||||
|
widget_put_option_click_listener_widget
|
||||||
|
get_varc 218
|
||||||
|
iload 0
|
||||||
|
if_icmpeq LABEL37
|
||||||
|
jump LABEL48
|
||||||
|
LABEL37:
|
||||||
|
get_varc 217
|
||||||
|
load_int -1
|
||||||
|
if_icmpeq LABEL41
|
||||||
|
jump LABEL48
|
||||||
|
LABEL41:
|
||||||
|
iload 0
|
||||||
|
load_int -1
|
||||||
|
iload 1
|
||||||
|
sload 0
|
||||||
|
sload 1
|
||||||
|
load_int 495
|
||||||
|
invoke 2344
|
||||||
|
LABEL48:
|
||||||
|
jump LABEL69
|
||||||
|
LABEL49:
|
||||||
|
load_int 992
|
||||||
|
load_int -2147483645
|
||||||
|
load_int -1
|
||||||
|
iload 1
|
||||||
|
sload 0
|
||||||
|
sload 1
|
||||||
|
load_int 495
|
||||||
|
load_int 25
|
||||||
|
load_int 5
|
||||||
|
idiv
|
||||||
|
load_string "IiIssfi"
|
||||||
|
iload 0
|
||||||
|
widget_put_mouse_hover_listener_widget
|
||||||
|
load_int 40
|
||||||
|
iload 1
|
||||||
|
load_string "I"
|
||||||
|
iload 0
|
||||||
|
widget_put_mouse_exit_listener_widget
|
||||||
|
load_int 0
|
||||||
|
put_varc 2
|
||||||
|
LABEL69:
|
||||||
|
return
|
||||||
Reference in New Issue
Block a user