Browse Source

♻️Deduplicate PutItem

pull/1652/head
Anders Jenbo 5 years ago
parent
commit
f20828706e
  1. 89
      Source/inv.cpp

89
Source/inv.cpp

@ -1902,24 +1902,19 @@ void DrawInvMsg(const char *msg)
}
}
int InvPutItem(int pnum, int x, int y)
bool PutItem(int pnum, int x, int y)
{
bool done;
int d;
int i, j, l;
int xx, yy;
int xp, yp;
if (numitems >= MAXITEMS)
return -1;
return false;
d = GetDirection(plr[pnum]._px, plr[pnum]._py, x, y);
xx = x - plr[pnum]._px;
yy = y - plr[pnum]._py;
int d = GetDirection(plr[pnum]._px, plr[pnum]._py, x, y);
int xx = x - plr[pnum]._px;
int yy = y - plr[pnum]._py;
if (abs(xx) > 1 || abs(yy) > 1) {
x = plr[pnum]._px + offset_x[d];
y = plr[pnum]._py + offset_y[d];
}
if (!CanPut(x, y)) {
d = (d - 1) & 7;
x = plr[pnum]._px + offset_x[d];
@ -1929,12 +1924,12 @@ int InvPutItem(int pnum, int x, int y)
x = plr[pnum]._px + offset_x[d];
y = plr[pnum]._py + offset_y[d];
if (!CanPut(x, y)) {
done = false;
for (l = 1; l < 50 && !done; l++) {
for (j = -l; j <= l && !done; j++) {
yp = j + plr[pnum]._py;
for (i = -l; i <= l && !done; i++) {
xp = i + plr[pnum]._px;
bool done = false;
for (int l = 1; l < 50 && !done; l++) {
for (int j = -l; j <= l && !done; j++) {
int yp = j + plr[pnum]._py;
for (int i = -l; i <= l && !done; i++) {
int xp = i + plr[pnum]._px;
if (CanPut(xp, yp)) {
done = true;
x = xp;
@ -1944,15 +1939,25 @@ int InvPutItem(int pnum, int x, int y)
}
}
if (!done)
return -1;
return false;
}
}
}
return true;
}
int InvPutItem(int pnum, int x, int y)
{
if (!PutItem(pnum, x, y))
return -1;
if (currlevel == 0) {
yp = cursmy;
xp = cursmx;
int yp = cursmy;
int xp = cursmx;
if (plr[pnum].HoldItem._iCurs == ICURS_RUNE_BOMB && xp >= 79 && xp <= 82 && yp >= 61 && yp <= 64) {
int xx = x - plr[pnum]._px;
int yy = y - plr[pnum]._py;
NetSendCmdLocParam2(false, CMD_OPENHIVE, plr[pnum]._px, plr[pnum]._py, xx, yy);
quests[Q_FARMER]._qactive = QUEST_DONE;
if (gbIsMultiplayer) {
@ -1994,51 +1999,9 @@ int InvPutItem(int pnum, int x, int y)
int SyncPutItem(int pnum, int x, int y, int idx, WORD icreateinfo, int iseed, int Id, int dur, int mdur, int ch, int mch, int ivalue, DWORD ibuff, int to_hit, int max_dam, int min_str, int min_mag, int min_dex, int ac)
{
bool done;
int d;
int i, j, l;
int xx, yy;
int xp, yp;
if (numitems >= MAXITEMS)
if (!PutItem(pnum, x, y))
return -1;
d = GetDirection(plr[pnum]._px, plr[pnum]._py, x, y);
xx = x - plr[pnum]._px;
yy = y - plr[pnum]._py;
if (abs(xx) > 1 || abs(yy) > 1) {
x = plr[pnum]._px + offset_x[d];
y = plr[pnum]._py + offset_y[d];
}
if (!CanPut(x, y)) {
d = (d - 1) & 7;
x = plr[pnum]._px + offset_x[d];
y = plr[pnum]._py + offset_y[d];
if (!CanPut(x, y)) {
d = (d + 2) & 7;
x = plr[pnum]._px + offset_x[d];
y = plr[pnum]._py + offset_y[d];
if (!CanPut(x, y)) {
done = false;
for (l = 1; l < 50 && !done; l++) {
for (j = -l; j <= l && !done; j++) {
yp = j + plr[pnum]._py;
for (i = -l; i <= l && !done; i++) {
xp = i + plr[pnum]._px;
if (CanPut(xp, yp)) {
done = true;
x = xp;
y = yp;
}
}
}
}
if (!done)
return -1;
}
}
}
CanPut(x, y);
int ii = AllocateItem();

Loading…
Cancel
Save