Fix container bug, miniwindow pos, creature skulls outsite map bound

This commit is contained in:
Henrique Santiago 2012-08-24 19:59:33 -03:00
parent 715f560b79
commit beb04d8d8e
5 changed files with 23 additions and 13 deletions

View File

@ -97,7 +97,7 @@ function UIMiniWindow:setup()
elseif selfSettings.position then
self:setParent(parent)
self:setPosition(topoint(selfSettings.position))
self:bindRectToParent()
addEvent(function() self:bindRectToParent() end)
end
end
end

View File

@ -351,11 +351,10 @@ function processMouseAction(menuPosition, mouseButton, autoWalkPos, lookThing, u
if useThing:isContainer() then
if useThing:getParentContainer() then
g_game.open(useThing, useThing:getParentContainer())
return true
else
g_game.open(useThing)
return true
end
return true
elseif useThing:isMultiUse() then
startUseWith(useThing)
return true

View File

@ -236,15 +236,18 @@ void Creature::drawInformation(const Point& point, bool useGray, const Rect& par
if(m_skull != Otc::SkullNone && m_skullTexture) {
g_painter->setColor(Color::white);
g_painter->drawTexturedRect(Rect(point.x + 12, point.y + 5, m_skullTexture->getSize()), m_skullTexture);
Rect skullRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 5, m_skullTexture->getSize());
g_painter->drawTexturedRect(skullRect, m_skullTexture);
}
if(m_shield != Otc::ShieldNone && m_shieldTexture && m_showShieldTexture) {
g_painter->setColor(Color::white);
g_painter->drawTexturedRect(Rect(point.x, point.y + 5, m_shieldTexture->getSize()), m_shieldTexture);
Rect shieldRect = Rect(backgroundRect.x() + 13.5, backgroundRect.y() + 5, m_shieldTexture->getSize());
g_painter->drawTexturedRect(shieldRect, m_shieldTexture);
}
if(m_emblem != Otc::EmblemNone && m_emblemTexture) {
g_painter->setColor(Color::white);
g_painter->drawTexturedRect(Rect(point.x + 12, point.y + 16, m_emblemTexture->getSize()), m_emblemTexture);
Rect emblemRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 16, m_emblemTexture->getSize());
g_painter->drawTexturedRect(emblemRect, m_emblemTexture);
}
}

View File

@ -663,7 +663,9 @@ void Game::use(const ThingPtr& thing)
if(!pos.isValid()) // virtual item
pos = Position(0xFFFF, 0, 0); // means that is a item in inventory
m_protocolGame->sendUseItem(pos, thing->getId(), thing->getStackpos(), 0);
// some itens, e.g. parcel, are not set as containers but they are.
// always try to use these items in free container slots.
m_protocolGame->sendUseItem(pos, thing->getId(), thing->getStackpos(), findEmptyContainerId());
}
void Game::useInventoryItem(int itemId)
@ -710,13 +712,10 @@ void Game::open(const ItemPtr& item, const ContainerPtr& previousContainer)
return;
int id = 0;
if(!previousContainer) {
// find a free container id
while(m_containers[id] != nullptr)
id++;
} else {
if(!previousContainer)
id = findEmptyContainerId();
else
id = previousContainer->getId();
}
m_protocolGame->sendUseItem(item->getPosition(), item->getId(), item->getStackpos(), id);
}
@ -1215,3 +1214,11 @@ std::string Game::formatCreatureName(const std::string& name)
formatedName[0] = stdext::upchar(formatedName[0]);
return formatedName;
}
int Game::findEmptyContainerId()
{
int id = 0;
while(m_containers[id] != nullptr)
id++;
return id;
}

View File

@ -268,6 +268,7 @@ public:
std::vector<uint8> getGMActions() { return m_gmActions; }
std::string formatCreatureName(const std::string &name);
int findEmptyContainerId();
protected:
void enableBotCall() { m_denyBotCall = false; }