mirror of
https://github.com/edubart/otclient.git
synced 2025-10-17 21:13:26 +02:00
More market work (getting close to completion)
* Can now create market offers with fully working UI. * All filtering is now completed (just need to finish word searching). * Added some user friendly features to offer selections and item displays (show amount in depot). * Some more UI ascetics. * Some other minor market fixes. TODO: * Finishing applying changes for latest module updates by edubart. * Finish buying/selling existing offers. * Word searching items. * Offer management. * Full cipsoft tibia testing.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,9 @@
|
||||
Module
|
||||
name: game_market
|
||||
description: Manage the Players Market system
|
||||
description: Global item market system
|
||||
author: BeniS
|
||||
website: www.otclient.info
|
||||
|
||||
@onLoad: |
|
||||
dofile 'marketoffer'
|
||||
dofile 'marketprotocol'
|
||||
dofile 'market'
|
||||
MarketProtocol.init()
|
||||
Market.init()
|
||||
|
||||
@onUnload: |
|
||||
MarketProtocol.terminate()
|
||||
Market.terminate()
|
||||
sandboxed: true
|
||||
scripts: [marketoffer.lua, marketprotocol.lua, market.lua]
|
||||
@onLoad: init()
|
||||
@onUnload: terminate()
|
||||
|
@@ -3,8 +3,8 @@ MarketWindow < MainWindow
|
||||
!text: tr('Market')
|
||||
size: 700 510
|
||||
|
||||
@onEnter: self:hide() self:unlock()
|
||||
@onEscape: self:hide() self:unlock()
|
||||
@onEnter: self:hide() self:unlock() Market.clearSelectedItem()
|
||||
@onEscape: self:hide() self:unlock() Market.clearSelectedItem()
|
||||
|
||||
// Main Panel Window
|
||||
|
||||
@@ -24,3 +24,11 @@ MarketWindow < MainWindow
|
||||
padding: 3
|
||||
border-width: 1
|
||||
border-color: #000000
|
||||
|
||||
Label
|
||||
id: balanceLabel
|
||||
!text: tr('Balance: 10000')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
@@ -46,15 +46,15 @@ MarketOffer.new = function(offerId, action, item, amount, price, playerName, sta
|
||||
return offer
|
||||
end
|
||||
|
||||
function MarketOffer:isEqual(offer)
|
||||
return self.offer[OFFER_TIMESTAMP] == offer[OFFER_TIMESTAMP] and self.offer[OFFER_COUNTER] == offer[OFFER_COUNTER]
|
||||
function MarketOffer:isEqual(id)
|
||||
return self.id[OFFER_TIMESTAMP] == id[OFFER_TIMESTAMP] and self.id[OFFER_COUNTER] == id[OFFER_COUNTER]
|
||||
end
|
||||
|
||||
function MarketOffer:isLessThan(offer)
|
||||
return self.offer[OFFER_TIMESTAMP] <= offer[OFFER_TIMESTAMP] and self.offer[OFFER_COUNTER] < offer[OFFER_COUNTER]
|
||||
function MarketOffer:isLessThan(id)
|
||||
return self.id[OFFER_TIMESTAMP] <= id[OFFER_TIMESTAMP] and self.id[OFFER_COUNTER] < id[OFFER_COUNTER]
|
||||
end
|
||||
|
||||
function MarketOffer:isNull(offer)
|
||||
function MarketOffer:isNull()
|
||||
return table.empty(self.id)
|
||||
end
|
||||
|
||||
|
@@ -44,8 +44,8 @@ local function parseMarketEnter(msg)
|
||||
local offers = msg:getU8()
|
||||
local depotItems = {}
|
||||
|
||||
local depotCount = (msg:getU16() - 1)
|
||||
for i = 0, depotCount do
|
||||
local depotCount = msg:getU16()
|
||||
for i = 1, depotCount do
|
||||
local itemId = msg:getU16() -- item id
|
||||
local itemCount = msg:getU16() -- item count
|
||||
|
||||
@@ -103,13 +103,13 @@ local function parseMarketBrowse(msg)
|
||||
local var = msg:getU16()
|
||||
local offers = {}
|
||||
|
||||
local buyOfferCount = (msg:getU32() - 1)
|
||||
for i = 0, buyOfferCount do
|
||||
local buyOfferCount = msg:getU32()
|
||||
for i = 1, buyOfferCount do
|
||||
table.insert(offers, readMarketOffer(msg, MarketAction.Buy, var))
|
||||
end
|
||||
|
||||
local sellOfferCount = (msg:getU32() - 1)
|
||||
for i = 0, sellOfferCount do
|
||||
local sellOfferCount = msg:getU32()
|
||||
for i = 1, sellOfferCount do
|
||||
table.insert(offers, readMarketOffer(msg, MarketAction.Sell, var))
|
||||
end
|
||||
|
||||
@@ -118,7 +118,7 @@ local function parseMarketBrowse(msg)
|
||||
end
|
||||
|
||||
-- public functions
|
||||
function MarketProtocol.init()
|
||||
function initProtocol()
|
||||
connect(g_game, { onGameStart = MarketProtocol.registerProtocol,
|
||||
onGameEnd = MarketProtocol.unregisterProtocol })
|
||||
|
||||
@@ -128,7 +128,7 @@ function MarketProtocol.init()
|
||||
end
|
||||
end
|
||||
|
||||
function MarketProtocol.terminate()
|
||||
function terminateProtocol()
|
||||
disconnect(g_game, { onGameStart = MarketProtocol.registerProtocol,
|
||||
onGameEnd = MarketProtocol.unregisterProtocol })
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
MarketButtonBox < UICheckBox
|
||||
font: verdana-11px-antialised
|
||||
font: verdana-11px-rounded
|
||||
color: #f55e5ebb
|
||||
size: 106 22
|
||||
text-offset: 0 0
|
||||
text-offset: 0 2
|
||||
text-align: center
|
||||
image-source: /images/tabbutton_rounded.png
|
||||
image-clip: 0 0 20 20
|
||||
|
@@ -1,8 +1,8 @@
|
||||
MarketComboBoxPopupMenuButton < UIButton
|
||||
height: 18
|
||||
font: verdana-11px-antialised
|
||||
font: verdana-11px-rounded
|
||||
text-align: left
|
||||
text-offset: 2 0
|
||||
text-offset: 2 2
|
||||
color: #aaaaaa
|
||||
background-color: alpha
|
||||
|
||||
@@ -28,10 +28,10 @@ MarketComboBoxPopupMenu < UIPopupMenu
|
||||
padding: 1
|
||||
|
||||
MarketComboBox < UIComboBox
|
||||
font: verdana-11px-antialised
|
||||
font: verdana-11px-rounded
|
||||
color: #aaaaaa
|
||||
size: 86 20
|
||||
text-offset: 3 0
|
||||
text-offset: 3 2
|
||||
text-align: left
|
||||
image-source: /images/combobox_rounded.png
|
||||
image-border: 1
|
||||
|
@@ -4,6 +4,8 @@ MarketTabBarPanel < Panel
|
||||
MarketTabBarButton < UIButton
|
||||
size: 20 25
|
||||
image-source: /images/tabbutton_square.png
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
image-clip: 0 0 20 20
|
||||
image-border: 2
|
||||
icon-color: white
|
||||
|
@@ -18,7 +18,7 @@ Panel
|
||||
|
||||
MarketTabBar
|
||||
id: rightTabBar
|
||||
width: 157
|
||||
width: 166
|
||||
height:25
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
@@ -48,7 +48,142 @@ Panel
|
||||
Label
|
||||
id: nameLabel
|
||||
!text: tr('No item selected.')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: prev.top
|
||||
anchors.left: prev.right
|
||||
anchors.right: parent.right
|
||||
margin-left: 5
|
||||
|
||||
Label
|
||||
id: createLabel
|
||||
!text: tr('Create New Offer')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: rightTabBar.top
|
||||
anchors.left: rightTabContent.left
|
||||
margin-top: 355
|
||||
margin-left: 6
|
||||
|
||||
Label
|
||||
id: offerTypeLabel
|
||||
!text: tr('Offer Type:')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: prev.bottom
|
||||
anchors.left: prev.left
|
||||
margin-top: 7
|
||||
|
||||
MarketComboBox
|
||||
id: offerTypeComboBox
|
||||
!text: tr('Please Select')
|
||||
anchors.top: prev.bottom
|
||||
anchors.left: createLabel.left
|
||||
margin-top: 3
|
||||
width: 105
|
||||
|
||||
$disabled:
|
||||
color: #aaaaaa44
|
||||
|
||||
Label
|
||||
id: totalPriceLabel
|
||||
!text: tr('Total Price:')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: offerTypeLabel.top
|
||||
anchors.left: prev.right
|
||||
margin-left: 7
|
||||
|
||||
SpinBox
|
||||
id: totalPriceEdit
|
||||
anchors.top: prev.bottom
|
||||
anchors.left: prev.left
|
||||
margin-top: 3
|
||||
width: 75
|
||||
minimum: 1
|
||||
maximum: 99999999
|
||||
|
||||
$disabled:
|
||||
color: #aaaaaa44
|
||||
|
||||
Label
|
||||
id: piecePriceLabel
|
||||
!text: tr('Piece Price:')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: offerTypeLabel.top
|
||||
anchors.left: prev.right
|
||||
margin-left: 7
|
||||
|
||||
SpinBox
|
||||
id: piecePriceEdit
|
||||
anchors.top: prev.bottom
|
||||
anchors.left: prev.left
|
||||
margin-top: 3
|
||||
width: 75
|
||||
minimum: 1
|
||||
maximum: 99999999
|
||||
|
||||
$disabled:
|
||||
color: #aaaaaa44
|
||||
|
||||
Label
|
||||
id: amountLabel
|
||||
!text: tr('Amount:')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: offerTypeLabel.top
|
||||
anchors.left: prev.right
|
||||
margin-left: 32
|
||||
|
||||
PreviousButton
|
||||
id: prevAmountButton
|
||||
anchors.verticalCenter: piecePriceEdit.verticalCenter
|
||||
anchors.left: piecePriceEdit.right
|
||||
margin-left: 7
|
||||
@onClick: Market.decrementAmount()
|
||||
|
||||
SpinBox
|
||||
id: amountEdit
|
||||
anchors.verticalCenter: prev.verticalCenter
|
||||
anchors.left: prev.right
|
||||
margin-left: 3
|
||||
width: 55
|
||||
minimum: 1
|
||||
maximum: 999999
|
||||
|
||||
NextButton
|
||||
id: nextAmountButton
|
||||
anchors.verticalCenter: piecePriceEdit.verticalCenter
|
||||
anchors.left: prev.right
|
||||
margin-left: 3
|
||||
@onClick: Market.incrementAmount()
|
||||
|
||||
Button
|
||||
id: createOfferButton
|
||||
!text: tr('Create Offer')
|
||||
anchors.verticalCenter: prev.verticalCenter
|
||||
anchors.left: prev.right
|
||||
margin-left: 7
|
||||
width: 90
|
||||
//@onClick: g_game.closeNpcTrade()
|
||||
|
||||
CheckBox
|
||||
id: anonymousCheckBox
|
||||
!text: tr('Anonymous')
|
||||
anchors.left: prev.left
|
||||
anchors.bottom: prev.top
|
||||
margin-bottom: 6
|
||||
@onSetup: self:setChecked(false)
|
||||
height: 16
|
||||
width: 70
|
||||
|
||||
Label
|
||||
id: feeLabel
|
||||
!text: tr('')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: createOfferButton.bottom
|
||||
anchors.right: parent.right
|
||||
margin-right: 8
|
||||
margin-top: 3
|
@@ -1,14 +1,15 @@
|
||||
MarketItemBox < UICheckBox
|
||||
id: itemBox
|
||||
border-width: 1
|
||||
border-color: #000000
|
||||
color: #aaaaaa
|
||||
text-align: center
|
||||
text-offset: 0 20
|
||||
@onCheckChange: Market.onItemBoxChecked(self)
|
||||
|
||||
Item
|
||||
id: item
|
||||
phantom: true
|
||||
text-offset: 0 13
|
||||
text-align: right
|
||||
anchors.top: parent.top
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
margin: 1
|
||||
|
@@ -25,9 +25,9 @@ Panel
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
margin-top: 55
|
||||
margin-top: 63
|
||||
margin-left: 6
|
||||
margin-bottom: 75
|
||||
margin-bottom: 85
|
||||
margin-right: 6
|
||||
padding: 1
|
||||
focusable: false
|
||||
|
@@ -49,6 +49,8 @@ Panel
|
||||
|
||||
Label
|
||||
!text: tr('Sell Offers')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
margin-top: 44
|
||||
@@ -59,7 +61,7 @@ Panel
|
||||
anchors.top: prev.bottom
|
||||
anchors.left: prev.left
|
||||
anchors.right: parent.right
|
||||
height: 120
|
||||
height: 115
|
||||
margin-top: 5
|
||||
margin-bottom: 5
|
||||
margin-right: 6
|
||||
@@ -101,6 +103,8 @@ Panel
|
||||
|
||||
Label
|
||||
!text: tr('Buy Offers')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: prev.top
|
||||
anchors.left: parent.left
|
||||
margin-top: 9
|
||||
@@ -114,7 +118,7 @@ Panel
|
||||
margin-top: 5
|
||||
margin-bottom: 5
|
||||
margin-right: 6
|
||||
height: 120
|
||||
height: 115
|
||||
padding: 1
|
||||
focusable: false
|
||||
background-color: #222833
|
||||
|
@@ -20,6 +20,8 @@ Panel
|
||||
|
||||
Label
|
||||
!text: tr('Buy Offers')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
@@ -62,6 +64,8 @@ Panel
|
||||
|
||||
Label
|
||||
!text: tr('Sell Offers')
|
||||
font: verdana-11px-rounded
|
||||
text-offset: 0 2
|
||||
anchors.top: buyStatsTable.bottom
|
||||
anchors.left: parent.left
|
||||
margin-top: 9
|
||||
@@ -73,7 +77,7 @@ Panel
|
||||
anchors.left: buyStatsTable.left
|
||||
anchors.right: buyStatsTable.right
|
||||
margin-top: 6
|
||||
height: 122
|
||||
height: 112
|
||||
padding: 1
|
||||
focusable: false
|
||||
background-color: #222833
|
||||
|
Reference in New Issue
Block a user