101 lines
3.3 KiB
Swift
101 lines
3.3 KiB
Swift
import Foundation
|
|
|
|
public enum BnlsMessageIdentifier: UInt8 {
|
|
case CdKeyEx = 0x0C
|
|
case Authorize = 0x0E
|
|
case AuthorizeProof = 0x0F
|
|
case RequestVersionByte = 0x10
|
|
case VersionCheckEx2 = 0x1A
|
|
|
|
case None = 0xFF
|
|
}
|
|
|
|
public enum BnlsProductIdentifier: UInt32 {
|
|
case Starcraft = 1
|
|
case StarcraftExpansion = 2
|
|
case Warcraft2 = 3
|
|
case Diablo2 = 4
|
|
case Diablo2Expansion = 5
|
|
case StarcraftJapan = 6
|
|
case Warcraft3 = 7
|
|
case Warcraft3Expansion = 8
|
|
case Diablo = 9
|
|
case DiabloShareware = 10
|
|
case StarcraftShareware = 11
|
|
case Warcraft3Demo = 12
|
|
|
|
public var versionByte: UInt32 {
|
|
let x: [BnlsProductIdentifier: UInt32] = [
|
|
.Starcraft: 0,
|
|
.StarcraftExpansion: 0,
|
|
.Warcraft2: 0,
|
|
.Diablo2: 0x0E,
|
|
.Diablo2Expansion: 0x0E,
|
|
.StarcraftJapan: 0,
|
|
.Warcraft3: 0,
|
|
.Warcraft3Expansion: 0,
|
|
.Diablo: 0,
|
|
.DiabloShareware: 0,
|
|
.StarcraftShareware: 0,
|
|
.Warcraft3Demo: 0
|
|
]
|
|
|
|
return x[self]!
|
|
}
|
|
|
|
private var bncsProduct: BncsProductIdentifier {
|
|
let x: [BnlsProductIdentifier: BncsProductIdentifier] = [
|
|
.Starcraft: .Starcraft,
|
|
.StarcraftExpansion: .StarcraftExpansion,
|
|
.Warcraft2: .Warcraft2,
|
|
.Diablo2: .Diablo2,
|
|
.Diablo2Expansion: .Diablo2Expansion,
|
|
.StarcraftJapan: .StarcraftJapan,
|
|
.Warcraft3: .Warcraft3,
|
|
.Warcraft3Expansion: .Warcraft3Expansion,
|
|
.Diablo: .Diablo,
|
|
.DiabloShareware: .DiabloShareware,
|
|
.StarcraftShareware: .StarcraftShareware,
|
|
.Warcraft3Demo: .Warcraft3Demo
|
|
]
|
|
|
|
return x[self]!
|
|
}
|
|
|
|
public var hashFiles: [String] {
|
|
let x: [BnlsProductIdentifier: [String]] = [
|
|
.Starcraft: [],
|
|
.StarcraftExpansion: [],
|
|
.Warcraft2: [],
|
|
.Diablo2: ["Game.exe"],
|
|
.Diablo2Expansion: ["Game.exe"],
|
|
.StarcraftJapan: [],
|
|
.Warcraft3: [],
|
|
.Warcraft3Expansion: [],
|
|
.Diablo: [],
|
|
.DiabloShareware: [],
|
|
.StarcraftShareware: [],
|
|
.Warcraft3Demo: []
|
|
]
|
|
|
|
let productStringRepresentation = String(FourCC(rawValue: self.bncsProduct.rawValue).stringRepresentation.reversed())
|
|
let prefix = "\(FileManager.default.currentDirectoryPath)/extern/hashfiles/\(productStringRepresentation)/"
|
|
|
|
return x[self]!.map { "\(prefix)\($0)" }
|
|
}
|
|
|
|
}
|
|
|
|
public struct CdKeyExFlags: OptionSet {
|
|
public let rawValue: UInt32
|
|
|
|
public init(rawValue: UInt32) {
|
|
self.rawValue = rawValue
|
|
}
|
|
|
|
public static let sameSessionKey = CdKeyExFlags(rawValue: 1)
|
|
public static let givenSessionKey = CdKeyExFlags(rawValue: 2)
|
|
public static let multiServerSessionKeys = CdKeyExFlags(rawValue: 4)
|
|
public static let oldStyleResponses = CdKeyExFlags(rawValue: 8)
|
|
}
|