project-meteor-server/Data/scripts/shop.lua
CuriousJorge 4fc5762d41 Teleport command touch-ups.
PopulaceCompanyWarp made to look more retail authentic.  Can't figure out how to make it not play the 'npc untargeted' sound though like retail.
Music command has second argument for transition type.  Added an overloaded function in Player.cs to support this.
Setappearance adjusted to work again on player targets.
DftWil updated to cover near everything.
Re-added shop-related luas that were removed for some reason.
2022-02-05 13:56:58 -05:00

55 lines
2.7 KiB
Lua

--[[
Shop Buy/Sell Functions
--]]
function purchaseItem(player, location, itemId, quantity, quality, price, currency)
local worldMaster = GetWorldMaster();
local invCheck = -1;
if (player:GetItemPackage(INVENTORY_CURRENCY):HasItem(currency, price)) then
invCheck = player:GetItemPackage(location):AddItem(itemId, quantity, quality);
if (invCheck == INV_ERROR_FULL) then
-- Your inventory is full.
player:SendGameMessage(player, worldMaster, 60022, MESSAGE_TYPE_SYSTEM);
elseif (invCheck == INV_ERROR_ALREADY_HAS_UNIQUE) then
-- You cannot have more than one <itemId> <quality> in your possession at any given time.
player:SendGameMessage(player, worldMaster, 40279, MESSAGE_TYPE_SYSTEM, itemId, quality);
elseif (invCheck == INV_ERROR_SYSTEM_ERROR) then
player:SendMessage(0x20, "", "[DEBUG] Server Error on adding item.");
elseif (invCheck == INV_ERROR_SUCCESS) then
player:GetItemPackage(INVENTORY_CURRENCY):removeItem(currency, price);
if (currency == 1000001) then -- If Gil
-- You purchase <quantity> <itemId> <quality> for <price> gil.
player:SendGameMessage(player, worldMaster, 25061, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, price);
elseif (currency == 1000201 or currency == 1000202 or currency == 1000203) then -- If Grand Company seal
-- You exchange <quantity> <GC seals> for <quantity> <itemId> <quality>.
player:SendGameMessage(player, worldMaster, 25275, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, price, player.gcCurrent);
elseif (currency >= 1000101 and currency <= 1000123) then -- If Guild mark
-- You trade <quantity> <itemId> <quality> for <quantity> <itemId> <quality>.
player:SendGameMessage(player, GetWorldMaster(), 25071, MESSAGE_TYPE_SYSTEM, currency, 1, itemId, 1, price, quantity);
end
end
else
-- You do not have enough gil. (Should never see this)
player:SendGameMessage(player, worldMaster, 25065, MESSAGE_TYPE_SYSTEM);
end
return
end
function sellItem(player, itemId, quantity, quality, itemPrice, slot, currency)
local worldMaster = GetWorldMaster();
local cost = quantity * itemPrice;
player:GetItemPackage(INVENTORY_CURRENCY):AddItem(currency, cost);
player:GetItemPackage(INVENTORY_NORMAL):RemoveItemAtSlot(slot, quantity);
-- You sell <quantity> <itemId> <quality> for <cost> gil.
player:SendGameMessage(player, worldMaster, 25075, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, cost);
end