feat(server): persist recruitment and serve pack reward summaries
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package gamedata
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// LoadPackSummaryTargets follows PackMapRewardInfo.IsSummaryTargetPackType in
|
||||
// the 2.35.10 client. Pack identities and types come from the installed tables.
|
||||
func LoadPackSummaryTargets(root, version string) (map[int]bool, error) {
|
||||
db, closeDB, err := openStatDatabase(root, version)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer closeDB()
|
||||
return loadPackSummaryTargets(db)
|
||||
}
|
||||
|
||||
func loadPackSummaryTargets(db *sql.DB) (map[int]bool, error) {
|
||||
rows, err := db.Query("SELECT id,ProtoBuf FROM PackTable ORDER BY id")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
result := map[int]bool{}
|
||||
for rows.Next() {
|
||||
var id int
|
||||
var raw []byte
|
||||
if err := rows.Scan(&id, &raw); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
types, err := packedInts(raw, 55)
|
||||
if err != nil || len(types) > 1 || id <= 0 {
|
||||
return nil, fmt.Errorf("gamedata: invalid summary pack %d", id)
|
||||
}
|
||||
var packType uint64
|
||||
if len(types) == 1 {
|
||||
packType = types[0]
|
||||
}
|
||||
switch packType {
|
||||
case 2, 3, 5, 7, 8, 9, 10, 12, 13, 14, 100:
|
||||
continue
|
||||
}
|
||||
result[id] = true
|
||||
}
|
||||
return result, rows.Err()
|
||||
}
|
||||
Reference in New Issue
Block a user