Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.60 KB | None | 0 0
  1. function onActionServerside()
  2. {
  3. switch (params[0])
  4. {
  5. case "finishedDialog":
  6. level.npc.(@params[1]).trigger("DialogDone");
  7. break;
  8.  
  9. case "removeWeapon":
  10. player.removeWeapon(escapestring2(params[1]));
  11. break;
  12. }
  13. }
  14.  
  15. //#CLIENTSIDE
  16. public function loadDialog(temp.imgHead, temp.speaker, temp.msg, temp.options, temp.quest, temp.questItem, temp.questQty)
  17. {
  18. this.join("functions_graalcontrol");
  19. this.imgHead = temp.imgHead;
  20. this.speaker = temp.speaker;
  21. this.msgWhole = temp.msg;
  22. this.msg = temp.msg[0];
  23. this.optionsWhole = temp.options;
  24. this.options = temp.options[0];
  25. this.msgSizeInx = temp.msg.size();
  26. this.optsSizeInx = temp.options.size();
  27. this.countOpts = 0;
  28. this.countMsgs = 0;
  29. this.isOptions = false;
  30. this.quest = temp.quest;
  31. this.questItem = temp.questItem;
  32. this.questQty = temp.questQty;
  33.  
  34. this.join("functions_options");
  35.  
  36. //echo(this.speaker@ "--" @this.headImg@ "--" @this.msg@ "--" @this.options@"");
  37. //echo(this.countOpts@ "--" @this.options.size());
  38.  
  39. // stop player
  40. setani("idle", null);
  41. disabledefmovement();
  42.  
  43. if (this.countOpts < 1)
  44. {
  45. // show up dialog
  46. showBG();
  47. showHead();
  48. showName();
  49. showMsg();
  50. if (this.options.size() > 0)
  51. {
  52. // show up options gui
  53. for (temp.i = 0; temp.i < this.options.size() - 1; temp.i++)
  54. {
  55. showOptions(temp.i);
  56. }
  57. this.isOptions = true;
  58. }
  59. }
  60. if (this.msgWhole[this.countOpts + 1].size() > 0)
  61. {
  62. if (! this.isOptions)
  63. {
  64. this.nextText = "Press ENTER to continue.";
  65. }else
  66. {
  67. this.nextText = "Select an option.";
  68. }
  69. showNext();
  70. }else
  71. {
  72. this.nextText = "Press ENTER to close.";
  73. showNext();
  74. }
  75. }
  76.  
  77. // Function to show up background and extra text
  78. function showBG()
  79. {
  80. // set up background
  81. showPoly(304, {0, (screenheight / 3) - 50, screenwidth, (screenheight / 3) - 50, screenwidth, (screenheight / 2), 0, (screenheight / 2)});
  82. changeImgVis(304, 6);
  83. changeImgColors(304, 0, 0, 0, .05);
  84. this.join("tween");
  85.  
  86. // fade in background
  87. tweenimg(304, "alpha", 0.15, 0, 0.75);
  88. waitfor(this, "TweenimgFinished");
  89.  
  90. // set up gui control
  91. new GuiControl("Dialog_Control")
  92. {
  93. x = 0;
  94. y = (screenheight / 3) - 50;
  95.  
  96. width = screenwidth;
  97. height = ((screenheight / 3) - 50) + 350;
  98.  
  99. layer = 7;
  100.  
  101. // show up skip text
  102. Dialog_Skip.destroy();
  103. new GuiTextCtrl("Dialog_Skip")
  104. {
  105. x = 0;
  106. y = 0;
  107. useownprofile = true;
  108. profile = Armageddon_Text;
  109. destroyonhide = true;
  110.  
  111. text = "Press 'b' to skip.";
  112.  
  113. width = 150;
  114. height = 32;
  115.  
  116. //layer = 7;
  117. //zoom = 0.4;
  118. profile.fontsize = 10;
  119. alpha = 0;
  120.  
  121. this.join("tween");
  122. }
  123. }
  124.  
  125. // fade in skip text
  126. (@"Dialog_Skip").tween("alpha", 0.25, 0, 1);
  127. waitfor((@"Dialog_Skip"), "TweenFinished", 0.05);
  128. }
  129.  
  130. // Function to move in head on the screen
  131. function showHead()
  132. {
  133. //echo(this.imgHead);
  134. Dialog_Head.destroy();
  135. new GuiShowImgCtrl("Dialog_Head")
  136. {
  137. y = 20;
  138. x = 30;
  139. destroyonhide = true;
  140. useownprofile = true;
  141. image = thiso.imgHead;
  142. //bitmap = temp.headNPC;
  143. partx = 0;
  144. party = 64;
  145. partw = 32;
  146. parth = 32;
  147.  
  148. width = 64;
  149. height = 64;
  150.  
  151. //layer = 7;
  152. zoom = 1.2;
  153. alpha = 0;
  154.  
  155. this.join("tween");
  156. }
  157. Dialog_Control.addcontrol(Dialog_Head);
  158.  
  159. // tween the image
  160. (@"Dialog_Head").tween("alpha", 0.25, 0, 1);
  161. waitfor((@"Dialog_Head"), "TweenFinished", 0.5);
  162. }
  163.  
  164. // Function to move in name on the screen
  165. function showName()
  166. {
  167. //echo(this.speaker);
  168. Dialog_Name.destroy();
  169. new GuiTextCtrl("Dialog_Name")
  170. {
  171. y = 30;
  172. profile = Armageddon_Text;
  173. destroyonhide = true;
  174. useownprofile = true;
  175. text = thiso.speaker;
  176.  
  177. width = 128;
  178. height = 320;
  179.  
  180. //layer = 7;
  181. zoom = 0.7;
  182. alpha = 1;
  183. profile.fontsize = 12;
  184. profile.fonttype = "Palatino Linotype";
  185. profile.fontstyle = "bu";
  186. profile.textshadow = true;
  187. profile.shadowcolor = {60, 60, 45};
  188. profile.shadowoffset = {4, 3};
  189.  
  190. this.join("tween");
  191. }
  192. Dialog_Control.addcontrol(Dialog_Name);
  193.  
  194. // tween the image
  195. (@"Dialog_Name").tween("x", 0.25, 0, 110);
  196. waitfor((@"Dialog_Name"), "TweenFinished", 0.05);
  197. }
  198.  
  199. // Function to move in message on the screen
  200. function showMsg()
  201. {
  202. if (getOptionsVariable("sound")) play(this.slideInSound);
  203. //echo(this.msg);
  204. Dialog_Msg.destroy();
  205. new GuiTextCtrl("Dialog_Msg")
  206. {
  207. y = 50;
  208. profile = Armageddon_Text;
  209. destroyonhide = true;
  210. useownprofile = true;
  211. text = thiso.msg;
  212.  
  213. width = 128 * text.length();
  214. height = 32;
  215.  
  216. //layer = 7;
  217. zoom = 1;
  218. alpha = 1;
  219. profile.fontsize = 14;
  220. profile.fonttype = "Palatino Linotype";
  221. profile.fontstyle = "b";
  222.  
  223. this.join("tween");
  224. }
  225. Dialog_Control.addcontrol(Dialog_Msg);
  226.  
  227. // tween the image
  228. (@"Dialog_Msg").tween("x", 0.25, 0, 50);
  229. waitfor((@"Dialog_Msg"), "TweenFinished", 0.05);
  230. }
  231.  
  232. // Function to move in message on the screen
  233. function showOptions(temp.idC)
  234. {
  235. //echo(this.options[temp.idC]);
  236. ("Dialog_Choice" @temp.idC).destroy();
  237. new GuiBitmapButtonCtrl("Dialog_Choice" @temp.idC)
  238. {
  239. profile = NoneNpc;
  240. //y = 150;
  241. y = 320;
  242. destroyonhide = true;
  243.  
  244.  
  245. text = thiso.options[temp.idC];
  246. //normalbitmap = "";
  247. //mouseoverbitmap = "";
  248. width = 250;
  249. //layer = 7;
  250. zoom = 0.6;
  251. alpha = 1;
  252.  
  253. this.join("tween");
  254. this.catchId = temp.idC;
  255.  
  256. thiso.catchevent(this, "onMouseUp", "selectedOpt");
  257. }
  258. //Dialog_Control.addcontrol(@ "Dialog_Choice" @temp.idC);
  259. //(@ "Dialog_Choice" @temp.idC).bringtofront();
  260.  
  261. // tween the image x
  262. (@"Dialog_Choice" @temp.idC).tween("x", 0.5, 0, 50);
  263. waitfor((@"Dialog_Choice" @temp.idC), "TweenFinished", 0.05);
  264.  
  265. // tween the image y
  266. (@"Dialog_Choice" @temp.idC).tween("y", 0.5, (@"Dialog_Choice" @temp.idC).y, (@"Dialog_Choice" @temp.idC).y + (temp.idC * 300));
  267. waitfor((@"Dialog_Choice" @temp.idC), "TweenFinished", 0.05);
  268. }
  269.  
  270. // Function to show up text if conversation can continue
  271. function showNext(temp.nextMsg)
  272. {
  273. //echo(this.msg);
  274. Dialog_Next.destroy();
  275. new GuiTextCtrl("Dialog_Next")
  276. {
  277. y = 135;
  278. profile = Armageddon_Text;
  279. destroyonhide = true;
  280.  
  281. text = thiso.nextText;
  282.  
  283. width = 128 * text.length();
  284. height = 32;
  285.  
  286. //layer = 7;
  287. zoom = 0.4;
  288. alpha = 1;
  289.  
  290. fonttype = "Palatino Linotype";
  291. fontstyle = "b";
  292.  
  293. this.join("tween");
  294. }
  295. Dialog_Control.addcontrol(Dialog_Next);
  296.  
  297. // tween the image
  298. (@"Dialog_Next").tween("x", 0.25, 0, 10);
  299. waitfor((@"Dialog_Next"), "TweenFinished", 0.05);
  300. }
  301.  
  302. // Function to handle if option was selected
  303. function selectedOpt(obj)
  304. {
  305. temp.nextOptSize = this.optionsWhole[this.countOpts].size();
  306.  
  307. if (getOptionsVariable("sound")) play(this.enterSound);
  308. // catch player response
  309. this.choiceMade = obj.text;
  310. this.choicePos = obj.catchId;
  311.  
  312. // checks to see if question flagged for a quest starter
  313. if (this.choicePos == this.options[this.options.size() - 1][2])
  314. {
  315. // checks if there are any quests at all
  316. if (clientr.activeQuests != null)
  317. {
  318. // run through all active quests
  319. for(temp.p = 0; temp.p < clientr.activeQuests.size(); temp.p++)
  320. {
  321. // if one equals this quest giver
  322. if (clientr.activeQuests[p][1] == this.quest)
  323. {
  324. // see if meets required item/quantity this is wrong items are weapons not clientr.vars redo for weapons
  325. // and make weapon pull how many it has in its own function
  326. if ((findweapon("Item/"@this.questItem).getItemName() == this.questItem
  327. || findweapon("Quest/"@this.questItem).getItemName() == this.questItem)
  328. && (findweapon(@"Item/"@this.questItem).getQuantity() >= this.questQty
  329. || findweapon(@"Quest/"@this.questItem).getQuantity() >= this.questQty))
  330. {
  331. // will want to remove quantity per weapon script
  332. // make sure weapon script deletes itself if its empty
  333. if (this.questQty > 1)
  334. {
  335. if (findweapon("Item/"@this.questItem).getItemName() == this.questItem)
  336. {
  337. findweapon("Item/"@this.questItem).removeQuantity(this.questQty);
  338. }
  339. if (findweapon("Quest/"@this.questItem).getItemName() == this.questItem)
  340. {
  341. findweapon("Quest/"@this.questItem).removeQuantity(this.questQty);
  342. }
  343. }else
  344. {
  345. triggerServer("gui", this.name, "removeWeapon", this.questItem);
  346. }
  347. findweapon("-System/QuestTracker").completeQuest(this.quest);
  348. break;
  349. }else
  350. {
  351. // deletes next message and changes it to whats needed
  352. // for the quest
  353. this.msgWhole = "";
  354. this.msgWhole.add("er");
  355. this.msgWhole.add("You still need a total of "@this.questQty@" "@this.questItem@"(s)!");
  356. this.countMsgs = 0;
  357. this.choicePos = 0;
  358. }
  359. }else
  360. {
  361. // no quests match this one mark true to set quest
  362. this.markQuestStart = true;
  363. }
  364. }
  365. }else
  366. {
  367. // no quests active at all, mark to set
  368. // need to make sure its not in completed quests too !!!!!!
  369. this.markQuestStart = true;
  370. }
  371. }
  372.  
  373. // set new message or stop completely
  374. if (this.choicePos == this.optionsWhole[this.countOpts][temp.nextOptSize - 1][0])
  375. {
  376. this.countMsgs++;
  377. this.msg = this.msgWhole[this.countMsgs][this.choicePos];
  378. this.msgWhole = "";
  379. }else
  380. {
  381. this.countMsgs++;
  382. this.countOpts++;
  383. this.msg = this.msgWhole[this.countMsgs][this.choicePos];
  384. }
  385.  
  386. for (temp.i = 0; temp.i < this.options.size() + 10; temp.i++)
  387. {
  388. // hide old options
  389. (@"Dialog_Choice" @i).tween("alpha", 0.05, 1, 0);
  390. waitfor((@"Dialog_Choice" @i), "TweenFinished", 0.05);
  391. (@"Dialog_Choice" @i).destroy();
  392. }
  393. this.options.clear();
  394.  
  395. // load in new message
  396. if (this.msg != "")
  397. {
  398. loadNewMessage();
  399. }
  400. }
  401.  
  402. // Function to show next message
  403. function loadNewMessage()
  404. {
  405. // hide old message text
  406. (@"Dialog_Msg").tween("alpha", 0.05, 1, 0);
  407. waitfor((@"Dialog_Msg"), "TweenFinished", 0.05);
  408.  
  409. // set new message text
  410. showMsg();
  411.  
  412. // check for more options if there
  413. temp.nextOptSize = this.optionsWhole[this.countOpts].size();
  414. if (this.countMsgs == this.optionsWhole[this.countOpts][temp.nextOptSize - 1][1])
  415. {
  416. // set next set of options
  417. this.options = this.optionsWhole[this.countOpts];
  418. this.isOptions = true;
  419. // show up options gui
  420. for (temp.j = 0; temp.j < this.options.size() - 1; temp.j++)
  421. {
  422. showOptions(temp.j);
  423. }
  424. }else
  425. {
  426. this.isOptions = false;
  427. }
  428.  
  429. // check for a next message
  430. if (this.msgWhole[this.countMsgs + 1] != "" || this.msgWhole[this.countMsgs + 1].size() > 0)
  431. {
  432. // hide old next message
  433. (@"Dialog_Next").tween("alpha", 0.05, 1, 0);
  434. waitfor((@"Dialog_Next"), "TweenFinished", 0.05);
  435.  
  436. // send to show if continue message
  437. if (! this.isOptions)
  438. {
  439. this.nextText = "Press ENTER to continue.";
  440. }else
  441. {
  442. this.nextText = "Select an option.";
  443. }
  444. showNext();
  445. }else
  446. {
  447. this.nextText = "Press ENTER to close.";
  448. showNext();
  449. this.isOptions = false;
  450. }
  451. }
  452.  
  453. // Function to read if a key is pressed while message shown
  454. function onKeyPressed(temp.keycode, temp.key, temp.scancode)
  455. {
  456. //13 enter 32 space
  457. if (temp.keycode == 66)
  458. {
  459. onMakeGraalFirst();
  460. if (getOptionsVariable("sound")) play(this.closeSound);
  461. closeImages();
  462. triggerserver("gui", this.name, "finishedDialog", this.speaker);
  463. }
  464. if (temp.keycode == 13)
  465. {
  466. if (this.nextText == "Press ENTER to close.")
  467. {
  468. onMakeGraalFirst();
  469. this.isOptions = false;
  470. if (getOptionsVariable("sound")) play(this.closeSound);
  471. closeImages();
  472. triggerserver("gui", this.name, "finishedDialog", this.speaker);
  473. }else
  474. {
  475. if (! this.isOptions)
  476. {
  477. // fade out old choices no matter what
  478. for (temp.i = 0; temp.i < this.options.size() + 10; temp.i++)
  479. {
  480. // hide old options
  481. (@"Dialog_Choice" @i).tween("alpha", 0.05, 1, 0);
  482. waitfor((@"Dialog_Choice" @i), "TweenFinished", 0.05);
  483. }
  484. // set new message
  485. this.countMsgs++;
  486. this.msg = this.msgWhole[this.countMsgs];
  487.  
  488. // load in new message
  489. if (this.msg != "")
  490. {
  491. loadNewMessage();
  492. }
  493.  
  494. // check for more options if there
  495. temp.nextOptSize = this.optionsWhole[this.countOpts].size();
  496. if (this.countMsgs == this.optionsWhole[this.countOpts][temp.nextOptSize - 1])
  497. {
  498. this.isOptions = true;
  499. // set next set of options
  500. this.options = this.options[this.countOpts];
  501.  
  502. // show up options gui
  503. for (temp.j = 0; temp.j < this.options.size() - 1; temp.j++)
  504. {
  505. showOptions(temp.j);
  506. }
  507. }else
  508. {
  509. this.isOptions = false;
  510. }
  511. }
  512. }
  513. }
  514. }
  515.  
  516. // Function to close images and return movement
  517. public function closeImages()
  518. {
  519. // fade out skip text
  520. (@"Dialog_Skip").tween("alpha", 0.10, 1, 0);
  521. waitfor((@"Dialog_Skip"), "TweenFinished", 0.05);
  522. Dialog_Skip.hide();
  523.  
  524. // hide old next message
  525. (@"Dialog_Next").tween("alpha", 0.05, 1, 0);
  526. waitfor((@"Dialog_Next"), "TweenFinished", 0.05);
  527.  
  528. // hide message text
  529. (@"Dialog_Msg").tween("alpha", 0.05, 1, 0);
  530. waitfor((@"Dialog_Msg"), "TweenFinished", 0.05);
  531. Dialog_Msg.hide();
  532.  
  533. // hide name text
  534. (@"Dialog_Name").tween("alpha", 0.05, 1, 0);
  535. waitfor((@"Dialog_Name"), "TweenFinished", 0.05);
  536. Dialog_Name.hide();
  537.  
  538. // hide head img
  539. (@"Dialog_Head").tween("alpha", 0.05, 1, 0);
  540. waitfor((@"Dialog_Head"), "TweenFinished", 0.05);
  541. Dialog_Head.hide();
  542.  
  543. // fade out choices, to 10 to make sure they ALL hide
  544. for (temp.i = 0; temp.i < this.options.size() + 10; temp.i++)
  545. {
  546. (@"Dialog_Choice" @i).tween("alpha", 0.05, 1, 0);
  547. waitfor((@"Dialog_Choice" @i), "TweenFinished", 0.05);
  548. (@"Dialog_Choice" @i).hide();
  549. }
  550.  
  551. // fade out background
  552. tweenimg(304, "alpha", 0.5, 0.30, 0);
  553. waitfor(this, "TweenimgFinished");
  554.  
  555. hideimg(304);
  556. enabledefmovement();
  557. Dialog_Control.active = false;
  558.  
  559. // show quest if there is one
  560. if (this.markQuestStart == true && this.quest != null)
  561. {
  562. this.markQuestStart = false;
  563. echo("add quest");
  564. findweapon("-System/QuestTracker").addQuest(this.quest, this.questItem, this.questQty);
  565. }
  566. }
  567. /* SET UP OF THE LV NPC
  568. function onCreated()
  569. {
  570. level.npc.Jaqor = this;
  571. this.join("npc_movement");
  572. this.can_stop = true;
  573.  
  574. // Initialize the attributes
  575. showcharacter();
  576. this.head = "head0.png";
  577. this.body = "body.png";
  578. this.colors = {"orange", "blue", "darkblue", "red", "yellow"};
  579. this.shield = "shield1.png";
  580. this.dir = 1;
  581. //Ganis
  582. this.ani_walk = ""; //Gani while walking.
  583. this.ani_idle = ""; //Gani after finished moving.
  584. this.speed = 4; // Movement Speed (tiles per second, default is 6)
  585.  
  586. //Actions
  587. this.actions = {
  588. "action: waitRandom",
  589. "move:-8:-6",
  590. "action: waitRandom",
  591. "move: -6:3",
  592. "move:-3:7",
  593. "action: waitRandom",
  594. "move:-4:5",
  595. "move:-22:-12",
  596. "action: waitRandom",
  597. "reversemove",
  598. "repeat"
  599. };
  600. //Sub-Actions
  601. /*
  602. "action:fishing",
  603. Example:
  604. this.action_fishing = {
  605. "setani:zodiac_fishingattack",
  606. "wait:5",
  607. "randomaction:0.25:reel",
  608. "wait:3",
  609. "setani:zodiac_fishingattack",
  610. "wait:1"
  611. };
  612. this.action_reel = {
  613. "setani:zodiac_fishingreeling",
  614. "randomchat:0.3:Almost had that one.. -sigh-:4"
  615. };
  616. this.action_waitRandom = {
  617. "wait: " @random(1, 16)@""
  618. };
  619. }
  620.  
  621. function onPlayerTouchsMe()
  622. {
  623. npc_stop();
  624. this.dir = (player.dir + 2) % 4;
  625. waitfor(this, "onDialogDone", 3600);
  626. npc_continue();
  627. }
  628.  
  629. //CLIENTSIDE
  630. function onCreated()
  631. {
  632. // DECLARATIONS
  633. this.countOpts = 0;
  634. // this must match a quest in sql
  635. this.quest = "Fake Quest 1";
  636. // the item the giver needs
  637. this.questItem = "Red Gem";
  638. // how many of the item the giver needs
  639. this.questQty = 4;
  640. // see description above in options to set quest off or on
  641. this.questYes = int(0);
  642. // initial set for quest not done
  643. this.questDone = false;
  644.  
  645. // set up npc attributes
  646. this.speaker = "Jaqor";
  647. this.head = "head0.png";
  648. }
  649.  
  650. function doRegularMessage()
  651. {
  652. this.msg.clear();
  653. this.msg.add("I love pretty, red gems!");
  654. }
  655.  
  656. function doQuestMessage()
  657. {
  658. // set up messages
  659. this.msg.clear();
  660. this.msg.add("I need some help!");
  661. this.msg.add({"I've heard that you have a sword. Can you go get me
  662. some rocks out of the north cave?","Alright, your loss..."});
  663. this.msg.add({"Thanks! Come see me when you have 4 red gems!",
  664. "If you change your mind I'll be here!"});
  665.  
  666. // set up options, for quests the option to start the quest
  667. // MUST be the first option or it will not work.
  668. // array at the end defines if next message shows an option or
  669. // not based on the number, which is referring to the index of the
  670. // option array to select that option and stop there (ex: 1 will
  671. // kill it if the second option is picked).
  672. // Set the number to what option you want it to stop at (
  673. // no more options or message). If you want to continue regardless
  674. // put -1 (options like array start at 0)
  675. // last num in that array is for the quest starter option.
  676. // put to -1 for no quest, put to the array index for the option
  677. // to start a quest
  678. this.options.clear();
  679. this.options.add({"What can I help you with?", "I don't care", {1,0,-1}});
  680. this.options.add({"I'll get you 4 red gems.", "Nope.", {-1,1,this.questYes}});
  681. }
  682.  
  683. function doQuestMessage2()
  684. {
  685. this.msg.clear();
  686. this.msg.add("Have you found my red gems?");
  687. this.msg.add({"Awesome! Here is your prize!", "Ok, I need them really bad..."});
  688.  
  689.  
  690. this.options.clear();
  691. this.options.add({"I sure have! Here you go!", "Still looking...", {-1,0,0}});
  692. }
  693.  
  694. function onPlayerTouchsMe()
  695. {
  696. // checks if the quest was already done, if repeatable quest,
  697. // set this.questYes = 1 below instead of false, but the
  698. // system right now does not allow for a prize to be given more than
  699. // once
  700. for (temp.i = 0; temp.i < clientr.completedQuests.size(); temp.i++)
  701. {
  702. if (clientr.completedQuests[i][1] == this.quest)
  703. {
  704. this.questDone = true;
  705. this.options.clear();
  706. }
  707. }
  708.  
  709. if (this.questDone == false && this.quest != null)
  710. {
  711. if (clientr.activeQuests != null)
  712. {
  713. for(temp.p = 0; temp.p < clientr.activeQuests.size(); temp.p++)
  714. {
  715. if (clientr.activeQuests[p][1] == this.quest)
  716. {
  717. // quest in progress messages
  718. doQuestMessage2();
  719. }else
  720. {
  721. // regular messages
  722. doQuestMessage();
  723. }
  724. }
  725. }else
  726. {
  727. //regular messages
  728. doQuestMessage();
  729. }
  730. }else
  731. {
  732. // regular message
  733. doRegularMessage();
  734. }
  735. findweapon("-System/NPCDialog").loadDialog(this.head, this.speaker, this.msg, this.options, this.quest, this.questItem, this.questQty);
  736. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement