Files
zkill-susser/types/flat_killmail.go

129 lines
4.5 KiB
Go

package types
type FlatKillmail struct {
KillmailID int64 `json:"killmail_id"`
KillmailHash string `json:"killmail_hash"`
KillmailTime string `json:"killmail_time"`
SolarSystemID int32 `json:"solar_system_id"`
SolarSystemName string `json:"solar_system_name"`
ConstellationName string `json:"constellation_name"`
RegionName string `json:"region_name"`
Security float32 `json:"security"`
VictimCharacterID int64 `json:"victim_character_id"`
VictimCharacterName string `json:"victim_character_name"`
VictimCorporationID int64 `json:"victim_corporation_id"`
VictimCorporationName string `json:"victim_corporation_name"`
VictimAllianceID *int64 `json:"victim_alliance_id"`
VictimAllianceName string `json:"victim_alliance_name"`
VictimShipTypeID int32 `json:"victim_ship_type_id"`
VictimShipTypeName string `json:"victim_ship_type_name"`
VictimShipGroupName string `json:"victim_ship_group_name"`
VictimShipCategoryName string `json:"victim_ship_category_name"`
VictimDamageTaken int64 `json:"victim_damage_taken"`
AttackerCount uint16 `json:"attacker_count"`
HTTPLastModified string `json:"http_last_modified"`
}
type FlatKillmailAttacker struct {
KillmailID int64 `json:"killmail_id"`
CharacterID int64 `json:"character_id"`
CharacterName string `json:"character_name"`
CorporationID int64 `json:"corporation_id"`
CorporationName string `json:"corporation_name"`
AllianceID *int64 `json:"alliance_id"`
AllianceName string `json:"alliance_name"`
ShipTypeID int32 `json:"ship_type_id"`
ShipTypeName string `json:"ship_type_name"`
ShipGroupName string `json:"ship_group_name"`
WeaponTypeID int32 `json:"weapon_type_id"`
WeaponTypeName string `json:"weapon_type_name"`
DamageDone int64 `json:"damage_done"`
FinalBlow bool `json:"final_blow"`
SecurityStatus float32 `json:"security_status"`
}
type FlatKillmailItem struct {
KillmailID int64 `json:"killmail_id"`
ItemTypeID int32 `json:"item_type_id"`
ItemTypeName string `json:"item_type_name"`
ItemGroupName string `json:"item_group_name"`
ItemCategoryName string `json:"item_category_name"`
ItemMarketGroupName string `json:"item_market_group_name"`
Flag int32 `json:"flag"`
SlotType string `json:"slot_type"`
QuantityDestroyed int64 `json:"quantity_destroyed"`
QuantityDropped int64 `json:"quantity_dropped"`
Singleton int32 `json:"singleton"`
}
func (k *Killmail) Flatten() (*FlatKillmail, []FlatKillmailAttacker, []FlatKillmailItem) {
flat := &FlatKillmail{
KillmailID: k.KillmailID,
KillmailHash: k.KillmailHash,
KillmailTime: k.KillmailTime.Format("2006-01-02 15:04:05"),
HTTPLastModified: k.HTTPLastModified.Format("2006-01-02 15:04:05"),
AttackerCount: uint16(len(k.Attackers)),
SolarSystemID: int32(k.SolarSystemID),
VictimCharacterID: k.Victim.CharacterID,
VictimCorporationID: k.Victim.CorporationID,
VictimShipTypeID: int32(k.Victim.ShipTypeID),
VictimDamageTaken: k.Victim.DamageTaken,
}
if k.Victim.AllianceID != 0 {
flat.VictimAllianceID = &k.Victim.AllianceID
}
attackers := make([]FlatKillmailAttacker, len(k.Attackers))
for i, attacker := range k.Attackers {
flatAttacker := &FlatKillmailAttacker{
KillmailID: k.KillmailID,
CharacterID: attacker.CharacterID,
CorporationID: attacker.CorporationID,
ShipTypeID: int32(attacker.ShipTypeID),
WeaponTypeID: int32(attacker.WeaponTypeID),
DamageDone: attacker.DamageDone,
FinalBlow: attacker.FinalBlow,
SecurityStatus: float32(attacker.SecurityStatus),
}
if attacker.AllianceID != 0 {
flatAttacker.AllianceID = &attacker.AllianceID
}
attackers[i] = *flatAttacker
}
items := make([]FlatKillmailItem, 0, len(k.Victim.Items))
for _, item := range k.Victim.Items {
flatItem := FlatKillmailItem{
KillmailID: k.KillmailID,
ItemTypeID: int32(item.ItemTypeID),
Flag: int32(item.Flag),
QuantityDestroyed: derefInt64(item.QuantityDestroyed),
QuantityDropped: derefInt64(item.QuantityDropped),
Singleton: int32(item.Singleton),
}
items = append(items, flatItem)
}
return flat, attackers, items
}
func derefInt64(i *int64) int64 {
if i == nil {
return 0
}
return *i
}
type NSQKillmail struct {
Killmail *FlatKillmail `json:"killmail"`
Attackers []FlatKillmailAttacker `json:"attackers"`
Items []FlatKillmailItem `json:"items"`
}