Documentation
¶
Overview ¶
Package common contains common types, constants and functions used over different demoinfocs packages.
Index ¶
- type AdditionalPlayerInformation
- type Bomb
- type DemoHeader
- type Equipment
- type EquipmentClass
- type EquipmentElement
- type Fire
- type GamePhase
- type GrenadeProjectile
- type Inferno
- type Player
- func (p *Player) ActiveWeapon() *Equipment
- func (p *Player) CashSpentThisRound() int
- func (p *Player) CashSpentTotal() int
- func (p *Player) FlashDurationTime() time.Duration
- func (p *Player) FlashDurationTimeRemaining() time.Duration
- func (p *Player) HasSpotted(other *Player) bool
- func (p *Player) IsAlive() bool
- func (p *Player) IsBlinded() bool
- func (p *Player) IsInBombZone() bool
- func (p *Player) IsInBuyZone() bool
- func (p *Player) IsScoped() bool
- func (p *Player) IsSpottedBy(other *Player) bool
- func (p *Player) IsWalking() bool
- func (p *Player) Weapons() []*Equipment
- type Team
- type TeamState
- func (ts TeamState) CashSpentThisRound() (value int)
- func (ts TeamState) CashSpentTotal() (value int)
- func (ts TeamState) CurrentEquipmentValue() (value int)
- func (ts TeamState) FreezeTimeEndEquipmentValue() (value int)
- func (ts TeamState) Members() []*Player
- func (ts TeamState) RoundStartEquipmentValue() (value int)
- func (ts TeamState) Team() Team
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AdditionalPlayerInformation ¶
type AdditionalPlayerInformation struct {
Kills int
Deaths int
Assists int
Score int
MVPs int
Ping int
ClanTag string
TotalCashSpent int
CashSpentThisRound int
}
AdditionalPlayerInformation contains mostly scoreboard information.
type Bomb ¶
type Bomb struct {
// Intended for internal use only. Use Position() instead.
// Contains the last location of the dropped or planted bomb.
LastOnGroundPosition r3.Vector
Carrier *Player
}
Bomb tracks the bomb's position, and the player carrying it, if any.
type DemoHeader ¶
type DemoHeader struct {
Filestamp string // aka. File-type, must be HL2DEMO
Protocol int // Should be 4
NetworkProtocol int // Not sure what this is for
ServerName string // Server's 'hostname' config value
ClientName string // Usually 'GOTV Demo'
MapName string // E.g. de_cache, de_nuke, cs_office, etc.
GameDirectory string // Usually 'csgo'
PlaybackTime time.Duration // Demo duration in seconds (= PlaybackTicks / Server's tickrate)
PlaybackTicks int // Game duration in ticks (= PlaybackTime * Server's tickrate)
PlaybackFrames int // Amount of 'frames' aka demo-ticks recorded (= PlaybackTime * Demo's recording rate)
SignonLength int // Length of the Signon package in bytes
}
DemoHeader contains information from a demo's header.
func (DemoHeader) FrameRate ¶ added in v0.4.0
func (h DemoHeader) FrameRate() float64
FrameRate returns the frame rate of the demo (frames / demo-ticks per second). Not necessarily the tick-rate the server ran on during the game.
func (DemoHeader) FrameTime ¶ added in v0.4.0
func (h DemoHeader) FrameTime() time.Duration
FrameTime returns the time a frame / demo-tick takes in seconds.
Returns 0 if PlaybackTime or PlaybackFrames are 0 (corrupt demo headers).
func (DemoHeader) TickRate ¶
func (h DemoHeader) TickRate() float64
TickRate returns the tick-rate the server ran on during the game. VolvoPlx128TixKTnxBye
func (DemoHeader) TickTime ¶
func (h DemoHeader) TickTime() time.Duration
TickTime returns the time a single tick takes in seconds.
type Equipment ¶
type Equipment struct {
EntityID int // ID of the game entity
Weapon EquipmentElement // The type of weapon which the equipment instantiates.
Owner *Player // The player carrying the equipment, not necessarily the buyer.
AmmoType int // TODO: Remove this? doesn't seem applicable to CS:GO
AmmoInMagazine int // Amount of bullets in the weapon's magazine
AmmoReserve int // Amount of reserve bullets
OriginalString string // E.g. 'models/weapons/w_rif_m4a1_s.mdl'. Used internally to differentiate alternative weapons (M4A4 / M4A1-S etc.).
ZoomLevel int // How far the player has zoomed in on the weapon. 0=no zoom, 1=first level, 2=maximum zoom
// contains filtered or unexported fields
}
Equipment is a weapon / piece of equipment belonging to a player. This also includes the skin and some additional data.
func NewEquipment ¶
func NewEquipment(wep EquipmentElement) Equipment
NewEquipment creates a new Equipment and sets the UniqueID.
Intended for internal use only.
func (Equipment) Class ¶
func (e Equipment) Class() EquipmentClass
Class returns the class of the equipment. E.g. pistol, smg, heavy etc.
type EquipmentClass ¶
type EquipmentClass int
EquipmentClass is the type for the various EqClassXYZ constants.
const ( EqClassUnknown EquipmentClass = 0 EqClassPistols EquipmentClass = 1 EqClassSMG EquipmentClass = 2 EqClassHeavy EquipmentClass = 3 EqClassRifle EquipmentClass = 4 EqClassEquipment EquipmentClass = 5 EqClassGrenade EquipmentClass = 6 )
EquipmentClass constants give information about the type of an equipment (SMG, Rifle, Grenade etc.).
Note: (EquipmentElement+99) / 100 = EquipmentClass
type EquipmentElement ¶
type EquipmentElement int
EquipmentElement is the type for the various EqXYZ constants.
const ( EqUnknown EquipmentElement = 0 EqP2000 EquipmentElement = 1 EqGlock EquipmentElement = 2 EqP250 EquipmentElement = 3 EqDeagle EquipmentElement = 4 EqFiveSeven EquipmentElement = 5 EqDualBarettas EquipmentElement = 6 EqTec9 EquipmentElement = 7 EqCZ EquipmentElement = 8 EqUSP EquipmentElement = 9 EqRevolver EquipmentElement = 10 EqMP7 EquipmentElement = 101 EqMP9 EquipmentElement = 102 EqBizon EquipmentElement = 103 EqMac10 EquipmentElement = 104 EqUMP EquipmentElement = 105 EqP90 EquipmentElement = 106 EqSawedOff EquipmentElement = 201 EqNova EquipmentElement = 202 EqMag7 EquipmentElement = 203 // You should consider using EqSwag7 instead EqSwag7 EquipmentElement = 203 EqXM1014 EquipmentElement = 204 EqM249 EquipmentElement = 205 EqNegev EquipmentElement = 206 EqGalil EquipmentElement = 301 EqFamas EquipmentElement = 302 EqAK47 EquipmentElement = 303 EqM4A4 EquipmentElement = 304 EqM4A1 EquipmentElement = 305 EqScout EquipmentElement = 306 EqSSG08 EquipmentElement = 306 EqSG556 EquipmentElement = 307 EqSG553 EquipmentElement = 307 EqAUG EquipmentElement = 308 EqAWP EquipmentElement = 309 EqScar20 EquipmentElement = 310 EqG3SG1 EquipmentElement = 311 EqZeus EquipmentElement = 401 EqKevlar EquipmentElement = 402 EqHelmet EquipmentElement = 403 EqBomb EquipmentElement = 404 EqKnife EquipmentElement = 405 EqDefuseKit EquipmentElement = 406 EqWorld EquipmentElement = 407 EqDecoy EquipmentElement = 501 EqMolotov EquipmentElement = 502 EqIncendiary EquipmentElement = 503 EqFlash EquipmentElement = 504 EqSmoke EquipmentElement = 505 EqHE EquipmentElement = 506 )
EquipmentElement constants give information about what weapon a player has equipped.
func MapEquipment ¶
func MapEquipment(eqName string) EquipmentElement
MapEquipment creates an EquipmentElement from the name of the weapon / equipment. Returns EqUnknown if no mapping can be found.
func (EquipmentElement) Class ¶ added in v0.5.1
func (e EquipmentElement) Class() EquipmentClass
Class returns the class of the equipment. E.g. pistol, smg, heavy etc.
func (EquipmentElement) String ¶ added in v0.5.2
func (e EquipmentElement) String() string
String returns a human readable name for the equipment. E.g. 'AK-47', 'UMP-45', 'Smoke Grenade' etc.
type GamePhase ¶
type GamePhase int
GamePhase represents a phase in CS:GO
const ( // GamePhaseInit is the default value of the game phase GamePhaseInit GamePhase = 0 // enum name: Init // GamePhasePregame GamePhasePregame GamePhase = 1 // enum name: Pregame // GamePhaseStartGamePhase is set whenever a new game phase is started. // A game phase can be the normal match, i.e. first to 16 rounds, or an overtime match, // i.e. first to 4 rounds. It is set for _all_ overtimes played, i.e. for a match // with 3 overtimes, GamePhaseStartGamePhase is set 1 time for the normal // match and 1 time for each overtime played, for a total of 4 times. GamePhaseStartGamePhase GamePhase = 2 // enum name: StartGame // GamePhaseTeamSideSwitch is set whenever a team side switch happened, // i.e. both during normal game and overtime play. GamePhaseTeamSideSwitch GamePhase = 3 // enum name: PreRound // GamePhaseGameHalfEnded is set whenever a game phase has ended. // A game phase can be the normal match, i.e. first to 16 rounds, or an overtime match, // i.e. first to 4 rounds. It is set once for all overtimes played, i.e. for a match // with 3 overtimes, GamePhaseGameHalfEnded is set 1 time for the normal // match and 1 time for each overtime played, for a total of 4 times. GamePhaseGameHalfEnded GamePhase = 4 // enum name: TeamWin // GamePhaseGameEnded is set when the full game has ended. // This existence of this event is not reliable: it has been observed that a demo ends // before this event is set GamePhaseGameEnded GamePhase = 5 // enum name: Restart // GamePhaseStaleMate has not been observed so far GamePhaseStaleMate GamePhase = 6 // enum name: StaleMate // GamePhaseGameOver has not been observed so far GamePhaseGameOver GamePhase = 7 // enum name: GameOver )
The following game rules have been found at https://github.com/pmrowla/hl2sdk-csgo/blob/master/game/shared/teamplayroundbased_gamerules.h#L37. It seems that the naming used in the source engine is _not_ what is used in-game. The original names of the enum fields are added as comments to each field.
type GrenadeProjectile ¶ added in v0.5.4
type GrenadeProjectile struct {
EntityID int
Weapon EquipmentElement
Thrower *Player // Always seems to be the same as Owner, even if the grenade was picked up
Owner *Player // Always seems to be the same as Thrower, even if the grenade was picked up
Position r3.Vector
Trajectory []r3.Vector // List of all known locations of the grenade up to the current point
// contains filtered or unexported fields
}
GrenadeProjectile is a grenade thrown intentionally by a player. It is used to track grenade projectile positions between the time at which they are thrown and until they detonate.
func NewGrenadeProjectile ¶ added in v0.5.4
func NewGrenadeProjectile() *GrenadeProjectile
NewGrenadeProjectile creates a grenade projectile and sets the Unique-ID.
Intended for internal use only.
func (GrenadeProjectile) UniqueID ¶ added in v0.5.4
func (g GrenadeProjectile) UniqueID() int64
UniqueID returns the unique id of the grenade. The unique id is a random int generated internally by this library and can be used to differentiate grenades from each other. This is needed because demo-files reuse entity ids.
type Inferno ¶
Inferno is a list of Fires with helper functions. Also contains already extinguished fires.
See also: Inferno.Active() and Fire.IsBurning
func NewInferno ¶
func NewInferno() *Inferno
NewInferno creates a inferno and sets the Unique-ID.
Intended for internal use only.
func (Inferno) Active ¶
Active returns an Inferno containing only the active fires of the original. The returned Inferno will have the same Unique-ID as the original.
func (Inferno) ConvexHull2D ¶
ConvexHull2D returns clockwise sorted corner points making up the 2D convex hull of all the fires in the inferno. Useful for drawing on 2D maps.
func (Inferno) ConvexHull3D ¶
func (inf Inferno) ConvexHull3D() quickhull.ConvexHull
ConvexHull3D returns the 3D convex hull of all the fires in the inferno.
type Player ¶
type Player struct {
SteamID int64 // int64 representation of the User's Steam ID
Position r3.Vector // In-game coordinates. Like the one you get from cl_showpos 1
LastAlivePosition r3.Vector // The location where the player was last alive. Should be equal to Position if the player is still alive.
Velocity r3.Vector // Movement velocity
EntityID int // The ID of the player-entity, see Entity field
UserID int // Mostly used in game-events to address this player
Name string // Steam / in-game user name
Hp int
Armor int
Money int
CurrentEquipmentValue int
FreezetimeEndEquipmentValue int
RoundStartEquipmentValue int
ActiveWeaponID int // Used internally to set the active weapon, see ActiveWeapon()
RawWeapons map[int]*Equipment // All weapons the player is currently carrying
AmmoLeft [32]int // Ammo left in the various weapons, index corresponds to key of RawWeapons
Entity st.IEntity
AdditionalPlayerInformation *AdditionalPlayerInformation // Mostly scoreboard information such as kills, deaths, etc.
ViewDirectionX float32
ViewDirectionY float32
FlashDuration float32 // Blindness duration from the flashbang currently affecting the player (seconds)
FlashTick int // In-game tick at which the player was last flashed
TeamState *TeamState // When keeping the reference make sure you notice when the player changes teams
Team Team
IsBot bool
IsConnected bool
IsDucking bool
IsDefusing bool
HasDefuseKit bool
HasHelmet bool
// contains filtered or unexported fields
}
Player contains mostly game-relevant player information.
func NewPlayer ¶
func NewPlayer(demoInfoProvider demoInfoProvider) *Player
NewPlayer creates a *Player with an initialized equipment map.
Intended for internal use only.
func (*Player) ActiveWeapon ¶
ActiveWeapon returns the currently active / equipped weapon of the player.
func (*Player) CashSpentThisRound ¶
CashSpentThisRound returns the amount of cash the player spent in the current round.
Deprecated, use Player.AdditionalPlayerInformation.CashSpentThisRound instead.
func (*Player) CashSpentTotal ¶
CashSpentTotal returns the amount of cash the player spent during the whole game up to the current point.
Deprecated, use Player.AdditionalPlayerInformation.TotalCashSpent instead.
func (*Player) FlashDurationTime ¶
FlashDurationTime returns the duration of the blinding effect as time.Duration instead of float32 in seconds. Will return 0 if IsBlinded() returns false.
func (*Player) FlashDurationTimeRemaining ¶
FlashDurationTimeRemaining returns the remaining duration of the blinding effect (or 0 if the player is not currently blinded). It takes into consideration FlashDuration, FlashTick, DemoHeader.TickRate() and GameState.IngameTick().
func (*Player) HasSpotted ¶
HasSpotted returns true if the player has spotted the other player.
func (*Player) IsBlinded ¶
IsBlinded returns true if the player is currently flashed. This is more accurate than 'FlashDuration != 0' as it also takes into account FlashTick, DemoHeader.TickRate() and GameState.IngameTick().
func (*Player) IsInBombZone ¶
IsInBombZone returns whether the player is currently in the bomb zone or not.
func (*Player) IsInBuyZone ¶
IsInBuyZone returns whether the player is currently in the buy zone or not.
func (*Player) IsSpottedBy ¶
IsSpottedBy returns true if the player has been spotted by the other player.
type TeamState ¶
type TeamState struct {
// ID stays the same even after switching sides.
ID int
Score int
ClanName string
// Flag, e.g. DE, FR, etc.
//
// Watch out, in some demos this is upper-case and in some lower-case.
Flag string
// Terrorist TeamState for CTs, CT TeamState for Terrorists
Opponent *TeamState
// contains filtered or unexported fields
}
TeamState contains a team's ID, score, clan name & country flag.
func NewTeamState ¶
NewTeamState creates a new TeamState with the given Team and members callback function.
func (TeamState) CashSpentThisRound ¶
CashSpentThisRound returns the total amount of cash spent by the whole team in the current round.
func (TeamState) CashSpentTotal ¶
CashSpentThisRound returns the total amount of cash spent by the whole team during the whole game up to the current point.
func (TeamState) CurrentEquipmentValue ¶
CurrentEquipmentValue returns the cumulative value of all equipment currently owned by the members of the team.
func (TeamState) FreezeTimeEndEquipmentValue ¶
FreezeTimeEndEquipmentValue returns the cumulative value of all equipment owned by the members of the team at the end of the freeze-time of the current round.
func (TeamState) RoundStartEquipmentValue ¶
RoundStartEquipmentValue returns the cumulative value of all equipment owned by the members of the team at the start of the current round.