|
|
|
|
@ -684,562 +684,408 @@ int SwapItem(ItemStruct *a, ItemStruct *b)
|
|
|
|
|
|
|
|
|
|
void CheckInvPaste(int pnum, int mx, int my) |
|
|
|
|
{ |
|
|
|
|
int v3; // ebx
|
|
|
|
|
int v4; // edi
|
|
|
|
|
int v5; // eax
|
|
|
|
|
int v6; // esi
|
|
|
|
|
signed int v7; // edi
|
|
|
|
|
int v8; // edx
|
|
|
|
|
int v9; // edx
|
|
|
|
|
signed int v10; // edi
|
|
|
|
|
char v11; // al
|
|
|
|
|
signed int v12; // ecx
|
|
|
|
|
int v13; // eax
|
|
|
|
|
int v14; // eax
|
|
|
|
|
char *v15; // edi
|
|
|
|
|
int v16; // esi
|
|
|
|
|
int v17; // ecx
|
|
|
|
|
int v18; // edx
|
|
|
|
|
int v21; // esi
|
|
|
|
|
ItemStruct *v22; // edi
|
|
|
|
|
ItemStruct *v23; // ecx
|
|
|
|
|
int v24; // eax
|
|
|
|
|
int v25; // eax
|
|
|
|
|
int v26; // edx
|
|
|
|
|
ItemStruct *v27; // esi
|
|
|
|
|
int v28; // eax
|
|
|
|
|
int v29; // ecx
|
|
|
|
|
int v30; // esi
|
|
|
|
|
int v31; // eax
|
|
|
|
|
int v32; // eax
|
|
|
|
|
int v33; // ecx
|
|
|
|
|
int v34; // eax
|
|
|
|
|
int v35; // ecx
|
|
|
|
|
char *v36; // eax
|
|
|
|
|
int v37; // edx
|
|
|
|
|
int v38; // ecx
|
|
|
|
|
int v39; // edi
|
|
|
|
|
int v40; // esi
|
|
|
|
|
int v41; // ebx
|
|
|
|
|
int v42; // edx
|
|
|
|
|
int v43; // eax
|
|
|
|
|
int v44; // eax
|
|
|
|
|
signed int v45; // ecx
|
|
|
|
|
int v46; // edx
|
|
|
|
|
char *v47; // eax
|
|
|
|
|
int v48; // edi
|
|
|
|
|
int v49; // eax
|
|
|
|
|
int v50; // ecx
|
|
|
|
|
char *v51; // esi
|
|
|
|
|
char v52; // cl
|
|
|
|
|
int v53; // ecx
|
|
|
|
|
int v54; // eax
|
|
|
|
|
int v55; // edi
|
|
|
|
|
int v56; // edx
|
|
|
|
|
int v57; // esi
|
|
|
|
|
int v58; // ebx
|
|
|
|
|
int v59; // eax
|
|
|
|
|
int v60; // esi
|
|
|
|
|
ItemStruct tempitem; // [esp+Ch] [ebp-190h]
|
|
|
|
|
int v62; // [esp+17Ch] [ebp-20h]
|
|
|
|
|
int p; // [esp+180h] [ebp-1Ch]
|
|
|
|
|
int v64; // [esp+184h] [ebp-18h]
|
|
|
|
|
int v65; // [esp+188h] [ebp-14h]
|
|
|
|
|
int v66; // [esp+18Ch] [ebp-10h]
|
|
|
|
|
int v67; // [esp+190h] [ebp-Ch]
|
|
|
|
|
int v68; // [esp+194h] [ebp-8h]
|
|
|
|
|
int v69; // [esp+198h] [ebp-4h]
|
|
|
|
|
int cursor_id; // [esp+1A4h] [ebp+8h]
|
|
|
|
|
int cursor_ida; // [esp+1A4h] [ebp+8h]
|
|
|
|
|
|
|
|
|
|
p = pnum; |
|
|
|
|
v3 = pnum; |
|
|
|
|
v4 = mx; |
|
|
|
|
int r, sx, sy; |
|
|
|
|
int i, j, xx, yy, ii; |
|
|
|
|
BOOL done, done2h; |
|
|
|
|
int il, cn, it, iv, ig, gt; |
|
|
|
|
ItemStruct tempitem; |
|
|
|
|
|
|
|
|
|
SetICursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); |
|
|
|
|
v5 = my + (icursH >> 1); |
|
|
|
|
v6 = v4 + (icursW >> 1); |
|
|
|
|
v64 = icursW28; |
|
|
|
|
v7 = 0; |
|
|
|
|
v67 = icursH28; |
|
|
|
|
v68 = 0; |
|
|
|
|
do { |
|
|
|
|
if (v7) |
|
|
|
|
goto LABEL_18; |
|
|
|
|
v8 = InvRect[v68].X; |
|
|
|
|
if (v6 >= v8 && v6 < v8 + 28) { |
|
|
|
|
v9 = InvRect[v68].Y; |
|
|
|
|
if (v5 >= v9 - 29 && v5 < v9) { |
|
|
|
|
v7 = 1; |
|
|
|
|
--v68; |
|
|
|
|
i = mx + (icursW >> 1); |
|
|
|
|
j = my + (icursH >> 1); |
|
|
|
|
sx = icursW28; |
|
|
|
|
sy = icursH28; |
|
|
|
|
done = FALSE; |
|
|
|
|
for (r = 0; r < sizeof(InvRect) / sizeof(InvRect[0]) && !done; r++) { |
|
|
|
|
if (i >= InvRect[r].X && i < InvRect[r].X + INV_SLOT_SIZE_PX) { |
|
|
|
|
if (j >= InvRect[r].Y - INV_SLOT_SIZE_PX - 1 && j < InvRect[r].Y) { |
|
|
|
|
done = TRUE; |
|
|
|
|
r--; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (v68 != 24) |
|
|
|
|
goto LABEL_13; |
|
|
|
|
if (!(v64 & 1)) |
|
|
|
|
v6 -= 14; |
|
|
|
|
if (!(v67 & 1)) { |
|
|
|
|
v5 -= 14; |
|
|
|
|
LABEL_13: |
|
|
|
|
if (v68 == 64 && !(v67 & 1)) |
|
|
|
|
v5 += 14; |
|
|
|
|
} |
|
|
|
|
++v68; |
|
|
|
|
} while ((unsigned int)v68 < 0x49); |
|
|
|
|
if (!v7) |
|
|
|
|
return; |
|
|
|
|
LABEL_18: |
|
|
|
|
v10 = v68; |
|
|
|
|
v69 = ILOC_UNEQUIPABLE; |
|
|
|
|
if (v68 >= 0 && v68 <= ILOC_ARMOR) |
|
|
|
|
v69 = ILOC_HELM; |
|
|
|
|
if (v68 >= ILOC_HELM && v68 <= ILOC_RING) |
|
|
|
|
v69 = ILOC_RING; |
|
|
|
|
if (v68 == ILOC_AMULET) |
|
|
|
|
v69 = ILOC_AMULET; |
|
|
|
|
if (v68 >= ILOC_UNEQUIPABLE && v68 <= 18) |
|
|
|
|
v69 = ILOC_ONEHAND; |
|
|
|
|
if (v68 >= 19 && v68 <= 24) |
|
|
|
|
v69 = ILOC_ARMOR; |
|
|
|
|
if (v68 >= 65 && v68 <= 72) |
|
|
|
|
v69 = ILOC_BELT; |
|
|
|
|
v11 = plr[v3].HoldItem._iLoc; |
|
|
|
|
v12 = 0; |
|
|
|
|
if ((char)v11 == v69) |
|
|
|
|
v12 = 1; |
|
|
|
|
if (v69 == 1 && v11 == ILOC_TWOHAND) { |
|
|
|
|
v69 = ILOC_TWOHAND; |
|
|
|
|
v12 = 1; |
|
|
|
|
} |
|
|
|
|
if (v11 != 7 || v69 != ILOC_BELT) { |
|
|
|
|
LABEL_50: |
|
|
|
|
if (v69 != ILOC_UNEQUIPABLE) |
|
|
|
|
goto LABEL_81; |
|
|
|
|
v66 = 0; |
|
|
|
|
cursor_id = 1; |
|
|
|
|
v13 = (v68 - 25) / 10; |
|
|
|
|
if (plr[v3].HoldItem._itype == ITYPE_GOLD) { |
|
|
|
|
_LOBYTE(v13) = plr[0].InvGrid[10 * v13 + v3 * 21720 + (v68 - 25) % 10]; |
|
|
|
|
if (!(_BYTE)v13) |
|
|
|
|
goto LABEL_93; |
|
|
|
|
v13 = (char)v13; |
|
|
|
|
if ((char)v13 <= 0) { |
|
|
|
|
v13 = -v13; |
|
|
|
|
} else if (*(int *)((char *)&plr[0].InvBody[v13 + 6]._itype + v3 * 21720) == ITYPE_GOLD) { |
|
|
|
|
goto LABEL_93; |
|
|
|
|
} |
|
|
|
|
v66 = v13; |
|
|
|
|
LABEL_93: |
|
|
|
|
v21 = p; |
|
|
|
|
if (p == myplr) { |
|
|
|
|
PlaySFX(ItemInvSnds[ItemCAnimTbl[plr[v3].HoldItem._iCurs]]); |
|
|
|
|
v10 = v68; |
|
|
|
|
if (r == 24) { |
|
|
|
|
if ((sx & 1) == 0) |
|
|
|
|
i -= 14; |
|
|
|
|
if ((sy & 1) == 0) { |
|
|
|
|
j -= 14; |
|
|
|
|
} |
|
|
|
|
cursor_ida = 1; |
|
|
|
|
switch (v69) { |
|
|
|
|
case ILOC_ONEHAND: |
|
|
|
|
if (v10 > 12) { |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { |
|
|
|
|
v25 = plr[v3].InvBody[INVLOC_HAND_LEFT]._itype; |
|
|
|
|
if (v25 == ITYPE_NONE) |
|
|
|
|
goto LABEL_232; |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) { |
|
|
|
|
NetSendCmdDelItem(FALSE, 4u); |
|
|
|
|
NetSendCmdChItem(FALSE, 5u); |
|
|
|
|
SwapItem(&plr[v3].InvBody[INVLOC_HAND_RIGHT], &plr[v3].InvBody[INVLOC_HAND_LEFT]); |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; |
|
|
|
|
LABEL_99: |
|
|
|
|
v24 = SwapItem(v23, &plr[v3].HoldItem); |
|
|
|
|
LABEL_172: |
|
|
|
|
cursor_ida = v24; |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
if (v25 == ITYPE_NONE || plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass) { |
|
|
|
|
LABEL_232: |
|
|
|
|
NetSendCmdChItem(FALSE, 5u); |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; |
|
|
|
|
LABEL_158: |
|
|
|
|
qmemcpy(v22, &plr[v3].HoldItem, sizeof(ItemStruct)); |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
} else if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE |
|
|
|
|
|| plr[v3].InvBody[INVLOC_HAND_LEFT]._iClass != plr[v3].HoldItem._iClass) { |
|
|
|
|
goto LABEL_114; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) { |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE |
|
|
|
|
&& plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass) { |
|
|
|
|
LABEL_114: |
|
|
|
|
NetSendCmdChItem(FALSE, 5u); |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; |
|
|
|
|
goto LABEL_99; |
|
|
|
|
} |
|
|
|
|
NetSendCmdChItem(FALSE, 4u); |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
} |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE |
|
|
|
|
&& plr[v3].InvBody[INVLOC_HAND_RIGHT]._iClass == plr[v3].HoldItem._iClass) { |
|
|
|
|
goto LABEL_114; |
|
|
|
|
} |
|
|
|
|
if (r == 64 && (sy & 1) == 0) |
|
|
|
|
j += 14; |
|
|
|
|
} |
|
|
|
|
if (!done) |
|
|
|
|
return; |
|
|
|
|
il = ILOC_UNEQUIPABLE; |
|
|
|
|
if (r >= 0 && r <= 3) |
|
|
|
|
il = ILOC_HELM; |
|
|
|
|
if (r >= 4 && r <= 5) |
|
|
|
|
il = ILOC_RING; |
|
|
|
|
if (r == 6) |
|
|
|
|
il = ILOC_AMULET; |
|
|
|
|
if (r >= 7 && r <= 18) |
|
|
|
|
il = ILOC_ONEHAND; |
|
|
|
|
if (r >= 19 && r <= 24) |
|
|
|
|
il = ILOC_ARMOR; |
|
|
|
|
if (r >= 65 && r <= 72) |
|
|
|
|
il = ILOC_BELT; |
|
|
|
|
done = FALSE; |
|
|
|
|
if (plr[pnum].HoldItem._iLoc == il) |
|
|
|
|
done = TRUE; |
|
|
|
|
if (il == ILOC_ONEHAND && plr[pnum].HoldItem._iLoc == ILOC_TWOHAND) { |
|
|
|
|
il = ILOC_TWOHAND; |
|
|
|
|
done = TRUE; |
|
|
|
|
} |
|
|
|
|
if (plr[pnum].HoldItem._iLoc == ILOC_UNEQUIPABLE && il == ILOC_BELT) { |
|
|
|
|
if (sx == 1 && sy == 1) { |
|
|
|
|
done = TRUE; |
|
|
|
|
if (!AllItemsList[plr[pnum].HoldItem.IDidx].iUsable) |
|
|
|
|
done = FALSE; |
|
|
|
|
if (!plr[pnum].HoldItem._iStatFlag) |
|
|
|
|
done = FALSE; |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD) |
|
|
|
|
done = FALSE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (il == ILOC_UNEQUIPABLE) { |
|
|
|
|
done = TRUE; |
|
|
|
|
it = 0; |
|
|
|
|
ii = r - 25; |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD) { |
|
|
|
|
yy = 10 * (ii / 10); |
|
|
|
|
xx = ii % 10; |
|
|
|
|
if (plr[pnum].InvGrid[xx + yy] != 0) { |
|
|
|
|
iv = plr[pnum].InvGrid[xx + yy]; |
|
|
|
|
if (iv > 0) { |
|
|
|
|
if (plr[pnum].InvList[iv - 1]._itype != ITYPE_GOLD) { |
|
|
|
|
it = iv; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
NetSendCmdChItem(FALSE, 4u); |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; |
|
|
|
|
goto LABEL_99; |
|
|
|
|
case ILOC_TWOHAND: |
|
|
|
|
NetSendCmdDelItem(FALSE, 5u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) |
|
|
|
|
goto LABEL_147; |
|
|
|
|
v26 = plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype; |
|
|
|
|
if (v26 == -1) |
|
|
|
|
goto LABEL_146; |
|
|
|
|
qmemcpy(&tempitem, &plr[v3].HoldItem, sizeof(tempitem)); |
|
|
|
|
v27 = &plr[v3].InvBody[INVLOC_HAND_RIGHT]; |
|
|
|
|
if (v26 != ITYPE_SHIELD) |
|
|
|
|
v27 = &plr[v3].InvBody[INVLOC_HAND_LEFT]; |
|
|
|
|
v28 = p; |
|
|
|
|
qmemcpy(&plr[v3].HoldItem, v27, sizeof(plr[v3].HoldItem)); |
|
|
|
|
v29 = plr[v3].HoldItem._iCurs + CURSOR_FIRSTITEM; |
|
|
|
|
if (v28 == myplr) |
|
|
|
|
SetCursor_(v29); |
|
|
|
|
else |
|
|
|
|
SetICursor(v29); |
|
|
|
|
v67 = 0; |
|
|
|
|
v30 = 0; |
|
|
|
|
do { |
|
|
|
|
if (v67) |
|
|
|
|
break; |
|
|
|
|
v31 = AutoPlace(p, v30++, icursW28, icursH28, 1); |
|
|
|
|
v67 = v31; |
|
|
|
|
} while (v30 < 40); |
|
|
|
|
v32 = p; |
|
|
|
|
qmemcpy(&plr[v3].HoldItem, &tempitem, sizeof(plr[v3].HoldItem)); |
|
|
|
|
v33 = plr[v3].HoldItem._iCurs + CURSOR_FIRSTITEM; |
|
|
|
|
if (v32 == myplr) |
|
|
|
|
SetCursor_(v33); |
|
|
|
|
else |
|
|
|
|
SetICursor(v33); |
|
|
|
|
if (!v67) |
|
|
|
|
return; |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) |
|
|
|
|
plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; |
|
|
|
|
else |
|
|
|
|
plr[v3].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; |
|
|
|
|
LABEL_146: |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE) |
|
|
|
|
goto LABEL_149; |
|
|
|
|
LABEL_147: |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { |
|
|
|
|
NetSendCmdChItem(FALSE, 4u); |
|
|
|
|
qmemcpy(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem, sizeof(plr[v3].InvBody[INVLOC_HAND_LEFT])); |
|
|
|
|
} else { |
|
|
|
|
LABEL_149: |
|
|
|
|
NetSendCmdChItem(FALSE, 4u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) |
|
|
|
|
SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].InvBody[INVLOC_HAND_RIGHT]); |
|
|
|
|
cursor_ida = SwapItem(&plr[v3].InvBody[INVLOC_HAND_LEFT], &plr[v3].HoldItem); |
|
|
|
|
it = -iv; |
|
|
|
|
} |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF) { |
|
|
|
|
v34 = plr[v3].InvBody[INVLOC_HAND_LEFT]._iSpell; |
|
|
|
|
if (v34) { |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { |
|
|
|
|
plr[v3]._pRSpell = v34; |
|
|
|
|
_LOBYTE(plr[v3]._pRSplType) = RSPLTYPE_CHARGES; |
|
|
|
|
drawpanflag = 255; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
yy = 10 * ((ii / 10) - ((sy - 1) >> 1)); |
|
|
|
|
if (yy < 0) |
|
|
|
|
yy = 0; |
|
|
|
|
for (j = 0; j < sy && done; j++) { |
|
|
|
|
if (yy >= NUM_INV_GRID_ELEM) |
|
|
|
|
done = FALSE; |
|
|
|
|
xx = (ii % 10) - ((sx - 1) >> 1); |
|
|
|
|
if (xx < 0) |
|
|
|
|
xx = 0; |
|
|
|
|
for (i = 0; i < sx && done; i++) { |
|
|
|
|
if (xx >= 10) { |
|
|
|
|
done = FALSE; |
|
|
|
|
} else { |
|
|
|
|
if (plr[pnum].InvGrid[xx + yy] != 0) { |
|
|
|
|
iv = plr[pnum].InvGrid[xx + yy]; |
|
|
|
|
if (iv < 0) |
|
|
|
|
iv = -iv; |
|
|
|
|
if (it != 0) { |
|
|
|
|
if (it != iv) |
|
|
|
|
done = FALSE; |
|
|
|
|
} else |
|
|
|
|
it = iv; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
xx++; |
|
|
|
|
} |
|
|
|
|
goto LABEL_226; |
|
|
|
|
case ILOC_ARMOR: |
|
|
|
|
NetSendCmdChItem(FALSE, 6u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_CHEST]._itype == ITYPE_NONE) { |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_CHEST]; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
} |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_CHEST]; |
|
|
|
|
goto LABEL_99; |
|
|
|
|
case ILOC_HELM: |
|
|
|
|
NetSendCmdChItem(FALSE, 0); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) { |
|
|
|
|
v22 = plr[v3].InvBody; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
} |
|
|
|
|
v23 = plr[v3].InvBody; |
|
|
|
|
goto LABEL_99; |
|
|
|
|
case ILOC_RING: |
|
|
|
|
if (v10 == 4) { |
|
|
|
|
NetSendCmdChItem(FALSE, 1u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_RING_LEFT]._itype == ITYPE_NONE) { |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_RING_LEFT]; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
} |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_RING_LEFT]; |
|
|
|
|
yy += 10; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!done) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (il != ILOC_UNEQUIPABLE && il != ILOC_BELT && !plr[pnum].HoldItem._iStatFlag) { |
|
|
|
|
done = FALSE; |
|
|
|
|
if (plr[pnum]._pClass == PC_WARRIOR) |
|
|
|
|
PlaySFX(PS_WARR13); |
|
|
|
|
else if (plr[pnum]._pClass == PC_ROGUE) |
|
|
|
|
PlaySFX(PS_ROGUE13); |
|
|
|
|
else if (plr[pnum]._pClass == PC_SORCERER) |
|
|
|
|
PlaySFX(PS_MAGE13); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!done) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (pnum == myplr) |
|
|
|
|
PlaySFX(ItemInvSnds[ItemCAnimTbl[plr[pnum].HoldItem._iCurs]]); |
|
|
|
|
|
|
|
|
|
cn = CURSOR_HAND; |
|
|
|
|
switch (il) { |
|
|
|
|
case ILOC_HELM: |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HEAD); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HEAD]._itype == ITYPE_NONE) |
|
|
|
|
plr[pnum].InvBody[INVLOC_HEAD] = plr[pnum].HoldItem; |
|
|
|
|
else |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HEAD], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
case ILOC_RING: |
|
|
|
|
if (r == 4) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_RING_LEFT); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_RING_LEFT]._itype == ITYPE_NONE) |
|
|
|
|
plr[pnum].InvBody[INVLOC_RING_LEFT] = plr[pnum].HoldItem; |
|
|
|
|
else |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_RING_LEFT], &plr[pnum].HoldItem); |
|
|
|
|
} else { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_RING_RIGHT); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_RING_RIGHT]._itype == ITYPE_NONE) |
|
|
|
|
plr[pnum].InvBody[INVLOC_RING_RIGHT] = plr[pnum].HoldItem; |
|
|
|
|
else |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_RING_RIGHT], &plr[pnum].HoldItem); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case ILOC_AMULET: |
|
|
|
|
NetSendCmdChItem(0, INVLOC_AMULET); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_AMULET]._itype == ITYPE_NONE) |
|
|
|
|
plr[pnum].InvBody[INVLOC_AMULET] = plr[pnum].HoldItem; |
|
|
|
|
else |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_AMULET], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
case ILOC_ONEHAND: |
|
|
|
|
if (r <= 12) { |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) { |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
plr[pnum].InvBody[INVLOC_HAND_LEFT] = plr[pnum].HoldItem; |
|
|
|
|
} else { |
|
|
|
|
NetSendCmdChItem(FALSE, 2u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_RING_RIGHT]._itype == ITYPE_NONE) { |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
} |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_RING_RIGHT]; |
|
|
|
|
} |
|
|
|
|
goto LABEL_99; |
|
|
|
|
case ILOC_AMULET: |
|
|
|
|
NetSendCmdChItem(FALSE, 3u); |
|
|
|
|
if (plr[v3].InvBody[INVLOC_AMULET]._itype == ITYPE_NONE) { |
|
|
|
|
v22 = &plr[v3].InvBody[INVLOC_AMULET]; |
|
|
|
|
goto LABEL_158; |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem); |
|
|
|
|
} |
|
|
|
|
v23 = &plr[v3].InvBody[INVLOC_AMULET]; |
|
|
|
|
goto LABEL_99; |
|
|
|
|
case ILOC_UNEQUIPABLE: |
|
|
|
|
v35 = plr[v3].HoldItem._itype; |
|
|
|
|
if (v35 == ITYPE_GOLD) { |
|
|
|
|
if (!v66) { |
|
|
|
|
v36 = &plr[0].InvGrid[10 * ((v68 - 25) / 10) + v3 * 21720 + (v68 - 25) % 10]; |
|
|
|
|
if (*v36 <= 0) { |
|
|
|
|
v42 = 368 * plr[v3]._pNumInv + v3 * 21720; |
|
|
|
|
qmemcpy((char *)plr[0].InvList + v42, &plr[v3].HoldItem, 0x170u); |
|
|
|
|
++plr[v3]._pNumInv; |
|
|
|
|
*v36 = plr[v3]._pNumInv; |
|
|
|
|
v43 = plr[v3].HoldItem._ivalue; |
|
|
|
|
plr[v3]._pGold += v43; |
|
|
|
|
if (v43 <= 5000) { |
|
|
|
|
if (v43 < 2500) { |
|
|
|
|
if (v43 > 1000) |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 5; |
|
|
|
|
else |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 4; |
|
|
|
|
} else { |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v42) = 6; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
v37 = plr[v3].HoldItem._ivalue; |
|
|
|
|
v38 = 368 * (*v36 - 1) + v3 * 21720; |
|
|
|
|
v39 = *(int *)((char *)&plr[0].InvList[0]._ivalue + v38); |
|
|
|
|
v40 = v37 + v39; |
|
|
|
|
if (v37 + v39 <= 5000) { |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = v40; |
|
|
|
|
plr[v3]._pGold += plr[v3].HoldItem._ivalue; |
|
|
|
|
if (v40 < 2500) { |
|
|
|
|
if (v40 > 1000) |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 5; |
|
|
|
|
else |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 4; |
|
|
|
|
} else { |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; |
|
|
|
|
} |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
plr[v3]._pGold += 5000 - v39; |
|
|
|
|
plr[v3].HoldItem._ivalue = v37 - (5000 - v39); |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._ivalue + v38) = 5000; |
|
|
|
|
*(int *)((char *)&plr[0].InvList[0]._iCurs + v38) = 6; |
|
|
|
|
v41 = plr[v3].HoldItem._ivalue; |
|
|
|
|
if (v41 >= 2500) { |
|
|
|
|
cursor_ida = 18; |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
v24 = (v41 > 1000) + 16; |
|
|
|
|
goto LABEL_172; |
|
|
|
|
} |
|
|
|
|
} else if (!v66) { |
|
|
|
|
qmemcpy((char *)&plr[0].InvList[plr[v3]._pNumInv++] + v3 * 21720, &plr[v3].HoldItem, 0x170u); |
|
|
|
|
v66 = plr[v3]._pNumInv; |
|
|
|
|
LABEL_191: |
|
|
|
|
v48 = v67; |
|
|
|
|
v49 = 10 * ((v68 - 25) / 10 - ((v67 - 1) >> 1)); |
|
|
|
|
if (v49 < 0) |
|
|
|
|
v49 = 0; |
|
|
|
|
v65 = 0; |
|
|
|
|
if (v67 > 0) { |
|
|
|
|
v69 = (v68 - 25) % 10 - ((v64 - 1) >> 1); |
|
|
|
|
do { |
|
|
|
|
v50 = v69; |
|
|
|
|
if (v69 < 0) |
|
|
|
|
v50 = 0; |
|
|
|
|
v67 = 0; |
|
|
|
|
if (v64 > 0) { |
|
|
|
|
v51 = &plr[v3].InvGrid[v50 + v49]; |
|
|
|
|
do { |
|
|
|
|
if (v67 || v65 != v48 - 1) |
|
|
|
|
v52 = -(char)v66; |
|
|
|
|
else |
|
|
|
|
v52 = v66; |
|
|
|
|
*v51++ = v52; |
|
|
|
|
++v67; |
|
|
|
|
} while (v67 < v64); |
|
|
|
|
} |
|
|
|
|
v49 += 10; |
|
|
|
|
++v65; |
|
|
|
|
} while (v65 < v48); |
|
|
|
|
} |
|
|
|
|
goto LABEL_226; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass != plr[pnum].HoldItem._iClass) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE) { |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND) { |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass != plr[pnum].HoldItem._iClass) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
plr[pnum].InvBody[INVLOC_HAND_RIGHT] = plr[pnum].HoldItem; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
v44 = v66 - 1; |
|
|
|
|
if (v35 == ITYPE_GOLD) |
|
|
|
|
plr[v3]._pGold += plr[v3].HoldItem._ivalue; |
|
|
|
|
cursor_ida = SwapItem((ItemStruct *)((char *)&plr[0].InvList[v44] + v3 * 21720), &plr[v3].HoldItem); |
|
|
|
|
if (plr[v3].HoldItem._itype == ITYPE_GOLD) |
|
|
|
|
plr[v3]._pGold = CalculateGold(v21); |
|
|
|
|
v45 = 0; |
|
|
|
|
v46 = -v66; |
|
|
|
|
do { |
|
|
|
|
v47 = &plr[v3].InvGrid[v45]; |
|
|
|
|
if (*v47 == v66) |
|
|
|
|
*v47 = 0; |
|
|
|
|
if (*v47 == v46) |
|
|
|
|
*v47 = 0; |
|
|
|
|
++v45; |
|
|
|
|
} while (v45 < 40); |
|
|
|
|
goto LABEL_191; |
|
|
|
|
case ILOC_BELT: |
|
|
|
|
v53 = v3 * 21720 + 368 * (v68 - 65); |
|
|
|
|
if (plr[v3].HoldItem._itype != ITYPE_GOLD) { |
|
|
|
|
if (*(int *)((char *)&plr[0].SpdList[0]._itype + v53) == ITYPE_NONE) { |
|
|
|
|
qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); |
|
|
|
|
} else { |
|
|
|
|
cursor_ida = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); |
|
|
|
|
if (plr[v3].HoldItem._itype == ITYPE_GOLD) |
|
|
|
|
plr[v3]._pGold = CalculateGold(p); |
|
|
|
|
} |
|
|
|
|
goto LABEL_225; |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
NetSendCmdDelItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].InvBody[INVLOC_HAND_LEFT]); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == plr[pnum].HoldItem._iClass) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_RIGHT], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
case ILOC_TWOHAND: |
|
|
|
|
NetSendCmdDelItem(FALSE, INVLOC_HAND_RIGHT); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE) { |
|
|
|
|
tempitem = plr[pnum].HoldItem; |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) |
|
|
|
|
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_RIGHT]; |
|
|
|
|
else |
|
|
|
|
plr[pnum].HoldItem = plr[pnum].InvBody[INVLOC_HAND_LEFT]; |
|
|
|
|
if (pnum == myplr) |
|
|
|
|
SetCursor_(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); |
|
|
|
|
else |
|
|
|
|
SetICursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); |
|
|
|
|
done2h = FALSE; |
|
|
|
|
for (i = 0; i < NUM_INV_GRID_ELEM && !done2h; i++) |
|
|
|
|
done2h = AutoPlace(pnum, i, icursW28, icursH28, TRUE); |
|
|
|
|
plr[pnum].HoldItem = tempitem; |
|
|
|
|
if (pnum == myplr) |
|
|
|
|
SetCursor_(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); |
|
|
|
|
else |
|
|
|
|
SetICursor(plr[pnum].HoldItem._iCurs + CURSOR_FIRSTITEM); |
|
|
|
|
if (!done2h) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) |
|
|
|
|
plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; |
|
|
|
|
else |
|
|
|
|
plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE || plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE) { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE) |
|
|
|
|
SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].InvBody[INVLOC_HAND_RIGHT]); |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_HAND_LEFT], &plr[pnum].HoldItem); |
|
|
|
|
} else { |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_HAND_LEFT); |
|
|
|
|
plr[pnum].InvBody[INVLOC_HAND_LEFT] = plr[pnum].HoldItem; |
|
|
|
|
} |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell != 0 && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iCharges > 0) { |
|
|
|
|
plr[pnum]._pRSpell = plr[pnum].InvBody[INVLOC_HAND_LEFT]._iSpell; |
|
|
|
|
plr[pnum]._pRSplType = RSPLTYPE_CHARGES; |
|
|
|
|
drawpanflag = 255; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case ILOC_ARMOR: |
|
|
|
|
NetSendCmdChItem(FALSE, INVLOC_CHEST); |
|
|
|
|
if (plr[pnum].InvBody[INVLOC_CHEST]._itype == ITYPE_NONE) |
|
|
|
|
plr[pnum].InvBody[INVLOC_CHEST] = plr[pnum].HoldItem; |
|
|
|
|
else |
|
|
|
|
cn = SwapItem(&plr[pnum].InvBody[INVLOC_CHEST], &plr[pnum].HoldItem); |
|
|
|
|
break; |
|
|
|
|
case ILOC_UNEQUIPABLE: |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD && it == 0) { |
|
|
|
|
ii = r - 25; |
|
|
|
|
yy = 10 * (ii / 10); |
|
|
|
|
xx = ii % 10; |
|
|
|
|
if (plr[pnum].InvGrid[yy + xx] > 0) { |
|
|
|
|
il = plr[pnum].InvGrid[yy + xx]; |
|
|
|
|
il--; |
|
|
|
|
gt = plr[pnum].InvList[il]._ivalue; |
|
|
|
|
ig = plr[pnum].HoldItem._ivalue + gt; |
|
|
|
|
if (ig <= 5000) { |
|
|
|
|
plr[pnum].InvList[il]._ivalue = ig; |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
if (ig >= 2500) |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; |
|
|
|
|
else if (ig <= 1000) |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_SMALL; |
|
|
|
|
else |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_MEDIUM; |
|
|
|
|
} else { |
|
|
|
|
ig = 5000 - gt; |
|
|
|
|
plr[pnum]._pGold += ig; |
|
|
|
|
plr[pnum].HoldItem._ivalue -= ig; |
|
|
|
|
plr[pnum].InvList[il]._ivalue = 5000; |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; |
|
|
|
|
// BUGFIX: incorrect values here are leftover from beta
|
|
|
|
|
if (plr[pnum].HoldItem._ivalue >= 2500) |
|
|
|
|
cn = 18; |
|
|
|
|
else if (plr[pnum].HoldItem._ivalue <= 1000) |
|
|
|
|
cn = 16; |
|
|
|
|
else |
|
|
|
|
cn = 17; |
|
|
|
|
} |
|
|
|
|
v54 = *(int *)((char *)&plr[0].SpdList[0]._itype + v53); |
|
|
|
|
if (v54 != ITYPE_NONE) { |
|
|
|
|
if (v54 == ITYPE_GOLD) { |
|
|
|
|
v55 = *(int *)((char *)&plr[0].SpdList[0]._ivalue + v53); |
|
|
|
|
v56 = plr[v3].HoldItem._ivalue; |
|
|
|
|
v57 = v55 + v56; |
|
|
|
|
if (v55 + v56 <= 5000) { |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = v57; |
|
|
|
|
plr[v3]._pGold += plr[v3].HoldItem._ivalue; |
|
|
|
|
if (v57 < 2500) { |
|
|
|
|
if (v57 > 1000) |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 5; |
|
|
|
|
else |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 4; |
|
|
|
|
} else { |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; |
|
|
|
|
} |
|
|
|
|
goto LABEL_225; |
|
|
|
|
} |
|
|
|
|
plr[v3]._pGold += 5000 - v55; |
|
|
|
|
plr[v3].HoldItem._ivalue = v56 - (5000 - v55); |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._ivalue + v53) = 5000; |
|
|
|
|
*(int *)((char *)&plr[0].SpdList[0]._iCurs + v53) = 6; |
|
|
|
|
v58 = plr[v3].HoldItem._ivalue; |
|
|
|
|
if (v58 >= 2500) { |
|
|
|
|
cursor_ida = 18; |
|
|
|
|
goto LABEL_225; |
|
|
|
|
} |
|
|
|
|
v59 = (v58 > 1000) + 16; |
|
|
|
|
} else { |
|
|
|
|
plr[v3]._pGold += plr[v3].HoldItem._ivalue; |
|
|
|
|
v59 = SwapItem((ItemStruct *)((char *)plr[0].SpdList + v53), &plr[v3].HoldItem); |
|
|
|
|
} |
|
|
|
|
cursor_ida = v59; |
|
|
|
|
goto LABEL_225; |
|
|
|
|
} else { |
|
|
|
|
il = plr[pnum]._pNumInv; |
|
|
|
|
plr[pnum].InvList[il] = plr[pnum].HoldItem; |
|
|
|
|
plr[pnum]._pNumInv++; |
|
|
|
|
plr[pnum].InvGrid[yy + xx] = plr[pnum]._pNumInv; |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
if (plr[pnum].HoldItem._ivalue <= 5000) { |
|
|
|
|
if (plr[pnum].HoldItem._ivalue >= 2500) |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_LARGE; |
|
|
|
|
else if (plr[pnum].HoldItem._ivalue <= 1000) |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_SMALL; |
|
|
|
|
else |
|
|
|
|
plr[pnum].InvList[il]._iCurs = ICURS_GOLD_MEDIUM; |
|
|
|
|
} |
|
|
|
|
qmemcpy((char *)plr[0].SpdList + v53, &plr[v3].HoldItem, 0x170u); |
|
|
|
|
plr[v3]._pGold += plr[v3].HoldItem._ivalue; |
|
|
|
|
LABEL_225: |
|
|
|
|
drawsbarflag = TRUE; |
|
|
|
|
LABEL_226: |
|
|
|
|
v60 = p; |
|
|
|
|
CalcPlrInv(p, 1u); |
|
|
|
|
if (v60 == myplr) { |
|
|
|
|
if (cursor_ida == 1) |
|
|
|
|
SetCursorPos(MouseX + (cursW >> 1), MouseY + (cursH >> 1)); |
|
|
|
|
SetCursor_(cursor_ida); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (it == 0) { |
|
|
|
|
plr[pnum].InvList[plr[pnum]._pNumInv] = plr[pnum].HoldItem; |
|
|
|
|
plr[pnum]._pNumInv++; |
|
|
|
|
it = plr[pnum]._pNumInv; |
|
|
|
|
} else { |
|
|
|
|
il = it - 1; |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD) |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
cn = SwapItem(&plr[pnum].InvList[il], &plr[pnum].HoldItem); |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD) |
|
|
|
|
plr[pnum]._pGold = CalculateGold(pnum); |
|
|
|
|
for (i = 0; i < NUM_INV_GRID_ELEM; i++) { |
|
|
|
|
if (plr[pnum].InvGrid[i] == it) |
|
|
|
|
plr[pnum].InvGrid[i] = 0; |
|
|
|
|
if (plr[pnum].InvGrid[i] == -it) |
|
|
|
|
plr[pnum].InvGrid[i] = 0; |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
default: |
|
|
|
|
goto LABEL_226; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
v62 = (v68 - 25) % 10; |
|
|
|
|
v14 = 10 * (v13 - ((v67 - 1) >> 1)); |
|
|
|
|
if (v14 < 0) |
|
|
|
|
v14 = 0; |
|
|
|
|
v65 = 0; |
|
|
|
|
if (v67 <= 0) |
|
|
|
|
goto LABEL_93; |
|
|
|
|
v15 = &plr[v3].InvGrid[v14]; |
|
|
|
|
while (1) { |
|
|
|
|
if (cursor_id == CURSOR_NONE) |
|
|
|
|
return; |
|
|
|
|
if (v14 >= 40) |
|
|
|
|
cursor_id = 0; |
|
|
|
|
v16 = v62 - ((v64 - 1) >> 1); |
|
|
|
|
if (v16 < 0) |
|
|
|
|
v16 = 0; |
|
|
|
|
v17 = 0; |
|
|
|
|
if (v64 > 0) |
|
|
|
|
break; |
|
|
|
|
LABEL_79: |
|
|
|
|
v14 += 10; |
|
|
|
|
v15 += 10; |
|
|
|
|
if (++v65 >= v67) { |
|
|
|
|
v12 = cursor_id; |
|
|
|
|
v10 = v68; |
|
|
|
|
goto LABEL_81; |
|
|
|
|
ii = r - 25; |
|
|
|
|
yy = 10 * (ii / 10 - ((sy - 1) >> 1)); |
|
|
|
|
if (yy < 0) |
|
|
|
|
yy = 0; |
|
|
|
|
for (j = 0; j < sy; j++) { |
|
|
|
|
xx = (ii % 10 - ((sx - 1) >> 1)); |
|
|
|
|
if (xx < 0) |
|
|
|
|
xx = 0; |
|
|
|
|
for (i = 0; i < sx; i++) { |
|
|
|
|
if (i != 0 || j != sy - 1) |
|
|
|
|
plr[pnum].InvGrid[xx + yy] = -it; |
|
|
|
|
else |
|
|
|
|
plr[pnum].InvGrid[xx + yy] = it; |
|
|
|
|
xx++; |
|
|
|
|
} |
|
|
|
|
yy += 10; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
while (1) { |
|
|
|
|
if (cursor_id == CURSOR_NONE) |
|
|
|
|
goto LABEL_79; |
|
|
|
|
if (v16 >= 10) |
|
|
|
|
goto LABEL_233; |
|
|
|
|
_LOBYTE(v18) = v15[v16]; |
|
|
|
|
if ((_BYTE)v18) { |
|
|
|
|
v18 = (char)v18; |
|
|
|
|
if ((v18 & 0x80u) != 0) |
|
|
|
|
v18 = -v18; |
|
|
|
|
if (!v66) { |
|
|
|
|
v66 = v18; |
|
|
|
|
goto LABEL_78; |
|
|
|
|
break; |
|
|
|
|
case ILOC_BELT: |
|
|
|
|
ii = r - 65; |
|
|
|
|
if (plr[pnum].HoldItem._itype == ITYPE_GOLD) { |
|
|
|
|
if (plr[pnum].SpdList[ii]._itype != ITYPE_NONE) { |
|
|
|
|
if (plr[pnum].SpdList[ii]._itype == ITYPE_GOLD) { |
|
|
|
|
i = plr[pnum].HoldItem._ivalue + plr[pnum].SpdList[ii]._ivalue; |
|
|
|
|
if (i <= 5000) { |
|
|
|
|
plr[pnum].SpdList[ii]._ivalue += plr[pnum].HoldItem._ivalue; |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
if (i >= 2500) |
|
|
|
|
plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_LARGE; |
|
|
|
|
else if (i <= 1000) |
|
|
|
|
plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_SMALL; |
|
|
|
|
else |
|
|
|
|
plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_MEDIUM; |
|
|
|
|
} else { |
|
|
|
|
i = 5000 - plr[pnum].SpdList[ii]._ivalue; |
|
|
|
|
plr[pnum]._pGold += i; |
|
|
|
|
plr[pnum].HoldItem._ivalue -= i; |
|
|
|
|
plr[pnum].SpdList[ii]._ivalue = 5000; |
|
|
|
|
plr[pnum].SpdList[ii]._iCurs = ICURS_GOLD_LARGE; |
|
|
|
|
|
|
|
|
|
// BUGFIX: incorrect values here are leftover from beta
|
|
|
|
|
if (plr[pnum].HoldItem._ivalue >= 2500) |
|
|
|
|
cn = 18; |
|
|
|
|
else if (plr[pnum].HoldItem._ivalue <= 1000) |
|
|
|
|
cn = 16; |
|
|
|
|
else |
|
|
|
|
cn = 17; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
cn = SwapItem(&plr[pnum].SpdList[ii], &plr[pnum].HoldItem); |
|
|
|
|
} |
|
|
|
|
if (v66 != v18) |
|
|
|
|
LABEL_233: |
|
|
|
|
cursor_id = 0; |
|
|
|
|
} else { |
|
|
|
|
plr[pnum].SpdList[ii] = plr[pnum].HoldItem; |
|
|
|
|
plr[pnum]._pGold += plr[pnum].HoldItem._ivalue; |
|
|
|
|
} |
|
|
|
|
LABEL_78: |
|
|
|
|
++v16; |
|
|
|
|
if (++v17 >= v64) |
|
|
|
|
goto LABEL_79; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (v64 == 1 && v67 == 1) { |
|
|
|
|
v12 = 1; |
|
|
|
|
if (!AllItemsList[plr[v3].HoldItem.IDidx].iUsable) |
|
|
|
|
v12 = 0; |
|
|
|
|
if (!plr[v3].HoldItem._iStatFlag) |
|
|
|
|
v12 = 0; |
|
|
|
|
if (plr[v3].HoldItem._itype == ITYPE_GOLD) { |
|
|
|
|
v12 = 0; |
|
|
|
|
goto LABEL_50; |
|
|
|
|
} else if (plr[pnum].SpdList[ii]._itype == ITYPE_NONE) { |
|
|
|
|
plr[pnum].SpdList[ii] = plr[pnum].HoldItem; |
|
|
|
|
} else { |
|
|
|
|
cn = SwapItem(&plr[pnum].SpdList[ii], &plr[pnum].HoldItem); |
|
|
|
|
if (plr[pnum].HoldItem._itype == 11) |
|
|
|
|
plr[pnum]._pGold = CalculateGold(pnum); |
|
|
|
|
} |
|
|
|
|
drawsbarflag = 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
LABEL_81: |
|
|
|
|
if (!v12) |
|
|
|
|
return; |
|
|
|
|
if (v69 == ILOC_UNEQUIPABLE || v69 == ILOC_BELT || plr[v3].HoldItem._iStatFlag) { |
|
|
|
|
goto LABEL_93; |
|
|
|
|
} |
|
|
|
|
if (plr[v3]._pClass == PC_WARRIOR) { |
|
|
|
|
PlaySFX(PS_WARR13); |
|
|
|
|
} else if (plr[v3]._pClass == PC_ROGUE) { |
|
|
|
|
PlaySFX(PS_ROGUE13); |
|
|
|
|
} else if (plr[v3]._pClass == PC_SORCERER) { |
|
|
|
|
PlaySFX(PS_MAGE13); |
|
|
|
|
CalcPlrInv(pnum, 1); |
|
|
|
|
if (pnum == myplr) { |
|
|
|
|
if (cn == 1) |
|
|
|
|
SetCursorPos(MouseX + (cursW >> 1), MouseY + (cursH >> 1)); |
|
|
|
|
SetCursor_(cn); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 4B8C9C: using guessed type int cursH;
|
|
|
|
|
// 4B8CB4: using guessed type int icursH;
|
|
|
|
|
// 4B8CBC: using guessed type int icursW;
|
|
|
|
|
// 52571C: using guessed type int drawpanflag;
|
|
|
|
|
|
|
|
|
|
void CheckInvSwap(int pnum, BYTE bLoc, int idx, WORD wCI, int seed, BOOL bId) |
|
|
|
|
{ |
|
|
|
|
|