Skip to content

Commit b1f76a4

Browse files
Add Objects list page
1 parent 4e660b1 commit b1f76a4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+241
-13
lines changed

assets/images/Objects/Airport.jpg

110 KB
101 KB
79.3 KB
89.5 KB
80.8 KB

assets/images/Objects/Cranes.jpg

52.8 KB
65.8 KB
123 KB
28.7 KB
122 KB
79.4 KB
99.4 KB
123 KB
61.4 KB
113 KB
101 KB
110 KB
121 KB

assets/images/Objects/Plants.jpg

125 KB

assets/images/Objects/Ramps.jpg

102 KB
106 KB

assets/images/Objects/Rocks.jpg

108 KB
49.1 KB
47.7 KB
76.1 KB
71.7 KB
96.6 KB

assets/images/Objects/Signs.jpg

129 KB
95.2 KB
200 KB

assets/images/Objects/Trees.jpg

126 KB
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import os
2+
import requests
3+
from bs4 import BeautifulSoup
4+
from urllib.parse import urljoin
5+
6+
BASE_URL = "https://wiki.multitheftauto.com"
7+
TARGET_URL = f"{BASE_URL}/wiki/Object_IDs"
8+
OUTPUT_DIR = "object_images"
9+
10+
os.makedirs(OUTPUT_DIR, exist_ok=True)
11+
12+
response = requests.get(TARGET_URL)
13+
soup = BeautifulSoup(response.text, "html.parser")
14+
content = soup.select_one("#mw-content-text")
15+
16+
img_links = content.select("a[href^='/wiki/File:'] > img[src$='.jpg']")
17+
18+
for img in img_links:
19+
parent_link = img.find_parent("a")
20+
file_page_url = urljoin(BASE_URL, parent_link["href"])
21+
22+
file_page_resp = requests.get(file_page_url)
23+
file_soup = BeautifulSoup(file_page_resp.text, "html.parser")
24+
25+
full_image_link = file_soup.select_one("#file > a")
26+
27+
if full_image_link and full_image_link["href"].lower().endswith(".jpg"):
28+
full_img_url = urljoin(BASE_URL, full_image_link["href"])
29+
img_name = os.path.basename(full_img_url)
30+
31+
save_path = os.path.join(OUTPUT_DIR, img_name)
32+
33+
if not os.path.exists(save_path):
34+
print(f"📥 Downloading full image: {img_name}")
35+
img_data = requests.get(full_img_url).content
36+
with open(save_path, "wb") as f:
37+
f.write(img_data)
38+
else:
39+
print(f"✔️ Already exists: {img_name}")
40+
else:
41+
print(f"⚠️ Couldn't find full image for {file_page_url}")
42+
43+
print("✅ All images downloaded successfully.")
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
---
2+
import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
3+
4+
import { getSeeAlsoLinksFromList } from '@src/utils/general';
5+
import SeeAlsoSection from '@src/components/SeeAlsoSection.astro';
6+
7+
import { Image } from 'astro:assets';
8+
import { getAssetImagePath } from '@src/utils/general';
9+
10+
import NoteBox from '@src/components/NoteBox.astro';
11+
12+
---
13+
<StarlightPage frontmatter={{
14+
template: 'doc',
15+
title: 'Objects',
16+
tableOfContents: false,
17+
}}>
18+
<p>
19+
This page displays a subset of object model IDs that can be placed using the <a href="/reference/Map_editor">Map Editor</a>, <a href="/reference/createObject">createObject</a> and <a href="/reference/createBuilding">createBuilding</a>.
20+
</p>
21+
22+
<NoteBox type='tip'>
23+
<h4 style="margin: 0;">Alternatives</h4>
24+
<ul>
25+
<li>Object model IDs can also be listed and previewed in-game using the <a href="/reference/Map_editor">Map Editor's object browser</a></li>
26+
<li>The object browser's list is loaded from <a href="https://github.com/multitheftauto/mtasa-resources/blob/master/%5Beditor%5D/editor_gui/client/browser/objects.xml" target="_blank">this XML file on github.com/multitheftauto/mtasa-resources</a></li>
27+
<li>Online database of GTA: San Andreas object model IDs: <a href="https://dev.prineside.com/gtasa_samp_model_id/" target="_blank">dev.prineside.com/gtasa_samp_model_id</a></li>
28+
</ul>
29+
</NoteBox>
30+
<NoteBox type="warning">
31+
None of these lists include Low LOD object models. You are able to know which Low LOD model is linked to a certain High LOD object model in-game using the <a href="/reference/Map_editor">Map Editor</a>.
32+
</NoteBox>
33+
34+
35+
<h5>Table of Contents</h5>
36+
<ul>
37+
<li><a href="#cat-beach-and-sea">Beach and Sea</a></li>
38+
<li><a href="#cat-buildings">Buildings</a></li>
39+
<li><a href="#cat-misc">Miscellaneous</a></li>
40+
<li><a href="#cat-industrial">Industrial</a></li>
41+
<li><a href="#cat-nature">Nature</a></li>
42+
<li><a href="#cat-structures">Structures</a></li>
43+
</ul>
44+
45+
<h3>Objects by Category</h3>
46+
47+
<h4 id="cat-beach-and-sea">Beach and Sea</h4>
48+
<div class="gallery">
49+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/BeachandSeaGeneral.jpg`)} alt=""/><p><em>General</em></p></div>
50+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/ShipsDocksandPiers1.jpg`)} alt=""/><p><em>Ships, Docks and Piers</em></p></div>
51+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/ShipsDocksandPiers2.jpg`)} alt=""/><p><em>Ships, Docks and Piers</em></p></div>
52+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/ShipsDocksandPiers3.jpg`)} alt=""/><p><em>Ships, Docks and Piers</em></p></div>
53+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/ShipsDocksandPiers4.jpg`)} alt=""/><p><em>Ships, Docks and Piers</em></p></div>
54+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/ShipsDocksandPiers5.jpg`)} alt=""/><p><em>Ships, Docks and Piers</em></p></div>
55+
</div>
56+
57+
<h4 id="cat-buildings">Buildings</h4>
58+
<div class="gallery">
59+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/BarsClubsandCasinos.jpg`)} alt=""/><p><em>Bars, Clubs and Casinos</em></p></div>
60+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/BarsClubsandCasinos2.jpg`)} alt=""/><p><em>Bars, Clubs and Casinos</em></p></div>
61+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/BarsClubsandCasinos3.jpg`)} alt=""/><p><em>Bars, Clubs and Casinos</em></p></div>
62+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
63+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses2.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
64+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses3.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
65+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses4.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
66+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses5.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
67+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/FactoriesandWarehouses6.jpg`)} alt=""/><p><em>Factories and Warehouses</em></p></div>
68+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OfficesandSkyscrapers.jpg`)} alt=""/><p><em>Offices and Skyscrapers</em></p></div>
69+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OfficesandSkyscrapers2.jpg`)} alt=""/><p><em>Offices and Skyscrapers</em></p></div>
70+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OfficesandSkyscrapers3.jpg`)} alt=""/><p><em>Offices and Skyscrapers</em></p></div>
71+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OtherBuildings.jpg`)} alt=""/><p><em>Other Buildings</em></p></div>
72+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OtherBuildings2.jpg`)} alt=""/><p><em>Other Buildings</em></p></div>
73+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OtherBuildings3.jpg`)} alt=""/><p><em>Other Buildings</em></p></div>
74+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/OtherBuildings4.jpg`)} alt=""/><p><em>Other Buildings</em></p></div>
75+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/RestaurantsandHotels.jpg`)} alt=""/><p><em>Restaurants and Hotels</em></p></div>
76+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/RestaurantsandHotels2.jpg`)} alt=""/><p><em>Restaurants and Hotels</em></p></div>
77+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/SportsandStadiums.jpg`)} alt=""/><p><em>Sports and Stadiums</em></p></div>
78+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/SportsandStadiums2.jpg`)} alt=""/><p><em>Sports and Stadiums</em></p></div>
79+
</div>
80+
81+
<h4 id="cat-misc">Miscellaneous</h4>
82+
<div class="gallery">
83+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousFoodAndDrinks1.jpg`)} alt=""/><p><em>Food and Drinks</em></p></div>
84+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousLaddersStairsAndScaffolding1.jpg`)} alt=""/><p><em>Ladders Stairs and Scaffolding</em></p></div>
85+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousMilitary1.jpg`)} alt=""/><p><em>Military</em></p></div>
86+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousPickupsAndIcons1.jpg`)} alt=""/><p><em>Pickups and Icons</em></p></div>
87+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousSpecialObjects1.jpg`)} alt=""/><p><em>Special</em></p></div>
88+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousStreetAndRoad1.jpg`)} alt=""/><p><em>Street and Road items</em></p></div>
89+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/MiscellaneousTrash1.jpg`)} alt=""/><p><em>Trash</em></p></div>
90+
</div>
91+
92+
<h4 id="cat-industrial">Industrial</h4>
93+
<div class="gallery">
94+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Cranes.jpg`)} alt=""/><p><em>Cranes</em></p></div>
95+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/CratesDrumsandRacks.jpg`)} alt=""/><p><em>Crates, Drums and Racks</em></p></div>
96+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/CratesDrumsandRacks2.jpg`)} alt=""/><p><em>Crates, Drums and Racks</em></p></div>
97+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/IndustrialGeneral.jpg`)} alt=""/><p><em>General</em></p></div>
98+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/IndustrialGeneral2.jpg`)} alt=""/><p><em>General</em></p></div>
99+
</div>
100+
101+
<h4 id="cat-nature">Nature</h4>
102+
<div class="gallery">
103+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Rocks.jpg`)} alt=""/><p><em>Rocks</em></p></div>
104+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Plants.jpg`)} alt=""/><p><em>Plants</em></p></div>
105+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Trees.jpg`)} alt=""/><p><em>Trees</em></p></div>
106+
</div>
107+
108+
<h4 id="cat-structures">Structures</h4>
109+
<div class="gallery">
110+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Airport.jpg`)} alt=""/><p><em>Airport and Aircraft</em></p></div>
111+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Ramps.jpg`)} alt=""/><p><em>Ramps</em></p></div>
112+
<div class="gallery-item"><Image src={getAssetImagePath(`Objects/Signs.jpg`)} alt=""/><p><em>Signs, Billboards and Statues</em></p></div>
113+
</div>
114+
115+
116+
<SeeAlsoSection seeAlsoLinks={getSeeAlsoLinksFromList([
117+
'reference:ID_Lists',
118+
])} currentId='' />
119+
</StarlightPage>
120+
121+
<script>
122+
// Make all gallery items clickable to open the image in a new tab
123+
document.querySelectorAll('.gallery-item').forEach(item => {
124+
item.addEventListener('click', () => {
125+
const img = item.querySelector('img');
126+
if (img) {
127+
window.open(img.src, '_blank');
128+
}
129+
});
130+
});
131+
</script>
132+
133+
<style>
134+
.gallery {
135+
display: flex;
136+
flex-wrap: wrap;
137+
gap: 8px;
138+
margin-bottom: 1.5em;
139+
}
140+
141+
.gallery-item {
142+
flex: 1 0 500px;
143+
max-width: 500px;
144+
text-align: center;
145+
font-size: 0.9em;
146+
margin: 0;
147+
cursor: pointer;
148+
}
149+
150+
.gallery-item img {
151+
width: 100%;
152+
height: auto;
153+
border: 1px solid var(--sl-color-gray-3);
154+
border-radius: 4px;
155+
}
156+
157+
.gallery-item p {
158+
margin: 0.5em 0 0;
159+
font-style: italic;
160+
color: var(--sl-color-gray-1);
161+
}
162+
163+
</style>

