131 lines
4.6 KiB
Go
131 lines
4.6 KiB
Go
package collections
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// CollectionItem represents an item required for a collection
|
|
type CollectionItem struct {
|
|
ItemID int32 `json:"item_id" db:"item_id"`
|
|
Index int8 `json:"index" db:"item_index"`
|
|
Found int8 `json:"found" db:"found"`
|
|
}
|
|
|
|
// CollectionRewardItem represents a reward item for completing a collection
|
|
type CollectionRewardItem struct {
|
|
ItemID int32 `json:"item_id" db:"item_id"`
|
|
Quantity int8 `json:"quantity" db:"quantity"`
|
|
}
|
|
|
|
// Collection represents a collection that players can complete
|
|
type Collection struct {
|
|
mu sync.RWMutex
|
|
id int32
|
|
name string
|
|
category string
|
|
level int8
|
|
rewardCoin int64
|
|
rewardXP int64
|
|
completed bool
|
|
saveNeeded bool
|
|
collectionItems []CollectionItem
|
|
rewardItems []CollectionRewardItem
|
|
selectableRewardItems []CollectionRewardItem
|
|
lastModified time.Time
|
|
}
|
|
|
|
// CollectionData represents collection data for database operations
|
|
type CollectionData struct {
|
|
ID int32 `json:"id" db:"id"`
|
|
Name string `json:"collection_name" db:"collection_name"`
|
|
Category string `json:"collection_category" db:"collection_category"`
|
|
Level int8 `json:"level" db:"level"`
|
|
}
|
|
|
|
// CollectionRewardData represents reward data from database
|
|
type CollectionRewardData struct {
|
|
CollectionID int32 `json:"collection_id" db:"collection_id"`
|
|
RewardType string `json:"reward_type" db:"reward_type"`
|
|
RewardValue string `json:"reward_value" db:"reward_value"`
|
|
Quantity int8 `json:"reward_quantity" db:"reward_quantity"`
|
|
}
|
|
|
|
// PlayerCollectionData represents player collection progress
|
|
type PlayerCollectionData struct {
|
|
CharacterID int32 `json:"char_id" db:"char_id"`
|
|
CollectionID int32 `json:"collection_id" db:"collection_id"`
|
|
Completed bool `json:"completed" db:"completed"`
|
|
}
|
|
|
|
// PlayerCollectionItemData represents player found collection items
|
|
type PlayerCollectionItemData struct {
|
|
CharacterID int32 `json:"char_id" db:"char_id"`
|
|
CollectionID int32 `json:"collection_id" db:"collection_id"`
|
|
CollectionItemID int32 `json:"collection_item_id" db:"collection_item_id"`
|
|
}
|
|
|
|
// MasterCollectionList manages all available collections in the game
|
|
type MasterCollectionList struct {
|
|
mu sync.RWMutex
|
|
collections map[int32]*Collection
|
|
database CollectionDatabase
|
|
}
|
|
|
|
// PlayerCollectionList manages collections for a specific player
|
|
type PlayerCollectionList struct {
|
|
mu sync.RWMutex
|
|
characterID int32
|
|
collections map[int32]*Collection
|
|
database CollectionDatabase
|
|
}
|
|
|
|
// CollectionManager provides high-level collection management
|
|
type CollectionManager struct {
|
|
masterList *MasterCollectionList
|
|
database CollectionDatabase
|
|
itemLookup ItemLookup
|
|
}
|
|
|
|
// CollectionStatistics provides collection system usage statistics
|
|
type CollectionStatistics struct {
|
|
TotalCollections int
|
|
CompletedCollections int
|
|
ActiveCollections int
|
|
TotalItems int
|
|
FoundItems int
|
|
TotalRewards int
|
|
PlayersWithCollections int
|
|
}
|
|
|
|
// CollectionInfo provides basic collection information
|
|
type CollectionInfo struct {
|
|
ID int32 `json:"id"`
|
|
Name string `json:"name"`
|
|
Category string `json:"category"`
|
|
Level int8 `json:"level"`
|
|
Completed bool `json:"completed"`
|
|
ReadyToTurnIn bool `json:"ready_to_turn_in"`
|
|
ItemsFound int `json:"items_found"`
|
|
ItemsTotal int `json:"items_total"`
|
|
RewardCoin int64 `json:"reward_coin"`
|
|
RewardXP int64 `json:"reward_xp"`
|
|
RewardItems []CollectionRewardItem `json:"reward_items"`
|
|
SelectableRewards []CollectionRewardItem `json:"selectable_rewards"`
|
|
RequiredItems []CollectionItem `json:"required_items"`
|
|
}
|
|
|
|
// CollectionProgress represents player progress on a collection
|
|
type CollectionProgress struct {
|
|
CollectionID int32 `json:"collection_id"`
|
|
Name string `json:"name"`
|
|
Category string `json:"category"`
|
|
Level int8 `json:"level"`
|
|
Completed bool `json:"completed"`
|
|
ReadyToTurnIn bool `json:"ready_to_turn_in"`
|
|
Progress float64 `json:"progress_percentage"`
|
|
ItemsFound []CollectionItem `json:"items_found"`
|
|
ItemsNeeded []CollectionItem `json:"items_needed"`
|
|
LastUpdated time.Time `json:"last_updated"`
|
|
}
|