Files
Erupe/server/channelserver/handlers_object.go
2024-10-17 20:22:53 +01:00

101 lines
3.0 KiB
Go

package channelserver
import (
"fmt"
"erupe-ce/config"
"erupe-ce/internal/system"
"erupe-ce/network/mhfpacket"
"erupe-ce/utils/byteframe"
"github.com/jmoiron/sqlx"
)
func handleMsgSysCreateObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysCreateObject)
s.stage.Lock()
newObj := &system.Object{
Id: s.NextObjectID(),
OwnerCharID: s.CharID,
X: pkt.X,
Y: pkt.Y,
Z: pkt.Z,
}
s.stage.Objects[s.CharID] = newObj
s.stage.Unlock()
// Response to our requesting client.
resp := byteframe.NewByteFrame()
resp.WriteUint32(newObj.Id) // New local obj handle.
s.DoAckSimpleSucceed(pkt.AckHandle, resp.Data())
// Duplicate the object creation to all sessions in the same stage.
dupObjUpdate := &mhfpacket.MsgSysDuplicateObject{
ObjID: newObj.Id,
X: newObj.X,
Y: newObj.Y,
Z: newObj.Z,
OwnerCharID: newObj.OwnerCharID,
}
s.Logger.Info(fmt.Sprintf("Broadcasting new object: %s (%d)", s.Name, newObj.Id))
s.stage.BroadcastMHF(dupObjUpdate, s)
}
func handleMsgSysDeleteObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysPositionObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysPositionObject)
if config.GetConfig().DebugOptions.LogInboundMessages {
fmt.Printf("[%s] with objectID [%d] move to (%f,%f,%f)\n\n", s.Name, pkt.ObjID, pkt.X, pkt.Y, pkt.Z)
}
s.stage.Lock()
object, ok := s.stage.Objects[s.CharID]
if ok {
object.X = pkt.X
object.Y = pkt.Y
object.Z = pkt.Z
}
s.stage.Unlock()
// One of the few packets we can just re-broadcast directly.
s.stage.BroadcastMHF(pkt, s)
}
func handleMsgSysRotateObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysDuplicateObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysSetObjectBinary(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {
_ = p.(*mhfpacket.MsgSysSetObjectBinary)
/* This causes issues with PS3 as this actually sends with endiness!
for _, session := range s.Server.sessions {
if session.CharID == s.CharID {
s.Server.userBinaryPartsLock.Lock()
s.Server.userBinaryParts[userBinaryPartID{charID: s.CharID, index: 3}] = pkt.RawDataPayload
s.Server.userBinaryPartsLock.Unlock()
msg := &mhfpacket.MsgSysNotifyUserBinary{
CharID: s.CharID,
BinaryType: 3,
}
s.Server.BroadcastMHF(msg, s)
}
}
*/
}
func handleMsgSysGetObjectBinary(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysGetObjectOwner(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysUpdateObjectBinary(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysCleanupObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysAddObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysDelObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysDispObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}
func handleMsgSysHideObject(s *Session, db *sqlx.DB, p mhfpacket.MHFPacket) {}