From 57f44ada625712af42af07bc8b7d2ebf6b18f948 Mon Sep 17 00:00:00 2001 From: Torwent Date: Sun, 11 Aug 2024 22:26:38 +0200 Subject: [PATCH] feat: read notes wasp kraken: - now uses TRSMap - added some initial but not yet finished banking support - bug fixes wasp stall thiever: - now uses TRSMap - added food stalls - added banking support --- wasp_kraken.simba | 172 ++++++++++++++++++++++---------- wasp_stall_robber.simba | 213 +++++++++++++++++++++++++++++----------- 2 files changed, 274 insertions(+), 111 deletions(-) diff --git a/wasp_kraken.simba b/wasp_kraken.simba index 8f0b007..af7f7ae 100644 --- a/wasp_kraken.simba +++ b/wasp_kraken.simba @@ -10,44 +10,40 @@ type EKrakenState = ( WAIT_STATE, + OPEN_BANK, DEPOSIT_LOOT, WITHDRAW_FOOD, HANDLE_PIN, CLOSE_INTERFACE, + //Outside - ENTER_COVE, - ENTER_CREVICE, - HANDLE_CHAT, - HANDLE_PIN, - HANDLE_WARNING, + ENTER_COVE, ENTER_CREVICE, + HANDLE_CHAT, HANDLE_WARNING, //Inside WALK_BRIDGE, CHECK_LOOT, - WAKE_KRAKEN, - ATTACK_KRAKEN, - SELECT_SPELL, - CAST_BLOOD, - BOOST, - EAT_FOOD, - DRINK_PRAYER, - ENABLE_QPRAY, + WAKE_KRAKEN, ATTACK_KRAKEN, SELECT_SPELL, CAST_BLOOD, + BOOST, EAT_FOOD, DRINK_PRAYER, ENABLE_QPRAY, + OUT_OF_FOOD, ALCH_DROP, - EQUIP_WEAPON, - EQUIP_BRACELET, + + EQUIP_GEAR, EQUIP_BRACELET, END_SCRIPT ); TKrakenKiller = record(TBaseScript) State: EKrakenState; - RSW: TRSWalker; Bridge: TPoint; - BossRoomTPA, SleepyKraken, KrakenTPA: TPointArray; + SleepyKraken, KrakenTPA: TPointArray; + Kraken: TRSNPCV2; KrakenFinder: TRSObjectFinder; + Crevice, CaveEntrance: TRSObjectV2; + AnotherPLayer, IsAttacking, CheckedLoot, UseImbuedHeart, HasBloodSpells: Boolean; BloodSpell: ERSSpell; - Gear: TRSItemArray; + Loot, Gear: TRSItemArray; ImbuedHeart: TCountDown; end; @@ -96,17 +92,22 @@ begin end; procedure TKrakenKiller.Init(maxActions: UInt32; maxTime: UInt64); override; +var + i: Int32; begin inherited; - Self.RSW.SetupRegions([RSRegions.KRAKEN_COVE, RSRegions.PISCATORIS]); - Self.Bridge := [10391, 1145]; - Self.BossRoomTPA := [ - [10369, 1085], [10420, 1086], [10440, 1107], - [10440, 1149], [10415, 1155], [10411, 1187], - [10373, 1187], [10367, 1156], [10345, 1148], - [10345, 1105] - ]; + Map.SetupChunks([[[35,56,36,56], [0]], [[35,156,35,156], [0]], [[48,54,50,53], [0]]]); + Objects.Setup(Map.Objects(), @Map.Walker); + + Self.Crevice := Objects.Get('Crevice'); + Self.CaveEntrance := Objects.Get('Cave Entrance'); + + Self.Kraken.Setup(14, 4, 14, [[5024, 10286]]); + Self.Kraken.SetupUpText('Kraken'); + Self.Kraken.Finder.Colors += CTS2(14407349, 13, 0.13, 1.43); + + Self.Bridge := [5024, 10304]; FoodHandler.MinInvPoints := 10; FoodHandler.MinInvPoints := 90; @@ -122,7 +123,7 @@ begin Options.SetNPCAttackOption(ERSAttackOption.ALWAYS_LEFT_CLICK); Combat.SetAutoRetaliate(False); - CombatHandler.Setup(False, RSMonsters.Kraken, 5000, 4000); + CombatHandler.Setup(False, Self.Kraken, 5000, 4000); Self.HasBloodSpells := Self.CanCastBloodSpells(); @@ -133,6 +134,24 @@ begin CombatHandler.LootHandler.Loot.UpText += 'Shark'; CombatHandler.LootHandler.Drops += ['Shark', '', False, False, 5]; end; + + i := Self.Gear.Find('expeditious bracelet'); + if i > -1 then Delete(Self.Gear, i, 1); + i := Self.Gear.Find('bracelet of slaughter'); + if i > -1 then Delete(Self.Gear, i, 1); + i := Self.Gear.Find('ring of recoil'); + if i > -1 then Delete(Self.Gear, i, 1); + + for i := 0 to High(CombatHandler.LootHandler.Drops) do + begin + if CombatHandler.LootHandler.Drops[i].Item = 'Shark' then + Continue; + + if CombatHandler.LootHandler.Drops[i].Noted then + Self.Loot += 'noted ' + CombatHandler.LootHandler.Drops[i].Item + else + Self.Loot += CombatHandler.LootHandler.Drops[i].Item; + end; end; @@ -145,7 +164,7 @@ end; function TKrakenKiller.EnterCove(): Boolean; begin - if RSObjects.KrakenCoveEntrance.WalkClick() then + if Self.CaveEntrance.WalkSelectOption(['Enter']) then begin Minimap.WaitMoving(); Result := WaitUntil(not Minimap.OnGroundLevel(), 300, 5000); @@ -154,7 +173,7 @@ end; function TKrakenKiller.EnterCrevice(): Boolean; begin - if RSObjects.KrakenCrevice.WalkSelectOption(['Private']) then + if Self.Crevice.WalkSelectOption(['Private']) then begin Minimap.WaitMoving; Result := WaitUntil(('Pay' in Chat.GetChatTitle()) or BankPin.IsOpen(), 300, 5000); @@ -279,14 +298,16 @@ begin while Inventory.IsFull() and Inventory.ContainsConsumable(ERSConsumable.FOOD) do Inventory.Consume(ERSConsumable.FOOD); - Result := CheckedLoot := True; + Self.CheckedLoot := True; + Result := True; + rect := Minimap.GetTileMS(Minimap.Center(), [1,1,0]); while CombatHandler.LootHandler.CheckLoot(rect) and Inventory.HasSpace(1) do Wait(400, 600); end; -function TKrakenKiller.EquipWeapon(): Boolean; +function TKrakenKiller.EquipGear(): Boolean; var item: TRSItem; begin @@ -295,6 +316,37 @@ begin Exit(True); end; + +function TKrakenKiller.InVarrock(): Boolean; +begin + Map.Position(); + Result := Map.RegionIndex = 2; +end; + + +function TKrakenKiller.TeleportOut(): Boolean; +begin + if Magic.IsSpellBook(ERSSpellBook.STANDARD) then + Result := Magic.CastSpell(ERSSpell.VARROCK_TELEPORT) + else + Result := Inventory.ClickItem('Varrock teleport'); + + if not Result then + TerminateScript('Out of food and we failed to teleport out!'); + + Result := WaitUntil(Self.InVarrock(), 300, 5000); +end; + + +function TKrakenKiller.GetVarrockState(): EKrakenState; +begin + if Inventory.ContainsAny(Self.Loot) or not Inventory.IsFull() then + Exit(EKrakenState.OPEN_BANK); + + //GO BACK! + Result := EKrakenState.WAIT_STATE; +end; + function TKrakenKiller.GetState(): EKrakenState; var health: Int32; @@ -303,21 +355,36 @@ begin if WL.Activity.IsFinished() and not MainScreen.InCombat() then Exit(EKrakenState.END_SCRIPT); - pos := Self.RSW.GetMyPos(); - if not Self.InsideBossRoom() then + if RSInterface.IsOpen() then begin if BankPin.IsOpen() then Exit(EKrakenState.HANDLE_PIN); + if Bank.IsOpen() then + begin + if Inventory.ContainsAny(Self.Loot) then + Exit(EKrakenState.DEPOSIT_LOOT); + + if not Inventory.IsFull() then + Exit(EKrakenState.WITHDRAW_FOOD); + end; + + Exit(EKrakenState.CLOSE_INTERFACE); + end; + + pos := Map.Position(); + if not Self.InsideBossRoom() then + begin if 'Pay' in Chat.GetChatTitle ()then Exit(EKrakenState.HANDLE_CHAT); if Chat.HasContinue() then Exit(EKrakenState.HANDLE_WARNING); - case Self.RSW.RegionIndex of - 0: Exit(EKrakenState.ENTER_CREVICE); - 1: Exit(EKrakenState.ENTER_COVE); + case Map.RegionIndex of + 0: Exit(EKrakenState.ENTER_COVE); + 1: Exit(EKrakenState.ENTER_CREVICE); + 2: Exit(Self.GetVarrockState()); end; end; @@ -337,7 +404,10 @@ begin Exit(EKrakenState.WALK_BRIDGE); if Inventory.ContainsAny(Self.Gear) then - Exit(EKrakenState.EQUIP_WEAPON); + Exit(EKrakenState.EQUIP_GEAR); + + if not Inventory.ContainsConsumable(ERSConsumable.FOOD) then + Exit(EKrakenState.OUT_OF_FOOD); health := Minimap.GetHPLevel(); @@ -349,7 +419,7 @@ begin begin if not MainScreen.IsUpText('Blood') then begin - if (health <= 25) and Inventory.ContainsConsumable(ERSConsumable.FOOD) then + if health <= 25 then Exit(EKrakenState.EAT_FOOD); Exit(EKrakenState.SELECT_SPELL); @@ -358,10 +428,7 @@ begin Exit(EKrakenState.CAST_BLOOD); end; - if Inventory.ContainsConsumable(ERSConsumable.FOOD) then - Exit(EKrakenState.EAT_FOOD); - if health <= 25 then - TerminateScript('OUT OF FOOD AND HEALTH WHILE FIGHTING'); + Exit(EKrakenState.EAT_FOOD); end; if Self.IsAttacking then @@ -370,12 +437,7 @@ begin end; if health <= 75 then - begin Self.CheckedLoot - if Inventory.ContainsConsumable(ERSConsumable.FOOD) then - Exit(EKrakenState.EAT_FOOD); - if health <= 40 then - TerminateScript('OUT OF FOOD AND HEALTH'); - end; + Exit(EKrakenState.EAT_FOOD); if not Self.CheckedLoot then Exit(EKrakenState.CHECK_LOOT); @@ -396,16 +458,21 @@ begin Self.SetAction(ToStr(Self.State)); case Self.State of + EKrakenState.OPEN_BANK: Banks.WalkOpen(); + EKrakenState.HANDLE_PIN: BankPin.Enter(Login.GetPlayerPin()); + EKrakenState.DEPOSIT_LOOT: Bank.DepositItems(Self.Loot, True); + EKrakenState.WITHDRAW_FOOD: Bank.WithdrawConsumable(ERSConsumable.FOOD); + EKrakenState.CLOSE_INTERFACE: RSInterface.Close(); + //Outside EKrakenState.ENTER_COVE: Self.EnterCove(); EKrakenState.ENTER_CREVICE: Self.EnterCrevice(); - EKrakenState.HANDLE_PIN: BankPin.Enter(Login.GetPlayerPin()); EKrakenState.HANDLE_CHAT: Self.HandlePayment(); EKrakenState.HANDLE_WARNING: Chat.ClickContinue(BioHash); //Inside - EKrakenState.WALK_BRIDGE: RSW.WebWalk(Bridge, 5, 0.2); - EKrakenState.WAIT_STATE: WaitUntil(not Self.FindRagingKraken, 100, 3000); + EKrakenState.WALK_BRIDGE: Map.Walker.WebWalk(Self.Bridge, 5, 0.2); + EKrakenState.WAIT_STATE: WaitUntil(not Self.FindRagingKraken(), 100, 3000); EKrakenState.CHECK_LOOT: Self.CheckLoot(); EKrakenState.WAKE_KRAKEN: Self.WakeKraken(); EKrakenState.SELECT_SPELL: Magic.CastSpell(Self.BloodSpell); @@ -415,8 +482,9 @@ begin EKrakenState.EAT_FOOD: Inventory.Consume(ERSConsumable.FOOD); EKrakenState.DRINK_PRAYER: Inventory.Consume(ERSConsumable.PRAYER); EKrakenState.ENABLE_QPRAY: Minimap.EnablePrayer(); + EKrakenState.OUT_OF_FOOD: Self.TeleportOut(); EKrakenState.ALCH_DROP: RSAlchHandler.CastAlchemy(True, True); - EKrakenState.EQUIP_WEAPON: Self.EquipWeapon(); + EKrakenState.EQUIP_GEAR: Self.EquipGear(); EKrakenState.EQUIP_BRACELET: CombatHandler.EquipBracelet(); EKrakenState.END_SCRIPT: Break; end; diff --git a/wasp_stall_robber.simba b/wasp_stall_robber.simba index daca68f..98217b4 100644 --- a/wasp_stall_robber.simba +++ b/wasp_stall_robber.simba @@ -5,16 +5,17 @@ {$I WaspLib/osr.simba} type - ERSStall = (TEA_STALL, SILK_STALL, FRUIT_STALL); + ERSStall = (TEA_STALL, FOOD_STALL, SILK_STALL, FRUIT_STALL); var CurrentStall: ERSStall = ERSStall.FRUIT_STALL; + UseBank: Boolean = True; type EStallRobberState = ( FIND_STALL, LEVELED_UP, ROB_STALL, - DROP_LOOT, + DROP_LOOT, OPEN_BANK, DEPOSIT_ITEMS, CLOSE_INTERFACE, WALK_SPOT, WAIT_STATE, END_SCRIPT @@ -23,9 +24,9 @@ type TStallRobber = record(TBaseWalkerScript) State: EStallRobberState; - Stall: TRSObject; + Stall: TRSObjectV2; SafeSpot: TPoint; - DropList: TRSItemArray; + StealList, DropList: TRSItemArray; StallCooldown: TCountDown; end; @@ -43,36 +44,74 @@ begin case CurrentStall of ERSStall.TEA_STALL: begin - Self.RSW.SetupRegions([RSRegions.VARROCK_EAST]); - Stall := RSObjects.TeaStall; - StallCooldown.Init(7000); - SafeSpot := [8465, 2808]; - DropList := ['Cup of tea']; + Map.SetupChunk([[50,54,51,52], [0]]); + Objects.Setup(Map.Objects(), @Map.Walker); + + Self.Stall.Walker := @Map.Walker; + Self.Stall.SetupEx([1.5, 2, 4], [[8983, 36786]]); + Self.Stall.SetupUpText('Tea stall'); + Self.Stall.Finder.Colors += CTS2(9939895, 8, 0.07, 0.64); + Self.StallCooldown.Init(7000); + Self.SafeSpot := [8465, 2808]; + Self.StealList := ['Cup of tea']; + end; + + ERSStall.FOOD_STALL: + begin + GENERATED_GRAPH.Spacing := 14; + Map.SetupChunk([[40,52,42,51], [0]]); + Objects.Setup(Map.Objects(), @Map.Walker); + + Self.Stall.Walker := @Map.Walker; + Self.Stall.SetupEx([1.5, 2, 4], [[6574, 37185]]); + Self.Stall.SetupUpText('Baker''s stall'); + Self.Stall.Finder.Colors += CTS2(9216171, 8, 0.10, 0.67); + + Self.StallCooldown.Init(7000); + Self.SafeSpot := [6580, 37190]; + Self.StealList := ['Bread', 'Cake', 'Chocolate slice']; + Self.DropList := ['Bread', 'Chocolate slice']; end; ERSStall.SILK_STALL: begin - Self.RSW.SetupRegions([RSRegions.ARDOUGNE]); - Stall := RSObjects.SilkStall; - StallCooldown.Init(5000); - SafeSpot := [6042, 3182]; - DropList := ['Silk']; + GENERATED_GRAPH.Spacing := 14; + Map.SetupChunk([[40,52,42,51], [0]]); + Objects.Setup(Map.Objects(), @Map.Walker); + + Self.Stall.Walker := @Map.Walker; + Self.Stall.SetupEx([2, 1.5, 4], [[6554, 37172]]); + Self.Stall.SetupUpText('Silk stall'); + Self.Stall.Finder.Colors += CTS2(9939895, 8, 0.07, 0.64); + Self.StallCooldown.Init(5000); + Self.SafeSpot := [6552, 37166]; + Self.StealList := ['Silk']; end; ERSStall.FRUIT_STALL: begin - Self.RSW.SetupRegions([RSRegions.HOSIDIUS_FRUIT_STALL_HOUSE]); - Stall := RSObjects.FruitStall; - StallCooldown.Init(2000); - Self.DropList := [ + Map.SetupChunk([[27,56,28,55], [0]]); + Objects.Setup(Map.Objects(), @Map.Walker); + + Self.Stall.Walker := @Map.Walker; + Self.Stall.SetupEx([1.5, 2, 4], [[3084, 36000], [3108, 36000]]); + Self.Stall.SetupUpText('Fruit Stall'); + Self.Stall.Finder.Colors += CTS2(3566426, 9, 0.19, 1.19); + Self.Stall.Finder.Colors += CTS2(8687792, 14, 0.12, 0.65); + Self.Stall.Finder.Colors += CTS2(2568331, 19, 0.03, 0.29); + Self.Stall.Finder.ColorClusters += [CTS2(1666610, 20, 0.33, 2), CTS2(4805477, 11, 0.04, 0.48), 5]; + Self.StallCooldown.Init(2400); + Self.StealList := [ 'Cooking apple', 'Banana', 'Jangerberries', 'Lemon', 'Redberries', 'Pineapple', 'Lime', 'Strawberry', 'Strange fruit', - 'Papaya fruit', 'Silk', 'Golovanova fruit top' + 'Papaya fruit', 'Golovanova fruit top' + ]; + Self.DropList := [ + 'Cooking apple', 'Banana', 'Jangerberries', + 'Lemon', 'Redberries', 'Pineapple', 'Lime' ]; end; end; - - StallCooldown.Timeout := GetTickCount(); end; procedure TStallRobber.Init(maxActions: UInt32; maxTime: UInt64); override; @@ -80,19 +119,10 @@ begin inherited; Self.SetupStall(); - - if WLSettings.RemoteInput.HUDDebug then - DebugObjectArray += Stall; + Self.StallCooldown.Timeout := GetTickCount(); end; -function TStallRobber.HasLoot(): Boolean; -var - Slots: TIntegerArray; -begin - Result := Inventory.FindItems(DropList, Slots); -end; - function TStallRobber.RobStall(): Boolean; begin if Stall.WalkClick() then @@ -107,38 +137,71 @@ end; function TStallRobber.DropItems(): Boolean; var - Slots: TIntegerArray; + slots: TIntegerArray; begin - Inventory.FindItems(Self.DropList, Slots); - Result := Inventory.ShiftDrop(Self.DropList, DROP_PATTERN_SNAKE); + if UseBank then + Inventory.FindItems(Self.DropList, slots) + else + Inventory.FindItems(Self.StealList, slots); + + Result := Inventory.ShiftDrop(slots, Inventory.RandomPattern()); if Result then - TotalActions += Length(Slots); + begin + Self.TotalActions += Length(slots); + Self.StallCooldown.Timeout := GetTickCount(); + end; +end; + +function TStallRobber.BankItems(): Boolean; +var + count: Int32; +begin + count := Inventory.Count(); + Result := Bank.DepositAll(); + if Result then + Self.TotalActions += (count - Inventory.Count()); end; function TStallRobber.GetState(): EStallRobberState; begin if WL.Activity.IsFinished() then - Exit(END_SCRIPT); + Exit(EStallRobberState.END_SCRIPT); if Chat.LeveledUp() then - Exit(LEVELED_UP); + Exit(EStallRobberState.LEVELED_UP); + + if RSInterface.IsOpen() then + begin + if UseBank and Bank.IsOpen() and Inventory.ContainsAny(Self.StealList) then + Exit(EStallRobberState.DEPOSIT_ITEMS); + + Exit(EStallRobberState.CLOSE_INTERFACE); + end; - if Inventory.IsFull() and Self.HasLoot() then - Exit(DROP_LOOT); + if Inventory.IsFull() then + begin + if Inventory.ContainsAny(Self.DropList) then + Exit(EStallRobberState.DROP_LOOT); + + if UseBank then + Exit(EStallRobberState.OPEN_BANK); + + Exit(EStallRobberState.DROP_LOOT); + end; if MainScreen.IsUpText('Steal-from') then - Exit(ROB_STALL); + Exit(EStallRobberState.ROB_STALL); - if not StallCooldown.IsFinished() then - Exit(WAIT_STATE); + if not Self.StallCooldown.IsFinished() then + Exit(EStallRobberState.WAIT_STATE); - if (SafeSpot <> []) and not Self.RSW.AtTile(SafeSpot, 5) then - Exit(WALK_SPOT); + if (Self.SafeSpot <> []) and not Map.InRange(Self.SafeSpot, 5) then + Exit(EStallRobberState.WALK_SPOT); - if Self.RSW.AtTile(Stall.Coordinates) then - Exit(FIND_STALL); + if Map.InRange(Self.Stall.Coordinates, 14) then + Exit(EStallRobberState.FIND_STALL); end; procedure TStallRobber.Run(maxActions: UInt32; maxTime: UInt64); @@ -146,19 +209,25 @@ begin Self.Init(maxActions, maxTime); repeat - State := Self.GetState(); - Self.SetAction(ToStr(State)); + Self.State := Self.GetState(); + Self.SetAction(ToStr(Self.State)); case Self.State of - LEVELED_UP: Chat.HandleLevelUp(); - DROP_LOOT: Self.DropItems(); - FIND_STALL, ROB_STALL: Self.RobStall(); - WAIT_STATE: Wait(100, 200); - WALK_SPOT: Self.RSW.WebWalk(SafeSpot, 3, 0.2); - END_SCRIPT: Break; + EStallRobberState.LEVELED_UP: if Chat.HandleLevelUp() then Self.StallCooldown.Timeout := GetTickCount(); + EStallRobberState.DROP_LOOT: Self.DropItems(); + EStallRobberState.FIND_STALL, ROB_STALL: Self.RobStall(); + EStallRobberState.WAIT_STATE: Wait(100, 200); + EStallRobberState.WALK_SPOT: Map.Walker.WebWalk(Self.SafeSpot, 3, 0.2); + + EStallRobberState.OPEN_BANK: Banks.WalkOpen(); + EStallRobberState.DEPOSIT_ITEMS: Self.BankItems(); + EStallRobberState.CLOSE_INTERFACE: RSInterface.Close(); + + EStallRobberState.END_SCRIPT: Break; end; - Self.DoAntiban(); + if Self.DoAntiban() then + Self.StallCooldown.Timeout := GetTickCount(); until Self.ShouldStop(); end; @@ -169,11 +238,18 @@ var type TStallRobberConfig = record(TScriptForm) StallSelector: TLabeledCombobox; + BankCheckbox: TLabeledCheckBox; + Config: TConfigJSON; end; procedure TStallRobberConfig.StartScript(sender: TObject); override; begin CurrentStall := ERSStall(Self.StallSelector.GetItemIndex()); + UseBank := Self.BankCheckbox.IsChecked(); + + Self.Config.Put('stall', Self.StallSelector.GetItemIndex()); + Self.Config.Put('bank', UseBank); + inherited; end; @@ -181,6 +257,7 @@ procedure TStallRobberConfig.Run(); override; var tab: TTabSheet; begin + Self.Config.Setup('wasp-stall-robber'); Self.Setup('Wasp Stall Robber'); Self.Start.SetOnClick(@Self.StartScript); @@ -197,10 +274,28 @@ begin SetTop(TControl.AdjustToDPI(200)); SetWidth(TControl.AdjustToDPI(300)); SetStyle(csDropDownList); - AddItemArray(['Tea stall (East Varrock)', - 'Silk stall (Ardougne market, safe spot knights!)', - 'Fruit stall (Hosidius east of the market)']); - SetItemIndex(Ord(CurrentStall)); + AddItemArray([ + 'Tea stall (East Varrock)', + 'Food stall (Ardougne market)', + 'Silk stall (Ardougne market, safe spot knights!)', + 'Fruit stall (Hosidius east of the market)' + ]); + if Self.Config.Has('stall') then + SetItemIndex(Self.Config.GetInt('stall')) + else + SetItemIndex(Ord(CurrentStall)); + end; + + with Self.BankCheckbox do + begin + Create(tab); + SetCaption('Bank loot'); + SetLeft(TControl.AdjustToDPI(20)); + SetTop(TControl.AdjustToDPI(260)); + if Self.Config.Has('bank') then + SetChecked(Self.Config.GetBoolean('bank')) + else + SetChecked(UseBank); end; Self.CreateAntibanManager();