import { ethers } from "ethers";
import { pad0xBegin } from "@evo/utils/common/utils";
import type { CallbackType } from "@evo/utils/ethers/contractHelper";
import { triggerContractByContractName, viewContractByContractName } from "@evo/utils/ethers/contractHelper";
import { LandId } from "@evo/config/constants";
import { TransactionResponse } from "@ethersproject/providers";
export type SlotType = 0 | 1 | 2 | 3; // there're 4 members a team for now
/**
* PVE Team Join
* @param signer Ethers signer
* @param slot Slot
* @param tokenId Apostle token id
* @param callback Callback
*/
export const pveTeamJoin = (
landId: LandId,
signer: ethers.Signer,
slot: SlotType,
tokenId: string,
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(landId, signer, "pveTeam", "join", [slot, pad0xBegin(tokenId)], callback);
};
/**
* PVE Team Joins
* @param signer Ethers signer
* @param slots Slot
* @param tokenIds Apostles token id
* @param callback Callback
*/
export const pveTeamJoins = (
landId: LandId,
signer: ethers.Signer,
slots: SlotType[],
tokenIds: string[],
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(
landId,
signer,
"pveTeam",
"joins",
[slots, tokenIds.map((tokenId) => pad0xBegin(tokenId))],
callback
);
};
/**
* PVE Team Exit
* @param signer Ethers signer
* @param tokenId Apostle token id
* @param callback Callback
*/
export const pveTeamExit = (
landId: LandId,
signer: ethers.Signer,
tokenId: string,
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(landId, signer, "pveTeam", "exit", [pad0xBegin(tokenId)], callback);
};
/**
* PVE Team Exits
* @param signer Ethers signer
* @param tokenIds Apostles token id
* @param callback Callback
*/
export const pveTeamExits = (
landId: LandId,
signer: ethers.Signer,
tokenIds: string[],
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(
landId,
signer,
"pveTeam",
"exits",
[tokenIds.map((tokenId) => pad0xBegin(tokenId))],
callback
);
};
/**
* PVE Team Swap
* @param signer Ethers signer
* @param slot Slot
* @param newTokenId Apostle token id
* @param callback Callback
*/
export const pveTeamSwap = (
landId: LandId,
signer: ethers.Signer,
slot: SlotType,
newTokenId: string,
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(landId, signer, "pveTeam", "swap", [slot, pad0xBegin(newTokenId)], callback);
};
/**
* PVE Team Evict (Force exit after the end of the lease period)
* @param signer Ethers signer
* @param tokenId Apostle token id
* @param callback Callback
*/
export const pveTeamEvict = (
landId: LandId,
signer: ethers.Signer,
tokenId: string,
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(landId, signer, "pveTeam", "evict", [pad0xBegin(tokenId)], callback);
};
/**
* PVE Team At
* @param provider Ethers provider
* @param user Account address
* @param slot Slot
* @param callback Callback
* @returns Apostle token id or hex 0
*/
export const pveTeamAt = async (
landId: LandId,
provider: ethers.providers.Provider,
user: string,
slot: SlotType,
callback?: CallbackType
): Promise<string> => {
const results = await viewContractByContractName(landId, provider, "pveTeam", "at", [user, slot], callback);
return (results[0] as ethers.BigNumber).toHexString();
};
/**
* PVE Team Exist
* @param provider Ethers provider
* @param user Account address
* @param slot Slot
* @param callback Callback
* @returns Boolean true or false
*/
export const pveTeamExist = async (
landId: LandId,
provider: ethers.providers.Provider,
user: string,
slot: SlotType,
callback?: CallbackType
): Promise<boolean> => {
const results = await viewContractByContractName(landId, provider, "pveTeam", "exist", [user, slot], callback);
return results[0] as boolean;
};
export const pveForgeBatch = (
landId: LandId,
signer: ethers.Signer,
equipmentTypeList: number[],
rarityList: number[],
tokenContractAddressList: string[],
callback?: CallbackType
): Promise<TransactionResponse> => {
return triggerContractByContractName(
landId,
signer,
"pveCraft",
"craft_batch",
[equipmentTypeList, rarityList, tokenContractAddressList],
callback,
{
gasLimit: ethers.BigNumber.from(210000).mul(equipmentTypeList.length).add(ethers.BigNumber.from(350000)),
}
);
};