120 lines
4.3 KiB
Lua
120 lines
4.3 KiB
Lua
describe('Equipment', function()
|
|
---@type CClientEntityPair
|
|
local player
|
|
|
|
before_each(function()
|
|
player = xi.test.world:spawnPlayer(
|
|
{
|
|
job = xi.job.WAR,
|
|
level = 75,
|
|
zone = xi.zone.SOUTHERN_SAN_DORIA,
|
|
})
|
|
end)
|
|
|
|
it('equips a weapon to main hand', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
|
|
local weapon = player:getEquippedItem(xi.slot.MAIN)
|
|
assert(weapon)
|
|
assert(weapon:getID() == xi.item.BRONZE_SWORD)
|
|
end)
|
|
|
|
it('unequip empties the slot', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
assert(player:getEquippedItem(xi.slot.MAIN))
|
|
|
|
player:unequipItem(xi.slot.MAIN)
|
|
|
|
assert(player:getEquippedItem(xi.slot.MAIN) == nil)
|
|
end)
|
|
|
|
it('swapping weapons replaces the previous one', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:addItem(xi.item.BRONZE_AXE)
|
|
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
assert(player:getEquippedItem(xi.slot.MAIN):getID() == xi.item.BRONZE_SWORD)
|
|
|
|
player:equipItem(xi.item.BRONZE_AXE, nil, xi.slot.MAIN)
|
|
assert(player:getEquippedItem(xi.slot.MAIN):getID() == xi.item.BRONZE_AXE)
|
|
end)
|
|
|
|
it('cannot equip an item you do not own', function()
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
assert(player:getEquippedItem(xi.slot.MAIN) == nil)
|
|
end)
|
|
|
|
it('cannot put a sword on your feet', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.FEET)
|
|
assert(player:getEquippedItem(xi.slot.FEET) == nil)
|
|
end)
|
|
|
|
it('two-handed weapon clears the sub slot', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:addItem(xi.item.LAUAN_SHIELD)
|
|
player:addItem(xi.item.GREATSWORD)
|
|
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
player:equipItem(xi.item.LAUAN_SHIELD, nil, xi.slot.SUB)
|
|
assert(player:getEquippedItem(xi.slot.SUB))
|
|
|
|
player:equipItem(xi.item.GREATSWORD, nil, xi.slot.MAIN)
|
|
|
|
assert(player:getEquippedItem(xi.slot.MAIN):getID() == xi.item.GREATSWORD)
|
|
assert(player:getEquippedItem(xi.slot.SUB) == nil)
|
|
end)
|
|
|
|
it('equipping the same item again is a no-op', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
local first = player:getEquippedItem(xi.slot.MAIN)
|
|
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
|
|
assert(player:getEquippedItem(xi.slot.MAIN) == first)
|
|
end)
|
|
|
|
it('changing job unequips gear that does not match', function()
|
|
player:addItem(xi.item.BRONZE_SWORD)
|
|
player:equipItem(xi.item.BRONZE_SWORD, nil, xi.slot.MAIN)
|
|
assert(player:getEquippedItem(xi.slot.MAIN))
|
|
|
|
player:changeJob(xi.job.BLM)
|
|
|
|
assert(player:getEquippedItem(xi.slot.MAIN) == nil)
|
|
end)
|
|
|
|
it('equipped ammo stack decrements on use', function()
|
|
player:addItem(xi.item.FIRE_ARROW, 50)
|
|
player:equipItem(xi.item.FIRE_ARROW, nil, xi.slot.AMMO)
|
|
|
|
player:delItem(xi.item.FIRE_ARROW, 1)
|
|
|
|
local ammo = player:getEquippedItem(xi.slot.AMMO)
|
|
assert(ammo)
|
|
assert(ammo:getQuantity() == 49)
|
|
end)
|
|
|
|
it('all visible armor slots accept their piece', function()
|
|
local pieces =
|
|
{
|
|
{ id = xi.item.BRONZE_CAP, slot = xi.slot.HEAD },
|
|
{ id = xi.item.BRONZE_HARNESS, slot = xi.slot.BODY },
|
|
{ id = xi.item.BRONZE_MITTENS, slot = xi.slot.HANDS },
|
|
{ id = xi.item.BRONZE_SUBLIGAR, slot = xi.slot.LEGS },
|
|
{ id = xi.item.BRONZE_LEGGINGS, slot = xi.slot.FEET },
|
|
}
|
|
|
|
for _, piece in ipairs(pieces) do
|
|
player:addItem(piece.id)
|
|
player:equipItem(piece.id, nil, piece.slot)
|
|
local equipped = player:getEquippedItem(piece.slot)
|
|
assert(equipped, string.format('slot %d empty', piece.slot))
|
|
assert(equipped:getID() == piece.id,
|
|
string.format('slot %d has wrong item: %d', piece.slot, equipped:getID()))
|
|
end
|
|
end)
|
|
end)
|