Browse Source

Allow shift+click moving to belt

pull/852/head
Juliano Goncalves 6 years ago committed by Anders Jenbo
parent
commit
5287d6e329
  1. 6
      Source/diablo.cpp
  2. 2
      Source/help.cpp
  3. 142
      Source/inv.cpp
  4. 2
      Source/inv.h

6
Source/diablo.cpp

@ -751,6 +751,8 @@ static BOOL LeftMouseDown(int wParam)
return FALSE;
}
bool isShiftHeld = wParam & DVL_MK_SHIFT;
if (MouseY < PANEL_TOP || MouseX < PANEL_LEFT || MouseX >= PANEL_LEFT + PANEL_WIDTH) {
if (!gmenu_is_active() && !TryIconCurs()) {
if (questlog && MouseX > 32 && MouseX < 288 && MouseY > 32 && MouseY < 308) {
@ -762,7 +764,7 @@ static BOOL LeftMouseDown(int wParam)
CheckChrBtns();
} else if (invflag && MouseX > RIGHT_PANEL && MouseY < SPANEL_HEIGHT) {
if (!dropGoldFlag)
CheckInvItem();
CheckInvItem(isShiftHeld);
} else if (sbookflag && MouseX > RIGHT_PANEL && MouseY < SPANEL_HEIGHT) {
CheckSBook();
} else if (pcurs >= CURSOR_FIRSTITEM) {
@ -774,7 +776,7 @@ static BOOL LeftMouseDown(int wParam)
if (plr[myplr]._pStatPts != 0 && !spselflag)
CheckLvlBtn();
if (!lvlbtndown)
return LeftMouseCmd(wParam == DVL_MK_SHIFT + DVL_MK_LBUTTON);
return LeftMouseCmd(isShiftHeld);
}
}
} else {

2
Source/help.cpp

@ -35,6 +35,7 @@ const char gszSpawnHelpText[] = {
"F5, F6, F7, F8: Sets a hotkey for a selected skill or spell|"
"Shift + Left Mouse Button: Use any weapon without moving|"
"Shift + Left Mouse Button (on character screen): Assign all stat points|"
"Shift + Left Mouse Button (on inventory): Move item to belt|"
"|"
"|"
"$Movement:|"
@ -392,6 +393,7 @@ const char gszHelpText[] = {
"F5, F6, F7, F8: Set hotkey for skill or spell|"
"Shift + Left Mouse Button: Attack without moving|"
"Shift + Left Mouse Button (on character screen): Assign all stat points|"
"Shift + Left Mouse Button (on inventory): Move item to belt|"
"|"
"$Movement:|"
"If you hold the mouse button down while moving, the character "

142
Source/inv.cpp

@ -1541,7 +1541,7 @@ void CheckInvSwap(int pnum, BYTE bLoc, int idx, WORD wCI, int seed, BOOL bId)
CalcPlrInv(pnum, TRUE);
}
void CheckInvCut(int pnum, int mx, int my)
void CheckInvCut(int pnum, int mx, int my, bool moveToBelt)
{
int r;
BOOL done;
@ -1588,62 +1588,77 @@ void CheckInvCut(int pnum, int mx, int my)
r >= SLOTXY_HEAD_FIRST
&& r <= SLOTXY_HEAD_LAST
&& !plr[pnum].InvBody[INVLOC_HEAD].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_HEAD);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HEAD];
plr[pnum].InvBody[INVLOC_HEAD]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_HEAD);
plr[pnum].InvBody[INVLOC_HEAD]._itype = ITYPE_NONE;
}
}
if (
r == SLOTXY_RING_LEFT
&& !plr[pnum].InvBody[INVLOC_RING_LEFT].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_RING_LEFT);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_LEFT];
plr[pnum].InvBody[INVLOC_RING_LEFT]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_RING_LEFT);
plr[pnum].InvBody[INVLOC_RING_LEFT]._itype = ITYPE_NONE;
}
}
if (
r == SLOTXY_RING_RIGHT
&& !plr[pnum].InvBody[INVLOC_RING_RIGHT].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_RING_RIGHT);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_RING_RIGHT];
plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_RING_RIGHT);
plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype = ITYPE_NONE;
}
}
if (
r == SLOTXY_AMULET
&& !plr[pnum].InvBody[INVLOC_AMULET].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_AMULET);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_AMULET];
plr[pnum].InvBody[INVLOC_AMULET]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_AMULET);
plr[pnum].InvBody[INVLOC_AMULET]._itype = ITYPE_NONE;
}
}
if (
r >= SLOTXY_HAND_LEFT_FIRST
&& r <= SLOTXY_HAND_LEFT_LAST
&& !plr[pnum].InvBody[INVLOC_HAND_LEFT].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_LEFT];
plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT);
plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE;
}
}
if (
r >= SLOTXY_HAND_RIGHT_FIRST
&& r <= SLOTXY_HAND_RIGHT_LAST
&& !plr[pnum].InvBody[INVLOC_HAND_RIGHT].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_HAND_RIGHT);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_RIGHT];
plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_HAND_RIGHT);
plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE;
}
}
if (
r >= SLOTXY_CHEST_FIRST
&& r <= SLOTXY_CHEST_LAST
&& !plr[pnum].InvBody[INVLOC_CHEST].isEmpty()) {
NetSendCmdDelItem(FALSE, INVLOC_CHEST);
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_CHEST];
plr[pnum].InvBody[INVLOC_CHEST]._itype = ITYPE_NONE;
if (!moveToBelt) {
NetSendCmdDelItem(FALSE, INVLOC_CHEST);
plr[pnum].InvBody[INVLOC_CHEST]._itype = ITYPE_NONE;
}
}
bool movedToBelt = false;
if (r >= SLOTXY_INV_FIRST && r <= SLOTXY_INV_LAST) {
ig = r - SLOTXY_INV_FIRST;
ii = plr[pnum].InvGrid[ig];
@ -1653,26 +1668,32 @@ void CheckInvCut(int pnum, int mx, int my)
iv = -ii;
}
for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
if (plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv) {
plr[pnum].InvGrid[i] = 0;
}
plr[pnum].HoldItem = plr[pnum].InvList[iv - 1];
if (moveToBelt && CanBePlacedOnBelt(plr[pnum].HoldItem)) {
movedToBelt = AutoPlaceItemInBelt(pnum, plr[pnum].HoldItem, true);
}
iv--;
if (!moveToBelt || movedToBelt) {
for (i = 0; i < NUM_INV_GRID_ELEM; i++) {
if (plr[pnum].InvGrid[i] == iv || plr[pnum].InvGrid[i] == -iv) {
plr[pnum].InvGrid[i] = 0;
}
}
plr[pnum].HoldItem = plr[pnum].InvList[iv];
plr[pnum]._pNumInv--;
iv--;
if (plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv) {
plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv];
plr[pnum]._pNumInv--;
for (j = 0; j < NUM_INV_GRID_ELEM; j++) {
if (plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1) {
plr[pnum].InvGrid[j] = iv + 1;
}
if (plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1)) {
plr[pnum].InvGrid[j] = -iv - 1;
if (plr[pnum]._pNumInv > 0 && plr[pnum]._pNumInv != iv) {
plr[pnum].InvList[iv] = plr[pnum].InvList[plr[pnum]._pNumInv];
for (j = 0; j < NUM_INV_GRID_ELEM; j++) {
if (plr[pnum].InvGrid[j] == plr[pnum]._pNumInv + 1) {
plr[pnum].InvGrid[j] = iv + 1;
}
if (plr[pnum].InvGrid[j] == -(plr[pnum]._pNumInv + 1)) {
plr[pnum].InvGrid[j] = -iv - 1;
}
}
}
}
@ -1697,9 +1718,60 @@ void CheckInvCut(int pnum, int mx, int my)
CheckItemStats(pnum);
if (pnum == myplr) {
PlaySFX(IS_IGRAB);
SetCursor_(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM);
SetCursorPos(mx - (cursW >> 1), MouseY - (cursH >> 1));
if (!moveToBelt || movedToBelt) {
PlaySFX(IS_IGRAB);
}
if (moveToBelt) {
if (!movedToBelt) {
if (CanBePlacedOnBelt(plr[pnum].HoldItem)) {
switch (plr[pnum]._pClass) {
case PC_WARRIOR:
case PC_BARBARIAN:
PlaySFX(PS_WARR15, false);
break;
case PC_ROGUE:
case PC_BARD:
PlaySFX(PS_ROGUE15, false);
break;
case PC_SORCERER:
PlaySFX(PS_MAGE15, false);
break;
case PC_MONK:
PlaySFX(PS_MONK15, false);
break;
}
} else {
switch (plr[pnum]._pClass) {
case PC_WARRIOR:
case PC_BARBARIAN:
PlaySFX(PS_WARR37, false);
break;
case PC_ROGUE:
case PC_BARD:
PlaySFX(PS_ROGUE37, false);
break;
case PC_SORCERER:
PlaySFX(PS_MAGE37, false);
break;
case PC_MONK:
PlaySFX(PS_MONK37, false);
break;
}
}
}
plr[pnum].HoldItem._itype = ITYPE_NONE;
} else {
SetCursor_(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM);
SetCursorPos(mx - (cursW >> 1), MouseY - (cursH >> 1));
}
}
}
}
@ -1756,12 +1828,12 @@ void RemoveSpdBarItem(int pnum, int iv)
force_redraw = 255;
}
void CheckInvItem()
void CheckInvItem(bool isShiftHeld)
{
if (pcurs >= CURSOR_FIRSTITEM) {
CheckInvPaste(myplr, MouseX, MouseY);
} else {
CheckInvCut(myplr, MouseX, MouseY);
CheckInvCut(myplr, MouseX, MouseY, isShiftHeld);
}
}

2
Source/inv.h

@ -42,7 +42,7 @@ void CheckInvSwap(int pnum, BYTE bLoc, int idx, WORD wCI, int seed, BOOL bId);
void inv_update_rem_item(int pnum, BYTE iv);
void RemoveInvItem(int pnum, int iv);
void RemoveSpdBarItem(int pnum, int iv);
void CheckInvItem();
void CheckInvItem(bool isShiftHeld = false);
void CheckInvScrn();
void CheckItemStats(int pnum);
void InvGetItem(int pnum, int ii);

Loading…
Cancel
Save