[WIP] Combat Arms Data Parser - SHOP_ITEM_LIST

Newbie Spellweaver
Joined
Feb 10, 2026
Messages
16
Reaction score
22
Hi everyone,

I don't know if something similar already exists on the forum, but I've been working on an application to help manage and generate some server data, and I’m currently running a few tests. The goal is to make it easier to handle things like items, shop products, and other related configurations.

It’s not ready for public use yet, but I plan to share it here on the forum soon so others can try it as well.

🐞 During testing I noticed a few things that may need attention:
  • Some data may need to be corrected directly in the database for everything to work properly.
  • Cosmetic items may require a few adjustments in the DB depending on the server files.
  • Supply Cases / MYST crates need to have their items added to the CBT_ItemInfo_GachaponInfo_Product table, otherwise the crate rewards will not work correctly.

Captura de tela 2026-03-09 220101.webp
Captura de tela 2026-03-09 214128.webp


Once I finish a few more tests and organize the project a bit better, I’ll post it here so you can try it out and give feedback.

Test SQL Script

If anyone would like to test the generated data on their own database, I’ve included a SQL script that can be executed manually.

⚠️ Important:
Before running the script, please make sure to create a full backup of your database. The script will insert item and shop data.

The item data included in this script is based on Combat Arms version 2508.02, so some entries may require adjustments depending on the server files or database structure you are using.

Exec1_AddTo_CBT_ItemInfo
SQL:
IF NOT EXISTS ( SELECT 1 FROM CBT_ItemInfo WHERE ItemNo = 10333)
    BEGIN
        INSERT INTO CBT_ItemInfo (ItemNo, Name, ItemType, Detailtype, Functioninfo, OptionType, SlotNum, GPUnlock, NXUnlock, ClanUnlock, ItemGrade)
        VALUES (10333, 'Character Harlequin', 22, 0, -1, 0, 0, 0, 0, 0, 7)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ItemInfo WHERE ItemNo = 17292)
    BEGIN
        INSERT INTO CBT_ItemInfo (ItemNo, Name, ItemType, Detailtype, Functioninfo, OptionType, SlotNum, GPUnlock, NXUnlock, ClanUnlock, ItemGrade)
        VALUES (17292, 'Harlequin''s ARX-160', 0, 0, -1, 0, 0, 0, 0, 0, 7)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ItemInfo WHERE ItemNo = 17293)
    BEGIN
        INSERT INTO CBT_ItemInfo (ItemNo, Name, ItemType, Detailtype, Functioninfo, OptionType, SlotNum, GPUnlock, NXUnlock, ClanUnlock, ItemGrade)
        VALUES (17293, 'Harlequin''s MP7MOD', 1, 0, -1, 0, 0, 0, 0, 0, 7)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ItemInfo WHERE ItemNo = 17294)
    BEGIN
        INSERT INTO CBT_ItemInfo (ItemNo, Name, ItemType, Detailtype, Functioninfo, OptionType, SlotNum, GPUnlock, NXUnlock, ClanUnlock, ItemGrade)
        VALUES (17294, 'Harlequin''s Dual Pistol', 4, 0, -1, 0, 0, 0, 0, 0, 7)
END

Exec2_AddTo_CBT_ProductInfo
SQL:
IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20647)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20647, 'Harlequin''s ARX-160', 1, 36, 36, 0, 1, 17292, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20648)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20648, 'Harlequin''s ARX-160', 1, 88, 88, 0, 1, 17292, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20649)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20649, 'Harlequin''s ARX-160', 1, 196, 196, 0, 1, 17292, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20650)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20650, 'Harlequin''s ARX-160', 1, 295, 295, 0, 1, 17292, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20651)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20651, 'Harlequin''s ARX-160', 1, 553, 553, 0, 1, 17292, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20652)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20652, 'Harlequin''s MP7MOD', 1, 36, 36, 0, 1, 17293, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20653)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20653, 'Harlequin''s MP7MOD', 1, 88, 88, 0, 1, 17293, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20654)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20654, 'Harlequin''s MP7MOD', 1, 196, 196, 0, 1, 17293, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20655)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20655, 'Harlequin''s MP7MOD', 1, 295, 295, 0, 1, 17293, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20656)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20656, 'Harlequin''s MP7MOD', 1, 553, 553, 0, 1, 17293, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20657)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20657, 'Harlequin''s Dual Pistol', 1, 18, 18, 0, 1, 17294, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20658)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20658, 'Harlequin''s Dual Pistol', 1, 68, 68, 0, 1, 17294, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20659)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20659, 'Harlequin''s Dual Pistol', 1, 128, 128, 0, 1, 17294, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20660)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20660, 'Harlequin''s Dual Pistol', 1, 184, 184, 0, 1, 17294, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20661)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20661, 'Harlequin''s Dual Pistol', 1, 240, 240, 0, 1, 17294, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20667)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20667, 'Character Harlequin', 1, 45, 45, 0, 1, 10333, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20668)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20668, 'Character Harlequin', 1, 153, 153, 0, 1, 10333, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20669)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20669, 'Character Harlequin', 1, 255, 255, 0, 1, 10333, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20670)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20670, 'Character Harlequin', 1, 320, 320, 0, 1, 10333, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

