生成一个有状态 TTS 对象

我想在 TabletopSimulator 中将两个或更多的对象组合起来。我可以像这个页面 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

谢谢您的帮助 Radoan

点赞
用户589924
用户589924

你必须使用 spawnObjectDataspawnObjectJSON。"对象数据"的格式遵循保存文件格式。

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

local data = obj.getData()
-- 在这里修改 'data' --
obj.destruct()
obj = spawnObjectData({ data = data })

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

{ --对象数据(当前状态)
   -- ...
   States = {
      ["1"] = { --对象数据(状态1)
         --- ...
      },
      ["3"] = { --对象数据(状态3)
         -- ...
      },
      ["4"] = { --对象数据(状态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  -- 跳过当前状态。
   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-31 16:54:18