package d2netpacket import ( "encoding/json" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum" "github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero" "github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory" "github.com/OpenDiablo2/OpenDiablo2/d2networking/d2netpacket/d2netpackettype" ) // AddPlayerPacket contains the data required to create a Player entity. // It is sent by the server to create the entity for a newly connected // player on a client. type AddPlayerPacket struct { ID string `json:"id"` Name string `json:"name"` X int `json:"x"` Y int `json:"y"` HeroType d2enum.Hero `json:"hero"` Equipment d2inventory.CharacterEquipment `json:"equipment"` Stats *d2hero.HeroStatsState `json:"heroStats"` Skills map[int]*d2hero.HeroSkill `json:"heroSkills"` LeftSkill int `json:"leftSkill"` RightSkill int `json:"rightSkill"` Gold int } // CreateAddPlayerPacket returns a NetPacket which declares an // AddPlayerPacket with the data in given parameters. func CreateAddPlayerPacket( id, name string, x, y int, heroType d2enum.Hero, stats *d2hero.HeroStatsState, skills map[int]*d2hero.HeroSkill, equipment d2inventory.CharacterEquipment, leftSkill, rightSkill, gold int) (NetPacket, error) { addPlayerPacket := AddPlayerPacket{ ID: id, Name: name, X: x, Y: y, HeroType: heroType, Equipment: equipment, Stats: stats, Skills: skills, LeftSkill: leftSkill, RightSkill: rightSkill, Gold: gold, } b, err := json.Marshal(addPlayerPacket) if err != nil { return NetPacket{PacketType: d2netpackettype.AddPlayer}, err } return NetPacket{ PacketType: d2netpackettype.AddPlayer, PacketData: b, }, nil } // UnmarshalAddPlayer unmarshals the packet data into an AddPlayerPacket struct func UnmarshalAddPlayer(packet []byte) (AddPlayerPacket, error) { var p AddPlayerPacket if err := json.Unmarshal(packet, &p); err != nil { return p, err } return p, nil }