TEXT   189   0
   3834 52.66 KB    811

PoneRTK DialogHandler

By irrel
Created: 2021-01-18 09:54:24
Expiry: Never

  1. This is for anyone willing to write events. There are plenty of examples at the bottom, but here's the general anatomy of a dialogue event:
  2.  
  3. case 3: // this is the dialog id, it is determined at the start of the visit
  4. switch (currentDialogStage) // this chooses which stage of the dialog the player is in, it is incremented every time the player gives input
  5. {
  6. case 0: // this is the first stage that appears when the player visits a character
  7.  
  8. // you can send messages like this, format: uiHandler.SendDialogMessage(text, color);
  9. uiHandler.SendDialogMessage($"You enter {conversationPartner.GetName()}'s house through the front door.", Color.white);
  10. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Hello. What brings you here today?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  11.  
  12. // you can give a two-choice branching option like this
  13. uiHandler.SetDialogChoice("Discuss", "Train");
  14. // if there is no branching option, the event ends here with no further player input
  15. // otherwise, the player chooses an option which moves to the next dialog stage
  16. break;
  17. case 1:
  18. // if you gave the player a branching option, the dialogue will now continue down one of these paths
  19. if (leftChoice) // discuss
  20. {
  21. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I wanted to talk about something. Did you know, that...", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  22. EmptyLine(); // this displays a row of dashes to signify passage of time
  23.  
  24. // give characters skill XP during/after event
  25. // all the numbers are pretty arbitrary, you don't need to worry about this if you don't care
  26. switch (Random.Range(0, 2)) // this rolls a random number and picks which stat to give XP in
  27. {
  28. case 0:
  29. XpGain(playerCharacter, "FRI", conversationPartner.GetFri() / 3);
  30. XpGain(conversationPartner, "FRI", playerCharacter.GetFri() / 3);
  31. break;
  32. case 1:
  33. default:
  34. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 3);
  35. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 3);
  36. break;
  37. }
  38.  
  39.  
  40. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "How time flies when you're having fun! We should stop for today.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  41.  
  42. }else if (rightChoice) // train
  43. {
  44. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I want to test your strength. How about we spar for a round?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  45. EmptyLine();
  46. XpGain(playerCharacter, "POW", conversationPartner.GetPow() / 3);
  47. XpGain(conversationPartner, "POW", playerCharacter.GetPow() / 3);
  48.  
  49. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Impressive! You really know how to handle yourself.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  50. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "You're not too bad yourself.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  51. }
  52.  
  53. // after the event, progress friendship
  54. FriendshipGain(playerCharacter, conversationPartner, 20);
  55. break;
  56. }
  57. break;
  58.  
  59. If you want to involve a third character, skill checks, or write an event for a specific character, see the events at the bottom for examples.
  60. Here is the entire DialogHandler file, but the part you care about is at the very bottom, see ProgressDialogue(). In the forest of switch statements, there is an empty case where you can start.
  61. ------
  62. using System.Collections;
  63. using System.Collections.Generic;
  64. using UnityEngine;
  65.  
  66. public class DialogHandler : MonoBehaviour
  67. {
  68. private List<int> officersWithCustomDialog = new List<int>();
  69. public OfficerHandler officerHandler;
  70. public PlayerHandler playerHandler;
  71. public UiHandler uiHandler;
  72. public GameHandler gameHandler;
  73. private Officer conversationPartner;
  74. private Officer playerCharacter;
  75. private Officer friend;
  76. private int currentDialogId = -1;
  77. private int currentDialogStage = -1;
  78. private bool leftChoice = true;
  79. private bool rightChoice = true;
  80. private List<int> genericDialogues = new List<int>();
  81. private List<int> commonFriendDialogues = new List<int>();
  82. private List<int> uncommonFriendDialogues = new List<int>();
  83. private List<int> traitDialogues = new List<int>();
  84. private List<int> magDialogues = new List<int>();
  85. private List<int> powDialogues = new List<int>();
  86. private List<int> friDialogues = new List<int>();
  87.  
  88. void Start()
  89. {
  90. // dialog id
  91. genericDialogues.Add(3);
  92. genericDialogues.Add(6);
  93.  
  94. commonFriendDialogues.Add(4);
  95.  
  96. uncommonFriendDialogues.Add(5);
  97. uncommonFriendDialogues.Add(7);
  98.  
  99. magDialogues.Add(0);
  100. magDialogues.Add(9);
  101.  
  102. powDialogues.Add(1);
  103. powDialogues.Add(8);
  104.  
  105. friDialogues.Add(2);
  106.  
  107. // officer id
  108. officersWithCustomDialog.Add(3);
  109. }
  110. public void StartDialogue(int officerId, List<string> officerTraits, List<string> officerFriends)
  111. {
  112. currentDialogStage = 0;
  113. if (HasCustomDialogue(officerId) && Random.Range(0, 2) == 1)
  114. {
  115.  
  116. // custom dialogue path
  117. CustomDialogue(officerId);
  118. return;
  119. }
  120.  
  121. bool dialogPathFound = false;
  122. while (!dialogPathFound) // randomly pick a dialog path
  123. {
  124. switch (Random.Range(0, 3))
  125. {
  126. case 0: // trait based path
  127. if (officerTraits.Count != 0)
  128. {
  129. //dialogPathFound = true;
  130. //TraitBasedDialogue(officerId, officerTraits);
  131. }
  132. break;
  133. case 1: // friend based path
  134. if (officerFriends.Count != 0)
  135. {
  136. dialogPathFound = true;
  137. FriendBasedDialogue(officerId, officerFriends);
  138. }
  139. break;
  140. case 2: // generic path
  141. dialogPathFound = true;
  142. GenericDialogue(officerId);
  143. break;
  144. default:
  145. break;
  146. }
  147. }
  148.  
  149.  
  150. }
  151.  
  152. bool HasCustomDialogue(int officerId)
  153. {
  154. return officersWithCustomDialog.Contains(officerId);
  155. }
  156.  
  157. void TraitBasedDialogue(int officerId, List<string> officerTraits)
  158. {
  159. conversationPartner = officerHandler.GetOfficerById(officerId);
  160. playerCharacter = gameHandler.GetCurrentPlayer().GetFactionLeader();
  161.  
  162. switch (officerTraits[Random.Range(0, officerTraits.Count)])
  163. {
  164. default:
  165. // no fitting traits, generic dialog
  166. currentDialogId = genericDialogues[Random.Range(0, genericDialogues.Count)];
  167. break;
  168. }
  169.  
  170. ProgressDialogue();
  171. }
  172.  
  173. void FriendBasedDialogue(int officerId, List<string> officerFriends)
  174. {
  175. conversationPartner = officerHandler.GetOfficerById(officerId);
  176. playerCharacter = gameHandler.GetCurrentPlayer().GetFactionLeader();
  177. friend = officerHandler.GetOfficerByName(officerFriends[Random.Range(0, officerFriends.Count)]);
  178.  
  179. if (friend == playerCharacter)
  180. {
  181. // generic path
  182. currentDialogId = genericDialogues[Random.Range(0, genericDialogues.Count)];
  183. }
  184. else if (playerCharacter.friends.Contains(friend.GetName()))
  185. {
  186. // common friend path
  187. currentDialogId = commonFriendDialogues[Random.Range(0, commonFriendDialogues.Count)];
  188. }
  189. else
  190. {
  191. // uncommon friend path
  192. currentDialogId = uncommonFriendDialogues[Random.Range(0, uncommonFriendDialogues.Count)];
  193. }
  194.  
  195. ProgressDialogue();
  196. }
  197.  
  198. void GenericDialogue(int officerId)
  199. {
  200. conversationPartner = officerHandler.GetOfficerById(officerId);
  201. playerCharacter = gameHandler.GetCurrentPlayer().GetFactionLeader();
  202. // skill based
  203.  
  204. switch (Random.Range(0, 2))
  205. {
  206. case 0: // skill based
  207. switch (conversationPartner.GetHighestStatType())
  208. {
  209. case "MAG":
  210. currentDialogId = magDialogues[Random.Range(0, magDialogues.Count)];
  211. break;
  212. case "POW":
  213. currentDialogId = powDialogues[Random.Range(0, powDialogues.Count)];
  214. break;
  215. case "FRI":
  216. currentDialogId = friDialogues[Random.Range(0, friDialogues.Count)];
  217. break;
  218. }
  219.  
  220. break;
  221. case 1:
  222. default: // generic
  223. currentDialogId = genericDialogues[Random.Range(0, genericDialogues.Count)];
  224. break;
  225. }
  226.  
  227. currentDialogStage = 0;
  228. ProgressDialogue();
  229.  
  230. }
  231.  
  232. void CustomDialogue(int officerId)
  233. {
  234. conversationPartner = officerHandler.GetOfficerById(officerId);
  235. playerCharacter = gameHandler.GetCurrentPlayer().GetFactionLeader();
  236.  
  237. switch (officerId)
  238. {
  239. case 3: // trixie
  240. currentDialogId = 10;
  241. break;
  242. default:
  243. // generic
  244. currentDialogId = genericDialogues[Random.Range(0, genericDialogues.Count)];
  245. break;
  246. }
  247. ProgressDialogue();
  248. }
  249.  
  250. public void DialogButtonPressed(string button)
  251. {
  252. switch (button)
  253. {
  254. case "left":
  255. leftChoice = true;
  256. rightChoice = false;
  257. break;
  258. case "right":
  259. leftChoice = false;
  260. rightChoice = true;
  261. break;
  262. }
  263. }
  264.  
  265. void XpGain(Officer targetOfficer, string stat, int amount)
  266. {
  267. targetOfficer.AddXp(stat, amount);
  268. uiHandler.SendDialogMessage($"{targetOfficer.GetName()} gained {(int)(amount)} {stat} XP!", playerHandler.GetPlayerColor(targetOfficer.GetPlayerId()));
  269. }
  270.  
  271. void FriendshipGain(Officer officer1, Officer officer2, int amount)
  272. {
  273. officer1.ProgressFriendship(officer2, amount);
  274. officer2.ProgressFriendship(officer1, amount);
  275. uiHandler.SendDialogMessage($"Friendship deepened between {officer1.GetName()} and {officer2.GetName()}!", playerHandler.GetPlayerColor(officer1.GetPlayerId()));
  276. }
  277.  
  278. void EmptyLine()
  279. {
  280. uiHandler.SendDialogMessage("--------------------------------------------------", Color.white);
  281. }
  282.  
  283. public void ProgressDialogue()
  284. {
  285. switch (currentDialogId)
  286. {
  287. case 0: // mag based generic 1
  288. switch (currentDialogStage)
  289. {
  290. case 0:
  291. uiHandler.SendDialogMessage($"You run into {conversationPartner.GetName()} organizing their library.", Color.white);
  292. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Ah, apologies, I didn't notice you there. What brought you here?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  293. uiHandler.SetDialogChoice("Literature", "Strategy");
  294. break;
  295. case 1:
  296. if (leftChoice) // literature
  297. {
  298. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I wanted to discuss literature with you. Have you read...", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  299. EmptyLine();
  300. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 3);
  301. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 3);
  302. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "That was an enlightening discussion. I learned a lot from you.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  303. }
  304. else if (rightChoice) // strategy
  305. {
  306. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I wanted to discuss an aspect of military strategy with you. You see, when two armies meet...", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  307. EmptyLine();
  308. XpGain(playerCharacter, "POW", conversationPartner.GetPow() / 4);
  309. XpGain(conversationPartner, "POW", playerCharacter.GetPow() / 4);
  310. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 5);
  311. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 5);
  312. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "I hadn't considered that. I'll have to keep that in mind in the future.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  313. }
  314. FriendshipGain(playerCharacter, conversationPartner, 20);
  315. break;
  316. }
  317. break;
  318. case 1: // pow based generic 1
  319. switch (currentDialogStage)
  320. {
  321. case 0:
  322. uiHandler.SendDialogMessage($"You meet {conversationPartner.GetName()} in their armory.", Color.white);
  323. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "I've been developing new fighting methods. ", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  324. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "How about a duel to hone our skills? Or would you rather discuss strategy over a cup of tea?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  325. uiHandler.SetDialogChoice("Practice", "Theory");
  326. break;
  327. case 1:
  328. if (leftChoice) // practice
  329. {
  330. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "Practice sounds great. Let's get to work.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  331. EmptyLine();
  332. XpGain(playerCharacter, "POW", conversationPartner.GetPow() / 3);
  333. XpGain(conversationPartner, "POW", playerCharacter.GetPow() / 3);
  334. }
  335.  
  336. else if (rightChoice) // theory
  337. {
  338. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "Let's discuss battle tactics.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  339. EmptyLine();
  340. XpGain(playerCharacter, "POW", conversationPartner.GetPow() / 4);
  341. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 5);
  342. XpGain(conversationPartner, "POW", playerCharacter.GetPow() / 4);
  343. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 5);
  344. }
  345.  
  346. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "That was great! We should do this again some other time.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  347. FriendshipGain(playerCharacter, conversationPartner, 20);
  348. break;
  349. }
  350. break;
  351. case 2: // fri based generic 1
  352. switch (currentDialogStage)
  353. {
  354. case 0:
  355. uiHandler.SendDialogMessage($"You meet {conversationPartner.GetName()} in front of their house.", Color.white);
  356. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Hey! I was thinking we could go to the park. ", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  357. uiHandler.SetDialogChoice("Park", "Library");
  358. break;
  359. case 1:
  360. if (leftChoice) // park
  361. {
  362. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "Sure, let's go for a walk.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  363. EmptyLine();
  364. XpGain(playerCharacter, "FRI", conversationPartner.GetFri() / 3);
  365. XpGain(conversationPartner, "FRI", playerCharacter.GetFri() / 3);
  366. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "That was great! We should do this again some other time.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  367. }
  368.  
  369. else if (rightChoice) // library
  370. {
  371. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "Why don't we go to the library instead?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  372. EmptyLine();
  373. XpGain(playerCharacter, "FRI", conversationPartner.GetFri() / 4);
  374. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 5);
  375. XpGain(conversationPartner, "FRI", playerCharacter.GetFri() / 4);
  376. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 5);
  377. }
  378. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "That was fun! I found so many interesting books.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  379. FriendshipGain(playerCharacter, conversationPartner, 20);
  380. break;
  381. }
  382. break;
  383. case 3: // generic 1
  384. switch (currentDialogStage)
  385. {
  386. case 0:
  387. uiHandler.SendDialogMessage($"You enter {conversationPartner.GetName()}'s house through the front door.", Color.white);
  388. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Hello. What brings you here today?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  389. uiHandler.SetDialogChoice("Discuss", "Train");
  390. break;
  391. case 1:
  392. if (leftChoice) // discuss
  393. {
  394. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I wanted to talk about something. Did you know, that...", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  395. EmptyLine();
  396.  
  397. switch (Random.Range(0, 2))
  398. {
  399. case 0:
  400. XpGain(playerCharacter, "FRI", conversationPartner.GetFri() / 3);
  401. XpGain(conversationPartner, "FRI", playerCharacter.GetFri() / 3);
  402. break;
  403. case 1:
  404. default:
  405. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 3);
  406. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 3);
  407. break;
  408. }
  409.  
  410. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "How time flies when you're having fun! We should stop for today.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  411.  
  412. }
  413.  
  414. else if (rightChoice) // train
  415. {
  416. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I want to test your strength. How about we spar for a round?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  417. EmptyLine();
  418. XpGain(playerCharacter, "POW", conversationPartner.GetPow() / 3);
  419. XpGain(conversationPartner, "POW", playerCharacter.GetPow() / 3);
  420.  
  421. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Impressive! You really know how to handle yourself.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  422. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "You're not too bad yourself.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  423. }
  424.  
  425. FriendshipGain(playerCharacter, conversationPartner, 20);
  426.  
  427. if (conversationPartner.factionId == 999) // chance to hire neutral officer after event
  428. {
  429. switch (Random.Range(0, 3))
  430. {
  431. case 1:
  432. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "You are pretty talented. I wish to help you.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  433. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Will you let me join your forces?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  434. uiHandler.SetDialogChoice("Hire", "Refuse");
  435. break;
  436. default:
  437. break;
  438. }
  439. }
  440.  
  441. // dialogue ends here if neutral roll was missed
  442. break;
  443. case 2: // this path only appears if it was rolled earlier
  444. if (leftChoice) // hire
  445. {
  446. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I could use someone of your talent.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  447. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "Excellent! I shall serve you with utmost loyalty.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  448. gameHandler.GetCurrentPlayer().AddOfficer(conversationPartner);
  449. uiHandler.OfficerInteractMenu(conversationPartner); // refresh
  450. }
  451. else if (rightChoice) // refuse
  452. {
  453. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I have no use for your talents right now.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  454. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + "That's a shame. I will be here if you change your mind.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  455. }
  456. break;
  457. }
  458. break;
  459. case 4: // common friend 1
  460. switch (currentDialogStage)
  461. {
  462. case 0:
  463. uiHandler.SendDialogMessage($"You meet with {conversationPartner.GetName()} in their garden. {friend.GetName()} is there!", Color.white);
  464. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Hey! We're having an intense discussion with {friend.GetName()}. You see, {friend.GetName()} thinks...", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  465. uiHandler.SetDialogChoice($"{conversationPartner.GetName()} is right", $"{friend.GetName()} is right");
  466. break;
  467. case 1:
  468. if (leftChoice) // visitee
  469. {
  470. EmptyLine();
  471. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I agree with {conversationPartner.GetName()}.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  472. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I knew you would! What do you say now, {friend.GetName()}?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  473. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"No, it doesn't make any sense! You're wrong!", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  474. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"Maybe we should change the subject...", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  475. EmptyLine();
  476. FriendshipGain(playerCharacter, conversationPartner, 20);
  477. FriendshipGain(playerCharacter, friend, 10);
  478. FriendshipGain(conversationPartner, friend, 10);
  479. }
  480. else if (rightChoice) // friend
  481. {
  482. EmptyLine();
  483. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"{friend.GetName()} is right!", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  484. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"See, even {playerCharacter.GetName()} agrees with me!", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  485. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I'm still not entirely convinced... ", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  486. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I'll have to think about this. Thanks for your input, {playerCharacter.GetName()}.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  487. EmptyLine();
  488. FriendshipGain(playerCharacter, friend, 20);
  489. FriendshipGain(playerCharacter, conversationPartner, 10);
  490. FriendshipGain(conversationPartner, friend, 10);
  491. }
  492. break;
  493. }
  494. break;
  495. case 5: // uncommon friend 1
  496. switch (currentDialogStage)
  497. {
  498. case 0:
  499. uiHandler.SendDialogMessage($"You meet with {conversationPartner.GetName()} in their garden.", Color.white);
  500. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Have you met my friend, {friend.GetName()}?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  501. switch (friend.GetHighestStatType())
  502. {
  503. case "MAG":
  504. if (friend.GetMag() > 75)
  505. {
  506. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is talented in the magical arts.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  507. }
  508. else
  509. {
  510. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is adept in the magical arts.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  511. }
  512. break;
  513. case "FRI":
  514. if (friend.GetFri() > 75)
  515. {
  516. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is always there when I need help.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  517. }
  518. else
  519. {
  520. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} helped me out with some chores the other day.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  521. }
  522. break;
  523. case "POW":
  524. if (friend.GetPow() > 75)
  525. {
  526. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} beat me in a duel a few weeks ago.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  527. }
  528. else
  529. {
  530. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} can hold their own in a duel.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  531. }
  532. break;
  533. }
  534. uiHandler.SetDialogChoice("Yes", "No");
  535. break;
  536. case 1:
  537. EmptyLine();
  538. if (leftChoice) // Yes
  539. {
  540. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I've met {friend.GetName()}, but we're not very close.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  541. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"That's a shame! Maybe we should go do something together.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  542. }
  543. else if (rightChoice) // No
  544. {
  545. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + "I have not. Maybe you could introduce us to each other?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  546. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I'll see what I can do!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  547. }
  548. EmptyLine();
  549. FriendshipGain(playerCharacter, conversationPartner, 20);
  550. FriendshipGain(friend, conversationPartner, 10);
  551. FriendshipGain(playerCharacter, friend, 10);
  552.  
  553. break;
  554. }
  555. break;
  556. case 6: // generic, away from home
  557. switch (currentDialogStage)
  558. {
  559. case 0:
  560. uiHandler.SendDialogMessage($"You knock on {conversationPartner.GetName()}'s door, but there is no answer.", Color.white);
  561. uiHandler.SendDialogMessage($"It looks like they are not home.", Color.white);
  562. break;
  563. }
  564. break;
  565. case 7: // in the market with uncommon friend
  566. switch (currentDialogStage)
  567. {
  568. case 0:
  569. uiHandler.SendDialogMessage($"You run into {conversationPartner.GetName()} at the local marketplace. They are together with {friend.GetName()}.", Color.white);
  570. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Oh, hello, {playerCharacter.GetName()}!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  571.  
  572. switch (friend.GetHighestStatType())
  573. {
  574. case "MAG":
  575. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is looking to buy a new magic wand, but we can't choose between these two. Maybe you could help us choose?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  576. uiHandler.SetDialogChoice("The white one", "The purple one");
  577. break;
  578. case "FRI":
  579. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is looking to get a new tea set, but we are spoiled for choice. Could you help us choose?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  580. uiHandler.SetDialogChoice("The posh set", "The antique set");
  581. break;
  582. case "POW":
  583. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"{friend.GetName()} is looking to get a new sword.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  584. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"How does this one look to you?", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  585. uiHandler.SetDialogChoice("It's a great blade", "It looks shoddy");
  586. break;
  587. }
  588. break;
  589. case 1:
  590. switch (friend.GetHighestStatType())
  591. {
  592. case "MAG":
  593. if (leftChoice) // white wand
  594. {
  595. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"The white one looks very capable.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  596. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I agree! You should get the white one, {friend.GetName()}!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  597. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"Then it's settled! I'll get the white one.", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  598. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"I'm going to go try this wand out. Wanna tag along?", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  599. }
  600. if (rightChoice) // purple wand
  601. {
  602. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"The purple one looks like it holds great power", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  603. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"You know, I was thinking the same thing. I'll get the purple one.", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  604. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"We should go test this new wand! You should come too, {playerCharacter.GetName()}!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  605. }
  606. EmptyLine();
  607. XpGain(friend, "MAG", friend.GetMag() / 4);
  608. XpGain(playerCharacter, "MAG", playerCharacter.GetMag() / 4);
  609. XpGain(conversationPartner, "MAG", conversationPartner.GetMag() / 4);
  610. break;
  611. case "FRI":
  612. if (leftChoice) // posh set
  613. {
  614. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"The posh tea set looks most enticing to me", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  615. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"It does, doesn't it! Get the posh one, {friend.GetName()}!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  616. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"Well, I was on the fence, but you've convinced me. I will get the posh set!", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  617. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"We absolutely must test this new tea set in action!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  618. }
  619. if (rightChoice) // antique set
  620. {
  621. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I like the antique set! It looks like it was made by a master craftsman.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  622. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I agree! It is a most beautiful tea set!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  623. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"Both of you agree, huh? I guess I should get the antiques then.", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  624. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"We absolutely must test this new tea set in action!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  625. }
  626. EmptyLine();
  627. XpGain(friend, "FRI", friend.GetFri() / 4);
  628. XpGain(playerCharacter, "FRI", playerCharacter.GetFri() / 4);
  629. XpGain(conversationPartner, "FRI", conversationPartner.GetFri() / 4);
  630.  
  631. break;
  632. case "POW":
  633. if (leftChoice) // great blade
  634. {
  635. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"It looks masterfully crafted. A great blade.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  636. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"It is great, isn't it? We should go see how it is in action!", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  637. }
  638. if (rightChoice) // shoddy blade
  639. {
  640. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I'm not so sure about it. The steel looks fragile.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  641. uiHandler.SendDialogMessage(friend.GetName() + ": " + $"You think so? Maybe we should keep looking, then.", playerHandler.GetPlayerColor(friend.GetPlayerId()));
  642. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Good thing you showed up, or {friend.GetName()} would have bought a shoddy blade!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  643. }
  644. EmptyLine();
  645. XpGain(friend, "POW", playerCharacter.GetPow() / 3);
  646. break;
  647. }
  648.  
  649. FriendshipGain(playerCharacter, conversationPartner, 15);
  650. FriendshipGain(friend, conversationPartner, 15);
  651. FriendshipGain(playerCharacter, friend, 15);
  652. break;
  653. }
  654. break;
  655. case 8: // generic POW 2 fishing
  656. switch (currentDialogStage)
  657. {
  658. case 0:
  659. uiHandler.SendDialogMessage($"You visit {conversationPartner.GetName()}'s home, but they are not present.", Color.white);
  660. uiHandler.SendDialogMessage($"A servant informs you that {conversationPartner.GetName()} has gone fishing.", Color.white);
  661. uiHandler.SetDialogChoice("Go to the river", "Wait");
  662. break;
  663. case 1:
  664. if (leftChoice) // go to the river
  665. {
  666. uiHandler.SendDialogMessage($"You set out for the river where {conversationPartner.GetName()} has gone fishing.", Color.white);
  667. EmptyLine();
  668. uiHandler.SendDialogMessage($"You spot {conversationPartner.GetName()} pulling fish after fish out of the water. It seems the river is bustling with fish today.", Color.white);
  669. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Hey, {playerCharacter.GetName()}! The river is overflowing with fish! Come, join me!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  670. EmptyLine();
  671. uiHandler.SendDialogMessage($"You spend the rest of the day fishing with {conversationPartner.GetName()}. When all is said and done, you both return home with buckets full of fresh fish.", Color.white);
  672. XpGain(playerCharacter, "POW", playerCharacter.GetPow() / 4);
  673. XpGain(conversationPartner, "POW", conversationPartner.GetPow() / 4);
  674. }
  675. if (rightChoice) // wait
  676. {
  677. uiHandler.SendDialogMessage($"You wait for {conversationPartner.GetName()} to return from their fishing trip.", Color.white);
  678. EmptyLine();
  679. uiHandler.SendDialogMessage($"A few hours later, {conversationPartner.GetName()} returns with a bucket full of fresh fish.", Color.white);
  680. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Hey, {playerCharacter.GetName()}! The river was generous to me today!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  681. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Come help me sort out all this fish.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  682. EmptyLine();
  683. XpGain(playerCharacter, "FRI", playerCharacter.GetFri() / 4);
  684. XpGain(conversationPartner, "POW", conversationPartner.GetPow() / 4);
  685.  
  686. }
  687. FriendshipGain(playerCharacter, conversationPartner, 20);
  688. break;
  689. }
  690. break;
  691. case 9: // generic mag 2 library
  692. switch (currentDialogStage)
  693. {
  694. case 0:
  695. uiHandler.SendDialogMessage($"You bump into {conversationPartner.GetName()} at the library.", Color.white);
  696. uiHandler.SendDialogMessage($"They seem to be studying classical texts.", Color.white);
  697. if (playerCharacter.GetMag() > conversationPartner.GetMag())
  698. {
  699. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Hey, {playerCharacter.GetName()}! I'm trying to understand this text, but it's all gibberish to me!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  700. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"You're better than me at this, could you help me out?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  701. EmptyLine();
  702. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"That was enlightening! Thanks for your help, {playerCharacter.GetName()}!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  703. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"No problem! If you need any further help, don't be afraid to ask me!", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  704. XpGain(playerCharacter, "MAG", conversationPartner.GetMag() / 4);
  705. XpGain(conversationPartner, "MAG", playerCharacter.GetMag() / 3);
  706. FriendshipGain(playerCharacter, conversationPartner, 20);
  707. }
  708. else
  709. {
  710. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Hey, {playerCharacter.GetName()}! I'm trying to understand this text, but it's all gibberish to me!", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  711. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"It doesn't make any sense to me, either. Maybe we should look for some lighter reading material.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  712. uiHandler.SendDialogMessage($"You look for some reading material that is more intelligible to you.", Color.white);
  713. EmptyLine();
  714. XpGain(playerCharacter, "MAG", playerCharacter.GetMag() / 5);
  715. XpGain(conversationPartner, "MAG", conversationPartner.GetMag() / 4);
  716. FriendshipGain(playerCharacter, conversationPartner, 10);
  717. }
  718. break;
  719. }
  720. break;
  721. case 10: // trixie 1
  722. switch (currentDialogStage)
  723. {
  724. case 0:
  725. if (playerCharacter.GetName() != "Starlight Glimmer")
  726. {
  727. uiHandler.SendDialogMessage($"You knock on the door of Trixie's wagon.", Color.white);
  728. uiHandler.SendDialogMessage($"You hear a loud bang. Moments later, the door bursts open, revealing a cloud of smoke. Trixie looks a bit dishevelled.", Color.white);
  729. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"The Great and Powerful Trixie was not expecting any visitors today.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  730. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"What do you want, {playerCharacter.GetName()}?", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  731. }
  732. else
  733. {
  734. uiHandler.SendDialogMessage($"You knock on the door of Trixie's wagon.", Color.white);
  735. uiHandler.SendDialogMessage($"You hear a loud bang. Moments later, the door bursts open, revealing a cloud of smoke. Trixie looks a bit dishevelled.", Color.white);
  736. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"There you are, Starlight! I need your help with the new act, I can't get this trick to work...", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  737. }
  738. uiHandler.SetDialogChoice("Offer help", "Invite for tea");
  739. break;
  740. case 1:
  741. if (leftChoice) // offer help
  742. {
  743. if (playerCharacter.GetName() != "Starlight Glimmer")
  744. {
  745. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"It looks like you could use some help. Is there anything I can do for you?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  746. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Trixie is working on a new act. Since her usual assistant isn't here, perhaps you could...", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  747. uiHandler.SendDialogMessage($"You assist Trixie in her practice. You don't really understand what's happening, but she looks pleased.", Color.white);
  748. }
  749. else
  750. {
  751. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I'm here to help! What do you need, Trix?", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  752. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Follow me, and I'll show you. I need you to...", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  753. uiHandler.SendDialogMessage($"You assist Trixie in her practice. With your help, her new trick could fool even Hoofdini himself.", Color.white);
  754. }
  755. EmptyLine();
  756. }
  757. if (rightChoice) // invite for tea
  758. {
  759. if (playerCharacter.GetName() != "Starlight Glimmer")
  760. {
  761. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"I was thinking we should go out for tea. You look like you could use a break.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  762. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"Trixie does not really have time for tea, but she could use a break...", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  763. EmptyLine();
  764. uiHandler.SendDialogMessage($"You enjoy a cup of tea with Trixie. All the while, she boasts about how her new show is going to change the world.", Color.white);
  765. }
  766. else
  767. {
  768. uiHandler.SendDialogMessage(playerCharacter.GetName() + ": " + $"Trixie, you need a break. Come, let's go drink some tea.", playerHandler.GetPlayerColor(playerCharacter.GetPlayerId()));
  769. uiHandler.SendDialogMessage(conversationPartner.GetName() + ": " + $"I guess you're right, Starlight. Let's go.", playerHandler.GetPlayerColor(conversationPartner.GetPlayerId()));
  770. EmptyLine();
  771. uiHandler.SendDialogMessage($"You enjoy a cup of tea with Trixie. You discuss the new tricks and come up with some helpful suggestions.", Color.white);
  772. }
  773. }
  774. FriendshipGain(playerCharacter, conversationPartner, 20);
  775. break;
  776. }
  777. break;
  778. case 11: // unused
  779. switch (currentDialogStage)
  780. {
  781. case 0:
  782. break;
  783. case 1:
  784. if (leftChoice)
  785. {
  786.  
  787. }
  788. if (rightChoice)
  789. {
  790.  
  791. }
  792. break;
  793. }
  794. break;
  795. default:
  796. switch (currentDialogStage)
  797. {
  798. default:
  799. uiHandler.SendDialogMessage($"Sumireko Usami: Something broke, and there is no dialogue event.", Color.white);
  800. uiHandler.SendDialogMessage($"Sumireko Usami: Sorry.", Color.white);
  801. uiHandler.SendDialogMessage($"Sumireko Usami: The current dialog id is {currentDialogId.ToString()}.", Color.white);
  802. uiHandler.SendDialogMessage($"Sumireko Usami: You can pass that along to whoever you downloaded this mess from.", Color.white);
  803. break;
  804. }
  805. break;
  806. }
  807.  
  808. currentDialogStage += 1;
  809. }
  810.  
  811. }

PoneRTK DialogHandler

by irrel