Browse Source

Fix API Item Dropping

Fixes an issue that started after updating to newer commit. Moves TryOpenDungeonWithMouse() to devilution namespace for access in the API and copies part of the left click code with slight modification to handle dropping items, and sets me up for implementing API opening hellfire areas.
pull/7983/head
NiteKat 3 months ago
parent
commit
de76ec1d85
  1. 13
      Source/dapi/Server.cpp
  2. 34
      Source/diablo.cpp
  3. 1
      Source/diablo.h

13
Source/dapi/Server.cpp

@ -2206,10 +2206,15 @@ void Server::dropCursorItem()
{
if (!isOnScreen(devilution::Players[devilution::MyPlayerId].position.tile.x, devilution::Players[devilution::MyPlayerId].position.tile.y))
return;
if (12 <= devilution::pcurs) {
devilution::NetSendCmdPItem(true, devilution::_cmd_id::CMD_PUTITEM, devilution::Point { devilution::Players[devilution::MyPlayerId].position.tile.x, devilution::Players[devilution::MyPlayerId].position.tile.y }, devilution::MyPlayer->HoldItem);
devilution::NewCursor(devilution::cursor_id::CURSOR_HAND);
else if (!devilution::MyPlayer->HoldItem.isEmpty()) {
if (!devilution::TryOpenDungeonWithMouse()) {
const devilution::Point currentPosition = devilution::MyPlayer->position.tile;
std::optional<devilution::Point> itemTile = FindAdjacentPositionForItem(currentPosition, GetDirection(currentPosition, devilution::MyPlayer->position.tile));
if (itemTile) {
NetSendCmdPItem(true, devilution::_cmd_id::CMD_PUTITEM, *itemTile, devilution::MyPlayer->HoldItem);
devilution::NewCursor(devilution::cursor_id::CURSOR_HAND);
}
}
}
}

34
Source/diablo.cpp

@ -320,23 +320,6 @@ void LeftMouseCmd(bool bShift)
}
}
bool TryOpenDungeonWithMouse()
{
if (leveltype != DTYPE_TOWN)
return false;
const Item &holdItem = MyPlayer->HoldItem;
if (holdItem.IDidx == IDI_RUNEBOMB && OpensHive(cursPosition))
OpenHive();
else if (holdItem.IDidx == IDI_MAPOFDOOM && OpensGrave(cursPosition))
OpenGrave();
else
return false;
NewCursor(CURSOR_HAND);
return true;
}
void LeftMouseDown(uint16_t modState)
{
LastPlayerAction = PlayerActionType::None;
@ -3508,4 +3491,21 @@ void PrintScreen(SDL_Keycode vkey)
ReleaseKey(vkey);
}
bool TryOpenDungeonWithMouse()
{
if (leveltype != DTYPE_TOWN)
return false;
const Item &holdItem = MyPlayer->HoldItem;
if (holdItem.IDidx == IDI_RUNEBOMB && OpensHive(cursPosition))
OpenHive();
else if (holdItem.IDidx == IDI_MAPOFDOOM && OpensGrave(cursPosition))
OpenGrave();
else
return false;
NewCursor(CURSOR_HAND);
return true;
}
} // namespace devilution

1
Source/diablo.h

@ -102,6 +102,7 @@ void DisableInputEventHandler(const SDL_Event &event, uint16_t modState);
tl::expected<void, std::string> LoadGameLevel(bool firstflag, lvl_entry lvldir);
bool IsDiabloAlive(bool playSFX);
void PrintScreen(SDL_Keycode vkey);
bool TryOpenDungeonWithMouse();
/**
* @param bStartup Process additional ticks before returning

Loading…
Cancel
Save