Introduction
Well this idea came up when evilpunker asked about the possibility of having a patch which loads a second file which overrides the iteminfo file. But there is a better way to do that with lua itself.
How to do it?
The key idea is that the item information is added using the main function by the client. so in your custom file you just need to modify the main function to accept your items. Here is how it can be done.
-- Load the original file. As you might have guessed you can also load your translated file here instead
-- (just make sure the "tbl" array contains your item info)
dofile("System/iteminfo.lub")
-- Now as a simple example . I am simply going to change name of Red Potion to Crimson Potion.
-- But you can add anything in the same way. Format is same as the original one, just
-- the table name is different
tbl_custom = {
[501] = {
unidentifiedDisplayName = "Crimson Potion",
unidentifiedResourceName = "»¡°£Æ÷¼Ç",
unidentifiedDescriptionName = {
"A potion made from",
"grinded Red Herbs that",
"restores ^000088about 45 HP^000000.",
"^ffffff_^000000",
"Weight: ^7777777^000000"
},
identifiedDisplayName = "Crimson Potion",
identifiedResourceName = "»¡°£Æ÷¼Ç",
identifiedDescriptionName = {
"^000088HP Recovery Item^000000",
"A potion made from",
"grinded Red Herbs that",
"restores ^000088about 45 HP^000000.",
"^ffffff_^000000",
"Weight: ^7777777^000000"
},
slotCount = 0,
ClassNum = 0
},
}
-- Now for a helper function because i hate repetitions
-- It adds items from curTable if it is not present in refTable
function itemAdder(curTable, refTable)
for ItemID,DESC in pairs(curTable) do
if refTable == nil or refTable[ItemID] == nil then
result, msg = AddItem(ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum)
if not result then
return false, msg
end
for k,v in pairs(DESC.unidentifiedDescriptionName) do
result, msg = AddItemUnidentifiedDesc(ItemID, v)
if not result then
return false, msg
end
end
for k,v in pairs(DESC.identifiedDescriptionName) do
result, msg = AddItemIdentifiedDesc(ItemID, v)
if not result then
return false, msg
end
end
end
end
return true, "good"
end
-- And the newly designed main function
function main()
result, msg = itemAdder(tbl_custom, nil) -- add custom items (including official overrides)
if result then
result, msg = itemAdder(tbl, tbl_custom) -- add non-overridden official items
end
return result, msg
end
How is it useful?
Think how item_db2.txt is useful for adding custom items in a server. Its the same strategy here.
You can keep your official items in a base file (or you can just use the official iteminfo.lub file if you want the korean names)
and keep your custom items in a different file (make sure the first dofile function calls the base file).
The above code is error free, so feel free to copy and add your items . Hope the topic was not too confusing
The lua code can be further expanded for overriding only parts of an official item. But i will leave that update for the future
P.S. The client should be patched to accept your custom file not the base file.
Screenshot