web/src/pages/reference/ID_Lists/index.astro

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,44 @@ import SeeAlsoSection from '@src/components/SeeAlsoSection.astro';
1010
tableOfContents: false,
1111
}}>
1212
<ul>
13-
<li><a href="/reference/ID_Lists/Bones">Bones</a></li>
14-
<li><a href="/reference/ID_Lists/Damage_Types">Damage Types</a></li>
15-
<li><a href="/reference/ID_Lists/Garages">Garages</a></li>
16-
<li><a href="/reference/ID_Lists/Interiors">Interiors</a></li>
17-
<li><a href="/reference/ID_Lists/Sounds">Sounds</a></li>
18-
<li><a href="/reference/ID_Lists/Vehicles">Vehicles</a></li>
19-
<ul>
20-
<li><a href="/reference/ID_Lists/Vehicle_Colors">Vehicle Colors</a></li>
21-
<li><a href="/reference/ID_Lists/Vehicle_Paintjobs">Vehicle Paintjobs</a></li>
22-
<li><a href="/reference/ID_Lists/Vehicle_Variants">Vehicle Variants</a></li>
23-
</ul>
24-
<li><a href="/reference/ID_Lists/Vending_Machines">Vending Machines</a></li>
25-
<li><a href="/reference/ID_Lists/Weather">Weather</a></li>
13+
<li>🦴 <a href="/reference/ID_Lists/Bones">Bones</a></li>
14+
<li>💥 <a href="/reference/ID_Lists/Damage_Types">Damage Types</a></li>
15+
<li>🚗 <a href="/reference/ID_Lists/Garages">Garages</a></li>
16+
<li>🏠 <a href="/reference/ID_Lists/Interiors">Interiors</a></li>
17+
<li>📦 <a href="/reference/ID_Lists/Objects">Objects</a></li>
18+
<li>🔊 <a href="/reference/ID_Lists/Sounds">Sounds</a></li>
19+
<li>🚘 <a href="/reference/ID_Lists/Vehicles">Vehicles</a>
20+
<ul>
21+
<li>🎨 <a href="/reference/ID_Lists/Vehicle_Colors">Vehicle Colors</a></li>
22+
<li>🖌️ <a href="/reference/ID_Lists/Vehicle_Paintjobs">Vehicle Paintjobs</a></li>
23+
<li>🔧 <a href="/reference/ID_Lists/Vehicle_Variants">Vehicle Variants</a></li>
24+
</ul>
25+
</li>
26+
<li>🥤 <a href="/reference/ID_Lists/Vending_Machines">Vending Machines</a></li>
27+
<li>⛅ <a href="/reference/ID_Lists/Weather">Weather</a></li>
2628
</ul>
2729

2830
<SeeAlsoSection seeAlsoLinks={getSeeAlsoLinksFromList([
2931
'reference:Lua_API',
3032
])} currentId='' />
3133
</StarlightPage>
34+
35+
<style>
36+
ul {
37+
list-style-type: none;
38+
padding-left: 0;
39+
}
40+
41+
li {
42+
margin-bottom: 0.5rem;
43+
}
44+
45+
li a {
46+
margin-left: 0.5rem;
47+
}
48+
49+
li ul {
50+
margin-top: 0.5rem;
51+
padding-left: 1.5rem;
52+
}
53+
</style>

0 commit comments

Comments
 (0)