2016-05-30 06:52:25 -04:00
/* EQEMu: Everquest Server Emulator
2016-04-15 22:11:53 -04:00
Copyright ( C ) 2001 - 2016 EQEMu Development Team ( http : //eqemulator.net)
This program 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 ; version 2 of the License .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY except by those people which sell it , which
are required to give you total support for your newly bought product ;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
2016-05-30 06:52:25 -04:00
A PARTICULAR PURPOSE . See the GNU General Public License for more details .
2016-04-15 22:11:53 -04:00
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# include "emu_constants.h"
2016-05-25 18:50:26 -04:00
# include "emu_limits.h"
2019-01-12 20:03:52 -05:00
# include "rulesys.h"
2016-04-15 22:11:53 -04:00
2019-01-12 20:03:52 -05:00
# include <memory>
2016-04-15 22:11:53 -04:00
2019-01-12 20:03:52 -05:00
static bool global_dictionary_init = false ;
2020-05-17 18:36:06 -07:00
void EQ : : InitializeDynamicLookups ( ) {
2019-01-12 20:03:52 -05:00
if ( global_dictionary_init = = true )
return ;
constants : : InitializeDynamicLookups ( ) ;
inventory : : InitializeDynamicLookups ( ) ;
behavior : : InitializeDynamicLookups ( ) ;
2019-01-20 08:24:21 -05:00
spells : : InitializeDynamicLookups ( ) ;
2019-01-12 20:03:52 -05:00
global_dictionary_init = true ;
}
2020-05-17 18:36:06 -07:00
static std : : unique_ptr < EQ : : constants : : LookupEntry > constants_dynamic_nongm_lookup_entries [ EQ : : versions : : ClientVersionCount ] ;
static std : : unique_ptr < EQ : : constants : : LookupEntry > constants_dynamic_gm_lookup_entries [ EQ : : versions : : ClientVersionCount ] ;
static const EQ : : constants : : LookupEntry constants_static_lookup_entries [ EQ : : versions : : ClientVersionCount ] =
2016-04-15 22:11:53 -04:00
{
2019-01-07 00:11:07 -05:00
/*[ClientVersion::Unknown] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-02-02 21:51:57 -05:00
ClientUnknown : : constants : : EXPANSION ,
ClientUnknown : : constants : : EXPANSION_BIT ,
ClientUnknown : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
ClientUnknown : : INULL ,
ClientUnknown : : INULL
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::Client62] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-02-02 21:51:57 -05:00
Client62 : : constants : : EXPANSION ,
Client62 : : constants : : EXPANSION_BIT ,
Client62 : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
Client62 : : INULL ,
Client62 : : INULL
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::Titanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
Titanium : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
Titanium : : constants : : EXPANSION_BIT ,
Titanium : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
Titanium : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
Titanium : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::SoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
SoF : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
SoF : : constants : : EXPANSION_BIT ,
SoF : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
SoF : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
SoF : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::SoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
SoD : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
SoD : : constants : : EXPANSION_BIT ,
SoD : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
SoD : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
SoD : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::UF] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
UF : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
UF : : constants : : EXPANSION_BIT ,
UF : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
UF : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
UF : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::RoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
RoF : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
RoF : : constants : : EXPANSION_BIT ,
RoF : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
RoF : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
RoF : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[ClientVersion::RoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : constants : : LookupEntry (
2019-01-09 20:14:49 -05:00
RoF2 : : constants : : EXPANSION ,
2019-01-07 18:18:35 -05:00
RoF2 : : constants : : EXPANSION_BIT ,
RoF2 : : constants : : EXPANSIONS_MASK ,
2018-07-05 21:05:26 -04:00
RoF2 : : constants : : CHARACTER_CREATION_LIMIT ,
2019-01-20 20:04:07 -05:00
RoF2 : : constants : : SAY_LINK_BODY_SIZE
2019-01-07 07:39:43 -05:00
)
2016-06-06 21:59:42 -04:00
} ;
2016-04-15 22:11:53 -04:00
2019-01-12 20:03:52 -05:00
static bool constants_dictionary_init = false ;
2020-05-17 18:36:06 -07:00
void EQ : : constants : : InitializeDynamicLookups ( ) {
2019-01-12 20:03:52 -05:00
if ( constants_dictionary_init = = true )
return ;
constants_dictionary_init = true ;
if ( RuleB ( World , UseClientBasedExpansionSettings ) )
return ;
// use static references for now
}
2020-05-17 18:36:06 -07:00
const EQ : : constants : : LookupEntry * EQ : : constants : : DynamicLookup ( versions : : ClientVersion client_version , bool gm_flag )
2019-01-20 23:40:40 -05:00
{
if ( gm_flag )
return DynamicGMLookup ( client_version ) ;
else
return DynamicNonGMLookup ( client_version ) ;
}
2020-05-17 18:36:06 -07:00
const EQ : : constants : : LookupEntry * EQ : : constants : : DynamicNonGMLookup ( versions : : ClientVersion client_version )
2019-01-15 00:50:58 -05:00
{
client_version = versions : : ValidateClientVersion ( client_version ) ;
2019-01-20 23:40:40 -05:00
if ( constants_dynamic_nongm_lookup_entries [ static_cast < int > ( client_version ) ] )
return constants_dynamic_nongm_lookup_entries [ static_cast < int > ( client_version ) ] . get ( ) ;
2019-01-15 00:50:58 -05:00
return & constants_static_lookup_entries [ static_cast < int > ( client_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : constants : : LookupEntry * EQ : : constants : : DynamicGMLookup ( versions : : ClientVersion client_version )
2016-04-15 22:11:53 -04:00
{
2019-01-12 20:03:52 -05:00
client_version = versions : : ValidateClientVersion ( client_version ) ;
2019-01-20 23:40:40 -05:00
if ( constants_dynamic_gm_lookup_entries [ static_cast < int > ( client_version ) ] )
return constants_dynamic_gm_lookup_entries [ static_cast < int > ( client_version ) ] . get ( ) ;
2019-01-12 20:03:52 -05:00
return & constants_static_lookup_entries [ static_cast < int > ( client_version ) ] ;
2016-04-15 22:11:53 -04:00
}
2020-05-17 18:36:06 -07:00
const EQ : : constants : : LookupEntry * EQ : : constants : : StaticLookup ( versions : : ClientVersion client_version )
2019-01-12 20:03:52 -05:00
{
return & constants_static_lookup_entries [ static_cast < int > ( versions : : ValidateClientVersion ( client_version ) ) ] ;
}
2020-05-17 18:36:06 -07:00
static std : : unique_ptr < EQ : : inventory : : LookupEntry > inventory_dynamic_nongm_lookup_entries [ EQ : : versions : : MobVersionCount ] ;
static std : : unique_ptr < EQ : : inventory : : LookupEntry > inventory_dynamic_gm_lookup_entries [ EQ : : versions : : MobVersionCount ] ;
static const EQ : : inventory : : LookupEntry inventory_static_lookup_entries [ EQ : : versions : : MobVersionCount ] =
2016-04-15 22:11:53 -04:00
{
2019-01-07 00:11:07 -05:00
/*[MobVersion::Unknown] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL , ClientUnknown : : INULL , ClientUnknown : : INULL ,
ClientUnknown : : INULL
) ,
2019-01-12 20:03:52 -05:00
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
2018-07-05 21:05:26 -04:00
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
2019-01-07 00:11:07 -05:00
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::Client62] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL , Client62 : : INULL , Client62 : : INULL ,
Client62 : : INULL
) ,
2019-01-12 20:03:52 -05:00
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
2018-07-05 21:05:26 -04:00
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
2019-01-07 00:11:07 -05:00
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::Titanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , Titanium : : invtype : : BANK_SIZE , Titanium : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
Titanium : : invtype : : TRADE_SIZE , Titanium : : invtype : : WORLD_SIZE , Titanium : : invtype : : LIMBO_SIZE ,
Titanium : : invtype : : TRIBUTE_SIZE , Titanium : : INULL , Titanium : : invtype : : GUILD_TRIBUTE_SIZE ,
Titanium : : invtype : : MERCHANT_SIZE , Titanium : : INULL , Titanium : : invtype : : CORPSE_SIZE ,
Titanium : : invtype : : BAZAAR_SIZE , Titanium : : invtype : : INSPECT_SIZE , Titanium : : INULL ,
Titanium : : invtype : : VIEW_MOD_PC_SIZE , Titanium : : invtype : : VIEW_MOD_BANK_SIZE , Titanium : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
Titanium : : invtype : : VIEW_MOD_LIMBO_SIZE , Titanium : : invtype : : ALT_STORAGE_SIZE , Titanium : : invtype : : ARCHIVED_SIZE ,
Titanium : : INULL , Titanium : : INULL , Titanium : : INULL ,
Titanium : : invtype : : OTHER_SIZE
) ,
2019-01-12 20:03:52 -05:00
Titanium : : invslot : : EQUIPMENT_BITMASK ,
Titanium : : invslot : : GENERAL_BITMASK ,
Titanium : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
Titanium : : invslot : : POSSESSIONS_BITMASK ,
Titanium : : invslot : : CORPSE_BITMASK ,
Titanium : : invbag : : SLOT_COUNT ,
Titanium : : invaug : : SOCKET_COUNT ,
2019-01-07 00:11:07 -05:00
2016-10-17 06:32:51 -04:00
Titanium : : inventory : : AllowEmptyBagInBag ,
Titanium : : inventory : : AllowClickCastFromBag ,
Titanium : : inventory : : ConcatenateInvTypeLimbo ,
Titanium : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::SoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , SoF : : invtype : : BANK_SIZE , SoF : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
SoF : : invtype : : TRADE_SIZE , SoF : : invtype : : WORLD_SIZE , SoF : : invtype : : LIMBO_SIZE ,
SoF : : invtype : : TRIBUTE_SIZE , SoF : : INULL , SoF : : invtype : : GUILD_TRIBUTE_SIZE ,
SoF : : invtype : : MERCHANT_SIZE , SoF : : INULL , SoF : : invtype : : CORPSE_SIZE ,
SoF : : invtype : : BAZAAR_SIZE , SoF : : invtype : : INSPECT_SIZE , SoF : : INULL ,
SoF : : invtype : : VIEW_MOD_PC_SIZE , SoF : : invtype : : VIEW_MOD_BANK_SIZE , SoF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
SoF : : invtype : : VIEW_MOD_LIMBO_SIZE , SoF : : invtype : : ALT_STORAGE_SIZE , SoF : : invtype : : ARCHIVED_SIZE ,
SoF : : INULL , SoF : : INULL , SoF : : INULL ,
SoF : : invtype : : OTHER_SIZE
) ,
2019-01-12 20:03:52 -05:00
SoF : : invslot : : EQUIPMENT_BITMASK ,
SoF : : invslot : : GENERAL_BITMASK ,
SoF : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
SoF : : invslot : : POSSESSIONS_BITMASK ,
SoF : : invslot : : CORPSE_BITMASK ,
SoF : : invbag : : SLOT_COUNT ,
SoF : : invaug : : SOCKET_COUNT ,
2019-01-07 00:11:07 -05:00
2016-10-17 06:32:51 -04:00
SoF : : inventory : : AllowEmptyBagInBag ,
SoF : : inventory : : AllowClickCastFromBag ,
SoF : : inventory : : ConcatenateInvTypeLimbo ,
SoF : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::SoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , SoD : : invtype : : BANK_SIZE , SoD : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
SoD : : invtype : : TRADE_SIZE , SoD : : invtype : : WORLD_SIZE , SoD : : invtype : : LIMBO_SIZE ,
SoD : : invtype : : TRIBUTE_SIZE , SoD : : INULL , SoD : : invtype : : GUILD_TRIBUTE_SIZE ,
SoD : : invtype : : MERCHANT_SIZE , SoD : : INULL , SoD : : invtype : : CORPSE_SIZE ,
SoD : : invtype : : BAZAAR_SIZE , SoD : : invtype : : INSPECT_SIZE , SoD : : INULL ,
SoD : : invtype : : VIEW_MOD_PC_SIZE , SoD : : invtype : : VIEW_MOD_BANK_SIZE , SoD : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
SoD : : invtype : : VIEW_MOD_LIMBO_SIZE , SoD : : invtype : : ALT_STORAGE_SIZE , SoD : : invtype : : ARCHIVED_SIZE ,
SoD : : INULL , SoD : : INULL , SoD : : INULL ,
SoD : : invtype : : OTHER_SIZE
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
SoD : : invslot : : EQUIPMENT_BITMASK ,
SoD : : invslot : : GENERAL_BITMASK ,
SoD : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
SoD : : invslot : : POSSESSIONS_BITMASK ,
SoD : : invslot : : CORPSE_BITMASK ,
SoD : : invbag : : SLOT_COUNT ,
SoD : : invaug : : SOCKET_COUNT ,
2016-10-17 06:32:51 -04:00
SoD : : inventory : : AllowEmptyBagInBag ,
SoD : : inventory : : AllowClickCastFromBag ,
SoD : : inventory : : ConcatenateInvTypeLimbo ,
SoD : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::UF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , UF : : invtype : : BANK_SIZE , UF : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
UF : : invtype : : TRADE_SIZE , UF : : invtype : : WORLD_SIZE , UF : : invtype : : LIMBO_SIZE ,
UF : : invtype : : TRIBUTE_SIZE , UF : : INULL , UF : : invtype : : GUILD_TRIBUTE_SIZE ,
UF : : invtype : : MERCHANT_SIZE , UF : : INULL , UF : : invtype : : CORPSE_SIZE ,
UF : : invtype : : BAZAAR_SIZE , UF : : invtype : : INSPECT_SIZE , UF : : INULL ,
UF : : invtype : : VIEW_MOD_PC_SIZE , UF : : invtype : : VIEW_MOD_BANK_SIZE , UF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
UF : : invtype : : VIEW_MOD_LIMBO_SIZE , UF : : invtype : : ALT_STORAGE_SIZE , UF : : invtype : : ARCHIVED_SIZE ,
UF : : INULL , UF : : INULL , UF : : INULL ,
UF : : invtype : : OTHER_SIZE
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
UF : : invslot : : EQUIPMENT_BITMASK ,
UF : : invslot : : GENERAL_BITMASK ,
UF : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
UF : : invslot : : POSSESSIONS_BITMASK ,
UF : : invslot : : CORPSE_BITMASK ,
UF : : invbag : : SLOT_COUNT ,
UF : : invaug : : SOCKET_COUNT ,
2016-10-17 06:32:51 -04:00
UF : : inventory : : AllowEmptyBagInBag ,
UF : : inventory : : AllowClickCastFromBag ,
UF : : inventory : : ConcatenateInvTypeLimbo ,
UF : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::RoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , RoF : : invtype : : BANK_SIZE , RoF : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
RoF : : invtype : : TRADE_SIZE , RoF : : invtype : : WORLD_SIZE , RoF : : invtype : : LIMBO_SIZE ,
RoF : : invtype : : TRIBUTE_SIZE , RoF : : invtype : : TROPHY_TRIBUTE_SIZE , RoF : : invtype : : GUILD_TRIBUTE_SIZE ,
RoF : : invtype : : MERCHANT_SIZE , RoF : : invtype : : DELETED_SIZE , RoF : : invtype : : CORPSE_SIZE ,
RoF : : invtype : : BAZAAR_SIZE , RoF : : invtype : : INSPECT_SIZE , RoF : : invtype : : REAL_ESTATE_SIZE ,
RoF : : invtype : : VIEW_MOD_PC_SIZE , RoF : : invtype : : VIEW_MOD_BANK_SIZE , RoF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
RoF : : invtype : : VIEW_MOD_LIMBO_SIZE , RoF : : invtype : : ALT_STORAGE_SIZE , RoF : : invtype : : ARCHIVED_SIZE ,
RoF : : invtype : : MAIL_SIZE , RoF : : invtype : : GUILD_TROPHY_TRIBUTE_SIZE , RoF : : INULL ,
RoF : : invtype : : OTHER_SIZE
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
RoF : : invslot : : EQUIPMENT_BITMASK ,
RoF : : invslot : : GENERAL_BITMASK ,
RoF : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
RoF : : invslot : : POSSESSIONS_BITMASK ,
RoF : : invslot : : CORPSE_BITMASK ,
RoF : : invbag : : SLOT_COUNT ,
RoF : : invaug : : SOCKET_COUNT ,
RoF : : inventory : : AllowEmptyBagInBag ,
2016-10-17 06:32:51 -04:00
RoF : : inventory : : AllowClickCastFromBag ,
RoF : : inventory : : ConcatenateInvTypeLimbo ,
RoF : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::RoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , RoF2 : : invtype : : BANK_SIZE , RoF2 : : invtype : : SHARED_BANK_SIZE ,
2019-01-07 00:11:07 -05:00
RoF2 : : invtype : : TRADE_SIZE , RoF2 : : invtype : : WORLD_SIZE , RoF2 : : invtype : : LIMBO_SIZE ,
RoF2 : : invtype : : TRIBUTE_SIZE , RoF2 : : invtype : : TROPHY_TRIBUTE_SIZE , RoF2 : : invtype : : GUILD_TRIBUTE_SIZE ,
RoF2 : : invtype : : MERCHANT_SIZE , RoF2 : : invtype : : DELETED_SIZE , RoF2 : : invtype : : CORPSE_SIZE ,
RoF2 : : invtype : : BAZAAR_SIZE , RoF2 : : invtype : : INSPECT_SIZE , RoF2 : : invtype : : REAL_ESTATE_SIZE ,
RoF2 : : invtype : : VIEW_MOD_PC_SIZE , RoF2 : : invtype : : VIEW_MOD_BANK_SIZE , RoF2 : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
RoF2 : : invtype : : VIEW_MOD_LIMBO_SIZE , RoF2 : : invtype : : ALT_STORAGE_SIZE , RoF2 : : invtype : : ARCHIVED_SIZE ,
RoF2 : : invtype : : MAIL_SIZE , RoF2 : : invtype : : GUILD_TROPHY_TRIBUTE_SIZE , RoF2 : : invtype : : KRONO_SIZE ,
RoF2 : : invtype : : OTHER_SIZE
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
RoF2 : : invslot : : EQUIPMENT_BITMASK ,
RoF2 : : invslot : : GENERAL_BITMASK ,
RoF2 : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
RoF2 : : invslot : : POSSESSIONS_BITMASK ,
RoF2 : : invslot : : CORPSE_BITMASK ,
RoF2 : : invbag : : SLOT_COUNT ,
RoF2 : : invaug : : SOCKET_COUNT ,
RoF2 : : inventory : : AllowEmptyBagInBag ,
2016-10-17 06:32:51 -04:00
RoF2 : : inventory : : AllowClickCastFromBag ,
RoF2 : : inventory : : ConcatenateInvTypeLimbo ,
RoF2 : : inventory : : AllowOverLevelEquipment
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::NPC] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : NPC : : invtype : : TRADE_SIZE , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL , EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : NPC : : INULL ,
EntityLimits : : NPC : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::NPCMerchant] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : NPCMerchant : : invtype : : TRADE_SIZE , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL , EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : NPCMerchant : : INULL ,
EntityLimits : : NPCMerchant : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::Merc] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : Merc : : invtype : : TRADE_SIZE , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL , EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : Merc : : INULL ,
EntityLimits : : Merc : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::Bot] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : Bot : : invtype : : TRADE_SIZE , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL , EntityLimits : : Bot : : INULL ,
EntityLimits : : Bot : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : Bot : : invslot : : EQUIPMENT_BITMASK ,
EntityLimits : : Bot : : invslot : : GENERAL_BITMASK ,
EntityLimits : : Bot : : invslot : : CURSOR_BITMASK ,
2018-07-05 21:05:26 -04:00
EntityLimits : : Bot : : invslot : : POSSESSIONS_BITMASK ,
EntityLimits : : Bot : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
EQ : : invaug : : SOCKET_COUNT , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::ClientPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : ClientPet : : invtype : : TRADE_SIZE , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL , EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : ClientPet : : INULL ,
EntityLimits : : ClientPet : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::NPCPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : NPCPet : : invtype : : TRADE_SIZE , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL , EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : NPCPet : : INULL ,
EntityLimits : : NPCPet : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::MercPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : MercPet : : invtype : : TRADE_SIZE , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL , EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : MercPet : : INULL ,
EntityLimits : : MercPet : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::BotPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
EQ : : invtype : : POSSESSIONS_SIZE , /*InvTypePossessionsSize,*/ EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
2019-01-07 00:11:07 -05:00
EntityLimits : : BotPet : : invtype : : TRADE_SIZE , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , /*InvTypeCorpseSize,*/
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL , EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL ,
2018-07-05 21:05:26 -04:00
EntityLimits : : BotPet : : INULL ,
EntityLimits : : BotPet : : INULL ,
2020-05-17 18:36:06 -07:00
0 , //EQ::inventory::ContainerCount, /*ItemBagSize,*/
0 , //EQ::inventory::SocketCount, /*ItemAugSize,*/
2018-07-05 21:05:26 -04:00
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineTitanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
Titanium : : INULL , Titanium : : INULL , Titanium : : INULL ,
Titanium : : invtype : : TRADE_SIZE , Titanium : : INULL , Titanium : : INULL ,
Titanium : : INULL , Titanium : : INULL , Titanium : : INULL ,
Titanium : : invtype : : MERCHANT_SIZE , Titanium : : INULL , Titanium : : INULL ,
Titanium : : invtype : : BAZAAR_SIZE , Titanium : : invtype : : INSPECT_SIZE , Titanium : : INULL ,
Titanium : : invtype : : VIEW_MOD_PC_SIZE , Titanium : : invtype : : VIEW_MOD_BANK_SIZE , Titanium : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
Titanium : : invtype : : VIEW_MOD_LIMBO_SIZE , Titanium : : INULL , Titanium : : INULL ,
Titanium : : INULL , Titanium : : INULL , Titanium : : INULL ,
Titanium : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
Titanium : : INULL ,
Titanium : : INULL ,
Titanium : : INULL ,
2018-07-05 21:05:26 -04:00
Titanium : : INULL ,
Titanium : : INULL ,
Titanium : : invbag : : SLOT_COUNT ,
Titanium : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineSoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
SoF : : INULL , SoF : : INULL , SoF : : INULL ,
SoF : : invtype : : TRADE_SIZE , SoF : : INULL , SoF : : INULL ,
SoF : : INULL , SoF : : INULL , SoF : : INULL ,
SoF : : invtype : : MERCHANT_SIZE , SoF : : INULL , SoF : : INULL ,
SoF : : invtype : : BAZAAR_SIZE , SoF : : invtype : : INSPECT_SIZE , SoF : : INULL ,
SoF : : invtype : : VIEW_MOD_PC_SIZE , SoF : : invtype : : VIEW_MOD_BANK_SIZE , SoF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
SoF : : invtype : : VIEW_MOD_LIMBO_SIZE , SoF : : INULL , SoF : : INULL ,
SoF : : INULL , SoF : : INULL , SoF : : INULL ,
SoF : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
SoF : : INULL ,
SoF : : INULL ,
SoF : : INULL ,
2018-07-05 21:05:26 -04:00
SoF : : INULL ,
SoF : : INULL ,
SoF : : invbag : : SLOT_COUNT ,
SoF : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineSoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
SoD : : INULL , SoD : : INULL , SoD : : INULL ,
SoD : : invtype : : TRADE_SIZE , SoD : : INULL , SoD : : INULL ,
SoD : : INULL , SoD : : INULL , SoD : : INULL ,
SoD : : invtype : : MERCHANT_SIZE , SoD : : INULL , SoD : : INULL ,
SoD : : invtype : : BAZAAR_SIZE , SoD : : invtype : : INSPECT_SIZE , SoD : : INULL ,
SoD : : invtype : : VIEW_MOD_PC_SIZE , SoD : : invtype : : VIEW_MOD_BANK_SIZE , SoD : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
SoD : : invtype : : VIEW_MOD_LIMBO_SIZE , SoD : : INULL , SoD : : INULL ,
SoD : : INULL , SoD : : INULL , SoD : : INULL ,
SoD : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
SoD : : INULL ,
SoD : : INULL ,
SoD : : INULL ,
2018-07-05 21:05:26 -04:00
SoD : : INULL ,
SoD : : INULL ,
SoD : : invbag : : SLOT_COUNT ,
SoD : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineUF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
UF : : INULL , UF : : INULL , UF : : INULL ,
UF : : invtype : : TRADE_SIZE , UF : : INULL , UF : : INULL ,
UF : : INULL , UF : : INULL , UF : : INULL ,
UF : : invtype : : MERCHANT_SIZE , UF : : INULL , UF : : INULL ,
UF : : invtype : : BAZAAR_SIZE , UF : : invtype : : INSPECT_SIZE , UF : : INULL ,
UF : : invtype : : VIEW_MOD_PC_SIZE , UF : : invtype : : VIEW_MOD_BANK_SIZE , UF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
UF : : invtype : : VIEW_MOD_LIMBO_SIZE , UF : : INULL , UF : : INULL ,
UF : : INULL , UF : : INULL , UF : : INULL ,
UF : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
UF : : INULL ,
UF : : INULL ,
UF : : INULL ,
2018-07-05 21:05:26 -04:00
UF : : INULL ,
UF : : INULL ,
UF : : invbag : : SLOT_COUNT ,
UF : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineRoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
RoF : : INULL , RoF : : INULL , RoF : : INULL ,
RoF : : invtype : : TRADE_SIZE , RoF : : INULL , RoF : : INULL ,
RoF : : INULL , RoF : : INULL , RoF : : INULL ,
RoF : : invtype : : MERCHANT_SIZE , RoF : : INULL , RoF : : INULL ,
RoF : : invtype : : BAZAAR_SIZE , RoF : : invtype : : INSPECT_SIZE , RoF : : INULL ,
RoF : : invtype : : VIEW_MOD_PC_SIZE , RoF : : invtype : : VIEW_MOD_BANK_SIZE , RoF : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
RoF : : invtype : : VIEW_MOD_LIMBO_SIZE , RoF : : INULL , RoF : : INULL ,
RoF : : INULL , RoF : : INULL , RoF : : INULL ,
RoF : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
RoF : : INULL ,
RoF : : INULL ,
RoF : : INULL ,
2018-07-05 21:05:26 -04:00
RoF : : INULL ,
RoF : : INULL ,
RoF : : invbag : : SLOT_COUNT ,
RoF : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
) ,
/*[MobVersion::OfflineRoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : inventory : : LookupEntry (
EQ : : inventory : : LookupEntry : : InventoryTypeSize_Struct (
2019-01-07 00:11:07 -05:00
RoF2 : : INULL , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : invtype : : TRADE_SIZE , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : INULL , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : invtype : : MERCHANT_SIZE , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : invtype : : BAZAAR_SIZE , RoF2 : : invtype : : INSPECT_SIZE , RoF2 : : INULL ,
RoF2 : : invtype : : VIEW_MOD_PC_SIZE , RoF2 : : invtype : : VIEW_MOD_BANK_SIZE , RoF2 : : invtype : : VIEW_MOD_SHARED_BANK_SIZE ,
RoF2 : : invtype : : VIEW_MOD_LIMBO_SIZE , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : INULL , RoF2 : : INULL , RoF2 : : INULL ,
RoF2 : : INULL
) ,
2018-07-05 21:05:26 -04:00
2019-01-12 20:03:52 -05:00
RoF2 : : INULL ,
RoF2 : : INULL ,
RoF2 : : INULL ,
2018-07-05 21:05:26 -04:00
RoF2 : : INULL ,
RoF2 : : INULL ,
RoF2 : : invbag : : SLOT_COUNT ,
RoF2 : : invaug : : SOCKET_COUNT ,
false ,
false ,
false ,
false
2019-01-07 00:11:07 -05:00
)
2016-06-06 21:59:42 -04:00
} ;
2019-01-12 20:03:52 -05:00
static bool inventory_dictionary_init = false ;
2020-05-17 18:36:06 -07:00
void EQ : : inventory : : InitializeDynamicLookups ( ) {
2019-01-12 20:03:52 -05:00
if ( inventory_dictionary_init = = true )
return ;
inventory_dictionary_init = true ;
// server is configured for static definitions
if ( RuleB ( World , UseClientBasedExpansionSettings ) )
return ;
// Notes:
2019-01-15 00:50:58 -05:00
// - Currently, there are only 3 known expansions that affect inventory-related settings in the clients..
// -- Expansion::PoR "Prophecy of Ro" - toggles between 24 (set) and 16 (clear) bank slots
// -- Expansion::TBS "The Buried Sea" - toggles slotPowerSource activated (set) and deactivated (clear)
// -- Expansion::HoT "House of Thule" - toggles slotGeneral9/slotGeneral10 activated (set) and deactivated (clear)
// - Corspe size does not appear to reflect loss of active possessions slots
// - Inspect size does not appear to reflect loss of active equipment slots
// - Bank size is not overridden by GM flag when expansion bit is (clear)
2019-01-15 20:11:29 -05:00
// - Power Source slot is enabled, but not activated, by GM flag when expansion bit is (clear) (RoF+ only)
2019-01-15 00:50:58 -05:00
// - General9 and General10 slots are activated by GM flag when expansion bit is (clear)
// - Obviously, the client must support the expansion to allow any (set) or override condition
const uint32 dynamic_check_mask =
(
2020-05-17 18:36:06 -07:00
EQ : : expansions : : bitPoR |
EQ : : expansions : : bitTBS |
EQ : : expansions : : bitHoT
2019-01-15 00:50:58 -05:00
) ;
2019-01-12 20:03:52 -05:00
// if all of the above expansion bits are present, then static references will suffice
2019-01-15 00:50:58 -05:00
if ( ( dynamic_check_mask & RuleI ( World , ExpansionSettings ) ) = = dynamic_check_mask )
2019-01-12 20:03:52 -05:00
return ;
2019-01-20 23:40:40 -05:00
// Dynamic Lookups (promotive methodology) (all mob versions allowed)
2020-05-17 18:36:06 -07:00
for ( uint32 iter = static_cast < uint32 > ( EQ : : versions : : MobVersion : : Unknown ) ; iter < = static_cast < uint32 > ( EQ : : versions : : LastPCMobVersion ) ; + + iter ) {
2019-01-20 23:40:40 -05:00
// no need to dynamic this condition since it is the lowest compatibility standard
if ( ( dynamic_check_mask & ~ constants_static_lookup_entries [ iter ] . ExpansionsMask ) = = dynamic_check_mask )
continue ;
// only client versions whose supported expansions are affected need to be considered
if ( ( constants_static_lookup_entries [ iter ] . ExpansionsMask & RuleI ( World , ExpansionSettings ) ) = = constants_static_lookup_entries [ iter ] . ExpansionsMask )
continue ;
// direct manipulation of lookup indices is safe so long as (int)ClientVersion::<mob> == (int)MobVersion::<mob>
inventory_dynamic_nongm_lookup_entries [ iter ] = std : : unique_ptr < LookupEntry > ( new LookupEntry ( inventory_static_lookup_entries [ iter ] ) ) ;
// clamp affected fields to the lowest standard
inventory_dynamic_nongm_lookup_entries [ iter ] - > InventoryTypeSize . Bank = Titanium : : invtype : : BANK_SIZE ; // bank size
inventory_dynamic_nongm_lookup_entries [ iter ] - > EquipmentBitmask = Titanium : : invslot : : EQUIPMENT_BITMASK ; // power source
inventory_dynamic_nongm_lookup_entries [ iter ] - > GeneralBitmask = Titanium : : invslot : : GENERAL_BITMASK ; // general size
inventory_dynamic_nongm_lookup_entries [ iter ] - > PossessionsBitmask = 0 ; // we'll fix later
inventory_dynamic_nongm_lookup_entries [ iter ] - > CorpseBitmask = 0 ; // we'll fix later
2020-05-17 18:36:06 -07:00
if ( RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitPoR ) {
2019-01-20 23:40:40 -05:00
// update bank size
2020-05-17 18:36:06 -07:00
if ( constants_static_lookup_entries [ iter ] . ExpansionsMask & EQ : : expansions : : bitPoR )
2019-01-20 23:40:40 -05:00
inventory_dynamic_nongm_lookup_entries [ iter ] - > InventoryTypeSize . Bank = SoF : : invtype : : BANK_SIZE ;
}
2020-05-17 18:36:06 -07:00
if ( RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitTBS ) {
2019-01-20 23:40:40 -05:00
// update power source
2020-05-17 18:36:06 -07:00
if ( constants_static_lookup_entries [ iter ] . ExpansionsMask & EQ : : expansions : : bitTBS )
2019-01-20 23:40:40 -05:00
inventory_dynamic_nongm_lookup_entries [ iter ] - > EquipmentBitmask = SoF : : invslot : : EQUIPMENT_BITMASK ;
}
2020-05-17 18:36:06 -07:00
if ( RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitHoT ) {
2019-01-20 23:40:40 -05:00
// update general size
2020-05-17 18:36:06 -07:00
if ( constants_static_lookup_entries [ iter ] . ExpansionsMask & EQ : : expansions : : bitHoT )
2019-01-20 23:40:40 -05:00
inventory_dynamic_nongm_lookup_entries [ iter ] - > GeneralBitmask = RoF : : invslot : : GENERAL_BITMASK ;
}
// fixup possessions bitmask
inventory_dynamic_nongm_lookup_entries [ iter ] - > PossessionsBitmask =
(
inventory_dynamic_nongm_lookup_entries [ iter ] - > EquipmentBitmask |
inventory_dynamic_nongm_lookup_entries [ iter ] - > GeneralBitmask |
inventory_dynamic_nongm_lookup_entries [ iter ] - > CursorBitmask
) ;
// fixup corpse bitmask
inventory_dynamic_nongm_lookup_entries [ iter ] - > CorpseBitmask =
(
inventory_dynamic_nongm_lookup_entries [ iter ] - > GeneralBitmask |
inventory_dynamic_nongm_lookup_entries [ iter ] - > CursorBitmask |
( inventory_dynamic_nongm_lookup_entries [ iter ] - > EquipmentBitmask < < 34 )
) ;
// expansion-related fields are now updated and all other fields reflect the static entry values
}
2019-01-15 00:50:58 -05:00
// Dynamic GM Lookups (demotive methodology) (client-linked mob versions only)
2020-05-17 18:36:06 -07:00
for ( uint32 iter = static_cast < uint32 > ( EQ : : versions : : MobVersion : : Unknown ) ; iter < = static_cast < uint32 > ( EQ : : versions : : LastPCMobVersion ) ; + + iter ) {
2019-01-15 00:50:58 -05:00
// no need to dynamic this condition since it is the lowest compatibility standard
if ( ( dynamic_check_mask & ~ constants_static_lookup_entries [ iter ] . ExpansionsMask ) = = dynamic_check_mask )
continue ;
// only client versions whose supported expansions are affected need to be considered
if ( ( constants_static_lookup_entries [ iter ] . ExpansionsMask & RuleI ( World , ExpansionSettings ) ) = = constants_static_lookup_entries [ iter ] . ExpansionsMask )
2019-01-12 20:03:52 -05:00
continue ;
2019-01-15 00:50:58 -05:00
// special case gm exclusions based on known behaviors
switch ( iter ) {
case static_cast < uint32 > ( versions : : MobVersion : : RoF2 ) :
case static_cast < uint32 > ( versions : : MobVersion : : RoF ) :
// if bank size is not altered on these clients, then static will suffice
// (we already know these clients support this expansion...)
if ( RuleI ( World , ExpansionSettings ) & expansions : : bitPoR )
continue ;
break ;
default :
break ;
}
2019-01-12 20:03:52 -05:00
// direct manipulation of lookup indices is safe so long as (int)ClientVersion::<client> == (int)MobVersion::<client>
2019-01-15 00:50:58 -05:00
inventory_dynamic_gm_lookup_entries [ iter ] = std : : unique_ptr < LookupEntry > ( new LookupEntry ( inventory_static_lookup_entries [ iter ] ) ) ;
inventory_dynamic_gm_lookup_entries [ iter ] - > PossessionsBitmask = 0 ; // we'll fix later
inventory_dynamic_gm_lookup_entries [ iter ] - > CorpseBitmask = 0 ; // we'll fix later
2020-05-17 18:36:06 -07:00
if ( ~ RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitPoR ) {
2019-01-15 00:50:58 -05:00
// update bank size
2020-05-17 18:36:06 -07:00
if ( constants_static_lookup_entries [ iter ] . ExpansionsMask & EQ : : expansions : : bitPoR )
2019-01-15 00:50:58 -05:00
inventory_dynamic_gm_lookup_entries [ iter ] - > InventoryTypeSize . Bank = Titanium : : invtype : : BANK_SIZE ;
}
2020-05-17 18:36:06 -07:00
if ( ~ RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitTBS ) {
2019-01-15 00:50:58 -05:00
// update power source
switch ( iter ) {
case versions : : bitUF :
case versions : : bitSoD :
case versions : : bitSoF :
// gm flag does not override expansion-based behavior
// (we already know that only these clients support this behavior)
inventory_dynamic_gm_lookup_entries [ iter ] - > EquipmentBitmask = Titanium : : invslot : : EQUIPMENT_BITMASK ;
break ;
default :
break ;
}
}
2020-05-17 18:36:06 -07:00
if ( ~ RuleI ( World , ExpansionSettings ) & EQ : : expansions : : bitHoT ) {
2019-01-15 00:50:58 -05:00
// update general size
switch ( iter ) {
case versions : : bitUF :
case versions : : bitSoD :
case versions : : bitSoF :
// gm flag does not override expansion-based behavior
// (we already know that only these clients support this behavior)
inventory_dynamic_gm_lookup_entries [ iter ] - > GeneralBitmask = Titanium : : invslot : : GENERAL_BITMASK ;
break ;
default :
break ;
}
}
// fixup possessions bitmask
inventory_dynamic_gm_lookup_entries [ iter ] - > PossessionsBitmask =
(
inventory_dynamic_gm_lookup_entries [ iter ] - > EquipmentBitmask |
inventory_dynamic_gm_lookup_entries [ iter ] - > GeneralBitmask |
inventory_dynamic_gm_lookup_entries [ iter ] - > CursorBitmask
2019-01-20 23:40:40 -05:00
) ;
2019-01-15 00:50:58 -05:00
// fixup corpse bitmask
inventory_dynamic_gm_lookup_entries [ iter ] - > CorpseBitmask =
(
inventory_dynamic_gm_lookup_entries [ iter ] - > GeneralBitmask |
inventory_dynamic_gm_lookup_entries [ iter ] - > CursorBitmask |
( inventory_dynamic_gm_lookup_entries [ iter ] - > EquipmentBitmask < < 34 )
2019-01-12 20:03:52 -05:00
) ;
// expansion-related fields are now updated and all other fields reflect the static entry values
}
2019-01-15 00:50:58 -05:00
// only client versions that require a change from their static definitions have been given a dynamic (gm) lookup entry
}
2020-05-17 18:36:06 -07:00
const EQ : : inventory : : LookupEntry * EQ : : inventory : : DynamicLookup ( versions : : MobVersion mob_version , bool gm_flag )
2019-01-20 23:40:40 -05:00
{
if ( gm_flag )
return DynamicGMLookup ( mob_version ) ;
else
return DynamicNonGMLookup ( mob_version ) ;
}
2020-05-17 18:36:06 -07:00
const EQ : : inventory : : LookupEntry * EQ : : inventory : : DynamicNonGMLookup ( versions : : MobVersion mob_version )
2019-01-15 00:50:58 -05:00
{
mob_version = versions : : ValidateMobVersion ( mob_version ) ;
2019-01-20 23:40:40 -05:00
if ( inventory_dynamic_nongm_lookup_entries [ static_cast < int > ( mob_version ) ] )
return inventory_dynamic_nongm_lookup_entries [ static_cast < int > ( mob_version ) ] . get ( ) ;
2019-01-15 00:50:58 -05:00
return & inventory_static_lookup_entries [ static_cast < int > ( mob_version ) ] ;
2019-01-12 20:03:52 -05:00
}
2020-05-17 18:36:06 -07:00
const EQ : : inventory : : LookupEntry * EQ : : inventory : : DynamicGMLookup ( versions : : MobVersion mob_version )
2019-01-12 20:03:52 -05:00
{
mob_version = versions : : ValidateMobVersion ( mob_version ) ;
2019-01-20 23:40:40 -05:00
if ( inventory_dynamic_gm_lookup_entries [ static_cast < int > ( mob_version ) ] )
return inventory_dynamic_gm_lookup_entries [ static_cast < int > ( mob_version ) ] . get ( ) ;
2019-01-12 20:03:52 -05:00
return & inventory_static_lookup_entries [ static_cast < int > ( mob_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : inventory : : LookupEntry * EQ : : inventory : : StaticLookup ( versions : : MobVersion mob_version )
2016-04-15 22:11:53 -04:00
{
2019-01-12 20:03:52 -05:00
return & inventory_static_lookup_entries [ static_cast < int > ( versions : : ValidateMobVersion ( mob_version ) ) ] ;
2016-04-15 22:11:53 -04:00
}
2020-05-17 18:36:06 -07:00
static std : : unique_ptr < EQ : : behavior : : LookupEntry > behavior_dynamic_nongm_lookup_entries [ EQ : : versions : : MobVersionCount ] ;
static std : : unique_ptr < EQ : : behavior : : LookupEntry > behavior_dynamic_gm_lookup_entries [ EQ : : versions : : MobVersionCount ] ;
static const EQ : : behavior : : LookupEntry behavior_static_lookup_entries [ EQ : : versions : : MobVersionCount ] =
2016-04-15 22:11:53 -04:00
{
2019-01-07 00:11:07 -05:00
/*[MobVersion::Unknown] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
true
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::Client62] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
true
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::Titanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
Titanium : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::SoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
SoF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::SoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
SoD : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::UF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
UF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::RoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
RoF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::RoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2016-06-06 21:59:42 -04:00
RoF2 : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::NPC] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::NPCMerchant] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::Merc] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::Bot] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::ClientPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::NPCPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::MercPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::BotPet] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
EQ : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineTitanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
Titanium : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineSoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
SoF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineSoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
SoD : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineUF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
UF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineRoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
RoF : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
) ,
2019-01-07 00:11:07 -05:00
/*[MobVersion::OfflineRoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : behavior : : LookupEntry (
2018-07-05 21:05:26 -04:00
RoF2 : : behavior : : CoinHasWeight
2019-01-07 07:39:43 -05:00
)
2016-06-06 21:59:42 -04:00
} ;
2016-04-15 22:11:53 -04:00
2019-01-12 20:03:52 -05:00
static bool behavior_dictionary_init = false ;
2020-05-17 18:36:06 -07:00
void EQ : : behavior : : InitializeDynamicLookups ( ) {
2019-01-12 20:03:52 -05:00
if ( behavior_dictionary_init = = true )
return ;
behavior_dictionary_init = true ;
if ( RuleB ( World , UseClientBasedExpansionSettings ) )
return ;
// use static references for now
}
2020-05-17 18:36:06 -07:00
const EQ : : behavior : : LookupEntry * EQ : : behavior : : DynamicLookup ( versions : : MobVersion mob_version , bool gm_flag )
2019-01-20 23:40:40 -05:00
{
if ( gm_flag )
return DynamicGMLookup ( mob_version ) ;
else
return DynamicNonGMLookup ( mob_version ) ;
}
2020-05-17 18:36:06 -07:00
const EQ : : behavior : : LookupEntry * EQ : : behavior : : DynamicNonGMLookup ( versions : : MobVersion mob_version )
2019-01-15 00:50:58 -05:00
{
mob_version = versions : : ValidateMobVersion ( mob_version ) ;
2019-01-20 23:40:40 -05:00
if ( behavior_dynamic_nongm_lookup_entries [ static_cast < int > ( mob_version ) ] )
return behavior_dynamic_nongm_lookup_entries [ static_cast < int > ( mob_version ) ] . get ( ) ;
2019-01-15 00:50:58 -05:00
return & behavior_static_lookup_entries [ static_cast < int > ( mob_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : behavior : : LookupEntry * EQ : : behavior : : DynamicGMLookup ( versions : : MobVersion mob_version )
2019-01-12 20:03:52 -05:00
{
mob_version = versions : : ValidateMobVersion ( mob_version ) ;
2019-01-20 23:40:40 -05:00
if ( behavior_dynamic_gm_lookup_entries [ static_cast < int > ( mob_version ) ] )
return behavior_dynamic_gm_lookup_entries [ static_cast < int > ( mob_version ) ] . get ( ) ;
2019-01-12 20:03:52 -05:00
return & behavior_static_lookup_entries [ static_cast < int > ( mob_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : behavior : : LookupEntry * EQ : : behavior : : StaticLookup ( versions : : MobVersion mob_version )
2016-06-06 21:59:42 -04:00
{
2019-01-12 20:03:52 -05:00
return & behavior_static_lookup_entries [ static_cast < int > ( versions : : ValidateMobVersion ( mob_version ) ) ] ;
2016-04-15 22:11:53 -04:00
}
2019-01-20 08:24:21 -05:00
2020-05-17 18:36:06 -07:00
static std : : unique_ptr < EQ : : spells : : LookupEntry > spells_dynamic_nongm_lookup_entries [ EQ : : versions : : ClientVersionCount ] ;
static std : : unique_ptr < EQ : : spells : : LookupEntry > spells_dynamic_gm_lookup_entries [ EQ : : versions : : ClientVersionCount ] ;
static const EQ : : spells : : LookupEntry spells_static_lookup_entries [ EQ : : versions : : ClientVersionCount ] =
2019-01-20 08:24:21 -05:00
{
/*[ClientVersion::Unknown] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 20:04:07 -05:00
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
2019-01-20 08:24:21 -05:00
ClientUnknown : : INULL ,
ClientUnknown : : INULL ,
ClientUnknown : : INULL
) ,
/*[ClientVersion::Client62] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 20:04:07 -05:00
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL ,
2019-01-20 08:24:21 -05:00
Client62 : : INULL ,
Client62 : : INULL ,
Client62 : : INULL
) ,
/*[ClientVersion::Titanium] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
Titanium : : spells : : SPELL_ID_MAX ,
Titanium : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
Titanium : : spells : : SPELL_GEM_COUNT ,
Titanium : : spells : : LONG_BUFFS ,
Titanium : : spells : : SHORT_BUFFS ,
Titanium : : spells : : DISC_BUFFS ,
Titanium : : spells : : TOTAL_BUFFS ,
Titanium : : spells : : NPC_BUFFS ,
Titanium : : spells : : PET_BUFFS ,
Titanium : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
) ,
/*[ClientVersion::SoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
SoF : : spells : : SPELL_ID_MAX ,
SoF : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
SoF : : spells : : SPELL_GEM_COUNT ,
SoF : : spells : : LONG_BUFFS ,
SoF : : spells : : SHORT_BUFFS ,
SoF : : spells : : DISC_BUFFS ,
SoF : : spells : : TOTAL_BUFFS ,
SoF : : spells : : NPC_BUFFS ,
SoF : : spells : : PET_BUFFS ,
SoF : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
) ,
/*[ClientVersion::SoD] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
SoD : : spells : : SPELL_ID_MAX ,
SoD : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
SoD : : spells : : SPELL_GEM_COUNT ,
SoD : : spells : : LONG_BUFFS ,
SoD : : spells : : SHORT_BUFFS ,
SoD : : spells : : DISC_BUFFS ,
SoD : : spells : : TOTAL_BUFFS ,
SoD : : spells : : NPC_BUFFS ,
SoD : : spells : : PET_BUFFS ,
SoD : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
) ,
/*[ClientVersion::UF] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
UF : : spells : : SPELL_ID_MAX ,
2019-01-31 21:59:11 -05:00
UF : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
UF : : spells : : SPELL_GEM_COUNT ,
UF : : spells : : LONG_BUFFS ,
UF : : spells : : SHORT_BUFFS ,
UF : : spells : : DISC_BUFFS ,
UF : : spells : : TOTAL_BUFFS ,
UF : : spells : : NPC_BUFFS ,
UF : : spells : : PET_BUFFS ,
UF : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
) ,
/*[ClientVersion::RoF] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
RoF : : spells : : SPELL_ID_MAX ,
2019-01-31 21:59:11 -05:00
RoF : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
UF : : spells : : SPELL_GEM_COUNT , // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case
RoF : : spells : : LONG_BUFFS ,
RoF : : spells : : SHORT_BUFFS ,
RoF : : spells : : DISC_BUFFS ,
RoF : : spells : : TOTAL_BUFFS ,
RoF : : spells : : NPC_BUFFS ,
RoF : : spells : : PET_BUFFS ,
RoF : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
) ,
/*[ClientVersion::RoF2] =*/
2020-05-17 18:36:06 -07:00
EQ : : spells : : LookupEntry (
2019-01-20 08:24:21 -05:00
RoF2 : : spells : : SPELL_ID_MAX ,
2019-01-31 21:59:11 -05:00
RoF2 : : spells : : SPELLBOOK_SIZE ,
2019-01-20 20:04:07 -05:00
UF : : spells : : SPELL_GEM_COUNT , // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case
RoF2 : : spells : : LONG_BUFFS ,
RoF2 : : spells : : SHORT_BUFFS ,
RoF2 : : spells : : DISC_BUFFS ,
RoF2 : : spells : : TOTAL_BUFFS ,
RoF2 : : spells : : NPC_BUFFS ,
RoF2 : : spells : : PET_BUFFS ,
RoF2 : : spells : : MERC_BUFFS
2019-01-20 08:24:21 -05:00
)
} ;
static bool spells_dictionary_init = false ;
2020-05-17 18:36:06 -07:00
void EQ : : spells : : InitializeDynamicLookups ( ) {
2019-01-20 08:24:21 -05:00
if ( spells_dictionary_init = = true )
return ;
spells_dictionary_init = true ;
if ( RuleB ( World , UseClientBasedExpansionSettings ) )
return ;
// use static references for now
}
2020-05-17 18:36:06 -07:00
const EQ : : spells : : LookupEntry * EQ : : spells : : DynamicLookup ( versions : : ClientVersion client_version , bool gm_flag )
2019-01-20 23:40:40 -05:00
{
if ( gm_flag )
return DynamicGMLookup ( client_version ) ;
else
return DynamicNonGMLookup ( client_version ) ;
}
2020-05-17 18:36:06 -07:00
const EQ : : spells : : LookupEntry * EQ : : spells : : DynamicNonGMLookup ( versions : : ClientVersion client_version )
2019-01-20 08:24:21 -05:00
{
client_version = versions : : ValidateClientVersion ( client_version ) ;
2019-01-20 23:40:40 -05:00
if ( spells_dynamic_nongm_lookup_entries [ static_cast < int > ( client_version ) ] )
return spells_dynamic_nongm_lookup_entries [ static_cast < int > ( client_version ) ] . get ( ) ;
2019-01-20 08:24:21 -05:00
return & spells_static_lookup_entries [ static_cast < int > ( client_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : spells : : LookupEntry * EQ : : spells : : DynamicGMLookup ( versions : : ClientVersion client_version )
2019-01-20 08:24:21 -05:00
{
client_version = versions : : ValidateClientVersion ( client_version ) ;
2019-01-20 23:40:40 -05:00
if ( spells_dynamic_gm_lookup_entries [ static_cast < int > ( client_version ) ] )
return spells_dynamic_gm_lookup_entries [ static_cast < int > ( client_version ) ] . get ( ) ;
2019-01-20 08:24:21 -05:00
return & spells_static_lookup_entries [ static_cast < int > ( client_version ) ] ;
}
2020-05-17 18:36:06 -07:00
const EQ : : spells : : LookupEntry * EQ : : spells : : StaticLookup ( versions : : ClientVersion client_version )
2019-01-20 08:24:21 -05:00
{
return & spells_static_lookup_entries [ static_cast < int > ( versions : : ValidateClientVersion ( client_version ) ) ] ;
}