Browse Source

Remove redundant check for distance when operating doors

IsPlayerAdjacentToObject() is checked before calling OperateObject().
Previously teleFlag would ignore sendmsg which was likely a bug causing
the event to fire multiple times.
pull/5189/head
Anders Jenbo 4 years ago
parent
commit
2d9531f692
  1. 4
      Source/objects.cpp
  2. 2
      Source/objects.h
  3. 6
      Source/player.cpp

4
Source/objects.cpp

@ -4321,7 +4321,7 @@ int ItemMiscIdIdx(item_misc_id imiscid)
return i;
}
void OperateObject(Player &player, int i, bool teleFlag)
void OperateObject(Player &player, int i)
{
Object &object = Objects[i];
bool sendmsg = &player == MyPlayer;
@ -4335,7 +4335,7 @@ void OperateObject(Player &player, int i, bool teleFlag)
case OBJ_L3RDOOR:
case OBJ_L5LDOOR:
case OBJ_L5RDOOR:
if (teleFlag || (sendmsg && abs(object.position.x - player.position.tile.x) <= 1 && abs(object.position.y - player.position.tile.y) <= 1))
if (sendmsg)
OperateDoor(object, sendmsg);
break;
case OBJ_LEVER:

2
Source/objects.h

@ -314,7 +314,7 @@ void MonstCheckDoors(const Monster &monster);
void ObjChangeMap(int x1, int y1, int x2, int y2);
void ObjChangeMapResync(int x1, int y1, int x2, int y2);
int ItemMiscIdIdx(item_misc_id imiscid);
void OperateObject(Player &player, int i, bool TeleFlag);
void OperateObject(Player &player, int i);
void SyncOpObject(Player &player, int cmd, Object &object);
void BreakObjectMissile(Object &object);
void BreakObject(const Player &player, Object &object);

6
Source/player.cpp

@ -1480,7 +1480,7 @@ void CheckNewPath(Player &player, bool pmWillBeCalled)
d = GetDirection(player.position.tile, object->position);
StartAttack(player, d);
} else {
OperateObject(player, targetId, false);
OperateObject(player, targetId);
}
}
break;
@ -1491,13 +1491,13 @@ void CheckNewPath(Player &player, bool pmWillBeCalled)
StartAttack(player, d);
} else {
TryDisarm(player, *object);
OperateObject(player, targetId, false);
OperateObject(player, targetId);
}
}
break;
case ACTION_OPERATETK:
if (object->_oBreak != 1) {
OperateObject(player, targetId, true);
OperateObject(player, targetId);
}
break;
case ACTION_PICKUPITEM:

Loading…
Cancel
Save