Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
81e6cf210e
|
@ -82,6 +82,8 @@ public:
|
|||
|
||||
LuaObjectPtr asLuaObject() { return shared_from_this(); }
|
||||
|
||||
void operator=(const LuaObject& other) { }
|
||||
|
||||
private:
|
||||
int m_fieldsTableRef;
|
||||
int m_metatableRef;
|
||||
|
|
|
@ -815,10 +815,12 @@ void UIWidget::setLayout(const UILayoutPtr& layout)
|
|||
|
||||
bool UIWidget::setRect(const Rect& rect)
|
||||
{
|
||||
/*
|
||||
if(rect.width() > 8192 || rect.height() > 8192) {
|
||||
g_logger.error(stdext::format("attempt to set huge rect size (%s) for %s", stdext::to_string(rect), m_id));
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
// only update if the rect really changed
|
||||
Rect oldRect = m_rect;
|
||||
if(rect == oldRect)
|
||||
|
|
|
@ -293,3 +293,10 @@ bool Item::isMoveable()
|
|||
"Invalid dat type for item %d", m_id));
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemPtr Item::clone()
|
||||
{
|
||||
ItemPtr item = ItemPtr(new Item);
|
||||
*(item.get()) = *this;
|
||||
return item;
|
||||
}
|
||||
|
|
|
@ -96,6 +96,7 @@ public:
|
|||
uint8 getDoorId() { return m_doorId; }
|
||||
bool isValid();
|
||||
|
||||
ItemPtr clone();
|
||||
ItemPtr asItem() { return std::static_pointer_cast<Item>(shared_from_this()); }
|
||||
bool isItem() { return true; }
|
||||
|
||||
|
|
|
@ -315,6 +315,7 @@ void OTClient::registerLuaFunctions()
|
|||
|
||||
g_lua.registerClass<Item, Thing>();
|
||||
g_lua.bindClassStaticFunction<Item>("create", &Item::create);
|
||||
g_lua.bindClassMemberFunction<Item>("clone", &Item::clone);
|
||||
g_lua.bindClassMemberFunction<Item>("setCount", &Item::setCount);
|
||||
g_lua.bindClassMemberFunction<Item>("getCount", &Item::getCount);
|
||||
g_lua.bindClassMemberFunction<Item>("getId", &Item::getId);
|
||||
|
|
|
@ -218,7 +218,7 @@ void Map::loadOtbm(const std::string& fileName)
|
|||
} else if(item->isDoor())
|
||||
house->addDoor(item->getDoorId(), pos);
|
||||
} else if(tile)
|
||||
addThing(item, pos, 255);
|
||||
addThing(item, pos);
|
||||
else if(item->isGround())
|
||||
ground = item;
|
||||
else
|
||||
|
@ -438,7 +438,7 @@ bool Map::loadOtcm(const std::string& fileName)
|
|||
item->setCountOrSubType(countOrSubType);
|
||||
|
||||
if(item->isValid())
|
||||
addThing(item, pos, 255);
|
||||
addThing(item, pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -632,7 +632,7 @@ bool Map::removeThing(const ThingPtr& thing)
|
|||
m_staticTexts.erase(it);
|
||||
return true;
|
||||
}
|
||||
} else if(TilePtr tile = thing->getTile())
|
||||
} else if(const TilePtr& tile = thing->getTile())
|
||||
return tile->removeThing(thing);
|
||||
|
||||
return false;
|
||||
|
@ -651,7 +651,7 @@ TilePtr Map::createTileEx(const Position& pos, const Items&... items)
|
|||
TilePtr tile = getOrCreateTile(pos);
|
||||
auto vec = {items...};
|
||||
for (auto it : vec)
|
||||
addThing(it, pos, 255);
|
||||
addThing(it, pos);
|
||||
|
||||
return tile;
|
||||
}
|
||||
|
|
|
@ -512,7 +512,7 @@ void ProtocolGame::parseCreatureMove(const InputMessagePtr& msg)
|
|||
if(!g_map.removeThing(thing))
|
||||
g_logger.traceError("could not remove thing");
|
||||
|
||||
g_map.addThing(thing, newPos);
|
||||
g_map.addThing(thing, newPos, -1);
|
||||
}
|
||||
|
||||
void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg)
|
||||
|
@ -1307,7 +1307,7 @@ void ProtocolGame::setTileDescription(const InputMessagePtr& msg, Position posit
|
|||
g_logger.traceError(stdext::format("too many things, stackpos=%d, pos=%s", stackPos, stdext::to_string(position)));
|
||||
|
||||
ThingPtr thing = getThing(msg);
|
||||
g_map.addThing(thing, position, -1);
|
||||
g_map.addThing(thing, position, -2);
|
||||
}
|
||||
stackPos++;
|
||||
}
|
||||
|
|
|
@ -163,16 +163,17 @@ ThingPtr Tile::addThing(const ThingPtr& thing, int stackPos)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
// the items stackpos follows this order:
|
||||
// 0 - ground
|
||||
// 1 - ground borders
|
||||
// 2 - bottom (walls)
|
||||
// 3 - on top (doors)
|
||||
// 4 - creatures, from top to bottom
|
||||
// 5 - items, from top to bottom
|
||||
if(stackPos < 0) {
|
||||
// the items stackpos follows this order:
|
||||
// 0 - ground
|
||||
// 1 - ground borders
|
||||
// 2 - bottom (walls)
|
||||
// 3 - on top (doors)
|
||||
// 4 - creatures, from top to bottom
|
||||
// 5 - items, from top to bottom
|
||||
stackPos = 0;
|
||||
int priority = thing->getStackPriority();
|
||||
bool prepend = (stackPos == -2 || priority <= 3);
|
||||
for(stackPos = 0; stackPos < (int)m_things.size(); ++stackPos) {
|
||||
int otherPriority = m_things[stackPos]->getStackPriority();
|
||||
if(!g_game.getFeature(Otc::GameReverseCreatureStack)) {
|
||||
|
@ -180,7 +181,7 @@ ThingPtr Tile::addThing(const ThingPtr& thing, int stackPos)
|
|||
if(priority == 4 && otherPriority == 4)
|
||||
break;
|
||||
}
|
||||
if(otherPriority > priority)
|
||||
if((prepend && otherPriority > priority) || (!prepend && otherPriority >= priority))
|
||||
break;
|
||||
}
|
||||
} else if(stackPos > (int)m_things.size())
|
||||
|
@ -233,6 +234,14 @@ ThingPtr Tile::getThing(int stackPos)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
EffectPtr Tile::getEffect(uint16 id)
|
||||
{
|
||||
for(const EffectPtr& effect : m_effects)
|
||||
if(effect->getId() == id)
|
||||
return effect;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool Tile::hasThing(const ThingPtr& thing)
|
||||
{
|
||||
return std::find(m_things.begin(), m_things.end(), thing) != m_things.end();
|
||||
|
@ -246,11 +255,14 @@ int Tile::getThingStackpos(const ThingPtr& thing)
|
|||
return -1;
|
||||
}
|
||||
|
||||
ThingPtr Tile::getTopThing()
|
||||
ThingPtr Tile:: getTopThing()
|
||||
{
|
||||
if(isEmpty())
|
||||
return nullptr;
|
||||
|
||||
for(const ThingPtr& thing : m_things) {
|
||||
if(!thing->isGround() && !thing->isGroundBorder() && !thing->isOnBottom() && !thing->isOnTop() && !thing->isCreature())
|
||||
return thing;
|
||||
}
|
||||
return m_things[m_things.size() - 1];
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ public:
|
|||
ThingPtr addThing(const ThingPtr& thing, int stackPos = -1);
|
||||
bool removeThing(ThingPtr thing);
|
||||
ThingPtr getThing(int stackPos);
|
||||
EffectPtr getEffect(uint16 id);
|
||||
bool hasThing(const ThingPtr& thing);
|
||||
int getThingStackpos(const ThingPtr& thing);
|
||||
ThingPtr getTopThing();
|
||||
|
|
Loading…
Reference in New Issue