For the number you posted seems you are talking about Monster ID. I need to ask you a question first before answering:
Are you able to perform the command /summon2 on your server? if you are, just type /summon2 and press enter, a help of the use of the command will appear, what msg help you get?
1.- [USAGE] /summon [MONSTER-ID] [POP_COUNT] [8|9] (MONSTER-ID:2001~2999, 8:neutral, 9:aggressive)
2.-[USAGE] /summon [MONSTER-ID] [POP_COUNT] [8|9] (MONSTER-ID:2001~2999, 3501~3999 8:neutral, 9:aggressive)
if you get the 2do help msg, then you can add mob IDs till 3999.
I didnt reach 3999 mobs yet, and I dont think I will reach it, anyways there are more than 1 place where Zone check those values to perform operations, I did not check what those operations do, but all them check for the range of ID mentioned:
2001 in Hex = 7D1
2999 in Hex = 0BB7
3501 in Hex = DAD
3999 in Hex = 0F9F
There are 5 places where HTLauncher check those 4 values (at least in my client), and 2 places where Zone checks them (at least in my Server) so if you need to change the last one you need to change it in all those places. But take care because you can mess up both(client and server) using IDs reserved for other things, for example IDs reserved for items starts on 4001, and I really dont know if making mobs with ID from 4000 to 4999 will work as expected. If i were you, instead of changing that 3999 for 4999 I will prefer to extend the Server and Client code adding new code that handles the new range of IDs you want to add using IDs that are not used for anything else, that was what Hambitsoft did when they expanded on v5, for example for Armors, when they reached the max ID, they open a new range starting on 34501, they did the same for weapons and items
- - - Updated - - -
I dont know how many of you knows the importance of the objects ID, and because I didnt read any about that I will say some of the things I know about it.
Starting on Items name color: the color that appears on the name of the item is defined by its ID. for those who wants to test it:
One hand weapons: the whole range of their IDs are from 4001 to 4300, on k5 that was expanded with a new range from 34001 to 34200
that means that for 1 hand weapon is not only the sType you have to be aware off, you need to be aware of its ID too.
one hand weapons are divided in NOT MAGIC and MAGIC (i think i dont need to explain the diff)
the color is defined as follow:
from 4001 to 4110 are NORMAL NOT MAGIC(white color on the name)
from 4111 to 4140 are NORMAL MAGIC(white color on the name)
from 34001 to 34075 are NORMAL (white color on the name)
from 4141 to 4250 are RARE NOT MAGIC (gold color in the name)
from 4251 to 4280 are RARE MAGIC (gold color in the name)
from 34076 to 34150 are RARE (gold color in the name)
from 4281 to 4288 are UNIQUE NOT MAGIC(purple color in the name)
from 4289 to 4290 are UNIQUE MAGIC(purple color in the name)
from 34151 to 34180 are UNIQUE (purple color in the name)
from 4291 to 4298 are QUEST NOT MAGIC(blue color on the name)
from 4299 to 4300 are QUEST MAGIC(blue color on the name)
from 34181 to 34200 are QUEST (blue color on the name)
So for example if you want to create a new rare item, you have to use an ID inside the range of rares, otherwise the item will not have that gold color on the name.
those IDs are used also to recognize the type of the object it is, at Server, client and GM Tools. For example: on the GM Tool the ids are used to put that object in the corresponding type : is a collection item or is a quest one or is a weapon, a Pant etc, so for example if you add a new 1 hand weapon and use the ID of a Pant, then it will be on the pants section instead of the weapons one.
As I said server detects the kind of the item by its ID, so for example refining a RARE item is different from refining a normal one.
if you want to create a Charged item you must use the ID range for those so will work as expected, charged item are not the same as usable item, so if you use a wrong code for any of them (usable or charged) they wont work as expected, Mounts have their range too, but i didnt test what happens if i make a new one with wrong code.
For those who have dig on NPC dialogs, the IDs of those dialogs define in which array will server and client store them, and will perform the search based on the ID, for example as you may see on Mandara_NPC Defense_Que starts on 10001, Accessory_Que in 20001 and so on. Server used those IDs to define in which array will the data be stored as an example here is a part of the server code that use those ids to know to which NPC you are talking:
#define HT_IS_WEPON_QUE( i ) ( i >= HT_ID_WEPON_QUE_START ) && ( i <= HT_ID_WEPON_QUE_END ) ? HT_TRUE : HT_FALSE
#define HT_IS_DEFENSE_QUE( i ) ( i >= HT_ID_DEFENSE_QUE_START ) && ( i <= HT_ID_DEFENSE_QUE_END ) ? HT_TRUE : HT_FALSE
For those who dont know what code is: those are declaring functions that will return true or false depending on the ID that is stored in a defined var:
#define HT_ID_WEPON_QUE_START 1
#define HT_ID_WEPON_QUE_END 10000
#define HT_ID_DEFENSE_QUE_START 10001
#define HT_ID_DEFENSE_QUE_END 20000
And those functions are used in Methods like for example:
HTtchar* HTNPCScriptMgr::HT_pGetTableName( HTdword dwID )
m_iQuestion = dwID;
if ( HT_IS_SELECT(dwID) )
return ( HT_RES_TABLENAME_SELECT );
else if ( HT_IS_WEPON_QUE(dwID) )
return ( HT_RES_TABLENAME_WEAPON );
else if ( HT_IS_DEFENSE_QUE(dwID) )
return ( HT_RES_TABLENAME_DEFENSE );
and so on.
So messing up server and client with wrong IDs is really easy for those who dont know what ID needs to be use when adding anything at xml files. So for example if you want to add more dialogs for WEPON_QUE you have to change the 10000 for the new value, and the DEFENSE_QUE_START 10001 too to not mess up the NPC dialogs.
Last edited by Eliana Gherbaz; 25-12-16 at 05:47 AM.
At least you laugh instead of crying good luck to you too.
Thank you @Eliana Gherbaz ;)
- - - Updated - - -
and by the way , is it possible that we can add more items in TantraParam and Clientres ?
*Removed by Kreeate*
as I say in my previous post when hanbitsoft drained some declared ID ranges, they did not extended in a linear way, they did not took the limit and added values (like converting 3999 to 4999), what they did was to add a new range starting with a number they didn't used before, and the reason they had to do that way is because when they did the code for the game they declared the ranges w/o leaving spaces between them.
so for example this:
#define HT_PARAMTYPE_ITEM_DEFENCE_ARMOR_START 5001
#define HT_PARAMTYPE_ITEM_DEFENCE_ARMOR_END 5150
#define HT_PARAMTYPE_ITEM_DEFENCE_PANTS_START 5151
#define HT_PARAMTYPE_ITEM_DEFENCE_PANTS_END 5250
As you may see Armors items ends on 5150 and Pants start on 5151, so when they used the last ID for defense armor they was not able to take that 5150 and convert it to 6000 for example, because if they do that then they mess up with pants, etc. If you go to your GM TOOL and open armor section, you will see that it start with 5001, and pants section starts on 5151. So imagine that in a post you ask for the offset to change the limit of the Armors, and heterogeneo gives you the one which stores the 5150, and then you, who do not know about the ID ranges restriction, go to that offset and change it to xxxx, what you think will happen?
So of course if you dont know which is the range IDs for an Armor and you decided to add a new one using a x ID (that you find by searching the last id used on param or GM Tool, that is what all ppl I know do) then you may have an id for an armor if you did not already used the limit one.
When I gave those IDs values for the 1 hand weapons, I didnt invent them, I took them from the same code I took the ones above, and I found them because I added a new Item that was not working as expected even it was copy paste form another that was working right, the only thing that was changed was the ID, so at that time I understand that have to be the ID which makes that item working wrong, and yes it was the ID.
what i did after that was to make an Excel file in which I divided all existing items in their corresponding worksheet and leaving in blank lines the IDs of the range that I didnt used yet, that way I know exactly the next ID i need to use if for example i want to add a new rare pant and I now too when im going out of ID. And where did I found those ID ranges? I found them by digging on the ASM code i got from dumping with Olly server and client .exe files, because the sources files I have are from 2007 and does not have the new ranges.
If you ran out of ID, you have to 2 choices: follow my recommendation to add new range or follow the others which is just to change the limit value to a higher one, it is your choice which one follow.
Probably some of you will be thinking "OK but how do I add a new range", the answer is simple, on both client and server .exe files there are blank spaces that can be used to add new code , you can use those spaces to add new ranges by copy pasting the code that hanbit used to add the new ranges and replacing in the pasted code the new range, or do what I did: link to both a new .dll made by you that replace or add code. By linking a new library is the better way I found to not be limited by spaces remaining on the .exe files.
Last edited by Eliana Gherbaz; 26-12-16 at 07:30 PM.
The better question is, WHO THE FUCK WILL FEED THEM HOW TO DO IT! hahaProbably some of you will be thinking "OK but how do I add a new range", the answer is simple, on both client and server .exe files there are blank spaces that can be used to add new code , you can use those spaces to add new ranges by copy pasting the code that hanbit used to add the new ranges and replacing in the pasted code the new range, or do what I did: link to both a new .dll made by you that replace or add code. By linking a new library is the better way I found to not be limited by spaces remaining on the .exe files.
Day by day a new tantra server opens, and day by day another one close, keeping a server alive is not just a matter of adding new mobs or items, it is a matter of making your players have fun while they play.