Item "Types"
- John Adams
- Retired
- Posts: 4583
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Item "Types"
Xinux (you sure are my favorite, aren't you?) Let's talk Items parsing.
First Part:
I am going to work exclusively on Items this week, and my goal is to break them apart by "type" like we did with EQ2 parser. My question to you is, I see a "type_text" in VGParser that says stuff like "Armor.Chain.Gloves". Is that the only place that tells me this item is "Armor"? Or is there another simplified value somewhere? I could always split that value and take the 1st part and use that, as long as it is consistent across all our items.
Edit: Crap, answered my own question - inconsistent, of course. I need a conistent way to tell what kind of item it is. An ID preferred, if any.
Second Part:
I'm looking for commonalities between all items, to put into the main `items` table, then break armor, weapon, scroll (etc) abilities into their own specific tables. Is this even possible, or does every item require every field? Example, if a BP has 250 mit, does the field "mit" need to be pushed to scroll items? Maybe I am over-thinking this, because I think EQ2's items work same as VG - it's just a packet with stuff in it and the server uses whatever stuff we send, and we send it all even if they are not used.
Might be too early for me to be thinking of this. But, tell me your thoughts if any. Going to start on First Part today.
First Part:
I am going to work exclusively on Items this week, and my goal is to break them apart by "type" like we did with EQ2 parser. My question to you is, I see a "type_text" in VGParser that says stuff like "Armor.Chain.Gloves". Is that the only place that tells me this item is "Armor"? Or is there another simplified value somewhere? I could always split that value and take the 1st part and use that, as long as it is consistent across all our items.
Edit: Crap, answered my own question - inconsistent, of course. I need a conistent way to tell what kind of item it is. An ID preferred, if any.
Second Part:
I'm looking for commonalities between all items, to put into the main `items` table, then break armor, weapon, scroll (etc) abilities into their own specific tables. Is this even possible, or does every item require every field? Example, if a BP has 250 mit, does the field "mit" need to be pushed to scroll items? Maybe I am over-thinking this, because I think EQ2's items work same as VG - it's just a packet with stuff in it and the server uses whatever stuff we send, and we send it all even if they are not used.
Might be too early for me to be thinking of this. But, tell me your thoughts if any. Going to start on First Part today.
You do not have the required permissions to view the files attached to this post.
Re: Item "Types"
John I am not familiar with how items look in "packets", but generally when I added a new item to my database I would have to set:
Sphere
Type
Slot
So I could categorize the item. Mind you I made up mine to match items I would see.
[img]http://s20.postimg.org/qb94wcll9/spheres.jpg[/img]
[img]http://s20.postimg.org/qpagvy5ot/types.jpg[/img]
[img]http://s20.postimg.org/tknk2t9ot/slots.jpg[/img]
Sphere
Type
Slot
So I could categorize the item. Mind you I made up mine to match items I would see.
[img]http://s20.postimg.org/qb94wcll9/spheres.jpg[/img]
[img]http://s20.postimg.org/qpagvy5ot/types.jpg[/img]
[img]http://s20.postimg.org/tknk2t9ot/slots.jpg[/img]
Re: Item "Types"
What you want is required_sphere and here is the breakdown.
Now if you want to break it down further i just noticed unknown_73 seem's to be type or whatever you want to call it which matches this.
Code: Select all
case 0:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Adventuring Shield");
break;
case 1:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Adventuring Weapon");
break;
case 2:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Crafting Tool");
break;
case 3:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Diplomatic Weapon");
break;
case 4:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Adventuring Armor");
break;
case 5:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Crafting Clothes");
break;
case 6:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Diplomatic Clothes");
break;
case 7:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Crafting Component");
break;
case 22:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Crafting Resource");
break;
case 8:
case 23:
case 24:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Miscellaneous");
break;
case 9:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Ranged Weapon");
break;
case 10:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Diplomatic Jewelry");
break;
case 11:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Adventuring Bag");
break;
case 12:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Crafting Bag");
break;
case 13:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Adventuring Jewelry");
break;
case 14:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Focus Item");
break;
case 15:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Harvesting Clothes");
break;
case 16:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Harvesting Tool");
break;
case 17:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Harvesting Bag");
break;
case 18:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Diplomatic Bag");
break;
case 19:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Musical Instrument");
break;
case 20:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Ranged Ammo");
break;
case 21:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Thrown Weapon");
break;
case 25:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"House Furniture");
break;
case 26:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Fishing");
break;
case 27:
v2 = a1;
_BasicString__BasicString(a1, (char *)L"Enhancements");
break;
default:
v2 = a1;
*(_DWORD *)(a1 + 24) = 7;
*(_DWORD *)(a1 + 20) = 0;
*(_WORD *)(a1 + 4) = 0;
_BasicString__opEquals_wchar_(a1, (char *)L"Unknown", 7);
break;
}
Now if you want to break it down further i just noticed unknown_73 seem's to be type or whatever you want to call it which matches this.
Code: Select all
word_19247C8 = 0;
if ( a1 > 600 )
{
if ( a1 != 601 )
return &word_19247C8;
v10 = (int)L"FULLSUIT";
LABEL_56:
sub_ABF690(&word_19247C8, v10);
return &word_19247C8;
}
if ( a1 == 600 )
{
v10 = (int)L"TEST";
goto LABEL_56;
}
switch ( a1 )
{
case 0:
sub_ABF690(&word_19247C8, L"EYE");
*(_DWORD *)a3 = 0;
*(_DWORD *)a4 = 1;
return &word_19247C8;
case 1:
v5 = (int)L"HAIR_BANGS";
goto LABEL_6;
case 2:
sub_ABF690(&word_19247C8, L"HAIR_TOP");
*(_DWORD *)a2 = 1;
return &word_19247C8;
case 3:
v6 = (int)L"HAIR_BACK";
goto LABEL_9;
case 4:
sub_ABF690(&word_19247C8, L"HAIR_SIDES");
*(_DWORD *)a2 = 1;
*(_DWORD *)a4 = 1;
return &word_19247C8;
case 5:
v6 = (int)L"HAIR_PONYTAIL";
goto LABEL_9;
case 6:
v5 = (int)L"HAIR_FACE";
LABEL_6:
sub_ABF690(&word_19247C8, v5);
*(_DWORD *)a2 = 1;
return &word_19247C8;
case 21:
v7 = (int)L"TOOL";
goto LABEL_14;
case 22:
v8 = (int)L"AXE";
goto LABEL_16;
case 23:
v9 = (int)L"BOW";
goto LABEL_18;
case 24:
v7 = (int)L"CLUB";
goto LABEL_14;
case 25:
v8 = (int)L"CROSSBOW";
goto LABEL_16;
case 26:
v9 = (int)L"DAGGER";
goto LABEL_18;
case 27:
v7 = (int)L"FLAIL";
goto LABEL_14;
case 28:
v8 = (int)L"HAMMER";
goto LABEL_16;
case 29:
v9 = (int)L"MACE";
goto LABEL_18;
case 30:
v7 = (int)L"POLEARM";
goto LABEL_14;
case 31:
v8 = (int)L"STAFF";
goto LABEL_16;
case 32:
v9 = (int)L"THROWN";
goto LABEL_18;
case 33:
v7 = (int)L"SWORD";
goto LABEL_14;
case 34:
v8 = (int)L"SHIELD";
goto LABEL_16;
case 35:
v9 = (int)L"SPEAR";
goto LABEL_18;
case 36:
v7 = (int)L"FIST";
goto LABEL_14;
case 37:
v8 = (int)L"SPADE";
goto LABEL_16;
case 38:
v9 = (int)L"KNIFE";
goto LABEL_18;
case 39:
v7 = (int)L"MARTIALFIST";
goto LABEL_14;
case 40:
v8 = (int)L"MARTIALSWORD";
goto LABEL_16;
case 41:
v9 = (int)L"MARTIALSTAFF";
LABEL_18:
sub_ABF690(&word_19247C8, v9);
*(_DWORD *)a3 = 0;
return &word_19247C8;
case 42:
v7 = (int)L"FOCUS";
LABEL_14:
sub_ABF690(&word_19247C8, v7);
*(_DWORD *)a3 = 0;
return &word_19247C8;
case 43:
v8 = (int)L"BARD";
LABEL_16:
sub_ABF690(&word_19247C8, v8);
*(_DWORD *)a3 = 0;
return &word_19247C8;
case 7:
v10 = (int)L"ARM";
goto LABEL_56;
case 8:
v10 = (int)L"BACK";
goto LABEL_56;
case 9:
v10 = (int)L"CHEST";
goto LABEL_56;
case 10:
sub_ABF690(&word_19247C8, L"EAR");
*(_DWORD *)a4 = 1;
return &word_19247C8;
case 11:
v10 = (int)L"FACE";
goto LABEL_56;
case 12:
v10 = (int)L"FEET";
goto LABEL_56;
case 13:
sub_ABF690(&word_19247C8, L"FINGER");
*(_DWORD *)a4 = 1;
return &word_19247C8;
case 14:
v10 = (int)L"HAND";
goto LABEL_56;
case 15:
v6 = (int)L"HEAD";
LABEL_9:
sub_ABF690(&word_19247C8, v6);
*(_DWORD *)a2 = 1;
return &word_19247C8;
case 16:
v10 = (int)L"LEG";
goto LABEL_56;
case 17:
v10 = (int)L"NECK";
goto LABEL_56;
case 18:
v10 = (int)L"SHOULDER";
goto LABEL_56;
case 19:
v10 = (int)L"WAIST";
goto LABEL_56;
case 20:
v10 = (int)L"WRIST";
goto LABEL_56;
default:
return &word_19247C8;
}
return &word_19247C8;
- John Adams
- Retired
- Posts: 4583
- Joined: Wed Aug 28, 2013 9:40 am
- Location: Phoenix, AZ.
- Contact:
Re: Item "Types"
These two posts are helpful, thank you. I probably do not want to break it down using your second enum, but the first one looks like what I am after. I'll mess with that a little more today.
Re: Item "Types"
Item type:
27 = Melee Damage Rating
26 = Melee Accuracy Rating
34 = Spell Evasion Rating
27 = Melee Damage Rating
26 = Melee Accuracy Rating
34 = Spell Evasion Rating