What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Status
Not open for further replies.

pushedx

Well-Known Member
Joined
Sep 24, 2013
Messages
4,252
Exilebuddy will be down for maintenance at the launch of the 2.1.0 content update tomorrow.

As with any big update, a new compatible version will be pushed as soon as we're comfortable the bot is as safe as possible and working. Given that a lot of minor patches are typically released in the first 24 hours, which require a new bot release if the client changes, we expect there to be a few days of downtime before a new Beta is pushed this weekend. Subsequently, updates may be sporadic throughout the first week of the content update, so EB might see additional downtime as the game stabilizes from changes once again.

This is just a heads up post for anyone who is unfamiliar with our updates. Users will be compensated for any extended downtime.

Thank you for reading!
 
Update 1: Based on how maintenance has progressed so far today, we expect a Beta version to hopefully be user testable around Monday at earliest. In terms of updates to the bot/API required, the 2.1.0 Content update is essentially an expansion (as it literally includes stuff for the upcoming expansion), so downtime will be much longer than any of the other minor patches released after the 2.0.0 expansion was released. Further updates will be posted in this thread later Sunday, as we look at the current state of the bot and decide if it's ready to be user tested or not.

Once again, we thank users for their patience, and you will be compensated for the extended downtime. :)
 
Update 2: Maintenance is progressing well, but there's significantly more that still needs to be updated/tested before a beta can be made. As a result, there's no longer a specific ETA when the next beta will be built, but hopefully it'll happen sometime mid-late this week. Progress updates will be posted every few days to keep users informed.
 
A Beta is planned for tomorrow, Wednesday Dec 16th (USA time). The preliminary patch notes are as follows:
Code:
* Updates for 2.1.0.1 - 2.1.0.7.
* AssignPassivesTask will now attempt to close the reset passive dialog before skipping execution due to a full reset being present.
* The GameData.MinimapIcon type has been removed.
* NetworkObject.MinimapIcon has changed from a MinimapIcon type (now removed) to a DatMinimapIconWrapper type.
* MissionMarker.Icon and MissionMarker.IsVisible removed. Use NetworkObject.MinimapIcon and NetworkObject.IsMinimapIconVisible instead.
* MinimapIconComponent.Icon (MinimapIcon) replaced with MinimapIconComponent.MinimapIcon (DatMinimapIconWrapper)
* PurchasePanel.SwitchToTab now implements waiting for contents like PreviousTab/NextTab.
* WaitForPurchase now returns a bool to signal if waiting for the panel to load timed out or not. This is to mirror WaitForStash, as it was possible for infinite loops to occur on client hiccups.
* PurchasePanel.Tabs changed to PurchasePanel.TabNames for consistency.
* Various GuildStashPanel updates to ensure tabs are fully loaded before API functions return.
* GuildStashPanel.IsOnLastTab and GuildStashPanel.IsOnFirstTab added.
* GuildStashPanel.PreviousTab now checks IsOnFirstTab and GuildStashPanel.NextTab checks IsOnLastTab to prevent unnecessary waiting.
* GuildStashPanel.WaitForGuildStash added to wait for the inital tab to load after opening.
* GuildStashPanel.GoToLastTab added.
* GuildStashPanel.GoToFirstTab and GuildStashPanel.GoToLastTab now fail after trying to change a tab page for 5s.
* GuildStashPanel.CurrentTabItems added for consistency. It is an alias for GuildStashPanel.CurrentTabInventory.Items.
* Inventory.Cols added as an alias for Inventory.Columns.
* StashPanel.GoToFirstTab and StashPanel.GoToLastTab now fail after trying to change a tab page for 5s.
* StashPanel.GoToLastTab added.
* StashPanel.PreviousTab now checks IsOnFirstTab and StashPanel.NextTab checks IsOnLastTab to prevent unnecessary waiting.
* StashPanel.IsOnLastTab added.
* StashPanel.CurrentTabItems added for consistency. It is an alias for StashPanel.CurrentTabInventory.Items.
* SkillGemHud.AreLevelIconsDisplayed changed from a function to a property.
* The static location for The Ledge entrance should now be fixed in The Submerged Passage.
* Removed the obsolete InGameState.AreLevelSkillGemIconsDisplayed function.
* Removed the obsolete InGameState.ClearLevelSkillGemIcon function.
* Fixed a possible infinite loop in SocialPanel.JoinPublicParty.
* JoinPublicPartyError.TimedOut added to signal when SocialPanel.JoinPublicParty times out.
* TradePanel.AcceptTrade added.
* TradeActionError.CantAccept added.
* Fixed a bug in Skill.ToString where it would check of it could be cast when the skill didn't belong to the player.
* StoneAltar object wrapper added.
* Added Item.IsTalismanType.
* Added InventoryPanel.EquipSkillGemToNeck.
* Skill.ToString no longer logs AllStats, too much clutter.
* Fixed a bug where ObjectManager.TreeRoots would always return null due to the game object changing in types.
* GemLeveler adds support for gems in the Neck slot.
* HandleA2Q9 logic simplified some to not use quest data.
* Added more dump scripts: DumpActiveSkills, DumpGrantedEffects, DumpGrantedEffectsPerLevel, DumpMinimapIcons, DumpNpcTalk.

