Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Book Soothsaying for dummies + Profession specialisation updates and fixes #1705

Draft
wants to merge 159 commits into
base: development
Choose a base branch
from

Conversation

FlagFlayer
Copy link
Contributor

@FlagFlayer FlagFlayer commented Nov 21, 2022

🍰 Pullrequest

This pull request implements the intended ways to change profession specialisations, as well as generally reworking profession handling to use cmangos implementation.

Server hosts be warned: merging this PR will cause respecialisation to be broken on old characters

The blizz-like implementation uses hidden "specialisation reputation" (details below) that would not have been rewarded to characters that have previously completed specialisation quests. Once this PR is ready for merge there will be another PR linked here that uses quest completion instead of the reputation to prevent any bugs.

Changes

Remove QUEST STATUS NONE update for abandoned professions

Implement Book Soothsaying for dummies for Engineering and Leatherworking specialisations

Professions
Players that unlearn Engineering or Leatherworking may now respecialize if they decide to relearn the professions.

Video from original WotLK

Remove profession specialisation ranks in spell_chain

Implied by SkillLineAbility.dbc: There's no previous rank for profession specialisations. They are not part of the profession spell chain.

From Thottbot By naiad on 2005/10/27 (Patch 1.8.1)
Subject: "225->300 (artisan)"
there is NO correlation between tribal (or any of the three specs) and getting your artisan (225 to 300 max) leatherworking. to learn artisan lwing, you will need to go to the master leatherworking trainer. for the alliance he is in aerie peak, in the inn downstairs. you must be level 35 and have 200+ lwing. it will cost you 5 gold.

for the horde, i believe you have to go to feralas (camp mojache).

ireburu on 2006/04/16 (Patch 1.9.4)
Subject: "actually"
you don't have to be artisan to get and complete the dragonscale leatherworking quest.

From Thottbot By ayu129 on 2006/02/27 (Patch 1.9.4)
Subject: "255 enginering"
i beat quest and my max skill says 225 and theres a blue q mark over him head the quest is card renewal and wen i try to renew it it says duplicate idem not found i dont kno how to max ur skill to 300 but if u kno repond plz

Forum post:

In order to raise your Engineering skill past Expert (225) you must speak with the Master Engineer in Gadetzan and learn Artisan Engineering. Specializing in Goblin or Gnome does NOT let you raise your skill to 300, it simply allows you to access their schemata.

Implement vanilla mechanics and scripts for Blacksmithing specialisation quests

Blacksmithing quests are unlocked by a gossip option by either Myolor Sunderfury (Alliance) or Krathok Moltenfist (Horde) that gives the player reputation for the hidden "Armorsmithing" or "Weaponsmithing" factions. There is a small gossip script that fires where the respective faction's "guide" points at the relevant NPC that starts the quest for the specialisation you chose and says a short line of text.

From ThottbotBy dynamite2k on 2004/10/07 (Patch ?????)
Subject: "Gives quests for advanced blacksmithing"
[Krathok Moltenfist] presents a choice to follow the path of the armorsmith or weaponsmith.
Can only choose one..

From AllakhazamBy iamDaMan on 2006/03/28 (Patch 1.9.4)
Subject: "got to be done"
be sure to talk to the guy right next to [Borgosh Corebender] to tell him whether u want to be a weapon smith or an amorsmith

Armorsmithing/Weaponsmithing gossip script:

Example for Horde Weaponsmith: Video

Example for Horde Armorsmith: Video

Example for Alliance Armorsmith: Video

For Alliance there is additional gossip given by the relevant Blacksmith trainers in Ironforge and Stormwind that guides you toward Myolor to choose a specialisation:

Example for Bengus Deepforge: Video

Therum Deepforge: Relevant Wiki article

This gossip remains available as long as you have the required 200 blacksmithing (and level 40+) but do not have a blacksmithing specialisation.

Bengus Deepforge gossip

The wiki article for Therum Deepforge also reveals missing gossip. From looking at the PTR I have concluded this gossip was bugged during vanilla due to being incorrectly displayed at a Blackmsmithing skill of 1:

"Ye have the look of a Blacksmith to ye. Soot under the nails, steel in yer bones. Aye, very much the blood of a Blacksmith in yer veins. Which means ye've come to me looking to learn a thing or two, well $g lad : lass; grab a hammer. Let's see what I can teach ye."

This gossip would be given before Therum Deepforge can train you. However, currently on the Classic PTR when you have trained blacksmithing but your skill is under 50 he says the following:

WoWScrnShot_092624_100911

