Skip to content

Instantly share code, notes, and snippets.

@InclementDab
Created April 29, 2022 21:16
Show Gist options
  • Save InclementDab/f797d64582c895fb5f7f90f9c7c722eb to your computer and use it in GitHub Desktop.
Save InclementDab/f797d64582c895fb5f7f90f9c7c722eb to your computer and use it in GitHub Desktop.
DoubleClickStacking
modded class VicinitySlotsContainer
{
override void DoubleClick(Widget w, int x, int y, int button)
{
if (button != MouseState.LEFT) {
return;
}
if (!w) {
return;
}
ItemPreviewWidget iw = ItemPreviewWidget.Cast( w.FindAnyWidget( "Render" ) );
if (!iw) {
string name = w.GetName();
name.Replace("PanelWidget", "Render");
iw = ItemPreviewWidget.Cast( w.FindAnyWidget( name ) );
}
if (!iw) {
iw = ItemPreviewWidget.Cast(w);
}
ItemBase item = ItemBase.Cast( iw.GetItem() );
if (!item) {
return;
}
if (GetGame().GetPlayer().GetInventory().HasInventoryReservation(item, null)) {
return;
}
if (!item.GetInventory().CanRemoveEntity()) {
return;
}
PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
if (player.GetInventory().HasEntityInInventory(item) && GetGame().GetPlayer().GetHumanInventory().CanAddEntityInHands(item)) {
player.PredictiveTakeEntityToHands(item);
} else {
InventoryLocation dst = new InventoryLocation;
bool found;
array<EntityAI> items = {};
if (player.GetInventory().EnumerateInventory(InventoryTraversalType.PREORDER, items)) {
foreach (EntityAI search_item: items) {
if (search_item.CanBeCombined(item)) {
search_item.CombineItemsClient(item);
found = true;
}
}
}
if (!found) {
player.GetInventory().FindFreeLocationFor( item, FindInventoryLocationType.ANY, dst );
if (dst.IsValid() && player.GetInventory().LocationCanAddEntity(dst)) {
SplitItemUtils.TakeOrSplitToInventoryLocation(player, dst);
}
}
}
ItemManager.GetInstance().HideTooltip();
InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu( MENU_INVENTORY ) );
if (menu) {
menu.RefreshQuickbar();
}
}
}
@jippyuk
Copy link

jippyuk commented Dec 5, 2022

Been using this since you posted it, think it's amazing! Just wondering though, when you interact and take an stack of items by pressing (F) default key, it doesnt stack right? It'll add that stack as a new stack in your bag.
Anyway of working the above code to also apply for when you take stackable items like ammo?

@InclementDab
Copy link
Author

theres some weird stuff going on in the stacking system in DayZ. i think we still have this issue on RA, if i ever fix it ill update here

@jippyuk
Copy link

jippyuk commented Dec 6, 2022

Not sure what RA is whoops :)
Yeah the double clicking is such such a fantastic addition, you really should get Dayz to implement into their actual code base.
The taking stacks using your interact button is borked though, has been since so long, it'll just put the exact stack quantity in your bag, no stacking.
Thought there might have been an override you could do or something :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment