summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorSinSloth <SinSloth@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-30 17:09:41 +0000
committerSinSloth <SinSloth@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-04-30 17:09:41 +0000
commit7901ac7f93aab5827d3b93873e8faf6bf4786188 (patch)
treeccb7a6aad72477225aa72d48b5dff9321e02bb6c /npc
parentc82f1a6a2a81c9a0eda1355c17e01b710d46f009 (diff)
downloadhercules-7901ac7f93aab5827d3b93873e8faf6bf4786188.tar.gz
hercules-7901ac7f93aab5827d3b93873e8faf6bf4786188.tar.bz2
hercules-7901ac7f93aab5827d3b93873e8faf6bf4786188.tar.xz
hercules-7901ac7f93aab5827d3b93873e8faf6bf4786188.zip
* Updated Gunslinger Job Change Quest to official.
* Fixed a minor bug in Ninja Job Change Quest. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@10419 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'npc')
-rw-r--r--npc/Changelog.txt2
-rw-r--r--npc/jobs/1-1e/gunslinger.txt577
-rw-r--r--npc/jobs/1-1e/ninja.txt5
3 files changed, 409 insertions, 175 deletions
diff --git a/npc/Changelog.txt b/npc/Changelog.txt
index 3ff91c853..614dccff1 100644
--- a/npc/Changelog.txt
+++ b/npc/Changelog.txt
@@ -1,6 +1,8 @@
Date Added
======
2007/05/01
+ * Updated Gunslinger Job Change Quest to official. [SinSloth]
+ * Fixed a minor bug in Ninja Job Change Quest. [SinSloth]
* Even more Fixes to the Kiel Hyre Quest [L0ne_W0lf]
- Exit will now enable if you are just retrieving the Ring, keeps you from getting stuck.
- Corrected "KH_Kielh02", was setting off a debug, invalid map index. Should have been "kh_Kiehl02"
diff --git a/npc/jobs/1-1e/gunslinger.txt b/npc/jobs/1-1e/gunslinger.txt
index e7fa1edfd..fecd3f61b 100644
--- a/npc/jobs/1-1e/gunslinger.txt
+++ b/npc/jobs/1-1e/gunslinger.txt
@@ -7,12 +7,11 @@
//= DON'T REMOVE THIS! (by request of him, he provided all
//= the info regarding the quests and shops.)
//===== Current Version: =====================================
-//= 1.8
+//= 1.10
//===== Compatible With: =====================================
//= eAthena SVN
//===== Description: =========================================
-//= "Semi" Official Gunslinger Quest ~ The text isn't the same
-//= but it does the things it has to do :P
+//= Gunslinger Job Change Quest
//===== Additional Comments: =================================
//= 1.0 Made the NPC [erKURITA]
//= 1.5 Couple fixes to the npc, aswell as adding the missing
@@ -24,197 +23,429 @@
//= 1.7b Parenthesis fixes [KarLaeda]
//= 1.8 Fixed the reward you can get [Playtester]
//= 1.9 Removed some 'clever' script constructs [ultramage]
+//= 1.10 Updated to official version - Thanks to Omega for
+//= his first try [SinSloth]
//============================================================
-que_ng,152,167,3 script Gunslinger Jobchanger 901,{
+que_ng.gat,152,167,3 script Master Miller 901,{
- set .@npcname$, "[Armsmith]";
- if (Class == Job_Novice) {
- if (GUNS_Q >= 1) {
- mes .@npcname$;
- mes "So, you've come back?";
- next;
- if (GUNS_Q == 10005) {
- if (SkillPoint > 0) {
- mes .@npcname$;
- mes "Err, excuse me, but you still have Skill Points left. You have to use them all before I can turn you into a Gunslinger.";
- close;
- } else if (JobLevel < 10) {
- mes .@npcname$;
- mes "Err, excuse me, but your job level is not sufficient. You need to have a job level of 10 in order to change to a Gunslinger";
- close;
- }
- mes .@npcname$;
- mes "Glad to know you did what Mr. Tanieh asked you to do, makes me know you're worthy of being..";
+ if(Class == Job_Novice && JobLevel > 9)
+ {
+ switch(GUNS_Q)
+ {
+ case 0:
+ mes "[Master Miller]";
+ mes "I'm a Security Chief and also";
+ mes "a Gunslinger Instructor, you may call me";
+ mes "Master Miller.";
next;
- mes .@npcname$;
- mes "A Gunslinger!!";
- callfunc "Job_Change",Job_Gunslinger;
- callfunc "F_ClearJobVar"; //clears all job variables for the current player
+ mes "[Master Miller]";
+ mes "I can't be distracted from my duty";
+ mes "at this moment.";
+ mes "What is it that you want?";
next;
- mes .@npcname$;
- mes "Oh, I forgot, here's a token of my appreciation";
- if (rand(1,3) < 3) {
- getitem 13100,1;
- } else {
- getitem 13150,1;
+ switch( select( "Nothing much.","I want to become a Gunslinger.") )
+ {
+ case 1:
+ mes "[Master Miller]";
+ mes "Wasting my time is like,";
+ mes "wasting gold.";
+ mes "Get out of my sight immediatly.";
+ close;
+
+ case 2:
+ mes "[Master Miller]";
+ mes "Hmm.";
+ mes "You still look young";
+ mes "but the look in your eyes...";
+ mes "I can sense a powerful force.";
+ next;
+ mes "[Master Miller]";
+ mes "Hmm...Okay.";
+ mes "First, if you have the will to become a Gunslinger";
+ mes "you will need to go through some tests";
+ mes "and also interview and Training Sessions.";
+ next;
+ mes "[Master Miller]";
+ mes "Do you wish to proceed?";
+ next;
+ switch (select ("No, I need time to think.","Sure.") )
+ {
+ case 1:
+ mes "[Master Miller]";
+ mes "Hmm..Is that so.";
+ mes "Well, it is important...";
+ mes "Think carefully and if you have the spirit,";
+ mes "please, come back later.";
+ close;
+
+ case 2:
+ mes "[Master Miller]";
+ mes "Hmm. Okay.";
+ mes "First";
+ mes "deliver this letter I am giving to you";
+ mes "to Payon's Alchemist,";
+ mes "'The Wise Bull Horn'";
+ mes "and hand the letter to him.";
+ next;
+ mes "[Master Miller]";
+ mes "He will judge you and";
+ mes "will report back to us if ";
+ mes "you are up to our standards.";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "Allright, I'll do that.";
+ set GUNS_Q,1;
+ close;
+ }
}
+
+ case 1:
+ mes "[Master Miller]";
+ mes "Hurry up and get moving.";
+ mes "'The Wise Bull Horn' is";
+ mes "currently in Payon.";
close;
- }
- mes .@npcname$;
- mes "But you still haven't done what I told you, need me to repeat it?";
- switch (select ("Yes, Please:No, Thanks")) {
- case 1:
- next;
- mes .@npcname$;
- mes "You need to go to Payon. At the small wooden wall and in the south exit, Mr. Tanieh will be there waiting to ask you a few things. Go now...";
- close;
- case 2:
- next;
- mes .@npcname$;
- mes "Then GET GOING! You do want to become a Gunslinger, right?";
- close;
- }
- }
- mes .@npcname$;
- mes "Hi ^0000CC"+strcharinfo(0)+"^000000,I need you to do something for me first, will you?";
- switch (select ("Yes:No")) {
- case 1:
- next;
- mes .@npcname$;
- mes "Good, I need you to go to Payon and do a few things from Mr. Tanieh.";
- next;
- mes .@npcname$;
- mes "He'll be waiting for you next to the small wooden wall of the south exit. See you later then.";
- set GUNS_Q,1;
- close;
+
case 2:
+ mes "[Master Miller]";
+ mes "I guess he gave you";
+ mes "some errands to run.";
next;
- mes .@npcname$;
- mes "Too bad for you son. Come back when you are willing to do so.";
+ mes "[Master Miller]";
+ mes "I think he saw potential in you.";
+ mes "Good luck.";
close;
- }
- }
- mes .@npcname$;
- mes "Hi son, how's life treating you?";
- close;
-}
-
-payon,184,65,3 script Mr. Tanieh 866,{
-
- set .@npcname$, "[Mr. Tanieh]";
- if (GUNS_Q == 1) {
- mes .@npcname$;
- mes "Oh, you're ^0000CC"+strcharinfo(0)+"^000000, right? Einbroch's Armsmith told me you were going to help me with a few things.";
- next;
- mes .@npcname$;
- mes "I need to make a special soup for my wife, but, as you can see, I am not in conditions to look for the items, she's sick you know?";
- next;
- mes .@npcname$;
- mes "So, will you do it, please?";
- switch (select ("Yes, I will:Sorry I can't now")) {
- case 1:
- set GUNS_Q,callfunc("F_RandMes",4,1019,1066,1067,1068);
- goto L_LIST;
+ case 3:
+ mes "[Master Miller]";
+ mes "That's a lot of errands";
+ mes "I already told you, the";
+ mes "old man is pretty serious.";
+ mes "Perform your task well.";
+ close;
- case 2:
- next;
- mes .@npcname$;
- mes "Oh, what am I going to do now...";
+ case 4:
+ mes "[Master Miller]";
+ mes "Mm~ I'll be waiting for your news.";
+ mes "I hope you'll become one of us.";
+ mes "We'll be practically family..";
close;
- }
- } else if (GUNS_Q > 1 && GUNS_Q < 10000) {
- mes .@npcname$;
- mes "Oh, you've come back! Have you brought the items?";
- next;
- switch (select("Yes I did:No I forgot which items I had to bring")) {
- case 1:
- next;
- if (countitem(949) < 3) {
- mes .@npcname$;
- mes "Sorry, you're missing a few Feathers";
- close;
- } else if (countitem(912) < 3) {
- mes .@npcname$;
- mes "Sorry, you're missing a few Zargons";
- close;
- } else if (countitem(1013) < 3) {
- mes .@npcname$;
- mes "Sorry, you're missing a few Rainbow Shells";
- close;
- } else if (countitem(GUNS_Q) < 1) {
- mes .@npcname$;
- mes "Sorry, you don't have the exact Trunk";
- close;
- } else if (countitem(511) < 3) {
- mes .@npcname$;
- mes "Sorry, you're missing a few Green Herbs";
- close;
- } else if (countitem(935) < 10) {
- mes .@npcname$;
- mes "Sorry, you're missing a few Shells";
+ case 5:
+ if (skillpoint > 0)
+ {
+ mes "[Master Miller]";
+ mes "Learn all your Basic Skills first!!";
close;
}
- mes .@npcname$;
- mes "GREAT! You brought them all! Thanks very much!";
- delitem 949,3;
- delitem 912,3;
- delitem 1013,3;
- delitem GUNS_Q,1; //here we keep Trunk ID
- delitem 935,10;
- delitem 511,3;
+ mes "[Master Miller]";
+ mes "Ohh, I see you got something from the old man";
+ mes "This is rare.";
+ mes "Under normal circumstances...";
+ mes "this would not be allowed...";
+ mes "Nice, nice.";
next;
- mes .@npcname$;
- mes "Oh my, you've been of great help. I'll recommend you to the Einbroch Armory for your job change.";
- set GUNS_Q,10003;
- close;
- case 2:
- L_LIST:
+ mes "[Master Miller]";
+ mes "Mm..Okay.";
+ mes "The old man gave his";
+ mes "blessings, so I do not have any";
+ mes "reason to reject your application.";
+ next;
+ mes "[Master Miller]";
+ mes "Okay, from now on you'll be a Gunslinger.";
+ mes "From now on, you are a gunslinger.";
+ mes "After this, for every moment that you live,";
+ mes "remember can never leave your side";
+ mes "is your gun. We must remember the gun";
+ mes "and even every one of its bullets";
+ mes "has its own product number,";
+ mes "and can be checked up by us.";
+ next;
+ mes "[Master Miller]";
+ mes "For purchasing guns and ammo";
+ mes "the only place you can buy them";
+ mes "is from our special gunslinger";
+ mes "guild stores in various places.";
+ next;
+ mes "[Master Miller]";
+ mes "Of course, this is tedious.";
+ mes "But this is all to...";
+ mes "not let these guns";
+ mes "fall in the wrong hands, so";
+ mes "please forgive us for any inconvenience.";
+ next;
+ mes "[Master Miller]";
+ mes "There are also";
+ mes "other reasons.";
+ mes "You'll no doubt find some of them";
+ mes "later.";
+ mes "These are all the instructions";
+ mes "from Lady Celena, our";
+ mes "guild leader.";
next;
- mes .@npcname$;
- mes "Ok, I'll tell you again, so please take note!:";
- mes "^33CCFF 3 Feathers^000000";
- mes "^009933 3 Zargons^000000";
- mes "^660066 3 Rainbow Shells^000000";
- mes "^009900 3 Green Herbs^000000";
- mes "^663300 1 "+getitemname(GUNS_Q)+"^000000";
- mes "^FF6600 10 Shells^000000";
+ mes "[Master Miller]";
+ mes "After a bit of time";
+ mes "we will give you missions.";
+ mes "You will understand more";
+ mes "later.";
next;
- mes .@npcname$;
- mes "Hurry please, I am not sure if my wife will last any longer... oh dear..";
+ mes "[Master Miller]";
+ mes "I'm sure we'll see each other again.";
+ mes "So here's to a nice time";
+ mes "working together.";
+ nude;
+ callfunc "Job_Change",Job_Gunslinger;
+ callfunc "F_ClearJobVar";
+ set GUNS_Q,6;
+ set @gun_ex,rand(1,2);
+ if(@gun_ex == 1) getitem 13100,1; else getitem 13150,1;
close;
}
- } else if (GUNS_Q == 10003 || GUNS_Q == 10004) {
- if (countitem(519) >= 1 && GUNS_Q == 10004) {
- mes .@npcname$;
- mes "THAT'S IT!! I was missing the Milk! Oh yes, thanks so much, will you give it to me?";
- switch(select("Sure, take it:Sorry but I need it")) {
- case 1:
- next;
- mes .@npcname$;
- mes "Thanks so much! Go talk again with the Einbroch Armsmith. He'll change you. Thanks again and see you.";
- delitem 519,1;
- set GUNS_Q,10005;
- close;
- case 2:
- next;
- mes .@npcname$;
- mes "Oh please, I need it so much, think about it please...";
- close;
- }
- }
- mes .@npcname$;
- mes "*sigh* Now I have to wait again... Thanks for your help... but I believe there's something missing..";
- set GUNS_Q,10004;
+ }
+ else if(Class == Job_Novice && JobLevel < 10)
+ {
+ mes "[Master Miller]";
+ mes "Hmm, I think you";
+ mes "have the potential";
+ mes "but you're not yet strong enough.";
+ mes "Keep getting stronger and";
+ mes "come back later.";
+ close;
+ }
+ else if(Class == Job_Gunslinger)
+ {
+ mes "[Master Miller]";
+ mes "Oh~ It's been a long time~";
+ mes "So, how have your travels been?";
+ mes "Remember, always take care";
+ mes "of your gun.";
close;
- } else if (Class == Job_Gunslinger || GUNS_Q == 10005) {
- mes .@npcname$;
- mes "Hi ^0000CC"+strcharinfo(0)+"^000000!, how have you been doing? My wife sends you regards and thanks for the ingredients...";
+ }
+ else if(Class == Job_Baby)
+ {
+ mes "[Master Miller]";
+ mes "Ouch~";
+ mes "How did a baby come here~";
+ mes "Peekaboo~";
+ next;
+ mes "[Master Miller]";
+ mes "Where's your mommy~";
+ mes "Haha~";
+ mes "It's a dangerous place here.";
+ mes "Go play somewhere else.";
close;
- }
- mes .@npcname$;
- mes "Hi son, how's life treating you? Nice day, isn't it?";
- close;
+ }
+ else
+ {
+ mes "[Master Miller]";
+ mes "Don't get distracted with me.";
+ mes "Get on with your traveling.";
+ close;
+ }
}
+
+payon.gat,184,65,3 script The Wise Bull Horn 866,{
+
+ switch(GUNS_Q)
+ {
+ case 0:
+ mes "[The Wise Bull Horn]";
+ mes "Zzz...Zzz";
+ close;
+
+ case 1:
+ mes "[The Wise Bull Horn]";
+ mes "...Hmm... Young one";
+ mes "What is it that you want.";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "Mr. Miller sent me here.";
+ next;
+ mes "[The Wise Bull Horn]";;
+ mes "Miller...";
+ mes "Mm...Hmm. So Dark Fox";
+ mes "sent you here...";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "He is wise and cunning...";
+ mes "that is willing to sacrifice himself for his teammates.";
+ mes "mm...If he sent you..";
+ mes "Then you should be rather capable...";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Wait...come closer...";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "....";
+ next;
+ mes "[The Wise Bull Horn]";;
+ mes "mmm...";
+ mes "mmmmm....";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "mmm...Bright eyes and...";
+ mes "a serious face...also...";
+ mes "a very good attitude...a good sense of...";
+ mes "responsibility...";
+ mes "But still not enough.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Lack of experience...";
+ mes "And you still don't have the blessing of the land...";
+ mes "You'll get injured at this rate...";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Very well, I shall craft you a gift...";
+ mes "If you wish to follow this path...";
+ mes "Gather 3 Rainbow Shells,";
+ mes "10 Shells, 3 Feathers,";
+ mes "1 Trunk, 3 Zargons, and 3 Green Herbs,";
+ mes "then bring them to me.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "If you show the gift that you just received";
+ mes "to Dark Fox. Then he will definitely...";
+ mes "accept you.";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "-I'll need-";
+ mes "-3 Rainbow Shells-";
+ mes "-10 Shells, 3 Feathers-";
+ mes "-1 Trunk, 3 Zargons,-";
+ mes "-and 3 Green Herbs.-";
+ set GUNS_Q,2;
+ close;
+
+ case 2:
+ if ((countitem(935) < 10) || (countitem(949) < 3) || (countitem(1019) < 1) || (countitem(912) < 3) || (countitem(511) < 3))
+ {
+ mes "["+ strcharinfo(0) +"]";
+ mes "-I'll need-";
+ mes "-3 Rainbow Shells-";
+ mes "-10 Shells, 3 Feathers-";
+ mes "-1 Trunk, 3 Zargons,-";
+ mes "-and 3 Green Herbs.-";
+ close;
+ }
+ mes "[The Wise Bull Horn]";
+ mes "Oh...give them to me.";
+ mes "There is time to be consumed to";
+ mes "make the gift, wait for a while.";
+ delitem 935,10;
+ delitem 949,3;
+ delitem 1019,1;
+ delitem 912,3;
+ delitem 511,3;
+ set GUNS_Q,3;
+ close;
+
+ case 3:
+ mes "[The Wise Bull Horn]";
+ mes "Mm...You came right on time.";
+ mes "The preparation finished just now.";
+ mes "It is a rather simple gift.";
+ mes "But that's because I haven't worked in so long.";
+ mes "Ahh...I feel tired now...";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "The last time I crafted this...";
+ mes "Was well over ten years ago.";
+ mes "I also followed this path once...";
+ mes "and I once battled...";
+ mes "with such an item.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Meeting Celena's father";
+ mes "feels just like yesterday,";
+ mes "time really flies.";
+ mes "Like the smooth western wind.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Though there would always be painful";
+ mes "memories...but my followers...";
+ mes "especially people like...";
+ mes "Celena and Dark Fox.";
+ mes "Ahh, young people, and my followers...";
+ mes "I thank you...";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Though now, I am already old...";
+ mes "In a short while...";
+ mes "I will return...to the land";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "I feel so tired...";
+ mes "I'm so sorry...but if you could...";
+ mes "Promise me something...";
+ mes "Promise to do...something for me.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "I suddenly feel like...";
+ mes "drinking a glass of milk.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Take it as a request...from an old man.";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "-Let's get a glass of Milk-";
+ mes "For 'The Wise Bull Horn'.-";
+ set GUNS_Q, 4;
+ close;
+
+ case 4:
+ if (countitem(519) < 0)
+ {
+ mes "["+ strcharinfo(0) +"]";
+ mes "-Let's get a glass of Milk-";
+ mes "-for 'The Wise Bull Horn'.-";
+ close;
+ }
+ mes "[The Wise Bull Horn]";
+ mes "Thank you.";
+ mes "You are truly a kind young man.";
+ mes "Now get on the road.";
+ delitem 519,1;
+ set GUNS_Q,5;
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Take this Gift made bye me";
+ mes "and show it to Dark Fox.";
+ mes "You have my blessings";
+ mes "to become a Gunslinger.";
+ next;
+ mes "[The Wise Bull Horn]";
+ mes "Ee~~Ye~Ee~~ Hooma~ Raa~~Nae~Eee~~";
+ mes "Ee~~Ye~Ee~~ Hooma~ Raa~~Nae~Eee~~";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "-Singing a weird-";
+ mes "-song-";
+ mes "-'The Wise Bull Horn'. I feel strange.-";
+ mes "-Let's take the Gift-";
+ mes "-to Mr.Miller now.-";
+ close;
+
+ case 5:
+ mes "[The Wise Bull Horn]";
+ mes "Ee~~Ye~Ee~~ Hooma~ Raa~~Nae~Eee~~";
+ mes "Ee~~Ye~Ee~~ Hooma~ Raa~~Nae~Eee~~";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "-Singing a weird-";
+ mes "-song-";
+ mes "-'The Wise Bull Horn'.-";
+ next;
+ mes "["+ strcharinfo(0) +"]";
+ mes "-I feel strange.-";
+ mes "-Let's take the Gift-";
+ mes "-to Mr.Miller now.-";
+ close;
+
+ case 6:
+ mes "[The Wise Bull Horn]";
+ mes "Mm...It's been a while.";
+ mes "Hopefully you'll become a strong Gunslinger.";
+ close;
+ }
+} \ No newline at end of file
diff --git a/npc/jobs/1-1e/ninja.txt b/npc/jobs/1-1e/ninja.txt
index 8f5764dd5..b2709d71c 100644
--- a/npc/jobs/1-1e/ninja.txt
+++ b/npc/jobs/1-1e/ninja.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= Legionaire
//===== Current Version: =====================================
-//= 1.3
+//= 1.4
//===== Compatible With: =====================================
//= eAthena SVN that supports Ninjas
//===== Description: =========================================
@@ -12,6 +12,7 @@
//= 1.1 Optimized, updated, checked [Lupus]
//= 1.2 Added Akagi [Playtester]
//= 1.3 Updated dialogs to official ones and optimized [SinSloth]
+//= 1.4 Fixed a minor bug [SinSloth]
//============================================================
alberta,30,65,3 script Akagi#nq 730,{
@@ -433,7 +434,7 @@ que_ng,30,65,3 script Cougar Gai 730,{
mes "You don't know when and where you may be asked to go on a mission, so don't put off your training for a single day.";
close;
}
- else if(Class == Job_Super_Baby)
+ else if(Class == Job_Baby)
{
mes "[Cougar Gai]";
mes "What the...! A super baby!";