This gossip does not exist in broadcast_text, meaning it's a later addition to fix a bug relating to this NPCs gossip, which could only have been due to using this second gossip when he shouldn't have.

Although it's worth mentioning that the relevant Wiki article lists the gossip under "Trained" which would imply this behaviour, without other circumstances this would not constitute any sort of proof.

No vanilla system for changing Blacksmithing specialisations

An announcement on new features for TBC all but outright confirms that specialisation change was impossible in vanilla.

Profession specialisation 'dummy' factions

Different profession specialisation quests reward reputations with hidden factions with the corresponding name (e.g. Completing the quest Tribal Leatherworking rewards reputation with a faction called Leatherworking - Tribal). This useful for cutting down on the amount of conditions required for the implementation (no need to seperately check horde and alliance quests).

Pre-1.10 profession specialisation mechanics

Before Patch 1.10, on abandoning and retraining a profession which you specialised in, LearnQuestRewardedSpells would reteach whichever specialisation you had immediately on training the profession.

All relearning methods via gossip (Leatherworking & Engineering via Soothsaying and Blacksmithing & Weaponsmithing sub specialisations via their trainers) were added in 1.10 with the change to LearnQuestRewardedSpells to no longer reteach specialisations immediately on retraining.

Forum post:

If you specialize in a profession and then drop that profession, resuming it will cause a bug to fire on you. You will be in your old specialty, but will be unable to train in anything new or choose the other specialty. A GM Character Specialist can help this, but it is not a quick turnaround. Before you quit a specialized profession, you should really be sure you don't want to do it anymore.

If you do quit Engineering, after having specialized, and then return to the profession later, you will still be a member of your chosen specialty. You will be able to renew your membership card and make and learn schematics from your school, with the following exception: You will be unable to learn any specialty schematics introduced since patch 1.4, on 4/19/2005. You may not be able to learn any additional specialty schematics at all, though this is unconfirmed. Though you may be a card carrying member and a 300+ Engineer, you will be told you cannot learn the schematic as you must have the specialization for it. Which you do. And there's the bug.

This PR does not implement the bugged behaviour mentioned above on being unable to learn specialty schematics (mainly as I lack the knowledge on how to implement it). Feel free to add it in the future...

Deprecate field trainer_spell in creature template

Remove remaining uses of trainer_spell (almost exclusively incorrectly in use for profession specialisations) and remove the field from creature_template.

How2Test

  • TBA

Todo / Checklist

  • Write implementation for book "Soothsaying for Dummies"
  • Fix automatic quest status none for profession quests
  • Remove profession specialisations from profession chain_spell
  • Implement blacksmith specialisation gossip and script to unlock quest
  • Implement hidden faction reputation for profession quests
  • Implement pre-1.10 automatic relearn mechanic
  • Correct conditions for Membership Card Renewal
  • Complete deprecation of trainer_spell field in creature_template
  • Test that everything works correctly

@ratkosrb
Copy link
Contributor

Editing broadcast_text is not allowed. That table is bruteforced from classic. The text fields are 100% correct.

@ratkosrb
Copy link
Contributor

And the male and female texts are per the gender of the NPC which has the gossip, not the player who talks to them.

@FlagFlayer
Copy link
Contributor Author

Ah sorry for the confusion on my side, I'll fix it right away

Remove changes to `broadcast_text`, and add text to NPCs appropriately.
Not sure what I'm trying to do, but I hope it works
I always forget doing the commas
@FlagFlayer FlagFlayer changed the title Implement Book Soothsaying for Dummies and relevant gossip Import profession implementation from cmangos and implement Book Soothsaying for Dummies and relevant gossip Nov 23, 2022
@FlagFlayer
Copy link
Contributor Author

#1683 and #1686 are also related to the vmangos implementation of professions, so ideally those too would also be fixed by importing the cmangos code.

@ratkosrb
Copy link
Contributor

Not a fan of the custom npc_text and gossip_menu ids.

@FlagFlayer
Copy link
Contributor Author

I'm not, either, but I don't have sniffs for them. However, in my view it's better to have a core system to professions implemented regardless of whether the backend is 100% accurate aesthetically (I have provided ample proof for correct usage for every custom id I've used).

@FlagFlayer
Copy link
Contributor Author

FlagFlayer commented Sep 25, 2024

After a quick check I seem to have erroneously added some of the insertions into npc_text. The missing IDs of the missing entries are very easily known since their neighbouring entries are sorted numerically by broadcast text id. The only thing missing is the gossip menu id for any gossip sub menus

@0blu 0blu added SQL A issue / PR which references SQL code CPP A issue / PR which references CPP code labels Oct 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment