try and fix the crash

This commit is contained in:
ThatGamerBlue
2022-04-20 22:25:34 +01:00
parent 1c4a0bd154
commit eadc31db1b
2 changed files with 48 additions and 22 deletions

View File

@@ -27,7 +27,7 @@ object ProjectVersions {
const val launcherVersion = "2.2.0" const val launcherVersion = "2.2.0"
const val rlVersion = "1.8.18" const val rlVersion = "1.8.18"
const val openosrsVersion = "4.24.0" const val openosrsVersion = "4.24.1"
const val rsversion = 204 const val rsversion = 204
const val cacheversion = 165 const val cacheversion = 165

View File

@@ -1027,6 +1027,9 @@ public abstract class RSClientMixin implements RSClient
RSRuneLiteMenuEntry var1 = rl$menuEntries[var0]; RSRuneLiteMenuEntry var1 = rl$menuEntries[var0];
RSRuneLiteMenuEntry var2 = rl$menuEntries[var0 + 1]; RSRuneLiteMenuEntry var2 = rl$menuEntries[var0 + 1];
assert var1.getIdx() == var0;
assert var2.getIdx() == var0 + 1;
rl$menuEntries[var0] = var2; rl$menuEntries[var0] = var2;
rl$menuEntries[var0 + 1] = var1; rl$menuEntries[var0 + 1] = var1;
@@ -1047,6 +1050,10 @@ public abstract class RSClientMixin implements RSClient
{ {
for (int i = optionCount; i < tmpOptionsCount; ++i) for (int i = optionCount; i < tmpOptionsCount; ++i)
{ {
RSRuneLiteMenuEntry entry = rl$menuEntries[i];
if (entry == null) {
rl$logger.error("about to crash: opcnt:{} tmpopcnt:{} i:{}", optionCount, tmpOptionsCount, i);
}
rl$menuEntries[i].setConsumer(null); rl$menuEntries[i].setConsumer(null);
} }
} }
@@ -1676,11 +1683,15 @@ public abstract class RSClientMixin implements RSClient
{ {
RSRuneLiteMenuEntry menuEntry = null; RSRuneLiteMenuEntry menuEntry = null;
int i; for (int i = client.getMenuOptionCount() - 1; i >= 0; --i)
for (i = client.getMenuOptionCount() - 1; i >= 0; --i)
{ {
if (client.getMenuOptions()[i].equals(option) && client.getMenuTargets()[i].equals(target) && client.getMenuIdentifiers()[i] == id && client.getMenuOpcodes()[i] == opcode) if (client.getMenuOpcodes()[i] == opcode
{ && client.getMenuIdentifiers()[i] == id
&& client.getMenuArguments1()[i] == param0
&& client.getMenuArguments2()[i] == param1
&& option.equals(client.getMenuOptions()[i])
&& (option.equals(target) || target.equals(client.getMenuTargets()[i]))
) {
menuEntry = rl$menuEntries[i]; menuEntry = rl$menuEntries[i];
break; break;
} }
@@ -1688,11 +1699,11 @@ public abstract class RSClientMixin implements RSClient
if (menuEntry == null && option.equals(target)) if (menuEntry == null && option.equals(target))
{ {
if (tmpMenuOptionsCount < 500) int i;
if (client.getMenuOptionCount() < 500)
{ {
int var10000 = tmpMenuOptionsCount; i = client.getMenuOptionCount();
tmpMenuOptionsCount = (var10000 + 1); client.setMenuOptionCount(client.getMenuOptionCount() + 1);
i = var10000;
} }
else else
{ {
@@ -1707,13 +1718,16 @@ public abstract class RSClientMixin implements RSClient
client.getMenuArguments2()[i] = param1; client.getMenuArguments2()[i] = param1;
client.getMenuForceLeftClick()[i] = false; client.getMenuForceLeftClick()[i] = false;
menuEntry = rl$menuEntries[i]; menuEntry = rl$menuEntries[i];
if (menuEntry == null) {
menuEntry = rl$menuEntries[i] = newRuneliteMenuEntry(i);
}
} }
MenuOptionClicked menuOptionClicked = null; MenuOptionClicked event;
if (menuEntry == null) if (menuEntry == null)
{ {
menuOptionClicked = new MenuOptionClicked(newBareRuneliteMenuEntry()); MenuEntry tmpEntry = client.createMenuEntry(option, target, id, opcode, param0, param1, false);
event = new MenuOptionClicked(tmpEntry);
if (canvasX != -1 || canvasY != -1) if (canvasX != -1 || canvasY != -1)
{ {
@@ -1722,16 +1736,21 @@ public abstract class RSClientMixin implements RSClient
} }
else else
{ {
menuOptionClicked = new MenuOptionClicked(menuEntry); client.getLogger().trace("Menu click op {} targ {} action {} id {} p0 {} p1 {}", option, target, opcode, id, param0, param1);
event = new MenuOptionClicked(menuEntry);
client.getCallbacks().post(menuOptionClicked); client.getCallbacks().post(event);
if (menuEntry.getConsumer() != null) if (menuEntry.getConsumer() != null)
{ {
menuEntry.getConsumer().accept(menuEntry); try {
menuEntry.getConsumer().accept(menuEntry);
} catch (Exception ex) {
client.getLogger().warn("exception in menu callback", ex);
}
} }
if (menuOptionClicked.isConsumed()) if (event.isConsumed())
{ {
return; return;
} }
@@ -1752,9 +1771,9 @@ public abstract class RSClientMixin implements RSClient
{ {
client.getLogger().info( client.getLogger().info(
"|MenuAction|: MenuOption={} MenuTarget={} Id={} Opcode={}/{} Param0={} Param1={} CanvasX={} CanvasY={}", "|MenuAction|: MenuOption={} MenuTarget={} Id={} Opcode={}/{} Param0={} Param1={} CanvasX={} CanvasY={}",
menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), menuOptionClicked.getId(), event.getMenuOption(), event.getMenuTarget(), event.getId(),
menuOptionClicked.getMenuAction(), opcode + (decremented ? 2000 : 0), event.getMenuAction(), opcode + (decremented ? 2000 : 0),
menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), canvasX, canvasY event.getParam0(), event.getParam1(), canvasX, canvasY
); );
if (menuEntry != null) if (menuEntry != null)
@@ -1766,9 +1785,16 @@ public abstract class RSClientMixin implements RSClient
} }
} }
copy$menuAction(menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), if (opcode == MenuAction.WIDGET_CONTINUE.getId()) {
menuOptionClicked.getMenuAction() == UNKNOWN ? opcode : menuOptionClicked.getMenuAction().getId(), Widget widget = client.getWidget(param1);
menuOptionClicked.getId(), menuOptionClicked.getMenuOption(), menuOptionClicked.getMenuTarget(), if (widget == null || param0 > -1 && widget.getChild(param0) == null) {
return;
}
}
copy$menuAction(event.getParam0(), event.getParam1(),
event.getMenuAction() == UNKNOWN ? opcode : event.getMenuAction().getId(),
event.getId(), event.getMenuOption(), event.getMenuTarget(),
canvasX, canvasY); canvasX, canvasY);
} }