import { PublicKey } from '@solana/web3.js'; import { BN, Coder, Program, Provider } from '@staratlas/anchor'; import { AnchorTypes, ExtractArrayType, ListenProgram, ListenProgramStatic, ProgramMethods, generateErrorMap, staticImplements, } from '@staratlas/data-source'; import { CombatConfig } from './combatConfig'; import { CraftingInstance } from './craftingInstance'; import { DisbandedFleet } from './disbandedFleet'; import { Fleet } from './fleet'; import { FleetShips } from './fleetShips'; import { Game } from './game'; import { GameState } from './gameState'; import { IDL as SAGE_IDL, Sage as SageIDL } from './idl/sage'; import { Loot } from './loot'; import { MineItem } from './mineItem'; import { Planet } from './planet'; import { PlayerCrewRecord } from './playerCrewRecord'; import { ProgressionConfig } from './progressionConfig'; import { Resource } from './resource'; import { SageCrewConfig } from './sageCrewConfig'; import { SagePlayerProfile } from './sagePlayerProfile'; import { Sector } from './sector'; import { Ship } from './ship'; import { Star } from './star'; import { Starbase } from './starbase'; import { StarbasePlayer } from './starbasePlayer'; import { SurveyDataUnitTracker } from './surveyDataUnitTracker'; export const EMPTY_CRAFTING_SPEED_PER_TIER: number[] = [ 0.0, 0.2, 0.275, 0.35, 0.425, 0.5, 0.5, ]; export { IDL as SAGE_IDL } from './idl/sage'; export type { Sage as SageIDL } from './idl/sage'; export type SageAccountsArray = ExtractArrayType['name']; export type SageTypesArray = ExtractArrayType['name']; export const sageErrorMap = generateErrorMap(SAGE_IDL); export type SageIDLProgram = ProgramMethods; export type SageCoder = Coder; export type SageTypes = AnchorTypes; // Accounts export type SageIDLAccounts = SageTypes['Accounts']; export type SagePlayerProfileAccount = SageIDLAccounts['sagePlayerProfile']; export type StarbaseAccount = SageIDLAccounts['starbase']; export type MineItemAccount = SageIDLAccounts['mineItem']; export type ResourceAccount = SageIDLAccounts['resource']; export type FleetAccount = SageIDLAccounts['fleet']; export type FleetShipsAccount = SageIDLAccounts['fleetShips']; export type DisbandedFleetAccount = SageIDLAccounts['disbandedFleet']; export type StarbasePlayerAccount = SageIDLAccounts['starbasePlayer']; export type CraftingInstanceAccount = SageIDLAccounts['craftingInstance']; export type ShipAccount = SageIDLAccounts['ship']; export type GameAccount = SageIDLAccounts['game']; export type GameStateAccount = SageIDLAccounts['gameState']; export type PlanetAccount = SageIDLAccounts['planet']; export type SectorAccount = SageIDLAccounts['sector']; export type StarAccount = SageIDLAccounts['star']; export type SurveyDataUnitTrackerAccount = SageIDLAccounts['surveyDataUnitTracker']; export type ProgressionConfigAccount = SageIDLAccounts['progressionConfig']; export type SageCrewConfigAccount = SageIDLAccounts['sageCrewConfig']; export type PlayerCrewRecordAccount = SageIDLAccounts['playerCrewRecord']; export type CombatConfigAccount = SageIDLAccounts['combatConfig']; export type BaseLootAccount = SageIDLAccounts['loot']; // Instruction Contexts export type SageInstructions = SageTypes['Instructions']; export type RegisterMineItem = SageInstructions['registerMineItem']; export type UpdateMineItem = SageInstructions['updateMineItem']; export type DeregisterMineItem = SageInstructions['deregisterMineItem']; export type RegisterResource = SageInstructions['registerResource']; export type UpdateResource = SageInstructions['updateResource']; export type DeregisterResource = SageInstructions['deregisterResource']; export type RegisterSagePlayerProfile = SageInstructions['registerSagePlayerProfile']; export type AddShipEscrow = SageInstructions['addShipEscrow']; export type UpdateShipEscrow = SageInstructions['updateShipEscrow']; export type RemoveShipEscrow = SageInstructions['removeShipEscrow']; export type RemoveInvalidShipEscrow = SageInstructions['removeInvalidShipEscrow']; export type RegisterStarbasePlayer = SageInstructions['registerStarbasePlayer']; export type RegisterStarbase = SageInstructions['registerStarbase']; export type UpdateStarbase = SageInstructions['updateStarbase']; export type LoadingBayToIdle = SageInstructions['loadingBayToIdle']; export type IdleToLoadingBay = SageInstructions['idleToLoadingBay']; export type IdleToRespawn = SageInstructions['idleToRespawn']; export type StarbaseCreateCraftingProcess = SageInstructions['createCraftingProcess']; export type StarbaseDepositCraftingIngredient = SageInstructions['depositCraftingIngredient']; export type StarbaseWithdrawCraftingIngredient = SageInstructions['withdrawCraftingIngredient']; export type StarbaseStartCraftingProcess = SageInstructions['startCraftingProcess']; export type StarbaseCancelCraftingProcess = SageInstructions['cancelCraftingProcess']; export type StarbaseClaimCraftingOutputs = SageInstructions['claimCraftingOutputs']; export type StarbaseClaimCraftingNonConsumables = SageInstructions['claimCraftingNonConsumables']; export type StarbaseCloseCraftingProcess = SageInstructions['closeCraftingProcess']; export type StarbaseCreateCargoPod = SageInstructions['createCargoPod']; export type StarbaseDepositCargoToGame = SageInstructions['depositCargoToGame']; export type StarbaseWithdrawCargoFromGame = SageInstructions['withdrawCargoFromGame']; export type TransferCargoAtStarbase = SageInstructions['transferCargoAtStarbase']; export type CloseStarbaseCargoTokenAccount = SageInstructions['closeStarbaseCargoTokenAccount']; export type CreateCertificateMint = SageInstructions['createCertificateMint']; export type MintCertificate = SageInstructions['mintCertificate']; export type RedeemCertificate = SageInstructions['redeemCertificate']; export type StarbaseRemoveCargoPod = SageInstructions['removeCargoPod']; export type CreateFleet = SageInstructions['createFleet']; export type AddShipToFleet = SageInstructions['addShipToFleet']; export type AdminCreateFleet = SageInstructions['adminCreateFleet']; export type AdminRemoveFleet = SageInstructions['adminRemoveFleet']; export type AdminDepositCargoToFleet = SageInstructions['adminDepositCargoToFleet']; export type AdminDepositCargoToStarbase = SageInstructions['adminDepositCargoToStarbase']; export type UpdateShipInFleet = SageInstructions['updateShipInFleet']; export type DisbandFleet = SageInstructions['disbandFleet']; export type ForceDisbandFleet = SageInstructions['forceDisbandFleet']; export type DisbandedFleetToEscrow = SageInstructions['disbandedFleetToEscrow']; export type CloseDisbandedFleet = SageInstructions['closeDisbandedFleet']; export type WarpToCoordinate = SageInstructions['warpToCoordinate']; export type WarpLane = SageInstructions['warpLane']; export type DepositCargoToFleet = SageInstructions['depositCargoToFleet']; export type TransferCargoWithinFleet = SageInstructions['transferCargoWithinFleet']; export type WithdrawCargoFromFleet = SageInstructions['withdrawCargoFromFleet']; export type CloseFleetCargoPodTokenAccount = SageInstructions['closeFleetCargoPodTokenAccount']; export type StartSubwarp = SageInstructions['startSubwarp']; export type StopSubwarp = SageInstructions['stopSubwarp']; export type StartMiningAsteroid = SageInstructions['startMiningAsteroid']; export type StopMiningAsteroid = SageInstructions['stopMiningAsteroid']; export type MineAsteroidToRespawn = SageInstructions['mineAsteroidToRespawn']; export type InitGame = SageInstructions['initGame']; export type UpdateGame = SageInstructions['updateGame']; export type InitGameState = SageInstructions['initGameState']; export type UpdateGameState = SageInstructions['updateGameState']; export type ActivateGameState = SageInstructions['activateGameState']; export type CopyGameState = SageInstructions['copyGameState']; export type RegisterShip = SageInstructions['registerShip']; export type UpdateShip = SageInstructions['updateShip']; export type InvalidateShip = SageInstructions['invalidateShip']; export type SetNextShip = SageInstructions['setNextShip']; export type RegisterStar = SageInstructions['registerStar']; export type UpdateStar = SageInstructions['updateStar']; export type RegisterPlanet = SageInstructions['registerPlanet']; export type UpdatePlanet = SageInstructions['updatePlanet']; export type RegisterSurveyDataUnitTracker = SageInstructions['registerSurveyDataUnitTracker']; export type UpdateSurveyDataUnitTracker = SageInstructions['updateSurveyDataUnitTracker']; export type DrainSurveyDataUnitsBank = SageInstructions['drainSurveyDataUnitsBank']; export type DeregisterSurveyDataUnitTracker = SageInstructions['deregisterSurveyDataUnitTracker']; export type ScanForSurveyDataUnits = SageInstructions['scanForSurveyDataUnits']; export type SubmitStarbaseUpgradeResource = SageInstructions['submitStarbaseUpgradeResource']; export type DepositStarbaseUpkeepResource = SageInstructions['depositStarbaseUpkeepResource']; export type RegisterProgressionConfig = SageInstructions['registerProgressionConfig']; export type RegisterSageCrewConfig = SageInstructions['registerSageCrewConfig']; export type ClosePlayerCrewRecord = SageInstructions['closePlayerCrewRecord']; export type AddCrewToGame = SageInstructions['addCrewToGame']; export type RemoveCrewFromGame = SageInstructions['removeCrewFromGame']; export type LoadFleetCrew = SageInstructions['loadFleetCrew']; export type UnloadFleetCrew = SageInstructions['unloadFleetCrew']; export type RegisterCombatConfig = SageInstructions['registerCombatConfig']; export type UpdateCombatConfig = SageInstructions['updateCombatConfig']; export type DeregisterCombatConfig = SageInstructions['deregisterCombatConfig']; export type AttackFleet = SageInstructions['attackFleet']; export type RepairIdleFleet = SageInstructions['repairIdleFleet']; export type RepairDockedFleet = SageInstructions['repairDockedFleet']; export type ReloadFleetAbilityPower = SageInstructions['reloadFleetAbilityPower']; export type RetrieveLoot = SageInstructions['retrieveLoot']; // Instruction Specific Accounts export type RegisterMineItemInput = RegisterMineItem['args'][1]; export type UpdateMineItemInput = UpdateMineItem['args'][1]; export type DeregisterMineItemInput = DeregisterMineItem['args'][1]; export type DeregisterResourceInput = DeregisterResource['args'][1]; export type AddShipEscrowInput = AddShipEscrow['args'][1]; export type UpdateShipEscrowInput = UpdateShipEscrow['args'][1]; export type RemoveShipEscrowInput = RemoveShipEscrow['args'][1]; export type RegisterStarbaseInput = RegisterStarbase['args'][1]; export type LoadingBayToIdleInput = LoadingBayToIdle['args'][1]; export type IdleToLoadingBayInput = IdleToLoadingBay['args'][1]; export type IdleToRespawnInput = IdleToRespawn['args'][1]; export type StarbaseCreateCraftingProcessInput = StarbaseCreateCraftingProcess['args'][1]; export type StarbaseDepositCraftingIngredientInput = StarbaseDepositCraftingIngredient['args'][1]; export type StarbaseWithdrawCraftingIngredientInput = StarbaseWithdrawCraftingIngredient['args'][1]; export type StarbaseStartCraftingProcessInput = StarbaseStartCraftingProcess['args'][1]; export type StarbaseCancelCraftingProcessInput = StarbaseCancelCraftingProcess['args'][1]; export type StarbaseCloseCraftingProcessInput = StarbaseCloseCraftingProcess['args'][1]; export type StarbaseClaimCraftingOutputsInput = StarbaseClaimCraftingOutputs['args'][1]; export type StarbaseClaimCraftingNonConsumablesInput = StarbaseClaimCraftingNonConsumables['args'][1]; export type StarbaseCreateCargoPodInput = StarbaseCreateCargoPod['args'][1]; export type StarbaseDepositCargoToGameInput = StarbaseDepositCargoToGame['args'][1]; export type StarbaseWithdrawCargoFromGameInput = StarbaseWithdrawCargoFromGame['args'][1]; export type CloseStarbaseCargoTokenAccountInput = CloseStarbaseCargoTokenAccount['args'][1]; export type TransferCargoAtStarbaseInput = TransferCargoAtStarbase['args'][1]; export type StarbaseRemoveCargoPodInput = StarbaseRemoveCargoPod['args'][1]; export type DepositCargoToFleetInput = DepositCargoToFleet['args'][1]; export type TransferCargoWithinFleetInput = TransferCargoWithinFleet['args'][1]; export type WithdrawCargoFromFleetInput = WithdrawCargoFromFleet['args'][1]; export type CloseFleetCargoPodTokenAccountInput = CloseFleetCargoPodTokenAccount['args'][1]; export type CreateFleetInput = CreateFleet['args'][1]; export type AddShipToFleetInput = AddShipToFleet['args'][1]; export type AdminCreateFleetInput = AdminCreateFleet['args'][1]; export type AdminRemoveFleetInput = AdminRemoveFleet['args'][1]; export type AdminDepositCargoToFleetInput = AdminDepositCargoToFleet['args'][1]; export type AdminDepositCargoToStarbaseInput = AdminDepositCargoToStarbase['args'][1]; export type UpdateShipInFleetInput = UpdateShipInFleet['args'][1]; export type DisbandFleetInput = DisbandFleet['args'][1]; export type ForceDisbandFleetInput = ForceDisbandFleet['args'][1]; export type DisbandedFleetToEscrowInput = DisbandedFleetToEscrow['args'][1]; export type CloseDisbandedFleetInput = CloseDisbandedFleet['args'][1]; export type WarpToCoordinateInput = WarpToCoordinate['args'][1]; export type WarpLaneInput = WarpLane['args'][1]; export type StartSubwarpInput = StartSubwarp['args'][1]; export type StopSubwarpInput = StopSubwarp['args'][1]; export type StartMiningAsteroidInput = StartMiningAsteroid['args'][1]; export type StopMiningAsteroidInput = StopMiningAsteroid['args'][1]; export type MineAsteroidToRespawnInput = MineAsteroidToRespawn['args'][1]; export type UpdateGameInput = UpdateGame['args'][1]; export type InitGameStateInput = InitGameState['args'][1]; export type UpdateGameStateInput = UpdateGameState['args'][0]; export type ManageGameInput = ActivateGameState['args'][1]; export type RegisterSurveyDataUnitTrackerInput = RegisterSurveyDataUnitTracker['args'][1]; export type UpdateSurveyDataUnitTrackerInput = UpdateSurveyDataUnitTracker['args'][1]; export type DrainSurveyDataUnitsBankInput = DrainSurveyDataUnitsBank['args'][1]; export type DeregisterSurveyDataUnitTrackerInput = DeregisterSurveyDataUnitTracker['args'][1]; export type ScanForSurveyDataUnitsInput = ScanForSurveyDataUnits['args'][1]; export type SubmitStarbaseUpgradeResourceInput = SubmitStarbaseUpgradeResource['args'][1]; export type RegisterSageCrewConfigInput = RegisterSageCrewConfig['args'][1]; export type ClosePlayerCrewRecordInput = ClosePlayerCrewRecord['args'][1]; export type LoadFleetCrewInput = LoadFleetCrew['args'][1]; export type UnloadFleetCrewInput = UnloadFleetCrew['args'][1]; export type BaseRemoveCrewFromGameInput = RemoveCrewFromGame['args'][1]; export type RegisterCombatConfigInput = RegisterCombatConfig['args'][1]; export type BaseUpdateCombatConfigInput = UpdateCombatConfig['args'][1]; export type DeregisterCombatConfigInput = DeregisterCombatConfig['args'][1]; export type BaseAttackFleetInput = AttackFleet['args'][1]; export type BaseRepairIdleFleetInput = RepairIdleFleet['args'][1]; export type BaseRepairDockedFleetInput = RepairDockedFleet['args'][1]; export type ReloadFleetAbilityPowerInput = ReloadFleetAbilityPower['args'][1]; export type BaseRetrieveLootInput = RetrieveLoot['args'][1]; export interface FleetShipsInfo { ship: PublicKey; amount: BN; updateId: BN; } export interface WrappedShipEscrow { ship: PublicKey; amount: BN; updateId: BN; } // Named Types export type SageNamedTypes = SageTypes['Defined']; // FleetStateData export type StarbaseLoadingBay = SageNamedTypes['StarbaseLoadingBay']; export type Idle = SageNamedTypes['Idle']; export type MineAsteroid = SageNamedTypes['MineAsteroid']; export type MoveWarp = SageNamedTypes['MoveWarp']; export type MoveSubwarp = SageNamedTypes['MoveSubwarp']; export type Respawn = SageNamedTypes['Respawn']; export type MovementStats = SageNamedTypes['MovementStats']; export type CargoStats = SageNamedTypes['CargoStats']; export type CombatStats = SageNamedTypes['CombatStats']; export type MiscStats = SageNamedTypes['MiscStats']; export type BaseShipStats = SageNamedTypes['ShipStats']; export type StarbaseLevelInfo = SageNamedTypes['StarbaseLevelInfo']; export type SagePointsCategory = SageNamedTypes['SagePointsCategory']; export type Mints = SageNamedTypes['Mints']; export type Vaults = SageNamedTypes['Vaults']; export type Points = { combatXpCategory: SagePointsCategory; councilRankXpCategory: SagePointsCategory; craftingXpCategory: SagePointsCategory; dataRunningXpCategory: SagePointsCategory; lpCategory: SagePointsCategory; miningXpCategory: SagePointsCategory; pilotXpCategory: SagePointsCategory; }; export type Crafting = SageNamedTypes['Crafting']; export type Cargo = SageNamedTypes['Cargo']; export type MiscVariables = SageNamedTypes['MiscVariables']; export type MiscVariablesInput = SageNamedTypes['MiscVariablesInput']; // Game Fleet Info export type FleetInfo = SageNamedTypes['FleetInfo']; export type ShipCounts = SageNamedTypes['ShipCounts']; // Risk Zones related types export type RiskZonesData = SageNamedTypes['RiskZonesData']; export type RiskZoneData = SageNamedTypes['RiskZoneData']; // Others export type StarbaseUpkeepInfo = SageNamedTypes['StarbaseUpkeepInfo']; export type StarbaseUpkeepLevels = { level0: StarbaseUpkeepInfo; level1: StarbaseUpkeepInfo; level2: StarbaseUpkeepInfo; level3: StarbaseUpkeepInfo; level4: StarbaseUpkeepInfo; level5: StarbaseUpkeepInfo; level6: StarbaseUpkeepInfo; }; export type ProgressionItem = SageNamedTypes['ProgressionItem']; export type LootInfo = SageNamedTypes['LootInfo']; export type SageAccounts = { combatConfig: CombatConfig; craftingInstance: CraftingInstance; disbandedFleet: DisbandedFleet; fleet: Fleet; fleetShips: FleetShips; game: Game; gameState: GameState; loot: Loot; mineItem: MineItem; planet: Planet; playerCrewRecord: PlayerCrewRecord; progressionConfig: ProgressionConfig; resource: Resource; sageCrewConfig: SageCrewConfig; sagePlayerProfile: SagePlayerProfile; sector: Sector; ship: Ship; star: Star; starbase: Starbase; starbasePlayer: StarbasePlayer; surveyDataUnitTracker: SurveyDataUnitTracker; }; @staticImplements>() export class SageProgram extends ListenProgram { constructor(program: SageIDLProgram) { super(program, { combatConfig: CombatConfig, craftingInstance: CraftingInstance, disbandedFleet: DisbandedFleet, fleet: Fleet, fleetShips: FleetShips, game: Game, gameState: GameState, loot: Loot, mineItem: MineItem, planet: Planet, playerCrewRecord: PlayerCrewRecord, progressionConfig: ProgressionConfig, resource: Resource, sageCrewConfig: SageCrewConfig, sagePlayerProfile: SagePlayerProfile, sector: Sector, ship: Ship, star: Star, starbase: Starbase, starbasePlayer: StarbasePlayer, surveyDataUnitTracker: SurveyDataUnitTracker, }); } static buildProgram( programId: PublicKey, provider?: Provider, coder?: Coder, ): SageIDLProgram { return new Program(SAGE_IDL, programId, provider, coder); } }