0

我想在 TabletopSimulator 中组合两个或更多对象。Wenn 我生成了可以组合的对象,例如此页面https://kb.tabletopsimulator.com/host-guides/creating-states/。我想用 Lua 创建这个。所以我需要帮助......我生成了像这里这样的对象,但我没有得到两个具有 2 个状态的对象。

function SpawnLevel1(Obj1, ID)
        CID = ID
        spawnparamslvl = {
            type              = 'Custom_Assetbundle',
            position          = Obj1.getPosition(),
            rotation          = Obj1.getRotation(),
            scale             = {x=1, y=1, z=1},
        }
        paramslvl = {
            assetbundle = data[CID].assetbundle,
            type        = 1,
            material    = 0,
        }
        Obj2 = spawnObject(spawnparamslvl)
        obj_name = data[CID].display_name
        Obj2.setDescription(obj_name)
        Obj2.setName(obj_name)
        Obj2.setCustomObject(paramslvl)
        Obj1.addAttachment(Obj2).SetState(1)
    end

function deploy(PID)
  display_name      = data[PID].display_name
  spawnparams = {
      type              = 'Custom_Assetbundle',
      position          = self.getPosition(),
      rotation          = self.getRotation(),
      scale             = {x=1, y=1, z=1},
  }
  params = {
      assetbundle = data[PID].assetbundle,
      type        = 0,
      material    = 0,
  }
    Spawning(spawnparams, params, display_name, PID)
end

function Spawning(spawnparams, params, display_name, PID)
    Obj1 = spawnObject(spawnparamsmain)
    ID = PID
    Level1 = SpawnLevel1(Obj1, ID)
    Obj1.setCustomObject(paramsmain)
    Obj1.setName(display_name)
end

感谢您的帮助

4

1 回答 1

-1

您必须使用spawnObjectDataspawnObjectJSON。“对象数据”的格式遵循保存文件的格式。

我将使用现有对象作为模板,而不是硬编码构建对象所需的大型数据结构。这是一种常见的做法,以下修改现有对象的常用习惯也反映了这一点:

local data = obj.getData()
-- Modify `data` here --
obj.destruct()
obj = spawnObjectData({ data = data })

以下是状态的“对象数据”的相关位:

{ -- Object data (current state)
   -- ...
   States = {
      ["1"] = { -- Object data (state 1)
         --- ...
      },
      ["3"] = { -- Object data (state 3)
         -- ...
      },
      ["4"] = { -- Object data (state 4)
         -- ...
      }
   },
   -- ...
}

所以你可以使用这个:

function combine_objects(base_obj, objs_to_add)
   if not objs[1] then
      return base_obj
   end

   local data = base_obj.getData()

   if not data.States then
      data.States = { }
   end

   local i = 1
   while data.States[tostring(i)] do i = i + 1 end
   i = i + 1  -- Skip current state.
   while data.States[tostring(i)] do i = i + 1 end

   for _, obj in ipairs(objs_to_add) do
      data.States[tostring(i)] = obj.getData()
      obj.destruct()
      i = i + 1
   end
   
   base_obj.destruct()
   return spawnObjectData({ data = data })
end
于 2021-08-31T16:54:18.640 回答