MagisterNiksel.lua 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. --[[
  2. Script Name : SpawnScripts/SouthQeynos/MagisterNiksel.lua
  3. Script Author : Dorbin
  4. Script Date : 2022.07.19 10:07:36
  5. Script Purpose :
  6. :
  7. --]]
  8. require "SpawnScripts/Generic/DialogModule"
  9. local Mage1 = 5767
  10. local Mage2 = 5768
  11. local Sorc = 5769
  12. local Summ = 5770
  13. local Ench = 5771
  14. function spawn(NPC)
  15. ProvidesQuest(NPC, Mage1)
  16. ProvidesQuest(NPC, Mage2)
  17. ProvidesQuest(NPC, Sorc)
  18. ProvidesQuest(NPC, Summ)
  19. ProvidesQuest(NPC, Ench)
  20. end
  21. function respawn(NPC)
  22. spawn(NPC)
  23. end
  24. function hailed(NPC, Spawn)
  25. if GetLevel(Spawn) ==7 and HasCompletedQuest(Spawn,Mage1) then
  26. DoneToday(NPC,Spawn)
  27. elseif GetLevel(Spawn) >=8 and HasCompletedQuest(Spawn,Mage2) then
  28. DoneToday(NPC,Spawn)
  29. elseif GetLevel(Spawn) >=9 and HasCompletedQuest(Spawn,Mage2) and GetClass(Spawn)==21 and not HasQuest(Spawn, Ench) and not HasQuest(Spawn, Sorc) and not HasQuest(Spawn, Summ) then
  30. FinalClassTest(NPC,Spawn)
  31. else
  32. FaceTarget(NPC, Spawn)
  33. Dialog.New(NPC, Spawn)
  34. Dialog.AddDialog("Well, well, well ... a good day to you! I must say, a breath of fresh air sure gets the springs and gears runnin' in the 'ole noggin! At my age, I know all kinds of tricks to slip away from a lecture. Err ... you're not one of my students, are you?")
  35. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel000.mp3", 3187388846, 3295150638)
  36. PlayFlavor(NPC, "", "", "ponder", 0, 0, Spawn)
  37. if GetClass(Spawn)== 21 and GetLevel(Spawn)>=7 and not HasQuest(Spawn,Mage1) and not HasCompletedQuest(Spawn,Mage1) then
  38. Dialog.AddOption("No, but I would be honored to have someone as famed and skilled as you help me advance my magic abilities.","Dialog1")
  39. end
  40. if HasQuest(Spawn,Mage1) and GetQuestStep(Spawn,Mage1)==2 then
  41. Dialog.AddOption("I've dispersed the bog slugs. They seemed to be rather malformed.","Dialog2")
  42. end
  43. if HasQuest(Spawn,Mage1) and GetQuestStep(Spawn,Mage1)==6 then
  44. Dialog.AddOption("I've gained some useful insight from your former students about sorcery and weaving of elements.","Dialog3")
  45. end
  46. if GetClass(Spawn)== 21 and GetLevel(Spawn)>=8 and not HasQuest(Spawn,Mage2) and not HasCompletedQuest(Spawn,Mage2) and HasCompletedQuest(Spawn,Mage1) then
  47. Dialog.AddOption("Do you have time to continue my training today?","Dialog4")
  48. end
  49. if HasQuest(Spawn,Mage2) and GetQuestStep(Spawn,Mage2)==2 then
  50. Dialog.AddOption("I've \"convinced\" Willim to have a little more confidence.","Dialog5")
  51. end
  52. if HasQuest(Spawn,Mage2) and GetQuestStep(Spawn,Mage2)==4 then
  53. Dialog.AddOption("I've brought you an eyeball from a Klicnik.","Dialog6")
  54. end
  55. if HasCompletedQuest(Spawn,Ench) or HasCompletedQuest(Spawn,Sorc) or HasCompletedQuest(Spawn,Summ) then
  56. Dialog.AddOption("Still at it Niksel? Just wanted to say hello.")
  57. end
  58. Dialog.AddOption("Um, ok. Thank you for that. Good luck with your students.")
  59. Dialog.Start()
  60. end
  61. end
  62. function Dialog1(NPC,Spawn)
  63. FaceTarget(NPC, Spawn)
  64. Dialog.New(NPC, Spawn)
  65. Dialog.AddDialog("Hahaha! Well, flattery will get you everywhere, my young student. Well, I was taking a little breather to contemplate a confounding conundrum but--AHA! I got it! Elementals equal magic and casters all in a square! Weeheehee! I must remember this formula! Err... where was I?")
  66. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel001.mp3", 784274360, 2830832827)
  67. PlayFlavor(NPC, "", "", "chuckle", 0, 0, Spawn)
  68. Dialog.AddOption("Possibly teaching me more about magic?","Dialog1a")
  69. Dialog.AddOption("I... should be going.")
  70. Dialog.Start()
  71. end
  72. function Dialog1a(NPC,Spawn)
  73. FaceTarget(NPC, Spawn)
  74. Dialog.New(NPC, Spawn)
  75. Dialog.AddDialog("Oh, yes, yes, yes. Well, judging by your appearance, you have some magical aptitude. Then, again, one of my first lessons for you is never judge a book by its cover--many a mage has walked away with a burnt beard making that mistake!")
  76. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel002.mp3", 4179756044, 2171161837)
  77. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  78. Dialog.AddOption("Perhaps I could prove myself? Like a test?","Dialog1b")
  79. Dialog.Start()
  80. end
  81. function Dialog1b(NPC,Spawn)
  82. FaceTarget(NPC, Spawn)
  83. Dialog.New(NPC, Spawn)
  84. Dialog.AddDialog("What an excellent idea! How about I run you through a primer course? This will allow you to focus on one school of training. Yes, this will do just fine. Let's begin with my personal favorite, summoning. A summoner sees the \"holes\", if you will, in the fabric of reality. With enough studying summoners can use those gaps to cast spells. ")
  85. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel003.mp3", 2810155587, 3579473530)
  86. PlayFlavor(NPC, "", "", "smile", 0, 0, Spawn)
  87. Dialog.AddOption("What are these reality holes?","Dialog1c")
  88. Dialog.Start()
  89. end
  90. function Dialog1c(NPC,Spawn)
  91. FaceTarget(NPC, Spawn)
  92. Dialog.New(NPC, Spawn)
  93. Dialog.AddDialog("They're pieces of the world that do not fit together. The conundrum I just solved may help me understand it better, give or take another hundred years of studying. It's easier to think of the holes as places where a summoner \"pulls\" matter that doesn't actually exist. Whether it's a traveling companion or a tasty loaf of bread, it matters not.")
  94. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel004.mp3", 3848481052, 1928107101)
  95. PlayFlavor(NPC, "", "", "orate", 0, 0, Spawn)
  96. Dialog.AddOption("What are these reality holes?","OfferMage1")
  97. Dialog.Start()
  98. end
  99. function OfferMage1(NPC,Spawn)
  100. OfferQuest(NPC,Spawn,Mage1)
  101. FaceTarget(NPC,Spawn)
  102. end
  103. function Dialog2(NPC,Spawn)
  104. FaceTarget(NPC, Spawn)
  105. Dialog.New(NPC, Spawn)
  106. Dialog.AddDialog("Very observant, my student. When summoners bring forth companions from these holes, they should dispose of the creatures when they're done. No one likes a messy laboratory, let alone a messy world.")
  107. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel006.mp3", 1370391486, 1025084614)
  108. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  109. Dialog.AddOption("Well, at least I was able to take care of some of the lost creatures.","Dialog2a")
  110. Dialog.Start()
  111. end
  112. function Dialog2a(NPC,Spawn)
  113. FaceTarget(NPC, Spawn)
  114. Dialog.New(NPC, Spawn)
  115. Dialog.AddDialog("Let us move on to the next lesson. Another school of magic is sorcery. Sorcerers work with raw ingredients and shape them to their liking.")
  116. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel007.mp3", 2728241078, 3382419628)
  117. Dialog.AddOption("[Listen]","Dialog2b")
  118. Dialog.AddOption("Hopefully with a little less \"bog\".","Dialog2b")
  119. Dialog.Start()
  120. end
  121. function Dialog2b(NPC,Spawn)
  122. SetStepComplete(Spawn,Mage1,2)
  123. FaceTarget(NPC, Spawn)
  124. Dialog.New(NPC, Spawn)
  125. Dialog.AddDialog("By taking these energies and forming them into all manners of tools, life can be made so much easier. I think it's best if you spoke to some of my former students who pursued sorcery. Let me write their names in your journal. Go speak with them and see how they apply their studies.")
  126. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel008.mp3", 1804800533, 912997283)
  127. PlayFlavor(NPC, "", "", "thanks", 0, 0, Spawn)
  128. Dialog.AddOption("Alright. I'll return once I've spoken with them.")
  129. Dialog.Start()
  130. end
  131. function Dialog3(NPC,Spawn)
  132. SetStepComplete(Spawn,Mage1,6)
  133. FaceTarget(NPC, Spawn)
  134. Dialog.New(NPC, Spawn)
  135. Dialog.AddDialog("Good, good, good. I hope you learned the many uses of sorcery's power--just remember to respect this power.")
  136. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel009.mp3", 3515068214, 3688909586)
  137. PlayFlavor(NPC, "", "", "happy", 0, 0, Spawn)
  138. Dialog.AddOption("It was enlightening to hear how elemental magics can be destructive, but also have utility.","DoneToday")
  139. Dialog.Start()
  140. end
  141. function DoneToday(NPC,Spawn)
  142. FaceTarget(NPC, Spawn)
  143. Dialog.New(NPC, Spawn)
  144. Dialog.AddDialog("I'm pleased with your progress. Unfortunately, today's lesson is over. I must write this postulate before I forget it. Please study what I taught you thus far. We can continue your lessons at another time.")
  145. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel010.mp3", 2118767322, 484427585)
  146. PlayFlavor(NPC, "", "", "no", 0, 0, Spawn)
  147. Dialog.AddOption("Thank you. I'll return soon for more lessons.")
  148. if GetClass(Spawn)== 21 and GetLevel(Spawn)>=8 and not HasQuest(Spawn,Mage2) and not HasCompletedQuest(Spawn,Mage2) and HasCompletedQuest(Spawn,Mage1) then
  149. Dialog.AddOption("Please, I can't wait! I am eager to keep learning from more from your lessons if you have time.","Dialog4")
  150. end
  151. Dialog.Start()
  152. end
  153. ---MAGE2
  154. function Dialog4(NPC,Spawn)
  155. FaceTarget(NPC, Spawn)
  156. Dialog.New(NPC, Spawn)
  157. Dialog.AddDialog("For you? Of course I do! Your last visit inspired me to solve my Theory of Elementary--perhaps you can help me work on it a bit later. Now, if you recall, in our last lesson, you learned the skills of a sorcerer and a summoner. Today, you shall learn the skills of an enchanter. Shall we begin?")
  158. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel011.mp3", 3711475963, 1487434543)
  159. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  160. Dialog.AddOption("Yes, I am ready.","Dialog4a")
  161. Dialog.Start()
  162. end
  163. function Dialog4a(NPC,Spawn)
  164. FaceTarget(NPC, Spawn)
  165. Dialog.New(NPC, Spawn)
  166. Dialog.AddDialog("Let's pick up where we left off. I can summarize an enchanter's philosophy in one phrase: \"I think, therefore you should too.\"")
  167. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel012.mp3", 1678627858, 4071988215)
  168. PlayFlavor(NPC, "", "", "nod", 0, 0, Spawn)
  169. Dialog.AddOption("[Listen]","Dialog4b")
  170. Dialog.Start()
  171. end
  172. function Dialog4b(NPC,Spawn)
  173. FaceTarget(NPC, Spawn)
  174. Dialog.New(NPC, Spawn)
  175. Dialog.AddDialog("This means if you understand how a person thinks, then that person is more likely to work with you and not against you. Add a little magic to the equation and presto -- instant obfuscation!")
  176. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel013.mp3", 1799784542, 2411177016)
  177. PlayFlavor(NPC, "", "", "orate", 0, 0, Spawn)
  178. Dialog.AddOption("[Listen]","Dialog4c")
  179. Dialog.AddOption("So, enchanters influence thought?","Dialog4c")
  180. Dialog.Start()
  181. end
  182. function Dialog4c(NPC,Spawn)
  183. FaceTarget(NPC, Spawn)
  184. Dialog.New(NPC, Spawn)
  185. Dialog.AddDialog("Enchanters use their magic to affect the minds of others. Before you try casting an enchantment spell, you must learn how to enchant without magic. How can I show you this? Hmmm...")
  186. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel014.mp3", 1243742435, 942352584)
  187. PlayFlavor(NPC, "", "", "ponder", 0, 0, Spawn)
  188. Dialog.AddOption("[Wait patiently]","OfferMage2")
  189. Dialog.Start()
  190. end
  191. function OfferMage2(NPC,Spawn)
  192. OfferQuest(NPC,Spawn,Mage2)
  193. FaceTarget(NPC,Spawn)
  194. end
  195. function Dialog5(NPC,Spawn)
  196. FaceTarget(NPC, Spawn)
  197. Dialog.New(NPC, Spawn)
  198. Dialog.AddDialog("Oh, you did? What transpired during your conversation?")
  199. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel016.mp3", 1372935476, 2342843498)
  200. PlayFlavor(NPC, "", "", "ponder", 0, 0, Spawn)
  201. Dialog.AddOption("I gave him a magic charm that built his confidence.","Dialog5a")
  202. Dialog.Start()
  203. end
  204. function Dialog5a(NPC,Spawn)
  205. FaceTarget(NPC, Spawn)
  206. Dialog.New(NPC, Spawn)
  207. Dialog.AddDialog("You did? That's odd ... I didn't know you had enchanting skills ... Oh! I see! Good show, friend! Well, you aced all your lessons. Now it's time for a final test.")
  208. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel017.mp3", 1446574979, 1771976575)
  209. PlayFlavor(NPC, "", "", "boggle", 0, 0, Spawn)
  210. Dialog.AddOption("I'd be willing to be tested.","Dialog5b")
  211. Dialog.Start()
  212. end
  213. function Dialog5b(NPC,Spawn)
  214. FaceTarget(NPC, Spawn)
  215. Dialog.New(NPC, Spawn)
  216. Dialog.AddDialog("Of course your test! I can't teach you without evaluating your progress. You're quite gifted, indeed, but you must apply your lessons. And I need some time to write out a magical formula.")
  217. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel018.mp3", 2726943196, 3101869542)
  218. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  219. Dialog.AddOption("What must I do?","Dialog5c")
  220. Dialog.Start()
  221. end
  222. function Dialog5c(NPC,Spawn)
  223. SetStepComplete(Spawn,Mage2,2)
  224. FaceTarget(NPC, Spawn)
  225. Dialog.New(NPC, Spawn)
  226. Dialog.AddDialog("It's a test that was given to me during my early years of research. Travel to Antonica and bring me an eyeball from a Klicnik Mite. Now, if I abbreviate Elemental to the letter E, then an equal sign...")
  227. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel019.mp3", 654990311, 3534891739)
  228. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  229. Dialog.AddOption("Alright. I'll be back shortly!")
  230. Dialog.Start()
  231. end
  232. function Dialog6(NPC,Spawn)
  233. SetStepComplete(Spawn,Mage2,4)
  234. FaceTarget(NPC, Spawn)
  235. Dialog.New(NPC, Spawn)
  236. Dialog.AddDialog("Let me see it. Wonderful! This is the perfect size for pickling. Mmmm ... nothing's better than a pickled Klicnik eye sandwich with mustard and mayonnaise. Oh, drat! I dropped my sandwich on my formula! And that was my only copy! I can't recreate it either! Oh well... the formula would never work anyway. As for you, it's time you make a choice.")
  237. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel020.mp3", 538297903, 4048671950)
  238. PlayFlavor(NPC, "", "", "happy", 0, 0, Spawn)
  239. if GetLevel(Spawn)<= 8 then
  240. Dialog.AddOption("Am I ready now?","DoneToday")
  241. elseif GetLevel(Spawn) >8 then
  242. Dialog.AddOption("That task was simple enough. What must I do to advance?","FinalClassTest")
  243. end
  244. Dialog.Start()
  245. end
  246. --FINAL Test
  247. function FinalClassTest(NPC,Spawn)
  248. FaceTarget(NPC, Spawn)
  249. Dialog.New(NPC, Spawn)
  250. Dialog.AddDialog("What field of arcane studies do you want to pursue? You showed great aptitude in all three schools, but you must focus your studies. So what's your choice?")
  251. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel021.mp3", 167518160, 503095515)
  252. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  253. Dialog.AddOption("Enchanting","Enchanter")
  254. Dialog.AddOption("Sorcery","Sorcery")
  255. Dialog.AddOption("Summoning","Summoner")
  256. Dialog.Start()
  257. end
  258. --I feel the destructive arts are to my liking. I shall study to be a sorcerer.
  259. function Summoner(NPC,Spawn)
  260. FaceTarget(NPC, Spawn)
  261. Dialog.New(NPC, Spawn)
  262. Dialog.AddDialog("By peering into the unseen, summoners use magic to create matter from nothing. A summoner never wants for anything -- companions, food, or even a nice fluffy pillow to snuggle up with when it gets cold at night ... er, where was I? Ah, yes, do you want to study summoning?")
  263. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel023.mp3", 990225084, 344110692)
  264. PlayFlavor(NPC, "", "", "orate", 0, 0, Spawn)
  265. Dialog.AddOption("I will never again be without anything I need. I am a summoner.","Summoner2")
  266. Dialog.AddOption("Actually, I better rethink this.","FinalClassTest")
  267. Dialog.Start()
  268. end
  269. function Summoner2(NPC,Spawn)
  270. FaceTarget(NPC, Spawn)
  271. Dialog.New(NPC, Spawn)
  272. Dialog.AddDialog("Soon you will be ... yes ... I can see it now ... but no, first you must prove to me that you can handle things that you summon. Do you think that I will simply let you move on without the wisdom to temper the knowledge of summoning?")
  273. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel029.mp3", 3974213015, 2576820907)
  274. PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn)
  275. Dialog.AddOption("Then I must prove my skill.","Summoner2a")
  276. Dialog.AddOption("On second thought, what were my options again?","FinalClassTest")
  277. Dialog.Start()
  278. end
  279. function Summoner2a(NPC,Spawn)
  280. FaceTarget(NPC, Spawn)
  281. OfferQuest(NPC,Spawn,Summ)
  282. end
  283. function Sorcery(NPC,Spawn)
  284. FaceTarget(NPC, Spawn)
  285. Dialog.New(NPC, Spawn)
  286. Dialog.AddDialog("A sorcerer taps into the mana flow and draws the hidden energies that swirl within that maelstrom of forces. By taking these energies, sorcerers simplify their lives, and make their opponent's lives a heck of a lot harder. But along with sorcery's incredible power, comes incredible responsibility. Can you handle this?")
  287. PlayFlavor(NPC, "", "", "orate", 0, 0, Spawn)
  288. Dialog.AddOption("The forces of the arcane will be at my beck and call. I am a sorcerer.","Sorcery2")
  289. Dialog.AddOption("Actually, I better rethink this.","FinalClassTest")
  290. Dialog.Start()
  291. end
  292. function Sorcery2(NPC,Spawn)
  293. FaceTarget(NPC, Spawn)
  294. OfferQuest(NPC,Spawn,Sorc)
  295. end
  296. function Enchanter(NPC,Spawn)
  297. FaceTarget(NPC, Spawn)
  298. Dialog.New(NPC, Spawn)
  299. Dialog.AddDialog("Enchanters love hearing people say, \"I'll believe it when I see it.\" Using their magic, enchanters make people believe in all matter of things! Illusionary dragons are just as threatening as real ones to the common enemy, if you \"see\" what I'm saying. So, will you focus your studies on enchanting?")
  300. PlayFlavor(NPC, "", "", "orate", 0, 0, Spawn)
  301. Dialog.AddOption("I prefer to see what is real and what isn't. I am an enchanter.","Enchanter2")
  302. Dialog.AddOption("Actually, I better rethink this.","FinalClassTest")
  303. Dialog.Start()
  304. end
  305. function Enchanter2(NPC,Spawn)
  306. FaceTarget(NPC, Spawn)
  307. OfferQuest(NPC,Spawn,Ench)
  308. end
  309. function GoodbyeSumm(NPC,Spawn) -- ALSO SORC
  310. FaceTarget(NPC, Spawn)
  311. Dialog.New(NPC, Spawn)
  312. Dialog.AddDialog("You don't need to return to me. You'll have proved your worth and readiness. Take care, though. You'll be alone and these elementals will not go down without a fight. I hope to see you again one day.")
  313. Dialog.AddVoiceover("voiceover/english/magister_niksel/qey_south/magister_niksel031.mp3", 980785219, 3713600865)
  314. PlayFlavor(NPC, "", "", "bye", 0, 0, Spawn)
  315. Dialog.AddOption("Thank you Magister Niksel.")
  316. Dialog.Start()
  317. end
  318. function GoodbyeEnch(NPC,Spawn)
  319. FaceTarget(NPC, Spawn)
  320. Dialog.New(NPC, Spawn)
  321. Dialog.AddDialog("Once you've quelled the crowd you'll have more than proven yourself to be a capable enchanter. You won't need to return to me, but I hope to see you again. Take care, and good luck!")
  322. PlayFlavor(NPC, "", "", "bye", 0, 0, Spawn)
  323. Dialog.AddOption("Thank you Magister Niksel.")
  324. Dialog.Start()
  325. end
  326. --Now, now, there's no one thing that gives you the power to become a sorcerer, but this should help you get a better grasp on how to use your sorcery power. No need to return to me afterwards, I've taught you as much as I can.
  327. --You'll be an enchanter... yes... perhaps ... First, let's see how you deal with an angry crowd. Not everyone is cut out to deal with the thought required behind this choice ... we need to make sure that you are.