Merge branch 'master' into base_data

This commit is contained in:
KimLS 2013-10-18 21:44:18 -07:00
commit cdb29be4f3
9 changed files with 240 additions and 183 deletions

View File

@ -1,5 +1,9 @@
EQEMu Changelog (Started on Sept 24, 2003 15:50) EQEMu Changelog (Started on Sept 24, 2003 15:50)
------------------------------------------------------- -------------------------------------------------------
== 10/18/2013 ==
Uleat: Expanded the 'Bag Type' enumeration to include all known values. Also, set in place additional 'Bag Type' to 'Skill Type' conversions. Some of these will need to be verified before activation.
Uleat: Cleaned up some unused enumerations to show a move towards standardization. More to come...
== 10/12/2013 == == 10/12/2013 ==
demonstar55: Allow Titanium and lower clients to enter Tutorial zone from character select demonstar55: Allow Titanium and lower clients to enter Tutorial zone from character select
Bad_Captain: Fixed merc crash issue by updating special_abilities & vwMercNpcTypes (Sorvani). Bad_Captain: Fixed merc crash issue by updating special_abilities & vwMercNpcTypes (Sorvani).

View File

@ -1201,7 +1201,7 @@ int16 Inventory::FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size, boo
if (inst && inst->IsType(ItemClassContainer) if (inst && inst->IsType(ItemClassContainer)
&& inst->GetItem()->BagSize >= min_size) && inst->GetItem()->BagSize >= min_size)
{ {
if(inst->GetItem()->BagType == bagTypeQuiver && inst->GetItem()->ItemType != ItemTypeArrow) if(inst->GetItem()->BagType == BagType_Quiver && inst->GetItem()->ItemType != ItemTypeArrow)
{ {
continue; continue;
} }
@ -1861,9 +1861,9 @@ bool Inventory::CanItemFitInContainer(const Item_Struct *ItemToTry, const Item_S
if(ItemToTry->Size > Container->BagSize) return false; if(ItemToTry->Size > Container->BagSize) return false;
if((Container->BagType == bagTypeQuiver) && (ItemToTry->ItemType != ItemTypeArrow)) return false; if((Container->BagType == BagType_Quiver) && (ItemToTry->ItemType != ItemTypeArrow)) return false;
if((Container->BagType == bagTypeBandolier) && (ItemToTry->ItemType != ItemTypeThrowingv2)) return false; if((Container->BagType == BagType_Bandolier) && (ItemToTry->ItemType != ItemTypeThrowingv2)) return false;
return true; return true;
} }

View File

@ -21,19 +21,20 @@
#include "skills.h" #include "skills.h"
/* /*
** Item attributes ** Item attributes
** **
** (There are no grepwin hits other than these declarations... Do they have a use?)
*/ */
enum ItemAttrib enum ItemAttributes : uint32
{ {
ItemAttribLore = (1 << 0), ItemAttr_None = 0x00000000,
ItemAttribArtifact = (1 << 1), ItemAttr_Lore = 0x00000001,
ItemAttribSummoned = (1 << 2), ItemAttr_Artifact = 0x00000002,
ItemAttribMagic = (1 << 3), ItemAttr_Summoned = 0x00000004,
ItemAttribAugment = (1 << 4), ItemAttr_Magic = 0x00000008,
ItemAttribPendingLore = (1 << 5), ItemAttr_Augment = 0x00000010,
ItemAttribNone = 0, ItemAttr_PendingLore = 0x00000020,
ItemAttribUnknown = 0xFFFFFFFF ItemAttr_Unknown = 0xFFFFFFFF
}; };
/* /*
@ -101,18 +102,77 @@ enum ItemTypes
}; };
/* /*
Bag types ** Container types
**
** This correlates to world 'object.type' (object.h/Object.cpp) as well as Item_Struct.BagType
**
** (ref: database, web forums and eqstr_us.txt)
*/ */
enum { enum ContainerTypes : uint8
bagTypeSmallBag = 0, {
bagTypeLargeBag = 1, /*3400*/ BagType_SmallBag = 0,
bagTypeQuiver = 2, /*3401*/ BagType_LargeBag,
bagTypeBeltPouch = 3, /*3402*/ BagType_Quiver,
bagTypeBandolier = 8 /*3403*/ BagType_BeltPouch,
//... there are 50 types /*3404*/ BagType_WristPouch,
/*3405*/ BagType_BackPack,
/*3406*/ BagType_SmallChest,
/*3407*/ BagType_LargeChest,
/*----*/ BagType_Bandolier, // <*Database Reference Only>
/*3408*/ BagType_MedicineBag,
/*3409*/ BagType_ToolBox,
/*3410*/ BagType_Lexicon,
/*3411*/ BagType_Mortar,
/*3412*/ BagType_SelfDusting, // Quest container (Auto-clear contents?)
/*3413*/ BagType_MixingBowl,
/*3414*/ BagType_Oven,
/*3415*/ BagType_SewingKit,
/*3416*/ BagType_Forge,
/*3417*/ BagType_FletchingKit,
/*3418*/ BagType_BrewBarrel,
/*3419*/ BagType_JewelersKit,
/*3420*/ BagType_PotteryWheel,
/*3421*/ BagType_Kiln,
/*3422*/ BagType_Keymaker, // (no database entries as of peq rev 69)
/*3423*/ BagType_WizardsLexicon,
/*3424*/ BagType_MagesLexicon,
/*3425*/ BagType_NecromancersLexicon,
/*3426*/ BagType_EnchantersLexicon,
/*----*/ BagType_Unknown01, // (a coin pouch/purse?) (no database entries as of peq rev 69)
/*----*/ BagType_ConcordanceofResearch, // <*Database Reference Only>
/*3427*/ BagType_AlwaysWorks, // Quest container (Never-fail combines?)
/*3428*/ BagType_KoadaDalForge, // High Elf
/*3429*/ BagType_TeirDalForge, // Dark Elf
/*3430*/ BagType_OggokForge, // Ogre
/*3431*/ BagType_StormguardForge, // Dwarf
/*3432*/ BagType_AkanonForge, // Gnome
/*3433*/ BagType_NorthmanForge, // Barbarian
/*----*/ BagType_Unknown02, // (no database entries as of peq rev 69)
/*3434*/ BagType_CabilisForge, // Iksar
/*3435*/ BagType_FreeportForge, // Human 1
/*3436*/ BagType_RoyalQeynosForge, // Human 2
/*3439*/ BagType_HalflingTailoringKit,
/*3438*/ BagType_ErudTailoringKit,
/*3440*/ BagType_FierDalTailoringKit, // Wood Elf
/*3441*/ BagType_FierDalFletchingKit, // Wood Elf
/*3437*/ BagType_IksarPotteryWheel,
/*3442*/ BagType_TackleBox,
/*3443*/ BagType_TrollForge,
/*3445*/ BagType_FierDalForge, // Wood Elf
/*3444*/ BagType_ValeForge, // Halfling
/*3446*/ BagType_ErudForge,
/*----*/ BagType_TradersSatchel, // <*Database Reference Only> (db: Yellow Trader's Satchel Token?)
/*5785*/ BagType_GuktaForge, // Froglok (no database entries as of peq rev 69)
/*3359*/ BagType_AugmentationSealer,
/*----*/ BagType_IceCreamChurn, // <*Database Reference Only>
/*6325*/ BagType_Transformationmold, // Ornamentation
/*6340*/ BagType_Detransformationmold, // Ornamentation Stripper
/*5400*/ BagType_Unattuner,
/*7684*/ BagType_TradeskillBag,
/*7692*/ BagType_CollectibleBag,
/*----*/ BagType_Count
}; };
/* /*
** Item Effect Types ** Item Effect Types
** **
@ -171,28 +231,33 @@ typedef enum {
} EmuAppearance; } EmuAppearance;
/* /*
** Diety List ** Diety types
**
** (ref: eqstr_us.txt)
**
** (Another orphaned enumeration...)
*/ */
#define DEITY_UNKNOWN 0 enum DeityTypes
#define DEITY_AGNOSTIC 396 {
#define DEITY_BRELL 202 /*----*/ Deity_Unknown = 0,
#define DEITY_CAZIC 203 /*3251*/ Deity_Bertoxxulous = 201,
#define DEITY_EROL 204 /*3262*/ Deity_BrellSirilis,
#define DEITY_BRISTLE 205 /*3253*/ Deity_CazicThule,
#define DEITY_INNY 206 /*3256*/ Deity_ErollisiMarr,
#define DEITY_KARANA 207 /*3252*/ Deity_Bristlebane,
#define DEITY_MITH 208 /*3254*/ Deity_Innoruuk,
#define DEITY_PREXUS 209 /*3255*/ Deity_Karana,
#define DEITY_QUELLIOUS 210 /*3257*/ Deity_MithanielMarr,
#define DEITY_RALLOS 211 /*3259*/ Deity_Prexus,
#define DEITY_SOLUSEK 213 /*3260*/ Deity_Quellious,
#define DEITY_TRIBUNAL 214 /*3266*/ Deity_RallosZek,
#define DEITY_TUNARE 215 /*3258*/ Deity_RodcetNife,
/*3261*/ Deity_SolusekRo,
//Guessed: /*3263*/ Deity_TheTribunal,
#define DEITY_BERT 201 /*3264*/ Deity_Tunare,
#define DEITY_RODCET 212 /*3265*/ Deity_Veeshan,
#define DEITY_VEESHAN 216 /*3250*/ Deity_Agnostic = 396
};
// msg_type's for custom usercolors // msg_type's for custom usercolors
#define MT_Say 256 #define MT_Say 256
@ -435,31 +500,33 @@ typedef enum {
#define STAT_HASTE 19 #define STAT_HASTE 19
#define STAT_DAMAGE_SHIELD 20 #define STAT_DAMAGE_SHIELD 20
/** /*
* Recast timer types. Used as an off set to charProfileStruct timers. ** Recast timer types. Used as an off set to charProfileStruct timers.
**
** (Another orphaned enumeration...)
*/ */
enum RecastTypes enum RecastTimerTypes
{ {
RecastTimer0 = 0, RecTimer_0 = 0,
RecastTimer1, RecTimer_1,
WeaponHealClickTimer, // 2 RecTimer_WeaponHealClick, // 2
MuramiteBaneNukeClickTimer, // 3 RecTimer_MuramiteBaneNukeClick, // 3
RecastTimer4, RecTimer_4,
DispellClickTimer, // 5 (also click heal orbs?) RecTimer_DispellClick, // 5 (also click heal orbs?)
EpicTimer, // 6 RecTimer_Epic, // 6
OoWBPClickTimer, // 7 RecTimer_OoWBPClick, // 7
VishQuestClassItemTimer, // 8 RecTimer_VishQuestClassItem, // 8
HealPotionTimer, // 9 RecTimer_HealPotion, // 9
RecastTimer10, RecTimer_10,
RecastTimer11, RecTimer_11,
RecastTimer12, RecTimer_12,
RecastTimer13, RecTimer_13,
RecastTimer14, RecTimer_14,
RecastTimer15, RecTimer_15,
RecastTimer16, RecTimer_16,
RecastTimer17, RecTimer_17,
RecastTimer18, RecTimer_18,
ModRodTimer // 19 RecTimer_ModRod // 19
}; };
enum GroupUpdateAction enum GroupUpdateAction
@ -574,20 +641,33 @@ static const uint8 SkillDamageTypes[HIGHEST_SKILL+1] = {
/* /*
** Inventory Slot Equipment Enum ** Inventory Slot Equipment Enum
** Mostly used for third-party tools to reference inventory slots ** Mostly used for third-party tools to reference inventory slots
** **
** NOTE: Numbering for personal inventory goes top to bottom, then left to right ** [pre-HoT]
** NOTE: Numbering for personal inventory goes top to bottom, then left to right
** It's the opposite for inside bags: left to right, then top to bottom ** It's the opposite for inside bags: left to right, then top to bottom
** Example: ** Example:
** inventory: containers: ** Inventory: Containers:
** 1 6 1 2 ** 1 5 1 2
** 2 7 3 4 ** 2 6 3 4
** 3 8 5 6 ** 3 7 5 6
** 4 9 7 8 ** 4 8 7 8
** 5 10 9 10 ** - - 9 10
**
** [HoT and Higher]
** Note: Numbering for inventory and bags goes left to right, then top to bottom
** Example:
** Inventory: Containers:
** 1 2 1 2
** 3 4 3 4
** 5 6 5 6
** 7 8 7 8
** 9 10 9 10
** - - 11 12 [Note: Additional slots are only available in RoF and higher]
** **
*/ */
enum InventorySlot enum InventorySlot
{ {
//////////////////////// ////////////////////////

View File

@ -2880,7 +2880,7 @@ struct LogServer_Struct {
/*260*/ uint8 enable_petition_wnd; /*260*/ uint8 enable_petition_wnd;
/*261*/ uint8 enablevoicemacros; /*261*/ uint8 enablevoicemacros;
/*262*/ uint8 enablemail; /*262*/ uint8 enablemail;
/*263*/ uint8 disable_tutorial_go_home; /*263*/ uint8 disable_tutorial_go_home; // This appears valid on Ti and RoF..other clients need verification
/*264*/ /*264*/
}; };

View File

@ -600,16 +600,18 @@ int lua_merchant_count_item(uint32 npc_id, uint32 item_id) {
} }
std::string lua_item_link(int item_id) { std::string lua_item_link(int item_id) {
char text[250]; char text[250] = { 0 };
quest_manager.varlink(text, item_id); quest_manager.varlink(text, item_id);
return std::string(text); return std::string(text);
} }
void lua_say_link(const char *phrase, bool silent, const char *link_name) { std::string lua_say_link(const char *phrase, bool silent, const char *link_name) {
char text[256] = { 0 }; char text[256] = { 0 };
strncpy(text, phrase, 255); strncpy(text, phrase, 255);
quest_manager.saylink(text, silent, link_name); quest_manager.saylink(text, silent, link_name);
return std::string(text);
} }
const char *lua_get_guild_name_by_id(uint32 guild_id) { const char *lua_get_guild_name_by_id(uint32 guild_id) {

View File

@ -2049,7 +2049,7 @@ void Mob::SetAttackTimer() {
const ItemInst *pi = CastToClient()->GetInv().GetItem(r); const ItemInst *pi = CastToClient()->GetInv().GetItem(r);
if(!pi) if(!pi)
continue; continue;
if(pi->IsType(ItemClassContainer) && pi->GetItem()->BagType == bagTypeQuiver) if(pi->IsType(ItemClassContainer) && pi->GetItem()->BagType == BagType_Quiver)
{ {
float temp_wr = ( pi->GetItem()->BagWR / RuleI(Combat, QuiverWRHasteDiv) ); float temp_wr = ( pi->GetItem()->BagWR / RuleI(Combat, QuiverWRHasteDiv) );
if(temp_wr > max_quiver) if(temp_wr > max_quiver)

View File

@ -70,47 +70,7 @@ IT10714_ACTORDEF=Augmentation Sealer
IT10725_ACTORDEF=Shuriken IT10725_ACTORDEF=Shuriken
*/ */
// Object Types #define OT_DROPPEDITEM BagType_LargeBag
#define OT_DROPPEDITEM 0x01
#define OT_MEDICINEBAG 0x09
#define OT_TOOLBOX 0x0A
#define OT_OVEN 0x0F
#define OT_SEWINGKIT 0x10 //and loom
#define OT_FORGE 0x11
#define OT_FLETCHINGKIT 0x12
#define OT_BREWBARREL 0x13
#define OT_JEWELERSKIT 0x14
#define OT_POTTERYWHEEL 0x15
#define OT_KILN 0x16
#define OT_KEYMAKER 0x17
#define OT_WIZARDLEX 0x18
#define OT_MAGELEX 0x19
#define OT_NECROLEX 0x1A
#define OT_ENCHLEX 0x1B
// high elf forge is 0x1F (Koada'dal forge)
#define OT_TEIRDALFORGE 0x20 //dark elf
#define OT_OGGOKFORGE 0x21 //ogre
#define OT_STORMGUARDF 0x22 //dwarven
#define OT_VALEFORGE 0x31 //halfling
// gnome forge 0x23 (ak'anon forge)
// barbarian forge 0x24 (northman forge)
//
// iksar forge 0x26 (cabilis forge)
// human forge 0x27 (qeynos or freeport?) (royal qeynos forge or freeport forge)
// human forge 0x28 (qeynos or freeport?)
// halfling tailoring kit 0x29
// erudite tailoring kit 0x2A
// wood elf tailoring kit 0x2B
// wood elf fletching kit 0x2C
// iksar pottery wheel 0x2D
#define OT_TACKLEBOX 0x2e
// troll forge 0x2F (grobb forge)
#define OT_FIERDALFFORGE 0x30
// erudite forge 0x32 (erud forge)
#define OT_AUGMENT 0x35
//... (shar vahl forge)
//... wood elf (fier'dal forge)
//... (froglok forge)
// Icon values: // Icon values:
//0x0453 a pie //0x0453 a pie
@ -209,7 +169,7 @@ protected:
ItemInst* m_inst; // Item representing object ItemInst* m_inst; // Item representing object
bool m_inuse; // Currently in use by a client? bool m_inuse; // Currently in use by a client?
uint32 m_id; // Database key, different than drop_id uint32 m_id; // Database key, different than drop_id
uint32 m_type; // Object Type, ie, forge, oven, dropped item, etc uint32 m_type; // Object Type, ie, forge, oven, dropped item, etc (ref: ContainerTypes)
uint32 m_icon; // Icon to use for forge, oven, etc uint32 m_icon; // Icon to use for forge, oven, etc
float m_max_x; float m_max_x;
float m_max_y; float m_max_y;

View File

@ -736,7 +736,7 @@ void Client::RangedAttack(Mob* other) {
if(pi == nullptr || !pi->IsType(ItemClassContainer)) if(pi == nullptr || !pi->IsType(ItemClassContainer))
continue; continue;
const Item_Struct* bagitem = pi->GetItem(); const Item_Struct* bagitem = pi->GetItem();
if(!bagitem || bagitem->BagType != bagTypeQuiver) if(!bagitem || bagitem->BagType != BagType_Quiver)
continue; continue;
//we found a quiver, look for the ammo in it //we found a quiver, look for the ammo in it

View File

@ -576,68 +576,79 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac
parse->EventPlayer(EVENT_COMBINE_FAILURE, user, spec.name.c_str(), spec.recipe_id); parse->EventPlayer(EVENT_COMBINE_FAILURE, user, spec.name.c_str(), spec.recipe_id);
} }
SkillType Object::TypeToSkill(uint32 type) { SkillType Object::TypeToSkill(uint32 type)
SkillType tradeskill = TradeskillUnknown; {
switch (type) { switch(type) // grouped and ordered by SkillType name - new types need to be verified for proper SkillType and use
case OT_MEDICINEBAG: { {
tradeskill = ALCHEMY; /*ALCHEMY*/
break; case BagType_MedicineBag: { return (SkillType)ALCHEMY; }
}
case OT_SEWINGKIT: { /*BAKING*/
tradeskill = TAILORING; // case BagType_MixingBowl: // No idea...
break; case BagType_Oven: { return (SkillType)BAKING; }
}
case OT_FORGE: /*BLACKSMITHING*/
case OT_TEIRDALFORGE: case BagType_Forge:
case OT_OGGOKFORGE: // case BagType_KoadaDalForge:
case OT_FIERDALFFORGE: case BagType_TeirDalForge:
case OT_STORMGUARDF: case BagType_OggokForge:
case OT_VALEFORGE: { case BagType_StormguardForge:
tradeskill = BLACKSMITHING; // case BagType_AkanonForge:
break; // case BagType_NorthmanForge:
} // case BagType_CabilisForge:
case OT_FLETCHINGKIT: { // case BagType_FreeportForge:
tradeskill = FLETCHING; // case BagType_RoyalQeynosForge:
break; // case BagType_TrollForge:
} case BagType_FierDalForge:
case OT_BREWBARREL: { case BagType_ValeForge: { return (SkillType)BLACKSMITHING; } // Delete return if BagType_GuktaForge enabled
tradeskill = BREWING; // case BagType_ErudForge:
break; // case BagType_GuktaForge: { return (SkillType)BLACKSMITHING; }
}
case OT_JEWELERSKIT: { /*BREWING*/
tradeskill = JEWELRY_MAKING; // case BagType_IceCreamChurn: // No idea...
break; case BagType_BrewBarrel: { return (SkillType)BREWING; }
}
case OT_POTTERYWHEEL: /*FISHING*/
case OT_KILN: { case BagType_TackleBox: { return (SkillType)FISHING; }
tradeskill = POTTERY;
break; /*FLETCHING*/
} case BagType_FletchingKit: { return (SkillType)FLETCHING; } // Delete return if BagType_FierDalFletchingKit enabled
case OT_OVEN: { // case BagType_FierDalFletchingKit: { return (SkillType)FLETCHING; }
tradeskill = BAKING;
break; /*JEWELRY_MAKING*/
} case BagType_JewelersKit: { return (SkillType)JEWELRY_MAKING; }
case OT_TACKLEBOX: {
tradeskill = FISHING; /*MAKE_POISON*/
break; // This is a guess and needs to be verified... (Could be ALCHEMY)
} // case BagType_Mortar: { return (SkillType)MAKE_POISON; }
case OT_KEYMAKER: { //unknown for now...
tradeskill = TradeskillUnknown; /*POTTERY*/
break; case BagType_PotteryWheel:
} case BagType_Kiln: { return (SkillType)POTTERY; } // Delete return if BagType_IksarPotteryWheel enabled
case OT_TOOLBOX: { // case BagType_IksarPotteryWheel: { return (SkillType)POTTERY; }
tradeskill = TINKERING;
break; /*RESEARCH*/
} // case BagType_Lexicon:
case OT_WIZARDLEX: case BagType_WizardsLexicon:
case OT_MAGELEX: case BagType_MagesLexicon:
case OT_NECROLEX: case BagType_NecromancersLexicon:
case OT_ENCHLEX: { case BagType_EnchantersLexicon: { return (SkillType)RESEARCH; } // Delete return if BagType_ConcordanceofResearch enabled
tradeskill = RESEARCH; // case BagType_ConcordanceofResearch: { return (SkillType)RESEARCH; }
break;
} /*TAILORING*/
case BagType_SewingKit: { return (SkillType)TAILORING; } // Delete return if BagType_FierDalTailoringKit enabled
// case BagType_HalflingTailoringKit:
// case BagType_ErudTailoringKit:
// case BagType_FierDalTailoringKit: { return (SkillType)TAILORING; }
/*TINKERING*/
case BagType_ToolBox: { return (SkillType)TINKERING; }
/*Undefined*/
default: { break; }
} }
return(tradeskill);
return TradeskillUnknown;
} }
void Client::TradeskillSearchResults(const char *query, unsigned long qlen, unsigned long objtype, unsigned long someid) { void Client::TradeskillSearchResults(const char *query, unsigned long qlen, unsigned long objtype, unsigned long someid) {