/* EQ2Emulator: Everquest II Server Emulator Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) This file is part of EQ2Emulator. EQ2Emulator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. EQ2Emulator is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with EQ2Emulator. If not, see . */ #ifndef __EQ2_ITEMS__ #define __EQ2_ITEMS__ #include #include #include "../../common/types.h" #include "../../common/DataBuffer.h" #include "../../common/MiscFunctions.h" #include "../Commands/Commands.h" #include "../../common/ConfigReader.h" using namespace std; class MasterItemList; class Player; extern MasterItemList master_item_list; #define EQ2_PRIMARY_SLOT 0 #define EQ2_SECONDARY_SLOT 1 #define EQ2_HEAD_SLOT 2 #define EQ2_CHEST_SLOT 3 #define EQ2_SHOULDERS_SLOT 4 #define EQ2_FOREARMS_SLOT 5 #define EQ2_HANDS_SLOT 6 #define EQ2_LEGS_SLOT 7 #define EQ2_FEET_SLOT 8 #define EQ2_LRING_SLOT 9 #define EQ2_RRING_SLOT 10 #define EQ2_EARS_SLOT_1 11 #define EQ2_EARS_SLOT_2 12 #define EQ2_NECK_SLOT 13 #define EQ2_LWRIST_SLOT 14 #define EQ2_RWRIST_SLOT 15 #define EQ2_RANGE_SLOT 16 #define EQ2_AMMO_SLOT 17 #define EQ2_WAIST_SLOT 18 #define EQ2_CLOAK_SLOT 19 #define EQ2_CHARM_SLOT_1 20 #define EQ2_CHARM_SLOT_2 21 #define EQ2_FOOD_SLOT 22 #define EQ2_DRINK_SLOT 23 #define EQ2_TEXTURES_SLOT 24 #define EQ2_UNKNOWN_SLOT 25 #define PRIMARY_SLOT 1 #define SECONDARY_SLOT 2 #define HEAD_SLOT 4 #define CHEST_SLOT 8 #define SHOULDERS_SLOT 16 #define FOREARMS_SLOT 32 #define HANDS_SLOT 64 #define LEGS_SLOT 128 #define FEET_SLOT 256 #define LRING_SLOT 512 #define RRING_SLOT 1024 #define EARS_SLOT_1 2048 #define EARS_SLOT_2 4096 #define NECK_SLOT 8192 #define LWRIST_SLOT 16384 #define RWRIST_SLOT 32768 #define RANGE_SLOT 65536 #define AMMO_SLOT 131072 #define WAIST_SLOT 262144 #define CLOAK_SLOT 524288 #define CHARM_SLOT_1 1048576 #define CHARM_SLOT_2 2097152 #define FOOD_SLOT 4194304 #define DRINK_SLOT 8388608 #define TEXTURES_SLOT 16777216 #define NUM_BANK_SLOTS 12 #define NUM_SHARED_BANK_SLOTS 8 #define NUM_SLOTS 25 #define NUM_INV_SLOTS 6 #define INV_SLOT1 0 #define INV_SLOT2 50 #define INV_SLOT3 100 #define INV_SLOT4 150 #define INV_SLOT5 200 #define INV_SLOT6 250 #define BANK_SLOT1 1000 #define BANK_SLOT2 1100 #define BANK_SLOT3 1200 #define BANK_SLOT4 1300 #define BANK_SLOT5 1400 #define BANK_SLOT6 1500 #define BANK_SLOT7 1600 #define BANK_SLOT8 1700 #define ATTUNED 1 #define ATTUNEABLE 2 #define ARTIFACT 4 #define LORE 8 #define TEMPORARY 16 #define NO_TRADE 32 #define NO_VALUE 64 #define NO_ZONE 128 #define NO_DESTROY 256 #define CRAFTED 512 #define GOOD_ONLY 1024 #define EVIL_ONLY 2048 #define ITEM_WIELD_TYPE_DUAL 1 #define ITEM_WIELD_TYPE_SINGLE 2 #define ITEM_WIELD_TYPE_TWO_HAND 4 #define ITEM_TYPE_NORMAL 0 #define ITEM_TYPE_WEAPON 1 #define ITEM_TYPE_RANGED 2 #define ITEM_TYPE_ARMOR 3 #define ITEM_TYPE_SHIELD 4 #define ITEM_TYPE_BAG 5 #define ITEM_TYPE_SKILL 6 #define ITEM_TYPE_RECIPE 7 #define ITEM_TYPE_FOOD 8 #define ITEM_TYPE_BAUBLE 9 #define ITEM_TYPE_HOUSE 10 #define ITEM_TYPE_THROWN 11 #define ITEM_TYPE_HOUSE_CONTAINER 12 #define ITEM_TYPE_BOOK 13 #define ITEM_TYPE_ADORNMENT 14 #define ITEM_TYPE_PATTERN 15 #define ITEM_TYPE_ARMORSET 16 #define ITEM_MENU_TYPE_GENERIC 1 #define ITEM_MENU_TYPE_EQUIP 2 #define ITEM_MENU_TYPE_BAG 4 #define ITEM_MENU_TYPE_HOUSE 8 #define ITEM_MENU_TYPE_SCRIBE 32 #define ITEM_MENU_TYPE_INVALID 128 #define ITEM_MENU_TYPE_BROKEN 512 #define ITEM_MENU_TYPE_ATTUNED 2048 #define ITEM_MENU_TYPE_ATTUNEABLE 4096 #define ITEM_MENU_TYPE_BOOK 8192 #define ITEM_MENU_TYPE_DISPLAY_CHARGES 16384 #define ITEM_MENU_TYPE_NAMEPET 65536 #define ITEM_MENU_TYPE_USE 524288 #define ITEM_MENU_TYPE_DRINK 8388608 #define ITEM_MENU_TYPE_REDEEM 536870912 #define ITEM_TAG_UNCOMMON 3 //tier tags #define ITEM_TAG_TREASURED 4 #define ITEM_TAG_LEGENDARY 7 #define ITEM_TAG_FABLED 9 #define ITEM_TAG_MYTHICAL 12 #define ITEM_BROKER_TYPE_ANY 0xFFFFFFFF #define ITEM_BROKER_TYPE_ADORNMENT 134217728 #define ITEM_BROKER_TYPE_AMMO 1024 #define ITEM_BROKER_TYPE_ATTUNEABLE 16384 #define ITEM_BROKER_TYPE_BAG 2048 #define ITEM_BROKER_TYPE_BAUBLE 16777216 #define ITEM_BROKER_TYPE_BOOK 128 #define ITEM_BROKER_TYPE_CHAINARMOR 2097152 #define ITEM_BROKER_TYPE_CLOAK 1073741824 #define ITEM_BROKER_TYPE_CLOTHARMOR 524288 #define ITEM_BROKER_TYPE_COLLECTABLE 67108864 #define ITEM_BROKER_TYPE_CRUSHWEAPON 4 #define ITEM_BROKER_TYPE_DRINK 131072 #define ITEM_BROKER_TYPE_FOOD 4096 #define ITEM_BROKER_TYPE_HOUSEITEM 512 #define ITEM_BROKER_TYPE_JEWELRY 262144 #define ITEM_BROKER_TYPE_LEATHERARMOR 1048576 #define ITEM_BROKER_TYPE_LORE 8192 #define ITEM_BROKER_TYPE_MISC 1 #define ITEM_BROKER_TYPE_PIERCEWEAPON 8 #define ITEM_BROKER_TYPE_PLATEARMOR 4194304 #define ITEM_BROKER_TYPE_POISON 65536 #define ITEM_BROKER_TYPE_POTION 32768 #define ITEM_BROKER_TYPE_RECIPEBOOK 8388608 #define ITEM_BROKER_TYPE_SALESDISPLAY 33554432 #define ITEM_BROKER_TYPE_SHIELD 32 #define ITEM_BROKER_TYPE_SLASHWEAPON 2 #define ITEM_BROKER_TYPE_SPELLSCROLL 64 #define ITEM_BROKER_TYPE_TINKERED 268435456 #define ITEM_BROKER_TYPE_TRADESKILL 256 #define ITEM_BROKER_SLOT_ANY 0xFFFFFFFF #define ITEM_BROKER_SLOT_AMMO 65536 #define ITEM_BROKER_SLOT_CHARM 524288 #define ITEM_BROKER_SLOT_CHEST 32 #define ITEM_BROKER_SLOT_CLOAK 262144 #define ITEM_BROKER_SLOT_DRINK 2097152 #define ITEM_BROKER_SLOT_EARS 4096 #define ITEM_BROKER_SLOT_FEET 1024 #define ITEM_BROKER_SLOT_FOOD 1048576 #define ITEM_BROKER_SLOT_FOREARMS 128 #define ITEM_BROKER_SLOT_HANDS 256 #define ITEM_BROKER_SLOT_HEAD 16 #define ITEM_BROKER_SLOT_LEGS 512 #define ITEM_BROKER_SLOT_NECK 8192 #define ITEM_BROKER_SLOT_PRIMARY 1 #define ITEM_BROKER_SLOT_PRIMARY_2H 2 #define ITEM_BROKER_SLOT_RANGE_WEAPON 32768 #define ITEM_BROKER_SLOT_RING 2048 #define ITEM_BROKER_SLOT_SECONDARY 8 #define ITEM_BROKER_SLOT_SHOULDERS 64 #define ITEM_BROKER_SLOT_WAIST 131072 #define ITEM_BROKER_SLOT_WRIST 16384 #define ITEM_BROKER_STAT_TYPE_NONE 0 #define ITEM_BROKER_STAT_TYPE_DEF 2 #define ITEM_BROKER_STAT_TYPE_STR 4 #define ITEM_BROKER_STAT_TYPE_STA 8 #define ITEM_BROKER_STAT_TYPE_AGI 16 #define ITEM_BROKER_STAT_TYPE_WIS 32 #define ITEM_BROKER_STAT_TYPE_INT 64 #define ITEM_BROKER_STAT_TYPE_HEALTH 128 #define ITEM_BROKER_STAT_TYPE_POWER 256 #define ITEM_BROKER_STAT_TYPE_HEAT 512 #define ITEM_BROKER_STAT_TYPE_COLD 1024 #define ITEM_BROKER_STAT_TYPE_MAGIC 2048 #define ITEM_BROKER_STAT_TYPE_MENTAL 4096 #define ITEM_BROKER_STAT_TYPE_DIVINE 8192 #define ITEM_BROKER_STAT_TYPE_POISON 16384 #define ITEM_BROKER_STAT_TYPE_DISEASE 32768 #define ITEM_BROKER_STAT_TYPE_CRUSH 65536 #define ITEM_BROKER_STAT_TYPE_SLASH 131072 #define ITEM_BROKER_STAT_TYPE_PIERCE 262144 #define ITEM_BROKER_STAT_TYPE_CRITICAL 524288 #define ITEM_BROKER_STAT_TYPE_DBL_ATTACK 1048576 #define ITEM_BROKER_STAT_TYPE_ABILITY_MOD 2097152 #define ITEM_BROKER_STAT_TYPE_POTENCY 4194304 #define OVERFLOW_SLOT 0xFFFFFFFE #define SLOT_INVALID 0xFFFF #define ITEM_STAT_STR 0 #define ITEM_STAT_STA 1 #define ITEM_STAT_AGI 2 #define ITEM_STAT_WIS 3 #define ITEM_STAT_INT 4 #define ITEM_STAT_VS_PHYSICAL 200 #define ITEM_STAT_VS_ELEMENTAL 201 #define ITEM_STAT_VS_NOXIOUS 202 #define ITEM_STAT_VS_ARCANE 203 //#define ITEM_STAT_VS_SLASH 200 //#define ITEM_STAT_VS_CRUSH 201 //#define ITEM_STAT_VS_PIERCE 202 //#define ITEM_STAT_VS_HEAT 203 //#define ITEM_STAT_VS_COLD 204 //#define ITEM_STAT_VS_MAGIC 205 //#define ITEM_STAT_VS_MENTAL 206 //#define ITEM_STAT_VS_DIVINE 207 //#define ITEM_STAT_VS_DISEASE 208 //#define ITEM_STAT_VS_POISON 209 //#define ITEM_STAT_VS_DROWNING 210 //#define ITEM_STAT_VS_FALLING 211 //#define ITEM_STAT_VS_PAIN 212 //#define ITEM_STAT_VS_MELEE 213 #define ITEM_STAT_DMG_SLASH 300 #define ITEM_STAT_DMG_CRUSH 301 #define ITEM_STAT_DMG_PIERCE 302 #define ITEM_STAT_DMG_HEAT 303 #define ITEM_STAT_DMG_COLD 304 #define ITEM_STAT_DMG_MAGIC 305 #define ITEM_STAT_DMG_MENTAL 306 #define ITEM_STAT_DMG_DIVINE 307 #define ITEM_STAT_DMG_DISEASE 308 #define ITEM_STAT_DMG_POISON 309 #define ITEM_STAT_DMG_DROWNING 310 #define ITEM_STAT_DMG_FALLING 311 #define ITEM_STAT_DMG_PAIN 312 #define ITEM_STAT_DMG_MELEE 313 #define ITEM_STAT_HEALTH 500 #define ITEM_STAT_POWER 501 #define ITEM_STAT_CONCENTRATION 502 #define ITEM_STAT_SAVAGERY 503 #define ITEM_STAT_HPREGEN 600 #define ITEM_STAT_MANAREGEN 601 #define ITEM_STAT_HPREGENPPT 602 #define ITEM_STAT_MPREGENPPT 603 #define ITEM_STAT_COMBATHPREGENPPT 604 #define ITEM_STAT_COMBATMPREGENPPT 605 #define ITEM_STAT_MAXHP 606 #define ITEM_STAT_MAXHPPERC 607 #define ITEM_STAT_MAXHPPERCFINAL 608 #define ITEM_STAT_SPEED 609 #define ITEM_STAT_SLOW 610 #define ITEM_STAT_MOUNTSPEED 611 #define ITEM_STAT_MOUNTAIRSPEED 612 #define ITEM_STAT_LEAPSPEED 613 #define ITEM_STAT_LEAPTIME 614 #define ITEM_STAT_GLIDEEFFICIENCY 615 #define ITEM_STAT_OFFENSIVESPEED 616 #define ITEM_STAT_ATTACKSPEED 617 #define ITEM_STAT_SPELLWEAPONATTACKSPEED 618 #define ITEM_STAT_MAXMANA 619 #define ITEM_STAT_MAXMANAPERC 620 #define ITEM_STAT_MAXATTPERC 621 #define ITEM_STAT_BLURVISION 622 #define ITEM_STAT_MAGICLEVELIMMUNITY 623 #define ITEM_STAT_HATEGAINMOD 624 #define ITEM_STAT_COMBATEXPMOD 625 #define ITEM_STAT_TRADESKILLEXPMOD 626 #define ITEM_STAT_ACHIEVEMENTEXPMOD 627 #define ITEM_STAT_SIZEMOD 628 #define ITEM_STAT_DPS 629 #define ITEM_STAT_SPELLWEAPONDPS 630 #define ITEM_STAT_STEALTH 631 #define ITEM_STAT_INVIS 632 #define ITEM_STAT_SEESTEALTH 633 #define ITEM_STAT_SEEINVIS 634 #define ITEM_STAT_EFFECTIVELEVELMOD 635 #define ITEM_STAT_RIPOSTECHANCE 636 #define ITEM_STAT_PARRYCHANCE 637 #define ITEM_STAT_DODGECHANCE 638 #define ITEM_STAT_AEAUTOATTACKCHANCE 639 #define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 640 #define ITEM_STAT_DOUBLEATTACKCHANCE 641 #define ITEM_STAT_PVPDOUBLEATTACKCHANCE 642 #define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 643 #define ITEM_STAT_PVPSPELLWEAPONDOUBLEATTACKCHANCE 644 #define ITEM_STAT_SPELLDOUBLEATTACKCHANCE 645 #define ITEM_STAT_PVPSPELLDOUBLEATTACKCHANCE 646 #define ITEM_STAT_FLURRY 647 #define ITEM_STAT_SPELLWEAPONFLURRY 648 #define ITEM_STAT_MELEEDAMAGEMULTIPLIER 649 #define ITEM_STAT_EXTRAHARVESTCHANCE 650 #define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 651 #define ITEM_STAT_ITEMHPREGENPPT 652 #define ITEM_STAT_ITEMPPREGENPPT 653 #define ITEM_STAT_MELEECRITCHANCE 654 #define ITEM_STAT_CRITAVOIDANCE 655 #define ITEM_STAT_BENEFICIALCRITCHANCE 656 #define ITEM_STAT_CRITBONUS 657 #define ITEM_STAT_PVPCRITBONUS 658 #define ITEM_STAT_BASEMODIFIER 659 #define ITEM_STAT_PVPBASEMODIFIER 660 #define ITEM_STAT_UNCONSCIOUSHPMOD 661 #define ITEM_STAT_SPELLTIMEREUSEPCT 662 #define ITEM_STAT_SPELLTIMERECOVERYPCT 663 #define ITEM_STAT_SPELLTIMECASTPCT 664 #define ITEM_STAT_SPELLTIMEREUSESPELLONLY 665 #define ITEM_STAT_MELEEWEAPONRANGE 666 #define ITEM_STAT_RANGEDWEAPONRANGE 667 #define ITEM_STAT_FALLINGDAMAGEREDUCTION 668 #define ITEM_STAT_RIPOSTEDAMAGE 669 #define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 670 #define ITEM_STAT_MOVEMENTWEAVE 671 #define ITEM_STAT_COMBATHPREGEN 672 #define ITEM_STAT_COMBATMANAREGEN 673 #define ITEM_STAT_CONTESTSPEEDBOOST 674 #define ITEM_STAT_TRACKINGAVOIDANCE 675 #define ITEM_STAT_STEALTHINVISSPEEDMOD 676 #define ITEM_STAT_LOOT_COIN 677 #define ITEM_STAT_ARMORMITIGATIONINCREASE 678 #define ITEM_STAT_AMMOCONSERVATION 679 #define ITEM_STAT_STRIKETHROUGH 680 #define ITEM_STAT_STATUSBONUS 681 #define ITEM_STAT_ACCURACY 682 #define ITEM_STAT_COUNTERSTRIKE 683 #define ITEM_STAT_SHIELDBASH 684 #define ITEM_STAT_WEAPONDAMAGEBONUS 685 #define ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY 686 #define ITEM_STAT_ADDITIONALRIPOSTECHANCE 687 #define ITEM_STAT_CRITICALMITIGATION 688 #define ITEM_STAT_PVPTOUGHNESS 689 #define ITEM_STAT_PVPLETHALITY 690 #define ITEM_STAT_STAMINABONUS 691 #define ITEM_STAT_WISDOMMITBONUS 692 #define ITEM_STAT_HEALRECEIVE 693 #define ITEM_STAT_HEALRECEIVEPERC 694 #define ITEM_STAT_PVPCRITICALMITIGATION 695 #define ITEM_STAT_BASEAVOIDANCEBONUS 696 #define ITEM_STAT_INCOMBATSAVAGERYREGEN 697 #define ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN 698 #define ITEM_STAT_SAVAGERYREGEN 699 #define ITEM_STAT_SAVAGERYGAINMOD 6100 #define ITEM_STAT_MAXSAVAGERYLEVEL 6101 #define ITEM_STAT_SPELL_DAMAGE 700 #define ITEM_STAT_HEAL_AMOUNT 701 #define ITEM_STAT_SPELL_AND_HEAL 702 #define ITEM_STAT_COMBAT_ART_DAMAGE 703 #define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704 #define ITEM_STAT_TAUNT_AMOUNT 705 #define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706 #define ITEM_STAT_ABILITY_MODIFIER 707 #pragma pack(1) struct ItemStatsValues{ sint16 str; sint16 sta; sint16 agi; sint16 wis; sint16 int_; sint16 vs_slash; sint16 vs_crush; sint16 vs_pierce; sint16 vs_heat; sint16 vs_cold; sint16 vs_magic; sint16 vs_mental; sint16 vs_divine; sint16 vs_disease; sint16 vs_poison; sint16 health; sint16 power; sint8 concentration; }; struct ItemCore{ int32 item_id; sint32 soe_id; int32 bag_id; sint32 inv_slot_id; sint16 slot_id; int8 index; int16 icon; int16 count; int8 tier; int8 num_slots; int32 unique_id; int8 num_free_slots; int16 recommended_level; }; #pragma pack() struct ItemStat{ string stat_name; int8 stat_type; sint16 stat_subtype; int16 stat_type_combined; float value; }; struct ItemLevelOverride{ int8 adventure_class; int8 tradeskill_class; int16 level; }; struct ItemClass{ int8 adventure_class; int8 tradeskill_class; int16 level; }; struct ItemAppearance{ int16 type; int8 red; int8 green; int8 blue; int8 highlight_red; int8 highlight_green; int8 highlight_blue; }; class PlayerItemList; class Item{ public: #pragma pack(1) struct ItemStatString{ EQ2_8BitString stat_string; }; struct Generic_Info{ int8 show_name; int8 creator_flag; int16 item_flags; int8 condition; int32 weight; // num/10 int32 skill_req1; int32 skill_req2; int16 skill_min; int8 item_type; //0=normal, 1=weapon, 2=range, 3=armor, 4=shield, 5=container, 6=spell scroll, 7=recipe book, 8=food/drink, 9=bauble, 10=house item, 11=ammo, 12=house container int16 appearance_id; int8 appearance_red; int8 appearance_green; int8 appearance_blue; int8 appearance_highlight_red; int8 appearance_highlight_green; int8 appearance_highlight_blue; int8 collectable; int32 offers_quest_id; int32 part_of_quest_id; int16 max_charges; int8 display_charges; int64 adventure_classes; int64 tradeskill_classes; int16 adventure_default_level; int16 tradeskill_default_level; int8 usable; }; struct Armor_Info { int16 mitigation_low; int16 mitigation_high; }; struct Weapon_Info { int16 wield_type; int16 damage_low1; int16 damage_high1; int16 damage_low2; int16 damage_high2; int16 damage_low3; int16 damage_high3; int16 delay; float rating; }; struct Shield_Info { Armor_Info armor_info; }; struct Ranged_Info { Weapon_Info weapon_info; int16 range_low; int16 range_high; }; struct Bag_Info { int8 num_slots; int16 weight_reduction; }; struct Food_Info{ int8 type; //0=water, 1=food int8 level; float duration; int8 satiation; }; struct Bauble_Info{ int16 cast; int16 recovery; int32 duration; float recast; int8 display_slot_optional; int8 display_cast_time; int8 display_bauble_type; float effect_radius; int32 max_aoe_targets; int8 display_until_cancelled; }; struct Book_Info{ int8 language; EQ2_16BitString author; EQ2_16BitString title; }; struct Skill_Info{ int32 spell_id; int32 spell_tier; }; struct House_Info{ int32 status_rent_reduction; }; struct HouseContainer_Info{ int16 disallowed_types; int16 allowed_types; int8 num_slots; }; struct RecipeBook_Info{ vector recipes; int8 uses; }; struct Thrown_Info{ sint32 range; sint32 damage_modifier; float hit_bonus; int32 damage_type; }; struct ItemEffect{ EQ2_16BitString effect; int8 percentage; int8 subbulletflag; }; #pragma pack() Item(); Item(Item* in_item); ~Item(); string lowername; string name; string description; int8 stack_count; int32 sell_price; int32 max_sell_value; bool save_needed; int8 weapon_type; string adornment; string creator; vector item_stats; vector item_string_stats; vector item_level_overrides; vector item_effects; Generic_Info generic_info; Weapon_Info* weapon_info; Ranged_Info* ranged_info; Armor_Info* armor_info; Bag_Info* bag_info; Food_Info* food_info; Bauble_Info* bauble_info; Book_Info* book_info; Skill_Info* skill_info; RecipeBook_Info* recipebook_info; Thrown_Info* thrown_info; vector slot_data; ItemCore details; int32 spell_id; int8 spell_tier; string item_script; void AddEffect(string effect, int8 percentage, int8 subbulletflag); int32 GetMaxSellValue(); void SetMaxSellValue(int32 val); void SetItem(Item* old_item); int16 GetOverrideLevel(int8 adventure_class, int8 tradeskill_class); void AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level); void AddLevelOverride(ItemLevelOverride* class_); bool CheckClassLevel(int8 adventure_class, int8 tradeskill_class, int16 level); bool CheckClass(int8 adventure_class, int8 tradeskill_class); bool CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level); void SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue); void SetAppearance(ItemAppearance* appearance); void AddStat(ItemStat* in_stat); void AddStatString(ItemStatString* in_stat); void AddStat(int8 type, int16 subtype, float value, char* name = 0); void SetWeaponType(int8 type); int8 GetWeaponType(); bool HasSlot(int8 slot, int8 slot2 = 255); bool IsNormal(); bool IsWeapon(); bool IsArmor(); bool IsRanged(); bool IsBag(); bool IsFood(); bool IsBauble(); bool IsSkill(); bool IsHouseItem(); bool IsHouseContainer(); bool IsShield(); bool IsAdornment(); bool IsAmmo(); bool IsBook(); bool IsChainArmor(); bool IsClothArmor(); bool IsCollectable(); bool IsCloak(); bool IsCrushWeapon(); bool IsFoodFood(); bool IsFoodDrink(); bool IsJewelry(); bool IsLeatherArmor(); bool IsMisc(); bool IsPierceWeapon(); bool IsPlateArmor(); bool IsPoison(); bool IsPotion(); bool IsRecipeBook(); bool IsSalesDisplay(); bool IsSlashWeapon(); bool IsSpellScroll(); bool IsTinkered(); bool IsTradeskill(); bool IsThrown(); void SetItemScript(string name); const char* GetItemScript(); int32 CalculateRepairCost(); void SetItemType(int8 in_type); void serialize(PacketStruct* packet, bool show_name = false, Player* player = 0, int16 packet_type = 0, int8 subtype = 0, bool loot_item = false); EQ2Packet* serialize(int16 version, bool show_name = false, Player* player = 0, bool include_twice = true, int16 packet_type = 0, int8 subtype = 0, bool merchant_item = false, bool loot_item = false); PacketStruct* PrepareItem(int16 version, bool merchant_item = false, bool loot_item = false); bool CheckFlag(int32 flag); void AddSlot(int8 slot_id); void SetSlots(int32 slots); bool needs_deletion; }; class MasterItemList{ public: ~MasterItemList(); map items; Item* GetItem(int32 id); Item* GetItemByName(const char *name); ItemStatsValues* CalculateItemBonuses(int32 item_id); ItemStatsValues* CalculateItemBonuses(Item* desc, ItemStatsValues* values = 0); vector* GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass); vector* GetItems(map criteria); void AddItem(Item* item); bool IsBag(int32 item_id); void RemoveAll(); static int32 NextUniqueID(); static void ResetUniqueID(int32 new_id); static int32 next_unique_id; }; class PlayerItemList { public: PlayerItemList(); ~PlayerItemList(); // int16 number; map indexed_items; map > items; // map< int8, Item* > inv_items; // map< int8, Item* > bank_items; bool SharedBankAddAllowed(Item* item); vector* GetItemsFromBagID(sint32 bag_id); vector* GetItemsInBag(Item* bag); Item* GetBag(int8 inventory_slot, bool lock = true); bool HasItem(int32 id, bool include_bank = false); Item* GetItemFromIndex(int32 index); void MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old = true); bool MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges); Item* GetItemFromUniqueID(int32 item_id, bool include_bank = false, bool lock = true); Item* GetItemFromID(int32 item_id, int8 count = 0, bool include_bank = false, bool lock = true); bool AssignItemToFreeSlot(Item* item); int16 GetNumberOfFreeSlots(); int16 GetNumberOfItems(); bool HasFreeSlot(); bool HasFreeBagSlot(); void DestroyItem(int16 index); Item* CanStack(Item* item, bool include_bank = false); void RemoveItem(Item* item, bool delete_item = false); void AddItem(Item* item); Item* GetItem(sint32 bag_slot, int16 slot); EQ2Packet* serialize(Player* player, int16 version); uchar* xor_packet; uchar* orig_packet; map* GetAllItems(); bool HasFreeBankSlot(); int8 FindFreeBankSlot(); private: void Stack(Item* orig_item, Item* item); Mutex MPlayerItems; int16 packet_count; }; class OverFlowItemList : public PlayerItemList { public: bool OverFlowSlotFull(); int8 GetNextOverFlowSlot(); bool AddItem(Item* item); Item* GetOverFlowItem(); }; class EquipmentItemList{ public: EquipmentItemList(); EquipmentItemList(const EquipmentItemList& list); ~EquipmentItemList(); Item* items[NUM_SLOTS]; vector* GetAllEquippedItems(); bool HasItem(int32 id); int8 GetNumberOfItems(); Item* GetItemFromUniqueID(int32 item_id); Item* GetItemFromItemID(int32 item_id); void SetItem(int8 slot_id, Item* item); void RemoveItem(int8 slot, bool delete_item = false); Item* GetItem(int8 slot_id); bool AddItem(int8 slot, Item* item); bool CheckEquipSlot(Item* tmp, int8 slot); bool CanItemBeEquippedInSlot(Item* tmp, int8 slot); int8 GetFreeSlot(Item* tmp, int8 slot_id = 255); ItemStatsValues* CalculateEquipmentBonuses(); EQ2Packet* serialize(int16 version); uchar* xor_packet; uchar* orig_packet; private: Mutex MEquipmentItems; }; #endif