To make it you have many options.
You can create as many values as you have in item or you can put all into one string in server's protocol, so you're sending it to client.
It would be effective to know when it is worth sending other values than clientID, so have a clear mind and don't send unnecessary information, e.g. for items on the floor.
Then in OTClient you're parsing it, it's a getItem function in OTClient's protocolgameparse.cpp.
Remember that you have to create the same values you're sending or one string, like me (in OTClient's item.cpp of course).
Create then appropriate function to set and get the string or few int values.
The most important will be "get" function because you have to bind the function to lua with
Code:
g_lua.bindClassMemberFunction<Item>
in OTClient's luafunctions.cpp.
Well, the rest is just a simple lua related to the OTClient's tooltip, so everyone can handle it.