There's been no changes to the OldGrindBot implementation itself. OldRoutine has only had a few additions made for testing a few skills but it mostly remains unchanged as well. This update was solely focused on fully updating the API and becoming compatible with the new client for 2.1.0+. At this point, I do know OldRoutine is really outdated in terms of trying to support new skills and whatnot, but it's what we have in place for the time being.

The FPS issue is still known and seems a lot better in some areas, and a lot worse in others. I do not have an explanation for it yet, but for now, we still have to live with this as a side effect of interacting with the new client. This game has changed too much (and will continue to change in unpredictable ways) to easily be able to track down the issues or try and change existing core aspects of the API; too much is dependent on everything else.

At this point, we feel really comfortable with the updates in terms of hopefully not missing anything, so we'll be doing some last-pass testing before pushing a Beta on Wednesday. Please be aware though, several upcoming PoE patches have already been announced, so once again, we'll most likely see some additional downtime for them. Large updates like this are always rocky the first month or so, so we thank users for their patience.
 
In addition, I've put together some code snippets from our extensive API (which is why client updates affect us more than others) which were used to test. This should give current/aspiring devs some more concrete direction in terms of figuring out where to start looking in the API to accomplish various things. These examples are not comprehensive, as there's a lot more in the API, but this covers a good set of functionality. EB provides API access to almost everything in the client, so there's more potential/opportunity for devs now than there has ever been before in EB's history. We hope to see more people take advantage of these things in the future. :)
Code:
[RewardPanel]

// Check if the RewardPanel is open.
if(LokiPoe.InGameState.RewardPanel.IsOpened)
{
}

// List all items in the RewardPanel.
foreach(var item in LokiPoe.InGameState.RewardPanel.Items)
{
	// ...
}

// Choose a reward by full name.
var result = LokiPoe.InGameState.RewardPanel.Choose("Contagion");

[PurchasePanel]

// Check if the PurchasePanel is open.
if(LokiPoe.InGameState.PurchasePanel.IsOpened)
{
}

// Wait for contents to load when first opening the panel.
LokiPoe.InGameState.RewardPanel.WaitForPurchase();

// List all tabs in the PurchasePanel.
foreach(var tab in LokiPoe.InGameState.PurchasePanel.TabNames)
{
	Log.InfoFormat("{0}", tab);
}

// Get the current tab's name
var result = LokiPoe.InGameState.PurchasePanel.CurrentTabName;

// Switch to a specific tab.
var result = LokiPoe.InGameState.PurchasePanel.SwitchToTab("-2-");

// Move to the previous tab.
var result = LokiPoe.InGameState.PurchasePanel.PreviousTab();

// Move to the next tab.
var result = LokiPoe.InGameState.PurchasePanel.NextTab();

// Update the current tab's items before accessing them. This is REQUIRED per tab.
var result = LokiPoe.InGameState.PurchasePanel.UpdateCurrentTabItems();

// Get a list of all items being sold
foreach(var vi in LokiPoe.InGameState.PurchasePanel.CurrentTabItems)
{
	Log.InfoFormat("{0}{1}", vi.Item.FullName, vi.CanAfford ? "" : " (Unaffordable)");
	foreach(var kvp in vi.Cost)
	{
		Log.InfoFormat("\t{0}x {1}", kvp.Value, kvp.Key);
	}
}

[GuildStashPanel]

// Check if the GuildStashPanel is open.
if(LokiPoe.InGameState.GuildStashPanel.IsOpened)
{
}

// Wait for contents to load when first opening the panel.
LokiPoe.InGameState.GuildStashPanel.WaitForGuildStash();

// Get the current tab's name
var result = LokiPoe.InGameState.GuildStashPanel.CurrentTabName;

