Auctions
Read more about the Auctions system in Hiro here
.
Creating a New Auction
#
To create a new auction, use the AuctionsCreate function.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroAuctionCreateRequest Request;
Request.TemplateId = TEXT("template_auction_001");
Request.ConditionId = TEXT("condition_001");
Request.InstanceIds.Add(TEXT("item_instance_001", 1));
FHiroOnAuctionsCreate OnAuctionsCreate;
OnAuctionsCreate.AddDynamic(this, &AMyActor::OnAuctionsCreate);
FOnError OnError;
HiroClient->AuctionsCreate(Session, Request, OnAuctionsCreate, OnError);
void AMyActor::OnAuctionsCreate(const FHiroAuctionCreateRequest& AuctionCreateRequest)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AuctionCreateRequest.ToJson());
}
|
Directing an auction at specific players
#
Set AllowedUserIds on the FHiroAuctionCreateRequest to restrict who can see and bid on the auction. This turns a public listing into a restricted auction aimed at specific players, such as a guild sale, a friends-only listing, or a one-to-one trade.
1
2
3
4
5
6
7
8
9
10
11
| FHiroAuctionCreateRequest Request;
Request.TemplateId = TEXT("template_auction_001");
Request.ConditionId = TEXT("condition_001");
Request.InstanceIds.Add(TEXT("item_instance_001", 1));
Request.AllowedUserIds.Add(TEXT("friend_user_id_001"));
FHiroOnAuctionsCreate OnAuctionsCreate;
OnAuctionsCreate.AddDynamic(this, &AMyActor::OnAuctionsCreate);
FOnError OnError;
HiroClient->AuctionsCreate(Session, Request, OnAuctionsCreate, OnError);
|
The resulting FHiroAuction includes the AllowedUserIds list and an ImmediateBuyout flag, indicating whether the auction completes as soon as a bid meets the buyout price.
Placing a Bid on an Auction
#
You can place a bid on an auction using the BidAsync function.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FHiroAuctionBidRequest Request;
Request.Id = TEXT("auction_instance_123");
Request.Version = TEXT("1.0");
Request.Bid.Currencies.Add(TEXT("gold", 1000));
FHiroOnAuctionsBid OnAuctionsBid;
OnAuctionsBid.AddDynamic(this, &AMyActor::OnAuctionsBid);
FOnError OnError;
HiroClient->AuctionsBid(Session, Request, OnAuctionsBid, OnError);
void AMyActor::OnAuctionsBid(const FHiroAuctionBidRequest& AuctionsBidRequest)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AuctionsBidRequest.ToJson());
}
|
Bidding with inventory items
#
A bid doesn’t have to be currency only. Set InstanceIds on Request.Bid (an FHiroAuctionBidAmount) to escrow specific inventory item instances as part of the bid. You can combine InstanceIds with Currencies, or bid with items alone since Currencies is optional.
1
2
3
4
5
6
7
8
9
10
| FHiroAuctionBidRequest Request;
Request.Id = TEXT("auction_instance_123");
Request.Version = TEXT("1.0");
Request.Bid.InstanceIds.Add(TEXT("item_instance_042"));
FHiroOnAuctionsBid OnAuctionsBid;
OnAuctionsBid.AddDynamic(this, &AMyActor::OnAuctionsBid);
FOnError OnError;
HiroClient->AuctionsBid(Session, Request, OnAuctionsBid, OnError);
|
Once the server resolves the bid, FHiroAuctionBidAmount.Items is populated with the resolved FHiroInventoryItem entries for the escrowed instances.
Canceling an Auction
#
If an auction needs to be canceled before it ends, the CancelAsync method can be used.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroAuctionsCancelRequest Request;
Request.Id = TEXT("auction_instance_123");
FHiroOnAuctionsCancel OnAuctionsCancel;
OnAuctionsCancel.AddDynamic(this, &AMyActor::OnAuctionsCancel);
FOnError OnError;
HiroClient->AuctionsCancel(Session, Request, OnAuctionsCancel, OnError);
void AMyActor::OnAuctionsCancel(const AuctionsCancelRequest& AuctionsCancelRequest)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AuctionCreateRequest.ToJson());
}
|
Claiming a Winning Bid
#
Once an auction has ended, the winning bidder can claim their item using ClaimBidAsync.
1
2
3
4
5
6
7
8
9
10
11
12
13
| FHiroAuctionClaimBidRequest Request;
Request.Id = TEXT("auction_instance_123");
FHiroOnAuctionsClaimBid OnAuctionsClaimBid;
OnAuctionsClaimBid.AddDynamic(this, &AMyActor::OnAuctionsClaimBid);
FOnError OnError;
HiroClient->AuctionsClaimBid(Session, Request, OnAuctionsClaimBid, OnError);
void AMyActor::OnAuctionsClaimBid(const FHiroAuctionClaimBidRequest& AuctionsClaimBidRequest)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AuctionsClaimBidRequest.ToJson());
}
|
When the seller claims a completed auction with AuctionsClaimCreated, the returned FHiroAuctionClaimCreated includes ReceivedItems, the FHiroInventoryItem entries received from the winning bid if the auction succeeded.
Listing Available Auctions
#
You can list the currently available auctions using the ListAsync function.
1
2
3
4
5
6
7
8
9
10
11
12
| FHiroAuctionListRequest Request;
FHiroOnAuctionsList OnAuctionsList;
OnAuctionsList.AddDynamic(this, &AMyActor::OnAuctionsList);
FOnError OnError;
HiroClient->AuctionsList(Session, Request, OnAuctionsList, OnError);
void AMyActor::OnAuctionsList(const FHiroAuctionListRequest& AuctionsListRequest)
{
UE_LOG(LogTemp, Log, TEXT("%s"), *AuctionsListRequest.ToJson());
}
|
Listing directed auctions
#
Set AllowedOnly on FHiroAuctionListRequest to switch between public and directed auctions. These two result sets are disjoint: leaving AllowedOnly as false (the default) returns only public auctions, while setting it to true returns only the auctions where the caller’s user ID is on the AllowedUserIds list.
1
2
3
4
5
6
7
8
| FHiroAuctionListRequest Request;
Request.AllowedOnly = true;
FHiroOnAuctionsList OnAuctionsList;
OnAuctionsList.AddDynamic(this, &AMyActor::OnAuctionsList);
FOnError OnError;
HiroClient->AuctionsList(Session, Request, OnAuctionsList, OnError);
|