Normal
If you are searching a furniture and clicking an item but it shows a wall item type. This fix is for you!First, run this query[CODE=sql]UPDATE catalog_itemsSET offer_id = CASE WHEN item_ids LIKE '%;%' AND SUBSTRING_INDEX(item_ids, ';', 1) REGEXP '^[0-9]+$' THEN CAST(SUBSTRING_INDEX(item_ids, ';', 1) AS UNSIGNED) WHEN item_ids LIKE '%:%' AND SUBSTRING_INDEX(item_ids, ':', 1) REGEXP '^[0-9]+$' THEN CAST(SUBSTRING_INDEX(item_ids, ':', 1) AS UNSIGNED) WHEN item_ids REGEXP '^[0-9]+$' THEN CAST(item_ids AS UNSIGNED) ELSE 0 -- or another appropriate default valueEND;[/CODE]This will match all id's in the offer_item column to the item_ids columnSecond, after running this query, you will need to install NodeJS, if it's already than no need to install it againNodeJS InstallationThird step, place this file/script inside gamedata folder where your FurnitureData.json is located and edit the database credentials to match your current database credentialsRECOMMENDED: Make a backup of your FurnitureData.json[CODE=javascript]const fs = require('fs');const mysql = require('mysql2');const { performance } = require('perf_hooks');// Database connection configurationconst dbConfig = { host: 'localhost', user: 'root', password: 'PASSWORD', database: 'DBNAME'};const connection = mysql.createConnection(dbConfig);function updateOfferIdsForSection(furniTypes, callback) { let completed = 0; furniTypes.forEach((furniture, index) => { const query = 'SELECT offer_id FROM catalog_items WHERE catalog_name = ?'; connection.query(query, [furniture.classname], (error, results) => { if (error) { console.error('Error querying database:', error); return callback(error); } if (results.length > 0) { furniture.offerid = results[0].offer_id; console.log(`Updated offerid for ${furniture.classname} to ${results[0].offer_id}`); } else { console.log(`No matching record found for ${furniture.classname}`); } completed++; if (completed === furniTypes.length) { callback(); } }); });}const start = performance.now();fs.readFile('FurnitureData.json', 'utf8', (err, data) => { if (err) { console.error('Error reading file:', err); return; } const furnitureData = JSON.parse(data); updateOfferIdsForSection(furnitureData.wallitemtypes.furnitype, (error) => { if (error) { console.error('Error updating wall item types:', error); return; } updateOfferIdsForSection(furnitureData.roomitemtypes.furnitype, (error) => { if (error) { console.error('Error updating room item types:', error); return; } const updatedJSONData = JSON.stringify(furnitureData, null, 2); fs.writeFile('FurnitureData.json', updatedJSONData, (err) => { if (err) { console.error('Error writing file:', err); return; } console.log('FurnitureData.json updated successfully'); connection.end((err) => { if (err) { console.error('Error closing connection:', err); return; } const end = performance.now(); console.log(`Script took ${(end - start) / 1000} seconds to finish`); }); }); }); });});[/CODE]Final Step:Use your favorite terminalRun "npm i" or "npm install" to install the dependencies/packagesRun "npm SCRIPTFILENAME.js"
If you are searching a furniture and clicking an item but it shows a wall item type. This fix is for you!
First, run this query
[CODE=sql]
UPDATE catalog_items
SET offer_id = CASE
WHEN item_ids LIKE '%;%' AND SUBSTRING_INDEX(item_ids, ';', 1) REGEXP '^[0-9]+$' THEN CAST(SUBSTRING_INDEX(item_ids, ';', 1) AS UNSIGNED)
WHEN item_ids LIKE '%:%' AND SUBSTRING_INDEX(item_ids, ':', 1) REGEXP '^[0-9]+$' THEN CAST(SUBSTRING_INDEX(item_ids, ':', 1) AS UNSIGNED)
WHEN item_ids REGEXP '^[0-9]+$' THEN CAST(item_ids AS UNSIGNED)
ELSE 0 -- or another appropriate default value
END;[/CODE]
This will match all id's in the offer_item column to the item_ids column
Second, after running this query, you will need to install NodeJS, if it's already than no need to install it again
NodeJS Installation
Third step, place this file/script inside gamedata folder where your FurnitureData.json is located and edit the database credentials to match your current database credentials
RECOMMENDED: Make a backup of your FurnitureData.json
[CODE=javascript]
const fs = require('fs');
const mysql = require('mysql2');
const { performance } = require('perf_hooks');
// Database connection configuration
const dbConfig = {
host: 'localhost',
user: 'root',
password: 'PASSWORD',
database: 'DBNAME'
};
const connection = mysql.createConnection(dbConfig);
function updateOfferIdsForSection(furniTypes, callback) {
let completed = 0;
furniTypes.forEach((furniture, index) => {
const query = 'SELECT offer_id FROM catalog_items WHERE catalog_name = ?';
connection.query(query, [furniture.classname], (error, results) => {
if (error) {
console.error('Error querying database:', error);
return callback(error);
}
if (results.length > 0) {
furniture.offerid = results[0].offer_id;
console.log(`Updated offerid for ${furniture.classname} to ${results[0].offer_id}`);
} else {
console.log(`No matching record found for ${furniture.classname}`);
completed++;
if (completed === furniTypes.length) {
callback();
});
const start = performance.now();
fs.readFile('FurnitureData.json', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
const furnitureData = JSON.parse(data);
updateOfferIdsForSection(furnitureData.wallitemtypes.furnitype, (error) => {
console.error('Error updating wall item types:', error);
updateOfferIdsForSection(furnitureData.roomitemtypes.furnitype, (error) => {
console.error('Error updating room item types:', error);
const updatedJSONData = JSON.stringify(furnitureData, null, 2);
fs.writeFile('FurnitureData.json', updatedJSONData, (err) => {
console.error('Error writing file:', err);
console.log('FurnitureData.json updated successfully');
connection.end((err) => {
console.error('Error closing connection:', err);
const end = performance.now();
console.log(`Script took ${(end - start) / 1000} seconds to finish`);
[/CODE]
Final Step:
Use your favorite terminal
Run "npm i" or "npm install" to install the dependencies/packages
Run "npm SCRIPTFILENAME.js"