package channelserver import ( "fmt" "github.com/Andoryuuta/byteframe" "github.com/Solenataris/Erupe/network/mhfpacket" ) func handleMsgSysCreateObject(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgSysCreateObject) // Lock the stage. s.server.Lock() // Make a new stage object and insert it into the stage. objID := s.stage.GetNewObjectID(s.charID) newObj := &StageObject{ id: objID, ownerCharID: s.charID, x: pkt.X, y: pkt.Y, z: pkt.Z, } s.stage.objects[s.charID] = newObj // Unlock the stage. s.server.Unlock() // Response to our requesting client. resp := byteframe.NewByteFrame() resp.WriteUint32(objID) // New local obj handle. doAckSimpleSucceed(s, pkt.AckHandle, resp.Data()) // Duplicate the object creation to all sessions in the same stage. dupObjUpdate := &mhfpacket.MsgSysDuplicateObject{ ObjID: objID, X: pkt.X, Y: pkt.Y, Z: pkt.Z, OwnerCharID: s.charID, } s.logger.Info("Duplicate a new characters to others clients") s.stage.BroadcastMHF(dupObjUpdate, s) } func handleMsgSysDeleteObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysPositionObject(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgSysPositionObject) if s.server.erupeConfig.DevMode && s.server.erupeConfig.DevModeOptions.OpcodeMessages { 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, p mhfpacket.MHFPacket) {} func handleMsgSysDuplicateObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysSetObjectBinary(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysGetObjectBinary(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysGetObjectOwner(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysUpdateObjectBinary(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysCleanupObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysAddObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysDelObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysDispObject(s *Session, p mhfpacket.MHFPacket) {} func handleMsgSysHideObject(s *Session, p mhfpacket.MHFPacket) {}