marketplace.swf
The Trove player-driven auction marketplace, allowing players to search and purchase listings from other players (Buy tab) and create or manage their own sell listings (Sell tab). Uses Flux as the primary trading currency. Appears when the player opens the Marketplace from the in-game UI.
Document/main class: Marketplace (extends _kiwi.Core.UIComponent)
SWF-specific classes: 7 game-logic + 8 MarketPlace_fla timeline symbols + ~19 button/widget subclasses + ~24 asset wrappers
Main class: Marketplace
Marketplace is the document class and central controller. It manages two operating modes — MODE_BUY (0) and MODE_SELL (1) — surfaced as a tabBuy/tabSell TabHeader pair. The main content area is tabContentMC (a tabContentMC_10 symbol) which jumps to frames 1/2 (PC Buy/Sell) or 3/4 (console Buy/Sell). The buy-side grid is buyListingsView:MarketView; the sell-side grid is sellListingsView:MarketView.
The constructor wires mouse listeners on both tabs and both MarketView instances for MarketEvent.BUTTON_CLICK, sets the initial instructions text, and links footer pagination buttons. configUI() registers DRAGHOST.DROP through SlotDragDropHelper, 38 ExternalInterface callbacks (plus 26 console-only ones) and calls setupTranslation().
Public methods / properties
get lastPageIndex() : int— computes the zero-indexed page offset of the last page based onnumListings(buy) ormaxPlayerListings(sell) andITEMS_PER_PAGE(12).
Private / internal methods (selected)
configUI() : void— registers all ExternalInterface callbacks; seeds dummy data in standalone mode. Also auto-sizes several sell-tab text fields usingKiwiTextUtil.resizeFont.setBuyTab(e:MouseEvent = null) : void— saves current sell-form state (texture, quantity, price, comparison text) to local fields, navigatestabContentMCto frame 1 or 3, showsbuyListingsView, hidessellListingsView, setsnewDrawMode = MODE_BUY, schedulesdrawUIon nextRENDER.setSellTab(e:MouseEvent = null) : void— saves filters, navigatestabContentMCto frame 2 or 4, showssellListingsView, callsExternalInterface.call("GetSellListingsRange", 0, maxPlayerListings-1), schedulesdrawUIon nextRENDER.setPlayerListingsSize(n:int) : void— setsmaxPlayerListings(the number of sell slotsGetSellListingsRangeasks for) and switches to the Buy tab.drawUI(e:Event) : void— one-shotRENDERhandler; on the first pass after a tab switch it reportsOnModeChanged(mode). OnMODE_BUY: populatesitemFilterMC:KiwiComboBoxfromitemData, wires search button and name filter. OnMODE_SELL: wiressellPrice,sellPricePerUnit,btnCreateListing, item image click, quick-search button, and restores comparison price texts; callsbuttonLegendGotoAndStop("BuySell").addListing(id:String, name, quantity:int, currencyIndex:int, price:int, texture, info, categories) : void— creates aMarketplaceItem(STATE_CAN_BUY, ...)and adds it tobuyListingsView. Item names arrive as translation keys and are resolved by the text field.addPlayerListing(slot:int, name, quantity, currencyIndex, price, texture, locked, claimable, expired, resell, categories, secondsLeft:Number) : void— creates aMarketplaceItemfor one sell slot and adds it tosellListingsView. The state is resolved in this order, each line overriding the last:quantity > 0→STATE_CAN_CANCELelseSTATE_EMPTY;expired→STATE_CAN_CLAIM_EXPIRED;claimable→STATE_CAN_CLAIM;locked→STATE_LOCKED;claimable && resell→STATE_CAN_CLAIM_RESELL;expired && resell→STATE_CAN_CLAIM_EXPIRED_RESELL. Every slot the player has not bought arrives as its own locked listing (owned slots are numbered first); only the first locked tile gets the upsell layout. ReachingmaxPlayerListingstiles resets the page.playerListingPurchased(slot, name, quantity, currencyIndex, price, texture, locked, claimable, expired, resell, categories) : void— rebuilds one sell slot in place (same state rules) while the sell tab is showing.purchaseListingSucceeded(id) : void→ callsbuyListingsView.updateItemAsSold(id)(sold badge).purchaseListingFailed(id, flag:Boolean) : void→ callsbuyListingsView.updateItemAsSold(id, flag): sold badge iftrue, re-enabled button iffalse.purchaseListingCancelled(id) : void→buyListingsView.updateItemAsSold(id, false).cancelListingSucceeded(slot),claimExpiredListingSucceeded(slot)— empty the slot.claimListingSucceeded(slot, remaining)— updates the slot's price toremainingwhen above 0, otherwise empties it.createListingSucceeded(slot, name, quantity, currencyIndex, price, texture, categories, secondsLeft)— puts the new listing in the slot and clears the sell form. The...Failed(slot)callbacks re-enable the slot's button;createListingFailed()re-enables Create Listing.searchSucceeded(count:int) : void— storescountasnumListings(the total found), shows$Marketplace_NoResults("Sorry, no results found.") when it is 0, and resets to the first page, which requestsGetListingsRange.searchFailed() : void— clearslistingsMessageTextand re-enables the search button.addCurrency(name, thumbnail, index) : void— creates aCurrencyDataatMarketplace.currencies[index]and adds it to the currency filter;addDeprecatedCurrencyregisters the data without the filter entry. Currency names are translation keys, translated at each use.setCurrencyAmount(index, amount) : void— updatesMarketplace.currencies[index].quantity, refreshes the footer balance, and callsresetActionButtonon every buy tile on the page, which re-checks each price against its currency balance.getListingFee(fee:int) : void— populatestabContentMC.taxTextFieldwith$Marketplace_ListingFeeand the fee incurrencies[0](Flux).setMarketplaceComparisonText(allInfo, low, mean, high) : void— updates the four sell-tab comparison text fields. The engine sends display text; the figures are per-unit averages and can carry a decimal (e.g. 39.6 Flux for Glim).setTaxInfo(minFee, weighedMin, weighedMax, maxFee, isEvent:Boolean, claimTax:String) : void— stores the fee range and claim tax for the listing-rates tooltip, showseventStickerwhenisEvent, and on the sell tab re-requests the fee for the current price.setListedItem(slotId:int, quantity:int, texture:String)/clearListedItem(...)— stage or clear the item in the sell form;slotIdis the inventory slot thatOnCreateListingandQuickSearchlater name.setSellSlotPrice(twcPrice, twpPrice, canAfford)— prices for the locked-slot upsell.setSellSlotUnlocked(slot, canAfford)— empties the bought slot and puts the upsell on the next one.setItemCategory(index),setCollectedState(int),setPriceSorting(int),setCurrency(index),setSellCurrency(index),setSearchString(text)— the engine restoring the filters it remembers between openings;setSearchStringis also how a quick search fills the name box. Sort by unit price is remembered for the session only.onButtonClicked(e:MarketEvent) : void— the central action dispatcher; branches one.state:STATE_CAN_BUY→ExternalInterface.call("OnPurchaseListing", listingId, currencyIndex, from, to), wherefrom/tois the page range shown (listingIndex,listingIndex + resultsOnPage).STATE_CAN_CANCEL→ExternalInterface.call("OnCancelListing", slot).STATE_CAN_CLAIM/STATE_CAN_CLAIM_RESELL→ExternalInterface.call("OnClaimListing", slot, resell).STATE_CAN_CLAIM_EXPIRED/_RESELL→ExternalInterface.call("OnClaimExpiredListing", slot, resell).STATE_LOCKED→ExternalInterface.call("OnPurchaseSellSlot", currencyIndex)— 0 frombtnCredits, 1 frombtnCubits.
onListClicked→ with nothing staged callsOnRequestInventoryOpen; otherwise validates quantity and price and callsExternalInterface.call("OnCreateListing", emptySellSlot, inventorySlotId, quantity, 0, price, priceWithDelimiters).onSearchClicked→ shows$Marketplace_Searching, disables the search button, sends the filters withsaveFilters()and then callsExternalInterface.call("OnSearch")with no arguments: the search runs on the filter state the engine just received. Triggered by the button or by Enter in the name box, never per keystroke.onItemDropped(...)→DRAGHOST.DROPcallback fromSlotDragDropHelper; forwards its third to fifth arguments toExternalInterface.call("OnDropIntoWindow", ...). The item is staged whensetListedItemarrives.onListImageClicked→OnRequestInventoryOpen()when nothing is staged. A right-click on the listing image callsOnRemoveMarketplaceSaleListing()to un-stage the item.quickSearchClick/quickSearchcallback →ExternalInterface.call("QuickSearch", slotId)with the staged inventory slot.updateTaxDisplay(price)→ExternalInterface.call("requestListingPrice", price)with the total price whenever it changes; the fee is shown bygetListingFee.saveFilters()→ on the buy tabExternalInterface.call("OnSaveFilters", categoryIndex, hideCollected, name, 0, sortByPrice); on the sell tabOnSaveSellFilters(0).onListingInfoRollOver/Out→TOOLTIP.SHOWwith$Marketplace_ListingRatesTitleand$Marketplace_ListingRatesDescription(fee range, currency, claim tax as the marketplace's cut) /TOOLTIP.HIDE.buttonLegendGotoAndStop(frame:String) : void— same deferred-frame pattern asStoreBase; drivesbuttonLegend:MovieClipto the named frame. Frames:BuySell,BuyTilePurchasable,SellTilePurchasable,SellTileCancel,SellTileClaim,Resell,TileNonPurchasable.- Console-only focus methods (
setFocusBuyItemType,setFocusBuySearch, etc.) — move platform focus to the appropriate form field or control viaFocusManager. frame1() : */frame11() : *— timeline stop scripts.
Key fields
| Field | Type | Role |
|---|---|---|
currencies |
static Vector.<CurrencyData> |
Global currency registry, indexed by integer ID. Index 0 = Flux. |
buyListingsView |
MarketView |
Scrollable grid of MarketplaceItem tiles for buy listings. |
sellListingsView |
MarketView |
Scrollable grid of player's own sell listings. |
tabContentMC |
MovieClip (tabContentMC_10) |
Main form area; frames 1/3 = buy (PC/console), 2/4 = sell (PC/console). |
footerContentMC |
MovieClip (footerContentMC_2) |
Footer with page navigation buttons and currency balance display. |
buttonLegend |
MovieClip (ButtonLegend_68) |
Console button-legend strip; 7 named frames. |
itemData |
DataProvider |
Category filter combo box data (item types). |
currencyData |
DataProvider |
Currency filter combo box data. |
collectData |
DataProvider |
"Collected/Uncollected" filter state data. |
maxPlayerListings |
int |
Max sell slots, default 12; set by setPlayerListingsSize. |
numListings |
int |
Total results of the last search (searchSucceeded), used for pagination. |
slotId |
int |
Inventory slot of the item staged for sale (setListedItem); -1 when nothing is staged. |
listingTexture |
String |
Texture name of the staged item, saved when leaving the sell tab. |
listingPrice, listingQuantity, listingCurrency |
int |
Sell-form state preserved across tab switches. |
listingComparisonInfo/Low/Mean/High |
String |
Comparison price strings, preserved across tab switches. |
newDrawMode, newDrawModeSetup |
int, Boolean |
Deferred mode-switch state for drawUI. |
showingUpsell |
Boolean |
Whether the upsell (purchase-credits) tile is showing. |
m_listingTooltipShowing |
Boolean |
Whether the sell-tab listing info tooltip is visible. |
pendingSelection |
int |
Console: item index to select after the view populates. |
Frame scripts / timeline
Stage 1033×676, 24 fps, 20 frames; root labels PC (frame 1) and Console (frame 11). Frames 1 and 11 both call stop(); frame 11 is the console layout and also sends tabContentMC, tabBuy, tabSell and footerContentMC to their "Console" label.
Runtime dependencies & integration
- ExternalInterface callbacks registered (all modes):
- Setup:
setPlayerListingsSize,setSellSlotPrice,setSellSlotUnlocked,addItemCategory,addCollectedState,addCurrency,addDeprecatedCurrency,setCurrencyAmount,setItemCategory,setCollectedState,setPriceSorting,setCurrency,setSellCurrency,setSearchString,setListedItem,clearListedItem - Data:
addListing,addPlayerListing,searchSucceeded,searchFailed - Transaction results:
purchaseListingSucceeded/Failed/Cancelled,cancelListingSucceeded/Failed,claimListingSucceeded/Failed,claimExpiredListingSucceeded/Failed,createListingSucceeded/Failed - UI:
setBuyTab,setSellTab,setMarketplaceComparisonText,setTaxInfo,getListingFee,playerListingPurchased,quickSearch
- Setup:
- Console-only callbacks:
setFocusBuyItemType,setFocusBuyHideCollected,setFocusBuySortByPrice,setFocusBuyItemName,setFocusBuySearch,setFocusSellInventory,setFocusSellPriceTotal,setFocusSellPriceUnit,setFocusSellCreate,setFocusSellListingRates,setFocusQuickSearch,onItemFilterClicked,onToggleBuyHideCollection,onToggleBuySortByPrice,onSearchClicked,onListImageClicked,onListClicked,onItemSelected,onActionButtonClicked,onActionButton2Clicked,onInfoButtonToggled,onPageFirstClicked,onPageLeftClicked,onPageRightClicked,onPageLastClicked,onListingRatesClicked - ExternalInterface outbound calls:
"OnSearch"()— no arguments; preceded byOnSaveFilters, whose values the search uses."GetListingsRange"(first, last),"GetSellListingsRange"(0, maxPlayerListings - 1)— inclusive index ranges (resultsOnPageis one less than the number of tiles)."OnPurchaseListing"(listingId, currencyIndex, first, last)—first/lastare the page range on screen, not the item."OnCancelListing"(slot)"OnClaimListing"(slot, resell),"OnClaimExpiredListing"(slot, resell)"OnPurchaseSellSlot"(currencyIndex)— locked slot upsell; 0 = credits, 1 = cubits."OnCreateListing"(emptySellSlot, inventorySlotId, quantity, 0, price, priceWithDelimiters)"OnDropIntoWindow"(...)— item drag-drop, forwarding three of theDRAGHOST.DROParguments."OnRemoveMarketplaceSaleListing"()— right-click on the staged item."OnRequestInventoryOpen"()— listing image or Create Listing clicked with nothing staged."QuickSearch"(inventorySlotId)"requestListingPrice"(totalPrice)"OnSaveFilters"(categoryIndex, hideCollected, name, 0, sortByPrice)/"OnSaveSellFilters"(0)"OnModeChanged"(mode)"TOOLTIP.SHOW"(x, y, title, body)/"TOOLTIP.HIDE"()
- Translate keys used (selected):
$Marketplace_Instructions,$Marketplace_SearchButton,$Marketplace_CreateListingsButton,$Marketplace_ClaimButton,$Marketplace_CancelListingButton,$Marketplace_NoResults,$Marketplace_Searching,$Marketplace_ListingFee,$Marketplace_ListingRatesTitle,$Marketplace_ListingRatesDescription,$Marketplace_ComparisonDescriptionEmpty,$Marketplace_UnitPricePrefix,$Marketplace_UnitPriceSuffix,$Marketplace_UnitPriceLessThanOne,$Marketplace_ExpiresIn,$DigitGroupDelimiter. SlotDragDropHelper— registersDRAGHOST.DROP; items can be dragged from inventory into the sell listing image slot, triggeringonItemDropped.- Throttling: the game throttles bursts of marketplace requests. A search sent while throttled comes back with no results, and extra claims fired in one burst come back failed.
Class: MarketEvent
Extends flash.events.Event. Custom bubbling event (BUTTON_CLICK = "Click") dispatched by MarketplaceItem when any action button is clicked. Carries slotId:String, state:int, currencyIndex:int, and resell:Boolean. Marketplace.onButtonClicked receives this and calls the appropriate ExternalInterface function.
Class: MarketView
Extends _kiwi.Controls.ScrollableTileView. [Embed(source="/_assets/assets.swf", symbol="symbol127")]. A fixed-layout (no vertical scrollbar, no horizontal scroll-wheel) tile grid for marketplace listings. Spacing: HORIZ_MARGIN=22, VERT_MARGIN=5, WINDOW_MARGIN=0. Rows are NOT centred.
Methods:
get count() : int— returnsitemList.length.getEmptyListingId() : int— finds the firstSTATE_EMPTYslot index (for sell-slot management); returns-1if none.updateItem(index, newItem) : void— replaces the item atindexinitemListin-place, preserving x/y position andselectedstate; triggers a data-invalidation pass.updateItemAsSold(id, sold = true) : void— finds the item byitemId; ifsold=true, callsitem.updateAsSold()(shows sold badge, hides price/button); ifsold=false, callsitem.resetActionButton()(re-enables the button after a failed transaction).updateItemPrice(index, price) : void— delegates toMarketplaceItem.updatePrice.resetActionButton(index) : void— re-enables the action button on the item atindex.selectItem(index) : MarketplaceItem— setsselected=trueon item atindex,falseon all others; returns the selected item.onActionButtonClicked(index) : void— console-driven; programmatically dispatches aCLICKon the item'sactionButton(orbtnCreditsfor locked items).onActionButton2Clicked(index) : void— console-driven; dispatchesCLICKonbtnCubits(locked) orresellButton(claim+resell states).onInfoButtonToggled(index, visible) : void— console-driven; callsitem.onInfoRollOveroronInfoRollOut.
Class: MarketplaceItem
Extends _kiwi.Core.UIComponent. [Embed(source="/_assets/assets.swf", symbol="symbol68")]. Represents a single marketplace listing tile.
State constants:
| Constant | Value | Meaning |
|---|---|---|
STATE_EMPTY |
0 | Empty sell slot placeholder |
STATE_CAN_BUY |
1 | A listing available for purchase |
STATE_CAN_CANCEL |
2 | Player's active listing (can cancel) |
STATE_CAN_CLAIM |
3 | Player's sold listing (funds ready to claim) |
STATE_CAN_CLAIM_EXPIRED |
4 | Player's expired listing (claiming returns the item) |
STATE_CAN_CLAIM_RESELL |
5 | Sold, can also relist |
STATE_SOLD |
5 | Duplicate of STATE_CAN_CLAIM_RESELL — constant collision; referenced nowhere |
STATE_LOCKED |
6 | Locked slot (requires unlock via credits/cubits) |
STATE_CAN_CLAIM_EXPIRED_RESELL |
7 | Expired listing, can claim the item back or relist |
Constructor: Takes up to 11 parameters (state, itemId, name, texture, quantity, currencyIndex, price, info, showUnitCost, categories, timerSeconds). Starts visible=false, becomes visible after 2 ENTER_FRAME ticks (via onRendered) to allow layout to settle. Routes to timeline frame 1 (buy / active listing), 2 (claimable; ownedMC frame 2 sold or 3 expired), 3 (empty) or 5 (locked, ownedMC frame 4); showUpsell uses frame 6. btnInfo is shown only for buy and active listings that carry info text or a timer; hovering it shows $Marketplace_ExpiresIn with the countdown, or the info text.
Key fields: itemId:String, state:int, priceValue:Number, currencyIndex:int, actionButton:LabelButton, resellButton:BaseButton, listingIcon:ArtClip, currencyIcon:ArtClip, ownedMC:MovieClip, infoPopup:MovieClip, selectedMC:MovieClip, highlightFrame:MovieClip, pulseAnimTimer:Timer (5 s interval, drives pulse animation on infoPopup.timer), btnCredits:LabelButton, btnCubits:LabelButton (for locked/upsell state).
Key methods:
set selected(bool) : *— shows/hidesselectedMC(PC) andhighlightFrame(console).onActionButtonClicked(e)— dispatchesMarketEvent.BUTTON_CLICKwithresell=false.onResellButtonClicked(e)— dispatchesMarketEvent.BUTTON_CLICKwithresell=true.resetActionButton()— re-enablesactionButton(for STATE_CAN_BUY: only ifpriceValue <= currencies[currencyIndex].quantity).updateAsSold()— hidesactionButton,itemPrice,currencyIcon,itemUnitCost; showsownedMCat frame 2 (sold badge).updatePrice(price)— updatesitemPrice.text.showUpsell(twcPrice, twpPrice, canAfford)— switches to timeline frame 6 (upsell layout) and wiresbtnCredits/btnCubits; a press dispatches the event with currency index 0 (credits) or 1 (cubits). The credit and cubit cube art beside those buttons is an unnamed shape (character 67, filled with bitmaps 65 and 66) placed on that frame, so it appears in no script.static formatNumber(n:Number) : String— inserts$DigitGroupDelimiter-localised thousands separators.onInfoRollOver/Out— togglesinfoPopup.visible; shows countdown timer or info text.
Unit cost display logic: If selling quantity > 1 and showUnitCost=true, computes price-per-unit with smart decimal rounding (0 or 1 decimal place), using $Marketplace_UnitPriceLessThanOne if the unit cost is below 1.
Class: CurrencyData
Simple value object. Fields: name:String, quantity:int, thumbnail:String. Populated by Marketplace.addCurrency and stored in the static Marketplace.currencies vector.
Class: image
Extends _kiwi.Controls.ArtClip. Thin subclass used as the sell-tab listing image slot (tabContentMC.listingImage). No additional logic beyond the ArtClip base class.
MarketPlace_fla timeline symbol classes (8 classes)
footerContentMC_2— footer bar containingbtnPageFirst,btnPageLeft,btnPageRight,btnPageLast(pagination), plus a currency balance display area.tabContentMC_10— the main content panel. Four frames (PC Buy / PC Sell / Console Buy / Console Sell). Contains all form fields:itemFilterMC:KiwiComboBox,itemName:TextField,itemNameClear:BaseButton,btnSearchListings:LabelButton,sellPrice/sellPricePerUnit:TextField,sellQuantity:TextField,btnCreateListing:LabelButton,listingImage(usesimageArtClip),quickSearch:MovieClip,taxTextField,eventSticker:MovieClip,marketplaceComparisonAllInfo/Low/Mean/High:TextField,listingInfoBtn(hover shows the listing rates throughTOOLTIP.SHOW). Frame labels:PCon frame 1,Consoleon frame 3.ButtonLegend_68— console button-legend strip. 7 labelled frames:BuySell,BuyTilePurchasable,SellTilePurchasable,SellTileCancel,SellTileClaim,Resell,TileNonPurchasable. Each frame displays appropriate controller button icons and action labels.marketListingImage_40— item image slot with a highlight ring; two frames (PC / Console layout).OwnedProduct_76— badge MovieClip used asownedMC; frame 1$Marketplace_EmptyListingSlot, frame 2$Marketplace_SoldListing("Sold!"), frame 3$Marketplace_ExpiredListing("Expired!"), frame 4 the locked-slot art.currencyIcon_79— two-frame currency icon labelledcreditsandpoints, used by thePurchasePanelsymbol. Listing tiles show their currency through anArtClipwith the currency's thumbnail instead.QuickSearch_42— quick-search button clip; a singlestop()frame.timer_pulse_anim_71— pulsing animation clip used withininfoPopup.timerto draw attention to expiring listings.
Asset wrappers (~24 classes — not detailed individually)
Approximately 7 Xbox One controller button PNG bitmaps (btn_XBOne_A, btn_XBOne_X, btn_XBOne_Y, btn_XBOne_LB, btn_XBOne_RB, btn_XBOne_LT, btn_XBOne_RT), 1 empty SelectedMC MovieClip symbol, and ~16 UI component skin stubs (CellRenderer_*Skin, ComboBox_*Skin, ScrollArrowDown/Up_*Skin, ScrollThumb_*Skin, ScrollTrack_skin, List_skin, TextInput_disabledSkin, TextInput_upSkin, focusRectSkin).
Notable logic
- Currency-aware affordability gating:
setCurrencyAmountnot only updates the static currency quantity but also immediately callsresetActionButtonon every buy tile on the page, which re-enables or disables each buy button by comparing its price with its currency balance — keeping the buy button enabled state in sync without requiring a full search refresh. - STATE_SOLD / STATE_CAN_CLAIM_RESELL collision: Both constants share the integer value
5.STATE_SOLDis never referenced — the actual sold state for buy-side items usesupdateAsSold()driven bypurchaseListingSucceededrather than a constant. - Sell-form state preservation: When switching from Sell to Buy,
setBuyTabstoreslistingTexture,listingQuantity,listingPrice, and all four comparison price strings in instance fields, then restores them when the Sell tab is re-entered — so the user's in-progress listing is not lost. - Drag-and-drop listing creation:
SlotDragDropHelper.registerDropCallbackregistersDRAGHOST.DROP, so players can drag an item from their inventory directly into the sell listing image slot. The drop is forwarded asOnDropIntoWindow, and the item is staged whensetListedItem(slotId, quantity, texture)arrives; a right-click on the image (OnRemoveMarketplaceSaleListing) puts it back. - Two-frame visibility defer:
MarketplaceItemstarts invisible and setsvisible=trueonly after 2ENTER_FRAMEcycles (counting viaframeCounter), ensuring the Flash layout engine has fully positioned the component before it renders. - Quick Search: The
quickSearchbutton on the sell tab is only shown while an item is staged. Clicking it or calling thequickSearchExternalInterface callback callsExternalInterface.call("QuickSearch", slotId)with the staged item's inventory slot; the engine puts the item's name in the buy tab's search box throughsetSearchString.