# Advanced Usage

For more complex projects, the Metaverse SDK offers additional features and customization options to help developers achieve their desired outcomes. Some advanced usage scenarios include:

First you need to Import the SDK into your project.

```javascript
import {
  DgWorldMarketplace,
  MarketplaceOptions,
} from "dg-world-marketplace-sdk";
```

Then while initializing the DgWorldMarketplace Class you have all of the following parameters:

```
const opts: MarketplaceOptions = {
 previewEnv: 'prod' as any,
    network: 'MATIC' as any,
    engine,
    zoneId: YOUR_ZONE_ID,
      debug: true,
        lang: {
         noFundsTitle: "No Funds",
         noFundsDesc: "Sorry, you do not have enough ICE",
         noFundsButton: "No Funds",
         approveIceTitle: "Approve ICE",
          approveIceDesc:
          "Authorize the Store contract to operate ICE on your behalf",
           approveIceWait: "Please wait. The transaction is being processed",
           approveIceRejected:"You need to authorize the Store contract to be able to buy this item",
           buyFor: "Buy for:",
           authorize: "Authorize",
           reject: "Reject",
           transactionProccessing: "Please wait. The transaction is being processed",
           purchaseSucceed:"Purchased succeed! You will need to refresh the page to see the wearable in your backpack.", 
           purchaseFailed: "Purchased failed. Please try again.",
            wait: "Wait",
            buy: "Buy",
            openPaymentLink: "Open Payment Link",
            nftNotAvailable: "NFT not available",
       },
};
const dgMarketplace = new DgWorldMarketplace(opts);
```

Keep in mind that the Decentraland SDK only supports one canvas. Therefore, if you want to use your own canvas instead of the one generated by the Marketplace SDK, you need to pass that canvas as a parameter when instantiating the Marketplace SDK.

```javascript
const opts: MarketplaceOptions = {
// other options
  canvas: yourCanvasInstance
  }
```

After instantiating the class, we can listen to the different events that we want.

<pre class="language-javascript"><code class="lang-javascript">// emited when the sdk is ready to connect to the blockchain
dgMarketplace.on('web3Ready', () => {
  log('web3Ready')
})

// emited after the sdk connect to the websocket
dgMarketplace.on('websocketsReady', () => {
  log('websocketsReady')
})

// emited after the sdk fetch the variables
dgMarketplace.on('variablesReady', () => {
  log('variablesReady')
  log(dgMarketplace.getVariables())
})

// emited last, when all the sdk is ready
dgMarketplace.on('ready', () => {
  log('ready')
})

// emited when any error happens, notice that err could be null or undefined, depending on the error
dgMarketplace.on('error', (err) => {
  log(err)
})
<strong>
</strong></code></pre>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dg-market.gitbook.io/dg-live/developer-resources/metaverse-sdk/advanced-usage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
