feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
Binary file not shown.
@ -294,6 +294,19 @@ class Converter:
|
|||||||
for inst in self.model.instances:
|
for inst in self.model.instances:
|
||||||
self._convert_one(inst, scene)
|
self._convert_one(inst, scene)
|
||||||
|
|
||||||
|
# Spawn fallback: если SpawnLocation в карте НЕ был (или дефолт 0,2,0
|
||||||
|
# остался) — поднимаем выше самой высокой Part'ы. Иначе игрок
|
||||||
|
# появляется внутри Anchored=True геометрии и не может двигаться.
|
||||||
|
sp = scene.get('spawnPoint', {'x': 0, 'y': 2, 'z': 0})
|
||||||
|
if sp.get('x') == 0 and sp.get('y') == 2 and sp.get('z') == 0:
|
||||||
|
prims = scene.get('primitives', [])
|
||||||
|
if prims:
|
||||||
|
max_top = max(
|
||||||
|
(p['y'] + p.get('sy', 1) / 2) for p in prims
|
||||||
|
if isinstance(p.get('y'), (int, float))
|
||||||
|
)
|
||||||
|
scene['spawnPoint'] = {'x': 0, 'y': max_top + 5, 'z': 0}
|
||||||
|
|
||||||
# Финальный отчёт о скипнутых классах
|
# Финальный отчёт о скипнутых классах
|
||||||
for cls, n in sorted(self.stats.skipped_classes.items(), key=lambda x: -x[1])[:30]:
|
for cls, n in sorted(self.stats.skipped_classes.items(), key=lambda x: -x[1])[:30]:
|
||||||
self.stats.warnings.append(f"skipped {n}× {cls}")
|
self.stats.warnings.append(f"skipped {n}× {cls}")
|
||||||
@ -690,11 +703,12 @@ class Converter:
|
|||||||
'neutral': not bool(props.get('Neutral', True)) and team_color.code != 0,
|
'neutral': not bool(props.get('Neutral', True)) and team_color.code != 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Spawn должен быть чуть выше — Roblox SpawnLocation это плоская плита,
|
# Spawn должен быть значительно выше — старые Roblox-карты часто имеют
|
||||||
# юзер появляется на её верхней грани.
|
# толстый Floor выше плиты, юзер появляется внутри стены/пола если
|
||||||
|
# не дать запас. +5 единиц достаточно — гравитация уронит на пол.
|
||||||
scene['spawnPoint'] = {
|
scene['spawnPoint'] = {
|
||||||
'x': pos['x'],
|
'x': pos['x'],
|
||||||
'y': pos['y'] + 1.5, # отступ вверх чтобы не залипнуть в плите
|
'y': pos['y'] + 5,
|
||||||
'z': pos['z'],
|
'z': pos['z'],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user