feat(qb-core): import 153 items din qs-inventory preload update
This commit is contained in:
95
_merge_items.py
Normal file
95
_merge_items.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import re, os
|
||||
|
||||
def extract_items_with_defs(path):
|
||||
"""Extract item keys and their full definitions from a lua items file."""
|
||||
with open(path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
content = f.read()
|
||||
|
||||
items = {}
|
||||
# Match multi-line item blocks: ['key'] = { ... },
|
||||
pattern = r"\['([a-zA-Z0-9_]+)'\]\s*=\s*\{([^}]+)\}"
|
||||
for match in re.finditer(pattern, content):
|
||||
key = match.group(1)
|
||||
body = match.group(2)
|
||||
# Only count items that have ['name'] inside
|
||||
if "['name']" in body:
|
||||
items[key] = body.strip()
|
||||
return items
|
||||
|
||||
def extract_field(body, field):
|
||||
"""Extract a field value from item body."""
|
||||
m = re.search(r"\['" + field + r"'\]\s*=\s*(.+?)(?:,\s*$|,\s*\[)", body, re.MULTILINE)
|
||||
if m:
|
||||
return m.group(1).strip().rstrip(',')
|
||||
# try simpler
|
||||
m = re.search(r"\['" + field + r"'\]\s*=\s*([^,]+)", body)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
return None
|
||||
|
||||
def to_qbcore_line(key, body):
|
||||
"""Convert a qs-inventory item block to a qb-core single-line format."""
|
||||
fields = ['name', 'label', 'weight', 'type', 'image', 'unique', 'useable', 'shouldClose', 'combinable', 'description']
|
||||
vals = {}
|
||||
for f in fields:
|
||||
v = extract_field(body, f)
|
||||
if v is not None:
|
||||
vals[f] = v
|
||||
|
||||
# Build the line in qb-core style
|
||||
# Pad the key to align
|
||||
padded_key = f"['{key}']"
|
||||
padded_key = padded_key.ljust(40)
|
||||
|
||||
parts = []
|
||||
for f in fields:
|
||||
if f in vals:
|
||||
padded_f = f"['{f}']"
|
||||
parts.append(f"{padded_f} = {vals[f]}")
|
||||
|
||||
line = f" {padded_key} = {{{', '.join(parts)}}},"
|
||||
return line
|
||||
|
||||
# Paths
|
||||
preload_path = r'E:\FiveMserver\server\_preLoad\qs-inventory\[inventory]\qs-inventory\shared\items.lua'
|
||||
qbcore_path = r'E:\FiveMserver\server\resources\[framework]\[core]\qb-core\shared\items.lua'
|
||||
|
||||
# Extract items from both
|
||||
preload_items = extract_items_with_defs(preload_path)
|
||||
qbcore_items = extract_items_with_defs(qbcore_path)
|
||||
|
||||
# Find items only in preload
|
||||
only_preload = sorted(set(preload_items.keys()) - set(qbcore_items.keys()))
|
||||
print(f"Items to add: {len(only_preload)}")
|
||||
|
||||
# Generate qb-core lines
|
||||
new_lines = []
|
||||
new_lines.append("")
|
||||
new_lines.append(" -- ═══════════════════════════════════════════════════")
|
||||
new_lines.append(" -- ITEMS IMPORTATE DIN QS-INVENTORY (preLoad update)")
|
||||
new_lines.append(" -- ═══════════════════════════════════════════════════")
|
||||
new_lines.append("")
|
||||
|
||||
for key in only_preload:
|
||||
body = preload_items[key]
|
||||
line = to_qbcore_line(key, body)
|
||||
new_lines.append(line)
|
||||
|
||||
# Read qb-core file
|
||||
with open(qbcore_path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
qb_content = f.read()
|
||||
|
||||
# Find the last } that closes QBShared.Items
|
||||
# Insert before the last }
|
||||
last_brace = qb_content.rfind('}')
|
||||
if last_brace == -1:
|
||||
print("ERROR: Could not find closing brace")
|
||||
else:
|
||||
new_content = qb_content[:last_brace] + '\n'.join(new_lines) + '\n' + qb_content[last_brace:]
|
||||
with open(qbcore_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_content)
|
||||
print(f"SUCCESS: Added {len(only_preload)} items to qb-core items.lua")
|
||||
print("First 5 items added:")
|
||||
for k in only_preload[:5]:
|
||||
print(f" + {k}")
|
||||
print(f" ... and {len(only_preload)-5} more")
|
||||
Reference in New Issue
Block a user