// List all tabs in the GuildStashPanel.
foreach(var tab in LokiPoe.InGameState.GuildStashPanel.TabNames)
{
	Log.InfoFormat("{0}", tab);
}

// Switch to a specific tab.
var result = LokiPoe.InGameState.GuildStashPanel.SwitchToTab("2");

// Move to the next tab.
var result = LokiPoe.InGameState.GuildStashPanel.NextTab();

// Move to the previous tab.
var result = LokiPoe.InGameState.GuildStashPanel.PreviousTab();


// Get information about the guild stash tab's inventory
var inv = LokiPoe.InGameState.GuildStashPanel.CurrentTabInventory;
Log.InfoFormat("Inventory Size: {0} x {1}", inv.Rows, inv.Cols);

// Get information about the guild stash tab
var tab = LokiPoe.InGameState.GuildStashPanel.CurrentTabInventoryTab;
Log.InfoFormat("IsRemoveOnly: {0} IsGuild: {1} IsPremium: {2}", tab.IsRemoveOnly, tab.IsGuild, tab.IsPremium);

// Get items in the current tab.
foreach(var item in LokiPoe.InGameState.GuildStashPanel.CurrentTabItems)
{
	Log.InfoFormat("{0} {1}", item.FullName, item.HasInventoryLocation ? item.LocationTopLeft.ToString()  : "(no location)");
}

// Places the current cursor item into the tab.
var result = LokiPoe.InGameState.GuildStashPanel.PlaceFromCursor();

// Places the current cursor item into the tab at a location.
var result = LokiPoe.InGameState.GuildStashPanel.PlaceFromCursor(3, 3);

// Pickup an item to the cursor from the stash tab
var items = LokiPoe.InGameState.GuildStashPanel.CurrentTabItems;
var pi = items.FirstOrDefault(i => i.FullName == "Small Mana Flask");
var result = LokiPoe.InGameState.GuildStashPanel.PickupToCursor(pi);

// Split a stack in the stash tab
var pi2 = items.FirstOrDefault(i => i.FullName == "Transmutation Shard");
var result = LokiPoe.InGameState.GuildStashPanel.SplitStack(pi2, 3);

// Merge a stack in the stash tab
var pi3 = items.FirstOrDefault(i => i.FullName == "Transmutation Shard");
var result = LokiPoe.InGameState.GuildStashPanel.MergeStack(pi3);

[WorldPanel]

// Check if the WorldPanel is open.
if(LokiPoe.InGameState.WorldPanel.IsOpened)
{
}

// Take a waypoint to a specific area by full id.
var result = LokiPoe.InGameState.WorldPanel.TakeWaypoint("1_1_4_1", true, -1);

// Go to the hideout
var result = LokiPoe.InGameState.WorldPanel.GoToHideout();


foreach(var ch in LokiPoe.SelectCharacterState.Characters)
{
	Log.InfoFormat("{0}  ({2})- {1}", ch.Name, ch.League, ch.Level);
}

[SkillGemHud]

// Check to see if there are skill gems listed on the hud for leveling
if(LokiPoe.InGameState.SkillGemHud.AreLevelIconsDisplayed)
{
}

// Get the first skill gem on the HUD
var item = LokiPoe.InGameState.SkillGemHud.FirstLevelSkillGemItem;

// Check to see if the skill gem can be leveled.
if(LokiPoe.InGameState.SkillGemHud.CanLevelFirstLevelSkillGem)
{
}

// Level the first skill gem
var result = LokiPoe.InGameState.SkillGemHud.LevelFirstLevelSkillGemIcon()

// Clear the first skill gem
var result = LokiPoe.InGameState.SkillGemHud.ClearFirstLevelSkillGemIcon()

[ResurrectPanel]

// Check if the ResurrectPanel is open.
if(LokiPoe.InGameState.ResurrectPanel.IsOpened)
{
}

// Resurrect to check point, then town.
var result = LokiPoe.InGameState.ResurrectPanel.Resurrect

// Resurrect to town.
var result = LokiPoe.InGameState.ResurrectPanel.ResurrectToTown

// Resurrect to checkpoint
var result = LokiPoe.InGameState.ResurrectPanel.ResurrectToCheckPoint

[SocialPanel]

// Check if the SocialPanel is open.
if(LokiPoe.InGameState.SocialPanel.IsOpened)
{
}

