Code:
Index: tradeskills.cpp
===================================================================
RCS file: /cvsroot/eqemulator/EQEmuCVS/Source/zone/tradeskills.cpp,v
retrieving revision 1.17
diff -r1.17 tradeskills.cpp
108,109c108,109
< int8 tstype = 0xE8;
< uint8 passtype = 0;
---
> uint8 c_type = 0xE8;
> uint32 some_id = 0;
117a118
> c_type = worldo->m_type;
125c126,127
< tstype = item->BagType;
---
> c_type = item->BagType;
> some_id = item->ID;
137,139c139,148
< // Convert container type to tradeskill type
< SkillType tradeskill = TradeskillUnknown;
< switch (tstype)
---
> DBTradeskillRecipe_Struct spec;
> if (!database.GetTradeRecipe(container, c_type, some_id, &spec)) {
> user->Message_StringID(4,TRADESKILL_NOCOMBINE);
> EQApplicationPacket* outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0);
> user->QueuePacket(outapp);
> safe_delete(outapp);
> return;
> }
>
> switch (spec.tradeskill)
141,177c150,151
< case 16:
< tradeskill = TAILORING;
< break;
< case 0xE8: //Generic World Container
< if(!worldcontainer) //just to garuntee that worldo is valid
< return;
< passtype = worldo->m_type;
<
< if(worldo->m_type == OT_MEDICINEBAG) {
< if ((user_pp.class_ == SHAMAN) & (user_pp.level >= MIN_LEVEL_ALCHEMY))
< tradeskill = ALCHEMY;
< else if (user_pp.class_ != SHAMAN)
< user->Message(13, "This tradeskill can only be performed by a shaman.");
< else if (user_pp.level < MIN_LEVEL_ALCHEMY)
< user->Message(13, "You cannot perform alchemy until you reach level %i.", MIN_LEVEL_ALCHEMY);
< break;
< } else {
< tradeskill = TypeToSkill(worldo->m_type);
< }
< break;
< case 18:
< tradeskill = FLETCHING;
< break;
< case 20:
< tradeskill = JEWELRY_MAKING;
< break;
< case 30: //Pottery Still needs completion
< tradeskill = POTTERY;
< break;
< case 14: // Baking
< case 15:
< tradeskill = BAKING;
< break;
< case 9: //Alchemy Still needs completion
< if ((user_pp.class_ == SHAMAN) & (user_pp.level >= MIN_LEVEL_ALCHEMY))
< tradeskill = ALCHEMY;
< else if (user_pp.class_ != SHAMAN)
---
> case ALCHEMY:
> if (user_pp.class_ != SHAMAN)
180a155
> return;
182,185c157,158
< case 10: //Tinkering Still needs completion
< if (user_pp.race == GNOME)
< tradeskill = TINKERING;
< else
---
> case TINKERING:
> if (user_pp.race != GNOME)
186a160
> return;
188,200c162,163
< case 24: //Research Still needs completion
< case 25:
< case 26:
< case 27:
< tradeskill = RESEARCH;
< break;
< case 28: // Another Quest Containers.. Cavedude asked for this
< tradeskill = GENERIC_TRADESKILL;
< break;
< case 12:
< if (user_pp.class_ == ROGUE)
< tradeskill = MAKE_POISON;
< else
---
> case MAKE_POISON:
> if (user_pp.class_ != ROGUE)
202,223d164
< break;
< case 13: //Quest Containers
< tradeskill = GENERIC_TRADESKILL;
< break;
< case 46: //Fishing Still needs completion
< tradeskill = FISHING;
< break;
< default:
< user->Message(13, "This tradeskill has not been implemented yet, if you get this message send a "
< "petition and let them know what tradeskill you were trying to use. and give them the following code: 0x%02X", tradeskill);
< }
<
< if (tradeskill == TradeskillUnknown) {
< return;
< }
<
< DBTradeskillRecipe_Struct spec;
< if (!database.GetTradeRecipe(container, passtype, tradeskill, &spec)) {
< user->Message_StringID(4,TRADESKILL_NOCOMBINE);
< EQApplicationPacket* outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0);
< user->QueuePacket(outapp);
< safe_delete(outapp);
224a166
> break;
228c170
< bool success = user->TradeskillExecute(&spec, tradeskill);
---
> bool success = user->TradeskillExecute(&spec);
272,279d213
< SkillType tskill = Object::TypeToSkill(rac->object_type);
< if(tskill == TradeskillUnknown) {
< LogFile->write(EQEMuLog::Error, "Unknown container type for HandleAutoCombine: %d\n", rac->object_type);
< user->QueuePacket(outapp);
< safe_delete(outapp);
< return;
< }
<
282c216
< if (!database.GetTradeRecipe(rac->recipe_id, rac->object_type, tskill, &spec)) {
---
> if (!database.GetTradeRecipe(rac->recipe_id, rac->object_type, rac->some_id, &spec)) {
395c329
< bool success = user->TradeskillExecute(&spec, tskill);
---
> bool success = user->TradeskillExecute(&spec);
653,654c587,588
< bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec, SkillType tradeskill) {
< if(spec == NULL || tradeskill == 0)
---
> bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) {
> if(spec == NULL)
657c591
< int16 user_skill = GetSkill(tradeskill);
---
> int16 user_skill = GetSkill(spec->tradeskill);
676c610
< switch(tradeskill) {
---
> switch(spec->tradeskill) {
698c632
< if (tradeskill == FLETCHING || tradeskill == MAKE_POISON) {
---
> if (spec->tradeskill == FLETCHING || spec->tradeskill == MAKE_POISON) {
701c635
< } else if (tradeskill == BLACKSMITHING) {
---
> } else if (spec->tradeskill == BLACKSMITHING) {
780c714
< if (((tradeskill==75) || GetGM() || (chance > res)) || MakeRandomInt(0, 99) < AAChance){
---
> if (((spec->tradeskill==75) || GetGM() || (chance > res)) || MakeRandomInt(0, 99) < AAChance){
784c718
< CheckIncreaseTradeskill(bonusstat, stat_modifier, skillup_modifier, success_modifier, tradeskill);
---
> CheckIncreaseTradeskill(bonusstat, stat_modifier, skillup_modifier, success_modifier, spec->tradeskill);
801c735
< CheckIncreaseTradeskill(bonusstat, stat_modifier, skillup_modifier, success_modifier, tradeskill);
---
> CheckIncreaseTradeskill(bonusstat, stat_modifier, skillup_modifier, success_modifier, spec->tradeskill);