Hand update fixes (still not working)
parent
8f0cc07de2
commit
76048a623a
|
@ -30,8 +30,8 @@ func processInventory(p *Peer, data []byte) {
|
||||||
p.invlists = lists
|
p.invlists = lists
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateHandList(p *Peer, t *ToolCapabs) error {
|
func updateHandList(p *Peer, srv string) error {
|
||||||
item := " 1 0 " + t.String()
|
item := "multiserver:hand_" + srv
|
||||||
|
|
||||||
list := "Width 1\n"
|
list := "Width 1\n"
|
||||||
list += "Item " + item + "\n"
|
list += "Item " + item + "\n"
|
||||||
|
@ -46,7 +46,10 @@ func updateHandList(p *Peer, t *ToolCapabs) error {
|
||||||
|
|
||||||
p.invlists = make(map[string]bool)
|
p.invlists = make(map[string]bool)
|
||||||
|
|
||||||
_, err := p.Send(rudp.Pkt{Data: []byte(inv)})
|
data := []byte{0, ToClientInventory}
|
||||||
|
data = append(data, []byte(inv)...)
|
||||||
|
|
||||||
|
_, err := p.Send(rudp.Pkt{Data: data})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
64
itemdef.go
64
itemdef.go
|
@ -6,7 +6,6 @@ import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -110,55 +109,6 @@ func (t *ToolCapabs) SetPunchAttackUses(uses uint16) {
|
||||||
t.punchAttackUses = uses
|
t.punchAttackUses = uses
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns a minetest meta string with the tool capabilities
|
|
||||||
func (t *ToolCapabs) String() string {
|
|
||||||
r := MetaBegin
|
|
||||||
|
|
||||||
r += "tool_capabilities"
|
|
||||||
r += MetaKVDelim
|
|
||||||
r += "{\n"
|
|
||||||
r += "\t"
|
|
||||||
|
|
||||||
r += "\"damage_groups\" : \n"
|
|
||||||
r += "\t{\n"
|
|
||||||
for group, value := range t.DamageGroups() {
|
|
||||||
r += "\t\t\"" + group + "\" : "
|
|
||||||
r += strconv.Itoa(int(value)) + ",\n"
|
|
||||||
}
|
|
||||||
r += "\t},\n"
|
|
||||||
|
|
||||||
r += "\t\"full_punch_interval\" : "
|
|
||||||
r += strconv.FormatFloat(float64(t.PunchInt()), byte('e'), -1, 32)
|
|
||||||
r += ",\n"
|
|
||||||
|
|
||||||
r += "\t\"groupcaps\" : \n"
|
|
||||||
r += "\t{\n"
|
|
||||||
for name, cap := range t.GroupCaps() {
|
|
||||||
r += "\t\t\"" + name + "\" : \n"
|
|
||||||
r += "\t\t{\n"
|
|
||||||
r += "\t\t\t\"name\" : " + cap.Name() + ",\n"
|
|
||||||
r += "\t\t\t\"uses\" : " + strconv.Itoa(int(cap.Uses())) + ",\n"
|
|
||||||
r += "\t\t\t\"max_level\" : " + strconv.Itoa(int(cap.MaxLevel())) + ",\n"
|
|
||||||
r += "\t\t\t\"times\" : \n"
|
|
||||||
r += "\t\t\t{\n"
|
|
||||||
for k, v := range cap.Times() {
|
|
||||||
r += "\t\t\t\t\"" + strconv.Itoa(int(k)) + "\" : "
|
|
||||||
r += strconv.FormatFloat(float64(v), byte('e'), -1, 32)
|
|
||||||
r += ",\n"
|
|
||||||
}
|
|
||||||
r += "\t\t\t},\n"
|
|
||||||
r += "\t\t},\n"
|
|
||||||
}
|
|
||||||
r += "\t},\n"
|
|
||||||
|
|
||||||
r += "\t\"max_drop_level\" : " + strconv.Itoa(int(t.MaxDropLevel())) + ",\n"
|
|
||||||
|
|
||||||
r += "\t\"punch_attack_uses\" : " + strconv.Itoa(int(t.PunchAttackUses())) + "\n"
|
|
||||||
r += MetaPairDelim
|
|
||||||
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
func rmToolCapabs(def []byte) []byte {
|
func rmToolCapabs(def []byte) []byte {
|
||||||
itemNameLen := binary.BigEndian.Uint16(def[2:4])
|
itemNameLen := binary.BigEndian.Uint16(def[2:4])
|
||||||
desclen := binary.BigEndian.Uint16(def[4+itemNameLen : 6+itemNameLen])
|
desclen := binary.BigEndian.Uint16(def[4+itemNameLen : 6+itemNameLen])
|
||||||
|
@ -185,7 +135,6 @@ func mergeItemdefs(mgrs map[string][]byte) error {
|
||||||
var itemDefs []*ItemDef
|
var itemDefs []*ItemDef
|
||||||
aliases := make(map[string]string)
|
aliases := make(map[string]string)
|
||||||
|
|
||||||
handcapabs = make(map[string]*ToolCapabs)
|
|
||||||
var handDef []byte
|
var handDef []byte
|
||||||
|
|
||||||
// Extract definitions from CItemDefManager
|
// Extract definitions from CItemDefManager
|
||||||
|
@ -270,7 +219,13 @@ func mergeItemdefs(mgrs map[string][]byte) error {
|
||||||
if len(handDef) == 0 {
|
if len(handDef) == 0 {
|
||||||
handDef = def
|
handDef = def
|
||||||
}
|
}
|
||||||
handcapabs[srv] = tcaps
|
|
||||||
|
newname := "multiserver:hand_" + srv
|
||||||
|
newdef := make([]byte, len(def))
|
||||||
|
copy(newdef, def)
|
||||||
|
binary.BigEndian.PutUint16(newdef[2:4], uint16(len(newname)))
|
||||||
|
newdef = append(newdef[:4], append([]byte(newname), newdef[4+itemNameLen:]...)...)
|
||||||
|
itemDefs = append(itemDefs, &ItemDef{name: newname, data: newdef})
|
||||||
|
|
||||||
si += 2 + uint32(deflen)
|
si += 2 + uint32(deflen)
|
||||||
continue ItemLoop
|
continue ItemLoop
|
||||||
|
@ -308,11 +263,6 @@ func mergeItemdefs(mgrs map[string][]byte) error {
|
||||||
|
|
||||||
handdata := rmToolCapabs(handDef)
|
handdata := rmToolCapabs(handDef)
|
||||||
|
|
||||||
var compHanddata bytes.Buffer
|
|
||||||
handZw := zlib.NewWriter(&compHanddata)
|
|
||||||
handZw.Write(handdata)
|
|
||||||
handZw.Close()
|
|
||||||
|
|
||||||
hand := &ItemDef{
|
hand := &ItemDef{
|
||||||
name: "",
|
name: "",
|
||||||
data: handdata,
|
data: handdata,
|
||||||
|
|
|
@ -85,6 +85,8 @@ func main() {
|
||||||
|
|
||||||
clt.SetServer(srv)
|
clt.SetServer(srv)
|
||||||
|
|
||||||
|
updateHandList(clt, clt.ServerName())
|
||||||
|
|
||||||
go Proxy(clt, srv)
|
go Proxy(clt, srv)
|
||||||
go Proxy(srv, clt)
|
go Proxy(srv, clt)
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -146,7 +146,7 @@ func (p *Peer) Redirect(newsrv string) error {
|
||||||
p.sounds = make(map[int32]bool)
|
p.sounds = make(map[int32]bool)
|
||||||
|
|
||||||
// Update hand capabs
|
// Update hand capabs
|
||||||
err = updateHandList(p, handcapabs[newsrv])
|
err = updateHandList(p, newsrv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue