This commit is contained in:
copyrighttxt
2026-07-06 13:28:00 -04:00
commit 05211f73ef
441 changed files with 94128 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+79
View File
@@ -0,0 +1,79 @@
{% extends '__layout__.html' %}
{% block title %}Edit Item{% endblock %}
{% block head %}
<link href="/static/css/develop.css" rel="stylesheet"/>
{% endblock %}
{% block content %}
<div id="main">
<div class="container" style="max-width: 800px;">
{% with messages = get_flashed_messages() %}
{% if messages %}
<div>
{% for message in messages %}
<div class="alert border border-danger p-2 text-center messagealerts">
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
<div class="d-flex align-items-center ps-4 pe-4 ps-md-1 pe-md-1">
<div>
<a class="text-decoration-none text-secondary m-0" href="/develop?type={{AssetObj.asset_type.value}}" style="font-size: 12px;">< Return to develop page</a>
<h1 class="m-0">Edit Item</h1>
</div>
{% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %}
<a class="text-decoration-none ms-auto" href="/catalog/{{AssetObj.id}}/">View on Catalog</a>
{%else%}
<a class="text-decoration-none ms-auto" href="/catalog/{{AssetObj.id}}/">View on Library</a>
{%endif%}
</div>
<div class="linebreak"></div>
<div class="row">
<div class="col-md-5">
<img style="aspect-ratio:1/1; max-width: 400px; max-height: 400px;" width="100%" src="/Thumbs/Asset.ashx?assetId={{AssetObj.id}}&x=512&y=512" class="rounded">
</div>
<div class="col-md-7 border-start pt-2 pb-2 ps-4 pe-4 ps-md-1 pe-md-1">
<form method="post">
<div class="form-floating mb-2">
<input type="text" class="form-control" id="item-name" name="item-name" placeholder="Awesome Item!" required value="{{AssetObj.name}}">
<label for="item-name">Name</label>
</div>
<div class="form-floating mb-2">
<textarea class="form-control mt-2" placeholder="Description" style="min-height: 150px;" name="item-description">{{AssetObj.description}}</textarea>
<label for="item-description">Description</label>
</div>
{% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %}
<div class="form-check">
<input class="form-check-input" type="checkbox" {% if AssetObj.is_for_sale: %}checked{%endif%} id="isForSaleCheckbox" name="is-for-sale">
<label class="form-check-label" for="isForSaleCheckbox">
For Sale
</label>
</div>
<div class="p-1 row">
<div class="col">
<div class="input-group">
<span class="input-group-text" id="basic-addon1">R$</span>
<input type="number" class="form-control" placeholder="Robux" aria-label="Robux" name="robux-cost" value="{{AssetObj.price_robux}}">
</div>
</div>
<div class="col">
<div class="input-group">
<span class="input-group-text" id="basic-addon1">T$</span>
<input type="number" class="form-control" placeholder="Tickets" aria-label="Tickets" name="tix-cost" value="{{AssetObj.price_tix}}">
</div>
</div>
<div class="col-12">
<p style="font-size:13px;">* Vortexi will take a 30% fee from the sale</p>
</div>
</div>
{%endif%}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<button type="submit" class="btn btn-primary btn-sm w-100 text-center">Save Changes</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
+12
View File
@@ -0,0 +1,12 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<h4>Access</h4>
<form method="post">
<label for="MaxPlayersInput" class="form-label">Max Players ( 2 - 50 )</label>
<input class="form-control mb-1" type="number" name="maxplayers" id="MaxPlayersInput" placeholder="Max Players" required value="{{PlaceObj.maxplayers}}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="mt-2">
<button type="submit" class="btn btn-success btn-sm w-100">Save</button>
</div>
</form>
{% endblock %}
@@ -0,0 +1,66 @@
{% extends '__layout__.html' %}
{% block title %}Manage Place{% endblock %}
{% block head %}
<link href="/static/css/develop.css" rel="stylesheet"/>
<style>
.page-tabs a {
color: #dadada !important;
font-size: medium;
margin-top: 5px;
margin-bottom: 8px;
font-weight: 500;
text-decoration: none;
width: 100%;
text-align: center;
display: block;
padding: 8px;
background-color: #1f1f1f;
box-shadow: 0 0 1px 0 rgba(0,0,0,.2), 0 1px 2px 0 rgba(0,0,0,.2);
}
.page-tabs a:hover {
color: #fff !important;
}
</style>
{% endblock %}
{% block content %}
<div id="main">
<div class="container" style="max-width: 1000px;">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div>
{% for category, message in messages %}
{% if category == 'error': %}
<div class="alert border p-2 text-center alert-danger border-danger">
{{ message }}
</div>
{% endif %}
{% if category == 'success': %}
<div class="alert border p-2 text-center alert-success border-success">
{{ message }}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endwith %}
<div>
<h1 class="m-0">{{PlaceAssetObj.name}}</h1>
<a href="/develop/universes/{{UniverseObj.id}}/places" class="text-decoration-none">Return to Manage Universe</a>
</div>
<div class="linebreak"></div>
<div class="row">
<div class="col-md-3 border-end page-tabs">
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/manage" class="w-100">Basic Settings</a>
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/access" class="w-100">Access</a>
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/upload-version" class="w-100">Upload File</a>
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/placeicon" class="w-100">Game Icon</a>
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/thumbnails" class="w-100">Thumbnails</a>
<a href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/version-history" class="w-100">Version History</a>
</div>
<div class="col-md-9">
{% block subcontent %}{% endblock %}
</div>
</div>
</div>
</div>
{% endblock %}
+52
View File
@@ -0,0 +1,52 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<h4>Basic Settings</h4>
<form method="post">
<input type="text" name="name" class="form-control" placeholder="Name" value="{{PlaceAssetObj.name}}" required>
<textarea name="description" class="form-control mt-2" placeholder="Description" style="min-height: 150px;" required>{{PlaceAssetObj.description}}</textarea>
<h5 class="mt-3">Chat Style</h5>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="chat-style-type" id="chat-style-type-radio1" value="0" {% if PlaceObj.chat_style.value == 0: %}checked{% endif %}>
<label class="form-check-label" for="chat-style-type-radio1">
Classic
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="chat-style-type" id="chat-style-type-radio2" value="1" {% if PlaceObj.chat_style.value == 1: %}checked{% endif %}>
<label class="form-check-label" for="chat-style-type-radio2">
Bubble
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="chat-style-type" id="chat-style-type-radio3" value="2" {% if PlaceObj.chat_style.value == 2: %}checked{% endif %}>
<label class="form-check-label" for="chat-style-type-radio3">
Classic and Bubble
</label>
</div>
{% if UniverseObj.place_year.value == 2018 or UniverseObj.place_year.value == 2020 or UniverseObj.place_year.value == 2021 %}
<h5 class="mt-3">Avatar Rig Type</h5>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="avatar-rig-type" id="avatar-rig-type-radio1" value="0" {% if PlaceObj.rig_choice.value == 0: %}checked{% endif %}>
<label class="form-check-label" for="avatar-rig-type-radio1">
User Choice
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="avatar-rig-type" id="avatar-rig-type-radio2" value="1" {% if PlaceObj.rig_choice.value == 1: %}checked{% endif %}>
<label class="form-check-label" for="avatar-rig-type-radio2">
Force R6
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="avatar-rig-type" id="avatar-rig-type-radio3" value="2" {% if PlaceObj.rig_choice.value == 2: %}checked{% endif %}>
<label class="form-check-label" for="avatar-rig-type-radio3">
Force R15
</label>
</div>
{% endif %}
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="mt-2">
<button type="submit" class="btn btn-success btn-sm w-100">Save</button>
</div>
</form>
{% endblock %}
+25
View File
@@ -0,0 +1,25 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<div class="row">
<div class="col">
<img src="/Thumbs/PlaceIcon.ashx?assetId={{PlaceAssetObj.id}}&x=420&y=420&refresh={{RandomNumber}}" class="mt-2 rounded" width="100%" style="aspect-ratio: 1/1;">
<p class="m-0" style="font-size: 10px;">Note: Image may be cached so you may see the previous image after uploading</p>
</div>
<div class="col">
<h4 class="m-0">Upload Place Icon</h4>
<p class="m-0 mb-2">Must have a 1:1 Aspect Ratio, Lesser than 2mb and be at max 1024 x 1024</p>
<form method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-success btn-sm w-100">Upload Place Icon</button>
</form>
<form method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="usegenerated" value="on">
<button type="submit" class="btn btn-primary mt-2 btn-sm w-100">Use Generated Icon</button>
</form>
</div>
</div>
{% endblock %}
@@ -0,0 +1,25 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<div class="row">
<div class="col-12">
<img src="/Thumbs/Asset.ashx?assetId={{PlaceAssetObj.id}}&x=1280&y=720&refresh={{RandomNumber}}" class="mt-2 rounded" width="100%" style="aspect-ratio: 16/9;">
<p class="m-0" style="font-size: 10px;">Note: Image may be cached so you may see the previous image after uploading</p>
</div>
<div class="col-12">
<h4 class="m-0">Upload Thumbnail</h4>
<p class="m-0 mb-2">Must have a 16:9 Aspect Ratio, Lesser than 2mb and be at max 1920x1080</p>
<form method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-success btn-sm w-100">Upload Thumbnail</button>
</form>
<form method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="usegenerated" value="on">
<button type="submit" class="btn btn-primary mt-2 btn-sm w-100">Use Generated Thumbnail</button>
</form>
</div>
</div>
{% endblock %}
@@ -0,0 +1,12 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<h4 class="m-0">Upload Place File</h4>
<p class="m-0 mb-2">Supported file types: .rbxl and .rbxlx Max File Size: 30mb</p>
<form method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-success btn-sm w-100">Upload File</button>
</form>
{% endblock %}
@@ -0,0 +1,25 @@
{% extends 'develop/games/manage-template.html' %}
{% block subcontent %}
<h4 class="m-0">Version History</h4>
<div class="linebreak"></div>
<div>
{% for AssetVer in AssetVersions.items: %}
<div class="bg-dark p-2 rounded w-100 mt-2">
<div class="d-flex align-items-center">
<div>
<h5 class="m-0">Version {{AssetVer.version}}</h5>
<p class="text-secondary m-0" style="font-size: 13px;">Created on {{AssetVer.created_at.strftime("%d/%m/%Y at %H:%M:%S UTC")}} | ID: {{AssetVer.id}}</p>
</div>
<a href="{{CDN_URL}}/{{AssetVer.content_hash}}" class="ms-auto text-white me-1" style="font-size: 20px;">
<i class="bi bi-download"></i>
</a>
</div>
</div>
{% endfor %}
</div>
<div class="align-items-center d-flex justify-content-center mt-2">
<a class="ms-auto m-0 text-decoration-none {% if not AssetVersions.has_prev %}text-secondary{%endif%}" {% if AssetVersions.has_prev %}href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/version-history?page={{AssetVersions.prev_num}}"{%endif%}>Previous</a>
<p class="ms-2 me-2 text-white m-0">Page {{AssetVersions.page}} of {{AssetVersions.pages}}</p>
<a class="me-auto m-0 text-decoration-none {% if not AssetVersions.has_next %}text-secondary{%endif%}" {% if AssetVersions.has_next %}href="/develop/universes/{{UniverseObj.id}}/place/{{PlaceAssetObj.id}}/version-history?page={{AssetVersions.next_num}}"{%endif%}>Next</a>
</div>
{% endblock %}
+25
View File
@@ -0,0 +1,25 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<form action="/develop/create/9" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create Game</button>
</form>
<div class="mt-2">
{% for place in UserPlaces: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/PlaceIcon.ashx?assetId={{place.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/games/{{place.id}}/"><h5 class="mb-1">{{place.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Visits: <span class="text-white">{{place.place.visitcount}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/universes/{{GetPlaceUniverse(place).id}}/manage">Manage</a>
</div>
</div>
{%endfor%}
{% if len(UserPlaces) == 0 %}
<p class="mt-5 mb-5 text-secondary w-100 text-center">No games found</p>
{%endif%}
</div>
{% endblock %}
+32
View File
@@ -0,0 +1,32 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<form action="/develop/create/1" method="post" enctype="multipart/form-data">
<div>
<input class="form-control" type="file" id="file" name="file" required>
</div>
<p class="m-0 text-secondary mb-2" style="font-size:12px;">Image has to be smaller than 3MB</p>
<div class="mb-2">
<input class="form-control" type="text" id="name" name="name" placeholder="Name" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create Image</button>
</form>
<div class="mt-2">
{% for image in UserImages.items: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/Asset.ashx?assetId={{image.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/library/{{image.id}}/"><h5 class="m-0">{{image.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Sales: <span class="text-white">{{image.sale_count}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/{{image.id}}/edit">Edit</a>
</div>
</div>
{%endfor%}
{% if len(UserImages.items) == 0: %}
<h5 class="text-center mt-3 mb-3">No items found</h5>
{%endif%}
</div>
{% endblock %}
+32
View File
@@ -0,0 +1,32 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<p class="m-0 text-secondary mb-2">Want to create Pants? <a class="text-decoration-none" href="/static/img/TemplatePants.png">Download</a> the template</p>
<form action="/develop/create/12" method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<div class="mb-3">
<input class="form-control" type="text" id="name" name="name" placeholder="Name" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create Pants</button>
</form>
<div class="mt-2">
{% for pants in UserClothing: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/Asset.ashx?assetId={{pants.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/catalog/{{pants.id}}/"><h5 class="m-0">{{pants.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Sales: <span class="text-white">{{pants.sale_count}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/{{pants.id}}/edit">Edit</a>
</div>
</div>
{%endfor%}
{% if len(UserClothing) == 0: %}
<h5 class="text-center mt-3 mb-3">No items found</h5>
{%endif%}
</div>
{% endblock %}
+32
View File
@@ -0,0 +1,32 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<p class="m-0 text-secondary mb-2">Want to create Shirts? <a class="text-decoration-none" href="/static/img/TemplateShirt.png">Download</a> the template</p>
<form action="/develop/create/11" method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<div class="mb-3">
<input class="form-control" type="text" id="name" name="name" placeholder="Name" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create Shirt</button>
</form>
<div class="mt-2">
{% for shirt in UserClothing: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/Asset.ashx?assetId={{shirt.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/catalog/{{shirt.id}}/"><h5 class="m-0">{{shirt.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Sales: <span class="text-white">{{shirt.sale_count}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/{{shirt.id}}/edit">Edit</a>
</div>
</div>
{%endfor%}
{% if len(UserClothing) == 0: %}
<h5 class="text-center mt-3 mb-3">No items found</h5>
{%endif%}
</div>
{% endblock %}
+32
View File
@@ -0,0 +1,32 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<form action="/develop/create/3" method="post" enctype="multipart/form-data">
<div>
<input class="form-control" type="file" id="file" name="file" required>
</div>
<p class="m-0 text-secondary mb-2" style="font-size:12px;">Sound has to be a MP3 File, Lesser than 8MB and shorter than 8 minutes. Minimum: 20 Robux, every second of audio costs 0.5 robux, will round down if total is decimal point. </p>
<div class="mb-2">
<input class="form-control" type="text" id="name" name="name" placeholder="Name" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create Sound</button>
</form>
<div class="mt-2">
{% for sound in UserSounds.items: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/Asset.ashx?assetId={{sound.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/library/{{sound.id}}/"><h5 class="m-0">{{sound.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Sales: <span class="text-white">{{sound.sale_count}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/{{sound.id}}/edit">Edit</a>
</div>
</div>
{%endfor%}
{% if len(UserSounds.items) == 0: %}
<h5 class="text-center mt-3 mb-3">No items found</h5>
{%endif%}
</div>
{% endblock %}
+31
View File
@@ -0,0 +1,31 @@
{% extends 'develop/template.html' %}
{% block subcontent %}
<form action="/develop/create/2" method="post" enctype="multipart/form-data">
<div class="mb-3">
<input class="form-control" type="file" id="file" name="file" required>
</div>
<div class="mb-3">
<input class="form-control" type="text" id="name" name="name" placeholder="Name" required>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
{% if GroupIdContext != None %}<input type="hidden" name="groupIdContext" value="{{GroupIdContext}}">{%endif%}
<button type="submit" class="btn btn-success btn-sm w-100">Create T-Shirt</button>
</form>
<div class="mt-2">
{% for tshirt in UserClothing: %}
<div class="w-100 m-1 p-1 d-flex">
<img src="/Thumbs/Asset.ashx?assetId={{tshirt.id}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a class="text-white text-decoration-none" href="/catalog/{{tshirt.id}}/"><h5 class="m-0">{{tshirt.name}}</h5></a>
<p class="text-secondary m-0" style="font-size:13px;">Sales: <span class="text-white">{{tshirt.sale_count}}</span></p>
</div>
<div class="ms-auto mt-auto mb-auto">
<a class="btn btn-sm border-primary text-white" href="/develop/{{tshirt.id}}/edit">Edit</a>
</div>
</div>
{%endfor%}
{% if len(UserClothing.items) == 0: %}
<h5 class="text-center mt-3 mb-3">No items found</h5>
{%endif%}
</div>
{% endblock %}
+54
View File
@@ -0,0 +1,54 @@
{% extends '__layout__.html' %}
{% block title %}Develop{% endblock %}
{% block head %}
<link href="/static/css/develop.css" rel="stylesheet"/>
{% endblock %}
{% block content %}
<div id="main">
<div class="container" style="max-width: 900px;">
<h1>Develop</h1>
<select class="form-control w-100 mb-2" id="select-creator">
<option value="-1">Created by you</option>
{% for group in UserGroups: %}
<option value="{{group.id}}" {% if GroupIdContext == group.id: %}selected{%endif%}>{{group.name}}</option>
{% endfor %}
</select>
<select class="form-control w-100 mb-2" id="select-asset-type">
<option value="9" {% if PageType == 9: %}selected{%endif%}>Games</option>
<option value="1" {% if PageType == 1: %}selected{%endif%}>Image</option>
<option value="3" {% if PageType == 3: %}selected{%endif%}>Audio</option>
<option value="11" {% if PageType == 11: %}selected{%endif%}>Shirts</option>
<option value="12" {% if PageType == 12: %}selected{%endif%}>Pants</option>
<option value="2" {% if PageType == 2: %}selected{%endif%}>T-Shirts</option>
</select>
{% with messages = get_flashed_messages() %}
{% if messages %}
<div>
{% for message in messages %}
<div class="alert border border-danger p-2 text-center messagealerts">
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
<div class="linebreak"></div>
{% block subcontent %}{% endblock %}
<div class="d-flex">
{% if PreviousPage > 0: %}
<a href="/develop?type={{PageType}}&page={{PreviousPage}}{% if GroupIdContext != None %}&groupId={{GroupIdContext}}{%endif%}" class="ms-auto text-decoration-none text-primary">Previous</a>
{%else%}
<a class="ms-auto text-decoration-none text-secondary">Previous</a>
{% endif %}
<p class="ms-1 me-1">{{PageNumber}}</p>
{% if NextPage > 0: %}
<a href="/develop?type={{PageType}}&page={{NextPage}}{% if GroupIdContext != None %}&groupId={{GroupIdContext}}{%endif%}" class="me-auto text-decoration-none text-primary">Next</a>
{%else%}
<a class="me-auto text-decoration-none text-secondary">Next</a>
{% endif %}
</div>
</div>
</div>
<script>const s = document.getElementById("select-asset-type");s.addEventListener("change", function() {var u = new URL(window.location.href);var sb = s.value;u.searchParams.set("type", sb);;window.location.href = u;});</script>
<script>const c = document.getElementById("select-creator");c.addEventListener("change", function() {var u = new URL(window.location.href);var sb = c.value;if (sb < 1 ){ u.searchParams.delete("groupId") } else { u.searchParams.set("groupId", sb) };u.searchParams.delete("type");window.location.href = u;});</script>
{% endblock %}
+24
View File
@@ -0,0 +1,24 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<h4>Access</h4>
<form method="post">
<label for="MinAccountAgeInput" class="form-label">Minimum Account Age ( 0 - 365 )</label>
<input class="form-control mb-1" type="number" name="minaccountage" id="MinAccountAgeInput" placeholder="Min Account Age" required value="{{UniverseObj.minimum_account_age}}">
<div class="w-100">
<input class="form-check-input" type="checkbox" name="ispublic" id="isPublicCheckbox" {%if UniverseObj.is_public%}checked{%endif%}>
<label class="form-check-label" for="isPublicCheckbox">
<p class="text-white m-0">Public</p>
</label>
</div>
<div class="w-100 mt-1">
<input class="form-check-input" type="checkbox" name="bcrequired" id="BCRequiredCheckbox" {%if UniverseObj.bc_required%}checked{%endif%}>
<label class="form-check-label" for="BCRequiredCheckbox">
<p class="text-white m-0">Builders Club members only</p>
</label>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="mt-2">
<button type="submit" class="btn btn-success btn-sm w-100">Save</button>
</div>
</form>
{% endblock %}
+30
View File
@@ -0,0 +1,30 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Badges</h4>
<div class="ms-auto">
<a class="btn btn-primary btn-sm" href="/develop/universes/{{UniverseObj.id}}/create-badge">Create Badge</a>
</div>
</div>
<div class="w-100 mt-2">
{% for badgeObj in Badges: %}
<div class="bg-dark p-2 rounded w-100 mt-2">
<div class="d-flex">
<img src="/Thumbs/Asset.ashx?x=180&y=180&assetId={{badgeObj.icon_image_id}}" width="100px" height="100px" class="border rounded">
<div class="ms-2 h-100">
<h5 class="m-0">{{badgeObj.name}}</h5>
<p class="m-0 mt-1 text-secondary" style="font-size: 14px;">Badge ID: <span class="text-white">{{badgeObj.id}}</span></p>
<p class="m-0 text-secondary" style="font-size: 14px;">Awarded Yesterday: <span class="text-white">{{GetBadgeAwardedPastDay(badgeObj.id)}}</span></p>
<p class="m-0 text-secondary" style="font-size: 14px;">Total Awarded: <span class="text-white">{{GetTotalBadgeAwardedCount(badgeObj.id)}}</span></p>
</div>
<div class="ms-auto">
<a class="btn btn-light btn-sm" href="/develop/universes/{{UniverseObj.id}}/badges/{{badgeObj.id}}">Edit Badge</a>
</div>
</div>
</div>
{% endfor %}
{% if len(Badges) == 0: %}
<p class="text-secondary text-center w-100 mt-5 mb-5">No Badges found, create one by clicking the button above</p>
{% endif %}
</div>
{% endblock %}
@@ -0,0 +1,27 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Create Badge</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/badges" class="text-decoration-none m-0">Manage Badges</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="form-floating">
<input type="text" class="form-control" id="name" name="name" placeholder="Badge Name" required>
<label for="name">Badge Name</label>
</div>
<div class="form-floating mt-2">
<textarea class="form-control" id="description" name="description" placeholder="Badge Description" style="height: 100px;" required></textarea>
<label for="description">Badge Description</label>
</div>
<div class="mt-2">
<h5 class="m-0 mb-1">Badge Icon</h5>
<input type="file" class="form-control" name="icon-file" id="file" class="mt-2" required>
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-primary btn-sm w-100 mt-2">Create Badge</button>
</form>
{% endblock %}
@@ -0,0 +1,27 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Create Gamepass</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/gamepasses" class="text-decoration-none m-0">Manage Gamepasses</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="form-floating">
<input type="text" class="form-control" id="name" name="name" placeholder="Gamepass Name" required>
<label for="name">Gamepass Name</label>
</div>
<div class="form-floating mt-2">
<textarea class="form-control" id="description" name="description" placeholder="Gamepass Description" style="height: 100px;" required></textarea>
<label for="description">Gamepass Description</label>
</div>
<div class="mt-2">
<h5 class="m-0 mb-1">Gamepass Icon</h5>
<input type="file" class="form-control" name="file" id="file" class="mt-2" required>
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-primary btn-sm w-100 mt-2">Create Gamepass</button>
</form>
{% endblock %}
@@ -0,0 +1,15 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Create new place</h4>
<p class="text-secondary m-0 ms-2" style="font-size: 13px;">{{TotalAmountPlacesCreated}} / 10 Places used</p>
</div>
<div class="w-100 mt-2">
<form method="post">
<p class="text-secondary m-0 mb-1">Are you sure you want to create a new place under <span class="text-white">{{RootPlaceAssetObj.name}}</span>?</p>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-success btn-sm w-100">Create Place</button>
</form>
</div>
{% endblock %}
@@ -0,0 +1,27 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Create Developer Product</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/developer-products" class="text-decoration-none m-0">Manage Developer Products</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="form-floating">
<input type="text" class="form-control" id="name" name="name" placeholder="Product Name" required>
<label for="name">Product Name</label>
</div>
<div class="form-floating mt-2">
<textarea class="form-control" id="description" name="description" placeholder="Gamepass Description" style="height: 100px;" required></textarea>
<label for="description">Product Description</label>
</div>
<div class="mt-2">
<h5 class="m-0 mb-1">Product Icon</h5>
<input type="file" class="form-control" name="file" id="file" class="mt-2" required>
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-primary btn-sm w-100 mt-2">Create Developer Product</button>
</form>
{% endblock %}
@@ -0,0 +1,29 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Developer Products</h4>
<div class="ms-auto">
<a class="btn btn-primary btn-sm" href="/develop/universes/{{UniverseObj.id}}/create-product">Create Developer Product</a>
</div>
</div>
<div class="w-100 mt-2">
{% for product in DeveloperProducts: %}
<div class="bg-dark p-2 rounded w-100 mt-2">
<div class="d-flex">
<img src="/Thumbs/Asset.ashx?x=180&y=180&assetId={{product.iconimage_assetid}}" width="100px" height="100px" class="border rounded">
<div class="ms-2 h-100">
<h5 class="m-0">{{product.name}}</h5>
<p class="m-0 mt-1 text-secondary" style="font-size: 14px;">Product ID: <span class="text-white">{{product.productid}}</span></p>
<p class="m-0 text-secondary" style="font-size: 14px;">Total sold: <span class="text-white">{{product.sales_count}}</span></p>
</div>
<div class="ms-auto">
<a class="btn btn-light btn-sm" href="/develop/universes/{{UniverseObj.id}}/developer-products/{{product.productid}}">Edit Product</a>
</div>
</div>
</div>
{% endfor %}
{% if len(DeveloperProducts) == 0: %}
<p class="text-secondary text-center w-100 mt-5 mb-5">No Developer Products found, create one by clicking the button above</p>
{% endif %}
</div>
{% endblock %}
@@ -0,0 +1,35 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Edit Badge</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/badges" class="text-decoration-none m-0">Manage Badges</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="row">
<div class="col-md-5">
<img style="aspect-ratio:1/1; max-width: 400px; max-height: 400px;" width="100%" src="/Thumbs/Asset.ashx?assetId={{BadgeObj.icon_image_id}}&x=352&y=352" class="rounded">
<div class="mt-2">
<input type="file" class="form-control" name="icon-file" id="file" class="mt-2">
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
</div>
<div class="col-md-7 pt-2 pb-2 ps-4 pe-4 ps-md-1 pe-md-1">
<form method="post">
<div class="form-floating mb-2">
<input type="text" class="form-control" id="item-name" name="badge-name" placeholder="Awesome Badge!" required value="{{BadgeObj.name}}">
<label for="item-name">Name</label>
</div>
<div class="form-floating mb-2">
<textarea class="form-control mt-2" placeholder="Description" style="min-height: 150px;" name="badge-description">{{BadgeObj.description}}</textarea>
<label for="item-description">Description</label>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<button type="submit" class="btn btn-primary btn-sm w-100 text-center">Save Changes</button>
</form>
</div>
</div>
</form>
{% endblock %}
@@ -0,0 +1,53 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Edit Gamepass</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/gamepasses" class="text-decoration-none m-0">Manage Gamepasses</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="row">
<div class="col-md-5">
<img style="aspect-ratio:1/1; max-width: 400px; max-height: 400px;" width="100%" src="/Thumbs/Asset.ashx?assetId={{GamepassObj.gamepass_id}}&x=352&y=352" class="rounded">
<div class="mt-2">
<input type="file" class="form-control" name="icon-file" id="file" class="mt-2">
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
</div>
<div class="col-md-7 pt-2 pb-2 ps-4 pe-4 ps-md-1 pe-md-1">
<form method="post">
<div class="form-floating mb-2">
<input type="text" class="form-control" id="item-name" name="pass-name" placeholder="Awesome Item!" required value="{{GamepassObj.gamepass.name}}">
<label for="item-name">Name</label>
</div>
<div class="form-floating mb-2">
<textarea class="form-control mt-2" placeholder="Description" style="min-height: 150px;" name="pass-description">{{GamepassObj.gamepass.description}}</textarea>
<label for="item-description">Description</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" {% if GamepassObj.gamepass.is_for_sale: %}checked{%endif%} id="isForSaleCheckbox" name="is-for-sale">
<label class="form-check-label" for="isForSaleCheckbox">
For Sale
</label>
</div>
<div class="p-1 row">
<div class="col">
<div class="input-group">
<span class="input-group-text" id="basic-addon1">R$</span>
<input type="number" class="form-control" placeholder="Robux" aria-label="Robux" name="robux-cost" value="{{GamepassObj.gamepass.price_robux}}">
</div>
</div>
<div class="col-12">
<p style="font-size:13px;">* Vortexi will take a 30% fee from the sale</p>
</div>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<button type="submit" class="btn btn-primary btn-sm w-100 text-center">Save Changes</button>
</form>
</div>
</div>
</form>
{% endblock %}
@@ -0,0 +1,53 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Edit Developer Product</h4>
<div class="ms-auto">
<a href="/develop/universes/{{UniverseObj.id}}/developer-products" class="text-decoration-none m-0">Manage Developer Products</a>
</div>
</div>
<div class="linebreak"></div>
<form method="post" enctype="multipart/form-data">
<div class="row">
<div class="col-md-5">
<img style="aspect-ratio:1/1; max-width: 400px; max-height: 400px;" width="100%" src="/Thumbs/Asset.ashx?assetId={{ProductObj.iconimage_assetid}}&x=352&y=352" class="rounded">
<div class="mt-2">
<input type="file" class="form-control" name="icon-file" id="file" class="mt-2">
<p class="text-secondary m-0 mt-1" style="font-size: 12px;">Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb</p>
</div>
</div>
<div class="col-md-7 pt-2 pb-2 ps-4 pe-4 ps-md-1 pe-md-1">
<form method="post">
<div class="form-floating mb-2">
<input type="text" class="form-control" id="item-name" name="product-name" placeholder="Awesome Item!" required value="{{ProductObj.name}}">
<label for="item-name">Name</label>
</div>
<div class="form-floating mb-2">
<textarea class="form-control mt-2" placeholder="Description" style="min-height: 150px;" name="product-description">{{ProductObj.description}}</textarea>
<label for="item-description">Description</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" {% if ProductObj.is_for_sale: %}checked{%endif%} id="isForSaleCheckbox" name="is-for-sale">
<label class="form-check-label" for="isForSaleCheckbox">
For Sale
</label>
</div>
<div class="p-1 row">
<div class="col">
<div class="input-group">
<span class="input-group-text" id="basic-addon1">R$</span>
<input type="number" class="form-control" placeholder="Robux" aria-label="Robux" name="robux-cost" value="{{ProductObj.robux_price}}">
</div>
</div>
<div class="col-12">
<p style="font-size:13px;">* Vortexi will take a 30% fee from the sale</p>
</div>
</div>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<button type="submit" class="btn btn-primary btn-sm w-100 text-center">Save Changes</button>
</form>
</div>
</div>
</form>
{% endblock %}
@@ -0,0 +1,29 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<h4 class="m-0">Gamepasses</h4>
<div class="ms-auto">
<a class="btn btn-primary btn-sm" href="/develop/universes/{{UniverseObj.id}}/create-gamepass">Create Gamepass</a>
</div>
</div>
<div class="w-100 mt-2">
{% for gamepassobj in Gamepasses: %}
<div class="bg-dark p-2 rounded w-100 mt-2">
<div class="d-flex">
<img src="/Thumbs/Asset.ashx?x=180&y=180&assetId={{gamepassobj.gamepass_id}}" width="100px" height="100px" class="border rounded">
<div class="ms-2 h-100">
<h5 class="m-0">{{gamepassobj.gamepass.name}}</h5>
<p class="m-0 mt-1 text-secondary" style="font-size: 14px;">Gamepass ID: <span class="text-white">{{gamepassobj.gamepass_id}}</span></p>
<p class="m-0 text-secondary" style="font-size: 14px;">Total sold: <span class="text-white">{{gamepassobj.gamepass.sale_count}}</span></p>
</div>
<div class="ms-auto">
<a class="btn btn-light btn-sm" href="/develop/universes/{{UniverseObj.id}}/gamepass/{{gamepassobj.gamepass_id}}">Edit Gamepass</a>
</div>
</div>
</div>
{% endfor %}
{% if len(Gamepasses) == 0: %}
<p class="text-secondary text-center w-100 mt-5 mb-5">No gamepasses found, create one by clicking the button above</p>
{% endif %}
</div>
{% endblock %}
@@ -0,0 +1,64 @@
{% extends '__layout__.html' %}
{% block title %}Manage Universe{% endblock %}
{% block head %}
<link href="/static/css/develop.css" rel="stylesheet"/>
<style>
.page-tabs a {
color: #dadada !important;
font-size: medium;
margin-top: 5px;
margin-bottom: 8px;
font-weight: 500;
text-decoration: none;
width: 100%;
text-align: center;
display: block;
padding: 8px;
background-color: #1f1f1f;
box-shadow: 0 0 1px 0 rgba(0,0,0,.2), 0 1px 2px 0 rgba(0,0,0,.2);
}
.page-tabs a:hover {
color: #fff !important;
}
</style>
{% endblock %}
{% block content %}
<div id="main">
<div class="container" style="max-width: 1000px;">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div>
{% for category, message in messages %}
{% if category == 'error': %}
<div class="alert border p-2 text-center alert-danger border-danger">
{{ message }}
</div>
{% endif %}
{% if category == 'success': %}
<div class="alert border p-2 text-center alert-success border-success">
{{ message }}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endwith %}
<h1 class="m-0">{{RootPlaceAssetObj.name}}</h1>
<p class="text-secondary m-0 mb-1 ms-1" style="font-size: 12px;">Universe ID: <span class="text-white">{{UniverseObj.id}}</span> Starting Place ID: <span class="text-white">{{RootPlaceAssetObj.id}}</span></p>
<div class="linebreak"></div>
<div class="row">
<div class="col-md-3 border-end page-tabs">
<a href="/develop/universes/{{UniverseObj.id}}/manage" class="w-100">Basic Settings</a>
<a href="/develop/universes/{{UniverseObj.id}}/access" class="w-100">Access</a>
<a href="/develop/universes/{{UniverseObj.id}}/places" class="w-100">Places</a>
<a href="/develop/universes/{{UniverseObj.id}}/gamepasses" class="w-100">Gamepasses</a>
<a href="/develop/universes/{{UniverseObj.id}}/developer-products" class="w-100">Developer Products</a>
<a href="/develop/universes/{{UniverseObj.id}}/badges" class="w-100">Badges</a>
</div>
<div class="col-md-9">
{% block subcontent %}{% endblock %}
</div>
</div>
</div>
</div>
{% endblock %}
+21
View File
@@ -0,0 +1,21 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<h4>Basic Settings</h4>
<form method="post">
<input type="text" name="name" class="form-control" placeholder="Name" value="{{RootPlaceAssetObj.name}}" required>
<textarea name="description" class="form-control mt-2" placeholder="Description" style="min-height: 150px;" required>{{RootPlaceAssetObj.description}}</textarea>
<p class="text-secondary m-0 mb-1" style="font-size: 13px;">Updating name and description will update the Starting Place name and description</p>
<h5 class="mt-2">Place Year</h5>
<select name="place_year" class="form-control">
<!-- <option value="2014" {% if UniverseObj.place_year.value == 2014 %}selected{%endif%}>2014</option>-->
<option value="2016" {% if UniverseObj.place_year.value == 2016 %}selected{%endif%}>2016</option>
<option value="2018" {% if UniverseObj.place_year.value == 2018 %}selected{%endif%}>2018</option>
<!-- <option value="2020" {% if UniverseObj.place_year.value == 2020 %}selected{%endif%}>2020</option>
<option value="2021" {% if UniverseObj.place_year.value == 2021 %}selected{%endif%}>2021</option>-->
</select>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="mt-2">
<button type="submit" class="btn btn-success btn-sm w-100">Save</button>
</div>
</form>
{% endblock %}
+27
View File
@@ -0,0 +1,27 @@
{% extends 'develop/universes/manage-template.html' %}
{% block subcontent %}
<div class="d-flex align-items-center">
<div>
<h4 class="m-0">Places</h4>
<p class="text-secondary m-0" style="font-size: 13px;">{{TotalAmountPlacesCreated}} / 10 Places used</p>
</div>
<div class="ms-auto">
<a class="btn btn-light btn-sm" href="/develop/universes/{{UniverseObj.id}}/create-place">Create Place</a>
</div>
</div>
<div class="w-100 mt-2">
{% for placeObj in universePlaces: %}
<div class="p-1 w-100 d-flex mb-1">
<img src="/Thumbs/PlaceIcon.ashx?assetId={{placeObj.placeid}}&x=100&y=100" class="rounded" height="100px" width="100px">
<div class="ms-2">
<a href="/games/{{placeObj.placeid}}/--" class="text-decoration-none"><h5 class="m-0">{{placeObj.assetObj.name}}</h5></a>
{% if UniverseObj.root_place_id == placeObj.placeid %}<p class="text-secondary m-0" style="font-size: 14px;"><i class="bi bi-star-fill text-warning"></i> Start Place</p>{% endif %}
<p class="text-secondary m-0" style="font-size: 14px;">Place ID: <span class="text-white">{{placeObj.placeid}}</span></p>
</div>
<div class="ms-auto">
<a class="btn btn-outline-light btn-sm" href="/develop/universes/{{UniverseObj.id}}/place/{{placeObj.placeid}}/manage">Manage Place</a>
</div>
</div>
{% endfor %}
</div>
{% endblock %}