IF NOT EXISTS ( SELECT 1 FROM CBT_ProductInfo WHERE ProductID = 20671)
    BEGIN
        INSERT INTO CBT_ProductInfo (ProductID, ProductName, SaleType, Price, SalePrice, BonusGP, ItemNum, ItemNo00, ConsumeType00, Period00, ItemNo01, ConsumeType01, Period01, ItemNo02, ConsumeType02, Period02, ItemNo03, ConsumeType03, Period03, ItemNo04, ConsumeType04, Period04, ActivationUnlock, InboxGift )
        VALUES (20671, 'Character Harlequin', 1, 675, 675, 0, 1, 10333, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
END

If you encounter any issues or notice something that needs to be corrected, please let me know so I can improve the tool and the generated data.

Thanks to anyone willing to test and provide feedback 👍
 
i belive you need the .txt file of the _ProductInfo and CBT_ItemInfo right ?
 
Not necessarily. The tool primarily reads the game's configuration files like ITEMS.txt and SHOP_ITEM_LIST.txt extracted from ATTRIBUTES.rez, and then generates the necessary SQL for the database.

The SQL script already contains the inserts for _ProductInfo and _ItemInfo, so you don't need the .txt files for those tables to run the test. You only need the *.rez files from version 2508.02 or one that has the Harlequin items.
 
Nice work, i saw someone using similar thing with phyton codes and as i know DB is not overwrite if ItemNo or ProductID is already exist.
So checking for each entry is kinda over work.
if i can find phyton codes will edit post.


Python:
# Codes uses [ItemNo] header from Shop_item_list.txt or shop_item_list_rental.txt
import re

def convert_iteminfo_to_sql(txt_file, output_file='ItemInfo.sql'):
    with open(txt_file, 'r', encoding='utf-8') as file:
        content = file.read()


    item_blocks = re.split(r'\[ItemInfo\d+\]', content)

    sql_template = """INSERT [CBT_ItemInfo]([ItemNo],[Name],[ItemType],[Detailtype],[Functioninfo],[OptionType],[SlotNum],[GPUnlock],[NXUnlock],[ClanUnlock],[ItemGrade]) VALUES({}, N'{}', {}, {}, {}, {}, {}, {}, {}, {}, {})"""

    with open(output_file, 'w', encoding='utf-8') as output:
        for block in item_blocks:
            if not block.strip():
                continue

            def get(pattern, default='0'):
                match = re.search(pattern, block)
                return match.group(1) if match else default

            def get_str(pattern, default=''):
                match = re.search(pattern, block)
                return match.group(1).replace("'", "''") if match else default

            data = {
                'ItemNo': get(r'ItemNo\s*=\s*(\d+)', '0'),
                'Name': get_str(r'Name\s*=\s*"(.+?)"', 'Unnamed'),
                'ItemType': get(r'Itemtype\s*=\s*(\d+)', '0'),
                'Detailtype': get(r'Detailtype\s*=\s*(\d+)', '0'),
                'Functioninfo': get(r'Functioninfo\s*=\s*(-?\d+)', '-1'),
                'OptionType': get(r'OptionType\s*=\s*(-?\d+)', '-1'),
                'SlotNum': get(r'Slot\s*=\s*(\d+)', '0'),
                'GPUnlock': get(r'GP_Unlock\s*=\s*(\d+)', '0'),
                'NXUnlock': get(r'NX_Unlock\s*=\s*(\d+)', '0'),
                'ClanUnlock': get(r'UnlockClanExp\s*=\s*(\d+)', '0'),
                'ItemGrade': get(r'ItemGrade\s*=\s*(\d+)', '0')
            }

            sql = sql_template.format(
                data['ItemNo'], data['Name'], data['ItemType'], data['Detailtype'],
                data['Functioninfo'], data['OptionType'], data['SlotNum'],
                data['GPUnlock'], data['NXUnlock'], data['ClanUnlock'], data['ItemGrade']
            )

            output.write(sql.strip() + "\n")

    print(f"Sql '{output_file}' has been created.")

# usage:
convert_iteminfo_to_sql("ItemNEW.txt")


Python:
# Codes uses [ItemNo] header from Shop_item_list.txt or shop_item_list_rental.txt for Sellback prices of items.

import re

# File names
input_filename = "ItemNew.txt"
output_filename = "SellbackNew.sql"


lines = []

with open(input_filename, "r", encoding="utf-8") as file:
    content = file.read()

# [ItemInfoN] find item info
blocks = re.findall(r'\[ItemInfo\d+\](.*?)(?=\[ItemInfo\d+\]|\Z)', content, re.DOTALL)

for block in blocks:
    itemno_match = re.search(r'ItemNo\s*=\s*(\d+)', block)
    price_match = re.search(r'SellBackPrice\s*=\s*(\d+)', block)

    if itemno_match and price_match:
        itemno = itemno_match.group(1)
        price = price_match.group(1)
        sql_line = f"INSERT [CBT_ItemInfo_SellBackPrice]([ItemNo],[SellBackPrice])VALUES({itemno},{price})"
        lines.append(sql_line)

# Write Output
with open(output_filename, "w", encoding="utf-8") as outfile:
    outfile.write("\n".join(lines))

print(f"✅ New Sql commands been created: {output_filename}")
Python:
# Codes uses [Product-N] header from Shop_item_list.txt or shop_item_list_rental.txt for CBT_ShopInfo table.

import re

def convert_to_sql(txt_file, output_file='ShopProduct.sql'):
    with open(txt_file, 'r', encoding='utf-8') as file:
        content = file.read()

    # Seperate chunks
    product_blocks = re.split(r'\[Product\d+\]', content)

    sql_template = """INSERT CBT_ProductInfo ([ProductID],[ProductName],[SaleType],[SalePrice],[Price],[BonusGP],[ItemNum],[ItemNo00],[ConsumeType00],[Period00],[ItemNo01],[ConsumeType01],[Period01],[ItemNo02],[ConsumeType02],[Period02],[ItemNo03],[ConsumeType03],[Period03],[ItemNo04],[ConsumeType04],[Period04],[ActivationUnlock],[InboxGift])VALUES ({}, N'{}', {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {})"""

    with open(output_file, 'w', encoding='utf-8') as output:
        for block in product_blocks:
            if not block.strip():
                continue

            def get(pattern, default='0'):
                match = re.search(pattern, block)
                return match.group(1) if match else default

            data = {
                'ProductID': get(r'ProductID\s*=\s*(\d+)', '0'),
                'ProductName': get(r'ProductName\s*=\s*"(.+?)"', 'None').replace("'", "''"),
                'SaleType': get(r'SaleType\s*=\s*(\d+)'),
                'SalePrice': get(r'SalePrice\s*=\s*(\d+)'),
                'Price': get(r'Price\s*=\s*(\d+)'),
                'BonusGP': get(r'BonusGP\s*=\s*(\d+)'),
                'ItemNum': get(r'Itemnum\s*=\s*(\d+)'),
                'ItemNo00': get(r'ItemNo0\s*=\s*(\d+)'),
                'ConsumeType00': get(r'Consumetype0\s*=\s*"(\d+)"'),
                'Period00': get(r'Period0\s*=\s*"(\d+)"'),
                'ItemNo01': get(r'ItemNo1\s*=\s*(\d+)'),
                'ConsumeType01': get(r'Consumetype1\s*=\s*"(\d+)"'),
                'Period01': get(r'Period1\s*=\s*"(\d+)"'),
                'ItemNo02': get(r'ItemNo2\s*=\s*(\d+)'),
                'ConsumeType02': get(r'Consumetype2\s*=\s*"(\d+)"'),
                'Period02': get(r'Period2\s*=\s*"(\d+)"'),
                'ItemNo03': get(r'ItemNo3\s*=\s*(\d+)'),
                'ConsumeType03': get(r'Consumetype3\s*=\s*"(\d+)"'),
                'Period03': get(r'Period3\s*=\s*"(\d+)"'),
                'ItemNo04': get(r'ItemNo4\s*=\s*(\d+)'),
                'ConsumeType04': get(r'Consumetype4\s*=\s*"(\d+)"'),
                'Period04': get(r'Period4\s*=\s*"(\d+)"'),
                'ActivationUnlock': get(r'ActivationUnlock\s*=\s*(\d+)'),
                'InboxGift': get(r'InboxGift\s*=\s*(\d+)')
}


            sql = sql_template.format(
                data['ProductID'], data['ProductName'], data['SaleType'], data['SalePrice'], data['Price'], data['BonusGP'],
                data['ItemNum'], data['ItemNo00'], data['ConsumeType00'], data['Period00'],
                data['ItemNo01'], data['ConsumeType01'], data['Period01'],
                data['ItemNo02'], data['ConsumeType02'], data['Period02'],
                data['ItemNo03'], data['ConsumeType03'], data['Period03'],
                data['ItemNo04'], data['ConsumeType04'], data['Period04'],
                data['ActivationUnlock'], data['InboxGift']
            )

            output.write(sql.strip() + "\n")

    print(f"Sql output '{output_file}' has been writen.")

# Usage:
convert_to_sql("ShopNew.txt")
 
Good job, Pedro. Looks promising, definitely on the road to achieving good here. Nice to meet a fellow programmer! Yeah, for weapons and items, the database is dependent on SHOP_ITEM_LIST.txt in the ATTRIBRUTES.rez file. The database records for items and products needs to match the data in SHOP_ITEM_LIST.txt, otherwise your game will crash or the item won't appear in the shop.

So if you're using the REZ files from Classic, NA, EU, you'll need to update your database to reflect the SHOP_ITEM_LIST.txt, your tool will make things a lot easier! I can see you got some reloaded / classic items.

Keep up the good work. Reach out if you need anything.
 
can you get the latest data from the latest clients of valufe ?

Combat Arms Classic
Combat Arms Reloaded
 
can you get the latest data from the latest clients of valufe ?

Combat Arms Classic
Combat Arms Reloaded
i dont have reloaded on my device right now, but if its enough i have Classic
 

Attachments

Last edited:
if you want i give you decrypted items of the latest reloaded or you have them ?
 
sure give me a moment i will upload that for you , they are all decrypted .
Here it is, i didnt check on DB but structure looks same so i dont believe there will be a problem.

+Reminder even tho with updated CBT_ProductInfo table we need to update VISMS too able make purchase ingame
 

Attachments

JustLooking

have you modify the rez files ?

For Classic, yes. i simply copied all the weapons and gears. (Cuz all the info is was on Attributes)
but for Reloaded i didnt.

image is couple of months old but still shows possibility
 

Attachments

  • image.webp
    193.6 KB · Views: 45
Last edited:
i dont have reloaded on my device right now, but if its enough i have Classic
Hey man! I ran into some error and have no clue what went wrong or how to fix this (I'm really new to all of this so sorry about me being clueless)

How come when I ran these sql's with Ashlay's source, the lobby server stopped working?

1773284817540.webp
 
Hey man! I ran into some error and have no clue what went wrong or how to fix this (I'm really new to all of this so sorry about me being clueless)

How come when I ran these sql's with Ashlay's source, the lobby server stopped working?

View attachment 297750
Hi, about that leaked SC Ashlay used have limition on Lobby server to Cap 30000 items each shop (Rental and NX) so all the over 30k entries on CBT_Productinfo table makes lobby server stuck.

You can fix that by modifing Source code.

Post in thread 'I Need Guidance about SQL DB (Item & Product)' https://forum.ragezone.com/threads/i-need-guidance-about-sql-db-item-product.1243405/post-9354345
 
Hi, about that leaked SC Ashlay used have limition on Lobby server to Cap 30000 items each shop (Rental and NX) so all the over 30k entries on CBT_Productinfo table makes lobby server stuck.

You can fix that by modifing Source code.

Post in thread 'I Need Guidance about SQL DB (Item & Product)' https://forum.ragezone.com/threads/i-need-guidance-about-sql-db-item-product.1243405/post-9354345
Yeah, that's right. There's a cap, you have to update it otherwise the game will crash / Lobby Server won't work.

Also note, you can only have approximately less than 8000 records in the table CBT_ProductInfo_ShopView, otherwise your game will crash as well. You could change the limit, but this will involve heavy changes / optimisation to your code, I suggest having a stabilised version of the game first with the bulk of issues fixed, then look into optimising it, so you know future errors won't be because of your optimisation to the code.
 
Back