// Know which tab is selected
Log.InfoFormat("IsFriendsTabSelected: {0}", LokiPoe.InGameState.SocialPanel.IsFriendsTabSelected);
Log.InfoFormat("IsGuildTabSelected: {0}", LokiPoe.InGameState.SocialPanel.IsGuildTabSelected);
Log.InfoFormat("IsPartyTabSelected: {0}", LokiPoe.InGameState.SocialPanel.IsPartyTabSelected);
Log.InfoFormat("IsPublicPartiesTabSelected: {0}", LokiPoe.InGameState.SocialPanel.IsPublicPartiesTabSelected);

// List public parties
foreach(var party in LokiPoe.InGameState.SocialPanel.PublicParties)
{
	Log.InfoFormat("{0}", party.Name);
}

// Switch to this tab.
vae result = LokiPoe.InGameState.SocialPanel.SwitchToPartyTab();

// Switch to this tab.
vae result = LokiPoe.InGameState.SocialPanel.SwitchToPublicPartiesTab();

// Join a public party
vae result = LokiPoe.InGameState.SocialPanel.JoinPublicParty(LokiPoe.InGameState.SocialPanel.PublicParties.FirstOrDefault());

// Leave the current party.
vae result = LokiPoe.InGameState.SocialPanel.LeaveCurrentParty();

// Accept/Decline party invites
vae result = LokiPoe.InGameState.SocialPanel.HandlePendingPartyInvites(new string[]{"accname"}));

// Attempt to visit the hideout of a party member.
vae result = LokiPoe.InGameState.SocialPanel.VisitPartyMemberHideout("charname");

[TradePanel]

// Check if the TradePanel is open.
if(LokiPoe.InGameState.TradePanel.IsOpened)
{
}

// Mouse over the offered items so the trade can be accepted.
var result = LokiPoe.InGameState.TradePanel.MouseOverOfferItem();

// Can the trade be accepted yet.
Log.InfoFormat("CanAcceptTrade: {0}", LokiPoe.InGameState.TradePanel.CanAcceptTrade);

// Do we need to accept the trade
Log.InfoFormat("NeedsToAcceptTrade: {0}", LokiPoe.InGameState.TradePanel.NeedsToAcceptTrade);

// List the offer items.
foreach(var item in LokiPoe.InGameState.TradePanel.OtherOffer)
{
	Log.InfoFormat("{1}x {0}", item.FullName, item.StackCount);
}

// Accept the trade
var result = LokiPoe.InGameState.TradePanel.AcceptTrade();

[NpcDialogPanel]

// Check if the NpcDialogPanel is open.
if(LokiPoe.InGameState.NpcDialogPanel.IsOpened)
{
}

// Get the current window depth
Log.InfoFormat("WindowDepth: {0}", LokiPoe.InGameState.NpcDialogPanel.WindowDepth);

// List all dialog chocies
foreach(var text in LokiPoe.InGameState.NpcDialogPanel.DialogChoices)
{
	Log.InfoFormat("{0}", text);
}

// Helper function for this dialog choice.
var result = LokiPoe.InGameState.NpcDialogPanel.SellItems();

// Helper function for this dialog choice.
var result = LokiPoe.InGameState.NpcDialogPanel.PurchaseItems();

// Helper function for this dialog choice.
var result = LokiPoe.InGameState.NpcDialogPanel.Goodbye();

[QuickFlaskPanel]

// List all flasks
foreach(var flask in LokiPoe.InGameState.QuickFlaskPanel.Flasks)
{
	Log.InfoFormat("{0} (0x{1:X})", flask.FullName, flask.BaseAddress.ToInt32());
}

// Use a flask in a specific slot.
var result = LokiPoe.InGameState.QuickFlaskPanel.UseFlaskInSlot1();

[SellPanel]

// Check if the SellPanel is open.
if(LokiPoe.InGameState.SellPanel.IsOpened)
{
}

// List the items the player is selling.
foreach(var item in LokiPoe.InGameState.SellPanel.PlayerOffer)
{
	Log.InfoFormat("{0} (0x{1:X})", item.FullName, item.BaseAddress.ToInt32());
}

// List the items the vendor is offering.
foreach(var item in LokiPoe.InGameState.SellPanel.NpcOffer)
{
	Log.InfoFormat("{0} (0x{1:X})", item.FullName, item.BaseAddress.ToInt32());
}

// Accept the trade offer
var result = LokiPoe.InGameState.SellPanel.Accept();

// Cancel the trade offer
var result = LokiPoe.InGameState.SellPanel.Cancel();

[SkillBarPanel]

