mirror of
https://github.com/cwinfo/matterbridge.git
synced 2024-12-27 07:45:40 +00:00
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
|
/*
|
||
|
Provides access to TF2 Game Coordinator functionality.
|
||
|
*/
|
||
|
package tf2
|
||
|
|
||
|
import (
|
||
|
"github.com/Philipp15b/go-steam"
|
||
|
. "github.com/Philipp15b/go-steam/protocol/gamecoordinator"
|
||
|
. "github.com/Philipp15b/go-steam/tf2/protocol"
|
||
|
"github.com/Philipp15b/go-steam/tf2/protocol/protobuf"
|
||
|
)
|
||
|
|
||
|
const AppId = 440
|
||
|
|
||
|
// To use any methods of this, you'll need to SetPlaying(true) and wait for
|
||
|
// the GCReadyEvent.
|
||
|
type TF2 struct {
|
||
|
client *steam.Client
|
||
|
}
|
||
|
|
||
|
// Creates a new TF2 instance and registers it as a packet handler
|
||
|
func New(client *steam.Client) *TF2 {
|
||
|
t := &TF2{client}
|
||
|
client.GC.RegisterPacketHandler(t)
|
||
|
return t
|
||
|
}
|
||
|
|
||
|
func (t *TF2) SetPlaying(playing bool) {
|
||
|
if playing {
|
||
|
t.client.GC.SetGamesPlayed(AppId)
|
||
|
} else {
|
||
|
t.client.GC.SetGamesPlayed()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (t *TF2) SetItemPosition(itemId, position uint64) {
|
||
|
t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCSetSingleItemPosition), &MsgGCSetItemPosition{
|
||
|
itemId, position,
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
// recipe -2 = wildcard
|
||
|
func (t *TF2) CraftItems(items []uint64, recipe int16) {
|
||
|
t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCCraft), &MsgGCCraft{
|
||
|
Recipe: recipe,
|
||
|
Items: items,
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func (t *TF2) DeleteItem(itemId uint64) {
|
||
|
t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCDelete), &MsgGCDeleteItem{itemId}))
|
||
|
}
|
||
|
|
||
|
func (t *TF2) NameItem(toolId, target uint64, name string) {
|
||
|
t.client.GC.Write(NewGCMsg(AppId, uint32(protobuf.EGCItemMsg_k_EMsgGCNameItem), &MsgGCNameItem{
|
||
|
toolId, target, name,
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
type GCReadyEvent struct{}
|
||
|
|
||
|
func (t *TF2) HandleGCPacket(packet *GCPacket) {
|
||
|
if packet.AppId != AppId {
|
||
|
return
|
||
|
}
|
||
|
switch protobuf.EGCBaseClientMsg(packet.MsgType) {
|
||
|
case protobuf.EGCBaseClientMsg_k_EMsgGCClientWelcome:
|
||
|
t.handleWelcome(packet)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (t *TF2) handleWelcome(packet *GCPacket) {
|
||
|
// the packet's body is pretty useless
|
||
|
t.client.Emit(&GCReadyEvent{})
|
||
|
}
|