diff --git a/meta.xml b/meta.xml
index dd4d6d07..79e7de37 100644
--- a/meta.xml
+++ b/meta.xml
@@ -119,6 +119,7 @@
+
diff --git a/scripts/client/house.js b/scripts/client/house.js
new file mode 100644
index 00000000..aca1deca
--- /dev/null
+++ b/scripts/client/house.js
@@ -0,0 +1,82 @@
+// ===========================================================================
+// Vortrex's Roleplay Resource
+// https://github.com/VortrexFTW/gtac_roleplay
+// ===========================================================================
+// FILE: house.js
+// DESC: Provides house functions and usage
+// TYPE: Client (JavaScript)
+// ===========================================================================
+
+class HouseData {
+ constructor(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
+ this.index = -1;
+ this.houseId = houseId;
+ this.entrancePosition = entrancePosition;
+ this.blipModel = blipModel;
+ this.pickupModel = pickupModel;
+ this.hasInterior = hasInterior;
+ this.blipId = -1;
+ }
+}
+
+// ===========================================================================
+
+function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
+ if(getGame() == VRR_GAME_GTA_IV) {
+ if(getHouseData(houseId) != false) {
+ if(blipModel == -1) {
+ natives.removeBlipAndClearIndex(getHouseData(houseId).blipId);
+ getHouseData(houseId).blipId = -1;
+ //houses.splice(getHouseData(houseId).index, 1);
+ //setAllHouseDataIndexes();
+ } else {
+ if(getHouseData(houseId).blipId != -1) {
+ natives.setBlipCoordinates(getHouseData(houseId).blipId, getHouseData(houseId).entrancePosition);
+ natives.changeBlipSprite(getHouseData(houseId).blipId, getHouseData(houseId).blipModel);
+ //natives.changeBlipNameFromAscii(getHouseData(houseId).blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
+ } else {
+ let blipId = natives.addBlipForCoord(entrancePosition);
+ if(blipId) {
+ getHouseData(houseId).blipId = blipId;
+ natives.changeBlipSprite(blipId, blipModel);
+ natives.setBlipMarkerLongDistance(blipId, false);
+ }
+ }
+ }
+ } else {
+ if(blipModel != -1) {
+ let tempHouseData = new HouseData(houseId, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
+ let blipId = natives.addBlipForCoord(entrancePosition);
+ if(blipId) {
+ tempHouseData.blipId = blipId;
+ natives.changeBlipSprite(blipId, blipModel);
+ natives.setBlipMarkerLongDistance(blipId, false);
+ //natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
+ }
+ houses.push(tempHouseData);
+ setAllHouseDataIndexes();
+ }
+ }
+ }
+}
+
+// ===========================================================================
+
+/**
+ * @param {number} houseId - The ID of the house (initially provided by server)
+ * @return {HouseData} The house's data (class instance)
+ */
+function getHouseData(houseId) {
+ let tempHouseData = houses.find((h) => h.houseId == houseId);
+ return (typeof tempHouseData != "undefined") ? tempHouseData : false;
+}
+
+// ===========================================================================
+
+function setAllHouseDataIndexes() {
+ for(let i in houses) {
+ houses[i].index = i;
+ }
+}
+
+// ===========================================================================
\ No newline at end of file