// Check if the skill selector dialog is opened.
Log.InfoFormat("IsSkillSelectorOpen: {0}", LokiPoe.InGameState.SkillBarPanel.IsSkillSelectorOpen);

// Clears a specific skill slot.
var result = LokiPoe.InGameState.SkillBarPanel.ClearSlot2();

// Sets a skill slot.
var result = LokiPoe.InGameState.SkillBarPanel.SetSlot(2, LokiPoe.InGameState.SkillBarPanel.Skills.FirstOrDefault(s => s.InternalName == "Move"));

[InstanceManagerPanel]

// Check if the InstanceManagerPanel is open.
if(LokiPoe.InGameState.InstanceManagerPanel.IsOpened)
{
}

// Get information about instances
foreach(var instance in LokiPoe.InGameState.InstanceManagerPanel.Instances)
{
	Log.InfoFormat("{0} {1} {2} {3} {4}", instance.CanJoin, instance.Realm, instance.Created, instance.TimeLeft, string.Join(", ", instance.Players));
}

// Creates a new instance.
var result = LokiPoe.InGameState.InstanceManagerPanel.JoinNew(-1);

[CardTradePanel]

// Check if the CardTradePanel is open.
if(LokiPoe.InGameState.CardTradePanel.IsOpened)
{
}

// Place the cursor into the panel.
var result = LokiPoe.InGameState.CardTradePanel.PlaceCursorInto();

// Picks up an item from the slot to the cursor.
var result = LokiPoe.InGameState.CardTradePanel.PickupToCursor();

// Trades the cards in.
var result = LokiPoe.InGameState.CardTradePanel.Trade();

[MapPanel]

// Check if the MapPanel is open.
if(LokiPoe.InGameState.MapPanel.IsOpened)
{
}

// Places the cursor into the map device.
var result = LokiPoe.InGameState.MapPanel.PlaceCursorIntoTopLeft();

// Picks up an item from the map device.
var result = LokiPoe.InGameState.MapPanel.PickupTopLeftToCursor();

// Gets the item in a slot in the map device.
Log.InfoFormat("ItemInTopLeftSlot: {0}", LokiPoe.InGameState.MapPanel.ItemInTopLeftSlot.FullName);

// Activates the map device.
var result = LokiPoe.InGameState.MapPanel.Activate();

[MasterDevicePanel]

// Check if the MasterDevicePanel is open.
if(LokiPoe.InGameState.MasterDevicePanel.IsOpened)
{
}

// Places the cursor into the device.
var result = LokiPoe.InGameState.MasterDevicePanel.PlaceCursorIntoTopLeft();

// Picks up an item from the device.
var result = LokiPoe.InGameState.MasterDevicePanel.PickupTopLeftToCursor();

// Gets the item in a slot in the device.
Log.InfoFormat("ItemInTopLeftSlot: {0}", LokiPoe.InGameState.MasterDevicePanel.ItemInTopLeftSlot.FullName);

// Activates the map device.
var result = LokiPoe.InGameState.MasterDevicePanel.Activate();

[InventoryPanel]

// Check if the InventoryPanel is open.
if(LokiPoe.InGameState.InventoryPanel.IsOpened)
{
}

// Unequip a skill gem from a slot at a specific index.
var result = LokiPoe.InGameState.InventoryPanel.UnequipSkillGemFromNeck(0);

// Equip a skill gem to a slot at a specific index.
var result = LokiPoe.InGameState.InventoryPanel.EquipSkillGemToNeck(0);


[BanditPanel]

if(LokiPoe.InGameState.BanditPanel.IsOpened)
{
}

// Kill the bandit.
var result = LokiPoe.InGameState.BanditPanel.KillBandit();

// Help the bandit.
var result = LokiPoe.InGameState.BanditPanel.HelpBandit();
 
Beta #1182 is now being deployed via BuddyAuth. Please post any issues in the Support forums as usual.

Users may want to consider downloading a clean copy rather than updating! Remember to add Talisman looting to your existing filters if you update. To do this, simply add a new pick filter with the Types set to "/Talismans/". The default item filter editor has this entry added already.

Please keep in mind this is a Beta build. While we have tested and checked everything as thoroughly as possible, it is possible we missed somethings. Please do not bot unattended or Hardcore unless you know what you are doing!
 
PoE 2.1.1 is about to be released. If by chance anything major changes again, I'll post in this thread that additional downtime will be expected.
 
Beta #1184 has been deployed via BuddyAuth! Please report any issues in the Support Forums.
 
Status
Not open for further replies.
Back
Top